Autogen_core源码:_agent_instantiation.py

目录

    • _agent_instantiation.py代码
    • 代码解释
    • 代码示例
      • 示例 1:使用 `populate_context` 正确设置上下文
      • 示例 2:尝试在上下文之外调用 `current_runtime` 和 `current_agent_id`
      • 示例 3:模拟 AgentRuntime 使用 `AgentInstantiationContext`

_agent_instantiation.py代码

from contextlib import contextmanager
from contextvars import ContextVar
from typing import Any, ClassVar, Generatorfrom ._agent_id import AgentId
from ._agent_runtime import AgentRuntimeclass AgentInstantiationContext:def __init__(self) -> None:raise RuntimeError("AgentInstantiationContext cannot be instantiated. It is a static class that provides context management for agent instantiation.")_AGENT_INSTANTIATION_CONTEXT_VAR: ClassVar[ContextVar[tuple[AgentRuntime, AgentId]]] = ContextVar("_AGENT_INSTANTIATION_CONTEXT_VAR")@classmethod@contextmanagerdef populate_context(cls, ctx: tuple[AgentRuntime, AgentId]) -> Generator[None, Any, None]:""":meta private:"""token = AgentInstantiationContext._AGENT_INSTANTIATION_CONTEXT_VAR.set(ctx)try:yieldfinally:AgentInstantiationContext._AGENT_INSTANTIATION_CONTEXT_VAR.reset(token)@classmethoddef current_runtime(cls) -> AgentRuntime:try:return cls._AGENT_INSTANTIATION_CONTEXT_VAR.get()[0]except LookupError as e:raise RuntimeError("AgentInstantiationContext.runtime() must be called within an instantiation context such as when the AgentRuntime is instantiating an agent. Mostly likely this was caused by directly instantiating an agent instead of using the AgentRuntime to do so.") from e@classmethoddef current_agent_id(cls) -> AgentId:try:return cls._AGENT_INSTANTIATION_CONTEXT_VAR.get()[1]except LookupError as e:raise RuntimeError("AgentInstantiationContext.agent_id() must be called within an instantiation context such as when the AgentRuntime is instantiating an agent. Mostly likely this was caused by directly instantiating an agent instead of using the AgentRuntime to do so.") from e

代码解释

这段代码定义了一个名为 AgentInstantiationContext 的类,用于管理智能体(Agent)实例化过程中的上下文信息。它主要解决了以下问题:

问题背景:

在智能体框架中,当创建一个新的智能体实例时,我们需要访问一些与当前实例化过程相关的信息,例如:

  • 当前正在创建智能体的运行时环境 (AgentRuntime): 这可能包含智能体执行所需的各种资源、工具和服务。
  • 当前正在创建智能体的 ID (AgentId): 每个智能体通常都有一个唯一的标识符。

如果直接实例化智能体,这些信息可能无法直接获取。我们需要一种机制来存储和检索这些信息,以便在智能体创建过程中使用。

代码逻辑及功能:

  1. 禁止直接实例化:

    • __init__ 方法抛出 RuntimeError,明确表示 AgentInstantiationContext 不能被直接实例化。它是一个静态类,提供上下文管理功能。
  2. 使用 ContextVar 存储上下文信息:

    • _AGENT_INSTANTIATION_CONTEXT_VAR 是一个类变量,类型为 ContextVarContextVar 是 Python 中用于在协程和异步编程中存储上下文信息的特殊变量。它能够跨异步任务边界保持值的不变性。
    • _AGENT_INSTANTIATION_CONTEXT_VAR 存储一个元组 (AgentRuntime, AgentId),表示当前实例化上下文中的运行时环境和智能体 ID。
  3. 上下文管理器 populate_context:

    • populate_context 是一个类方法,同时也是一个上下文管理器 (使用 @contextmanager 装饰器)。
    • 它接收一个包含 AgentRuntimeAgentId 的元组 ctx 作为参数。
    • 在进入 with 语句块时,它会使用 set 方法将 ctx 设置到 _AGENT_INSTANTIATION_CONTEXT_VAR 中,并返回一个令牌 (token)。
    • 在退出 with 语句块时,它会使用 reset 方法和之前获取的令牌来恢复 _AGENT_INSTANTIATION_CONTEXT_VAR 到之前的状态。
  4. 获取当前上下文信息:

    • current_runtimecurrent_agent_id 都是类方法,用于获取当前上下文中的 AgentRuntimeAgentId
    • 它们通过 get 方法从 _AGENT_INSTANTIATION_CONTEXT_VAR 获取当前值。
    • 如果 _AGENT_INSTANTIATION_CONTEXT_VAR 中没有值 (例如,不在 populate_context 创建的上下文中),它们会抛出 RuntimeError,明确指出必须在智能体实例化上下文中调用这些方法。

总结:

这段代码通过 ContextVar 和上下文管理器机制,提供了一种在智能体实例化过程中安全地存储和访问上下文信息 (AgentRuntime 和 AgentId) 的方法。它确保了在智能体创建过程中可以可靠地获取这些信息,避免了直接实例化智能体可能带来的问题。这对于构建可靠的智能体框架至关重要。

代码示例

这段代码定义了一个名为 AgentInstantiationContext 的类,用于在智能体(Agent)实例化过程中提供上下文管理。它使用 contextvars.ContextVar 来存储当前实例化智能体的运行时环境和智能体 ID,并确保这些信息在实例化过程中始终可用。

以下是几个体现该代码功能的代码示例:

示例 1:使用 populate_context 正确设置上下文

from autogen_core import AgentInstantiationContext, SingleThreadedAgentRuntime, AgentId,AgentRuntime# 假设 AgentRuntime 和 AgentId 已经定义runtime = SingleThreadedAgentRuntime()
agent_id = AgentId("agent_123","faf")with AgentInstantiationContext.populate_context((runtime, agent_id)):# 在这个上下文中,current_runtime 和 current_agent_id 可以正常工作print(AgentInstantiationContext.current_runtime())  # 输出: <AgentRuntime object>print(AgentInstantiationContext.current_agent_id())  # 输出: agent_123
<autogen_core._single_threaded_agent_runtime.SingleThreadedAgentRuntime object at 0x000002316819F260>
agent_123/faf

示例 2:尝试在上下文之外调用 current_runtimecurrent_agent_id

try:AgentInstantiationContext.current_runtime()
except RuntimeError as e:print(e)  # 输出错误信息,说明必须在上下文中调用try:AgentInstantiationContext.current_agent_id()
except RuntimeError as e:print(e)  # 输出错误信息,说明必须在上下文中调用
AgentInstantiationContext.runtime() must be called within an instantiation context such as when the AgentRuntime is instantiating an agent. Mostly likely this was caused by directly instantiating an agent instead of using the AgentRuntime to do so.
AgentInstantiationContext.agent_id() must be called within an instantiation context such as when the AgentRuntime is instantiating an agent. Mostly likely this was caused by directly instantiating an agent instead of using the AgentRuntime to do so.

示例 3:模拟 AgentRuntime 使用 AgentInstantiationContext

class MyAgentRuntime(AgentRuntime):def create_agent(self, agent_id: AgentId):with AgentInstantiationContext.populate_context((self, agent_id)):# 在这里,我们可以使用 AgentInstantiationContext.current_runtime() 和 AgentInstantiationContext.current_agent_id()print(AgentInstantiationContext.current_runtime())  # 输出: <AgentRuntime object>print(AgentInstantiationContext.current_agent_id())runtime = MyAgentRuntime()
agent_id = AgentId("agent_123","faf")
runtime.create_agent(agent_id)
<__main__.MyAgentRuntime object at 0x0000023166A731A0>
agent_123/faf

这些示例展示了如何正确使用 AgentInstantiationContext 来管理智能体实例化过程中的上下文,以及如果在上下文之外使用它会发生什么错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【游戏设计原理】96 - 成就感

成就感是玩家体验的核心&#xff0c;它来自完成一件让自己满意的任务&#xff0c;而这种任务通常需要一定的努力和挑战。游戏设计师的目标是通过合理设计任务&#xff0c;不断为玩家提供成就感&#xff0c;保持他们的参与热情。 ARCS行为模式&#xff08;注意力、关联性、自信…

MySQL CTE:解锁SQL查询新模式

目录 一、CTE 初相识 二、CTE 基础语法 &#xff08;一&#xff09;基本语法结构 &#xff08;二&#xff09;语法规则详解 三、非递归 CTE 应用实例 &#xff08;一&#xff09;单 CTE 简单查询 &#xff08;二&#xff09;多 CTE 联合查询 四、递归 CTE 深入探索 &…

C#,入门教程(12)——数组及数组使用的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(11)——枚举&#xff08;Enum&#xff09;的基础知识和高级应用https://blog.csdn.net/beijinghorn/article/details/123917587https://blog.csdn.net/beijinghorn/article/details/123917587 数组是一种数据集合&#xff0c;是一组…

【leetcode练习·二叉树】计算完全二叉树的节点数

本文参考labuladong算法笔记[拓展&#xff1a;如何计算完全二叉树的节点数 | labuladong 的算法笔记] 如果让你数一下一棵普通二叉树有多少个节点&#xff0c;这很简单&#xff0c;只要在二叉树的遍历框架上加一点代码就行了。 但是&#xff0c;力扣第第 222 题「完全二叉树的…

低代码系统-产品架构案例介绍、轻流(九)

轻流低代码产品定位为零代码产品&#xff0c;试图通过搭建来降低企业成本&#xff0c;提升业务上线效率。 依旧是从下至上&#xff0c;从左至右的顺序 名词概述运维层底层系统运维层&#xff0c;例如上线、部署等基础服务体系内置的系统能力&#xff0c;发消息、组织和权限是必…

对顾客行为的数据分析:融入2+1链动模式、AI智能名片与S2B2C商城小程序的新视角

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;企业与顾客之间的交互方式变得日益多样化&#xff0c;移动设备、社交媒体、门店、电子商务网站等交互点应运而生。这些交互点不仅为顾客提供了便捷的服务体验&#xff0c;同时也为企业积累了大量的顾客行为数据。本文旨在…

MSA Transformer

过去的蛋白质语言模型以单个序列为输入&#xff0c;MSA Transformer以多序列比对的形式将一组序列作为输入。该模型将行和列注意力交织在输入序列中&#xff0c;并在许多蛋白质家族中使用mask语言建模目标进行训练。模型的性能远超过了当时最先进的无监督学习方法&#xff0c;其…

QT实现有限元软件操作界面

本系列文章致力于实现“手搓有限元&#xff0c;干翻Ansys的目标”&#xff0c;基本框架为前端显示使用QT实现交互&#xff0c;后端计算采用Visual Studio C。 本篇将二维矩形截面梁单元&#xff08;Rect_Beam2D2Node&#xff09;组成的钢结构桥作为案例来展示软件功能。 也可以…

推荐一款好用的翻译类浏览器扩展插件

给大家推荐一款实用的翻译工具——沉浸式翻译。这是一款免费、高效的AI驱动浏览器扩展插件&#xff0c;能够帮助用户轻松打破语言障碍&#xff0c;享受沉浸式的阅读体验。 主要特性 沉浸式阅读体验&#xff1a;通过智能识别网页主内容区域并进行双语对照翻译&#xff0c;让用户…

ElasticSearch-文档元数据乐观并发控制

文章目录 什么是文档&#xff1f;文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES&#xff0c;最近在检索资料的时候翻阅到了 ES 的官方文档&#xff0c;里面对 ES 的基础与案例进行了通俗易懂的解释&#xff0c;读下来也有不少收获&#xff0…

开源的瓷砖式图像板系统Pinry

简介 什么是 Pinry &#xff1f; Pinry 是一个开源的瓷砖式图像板系统&#xff0c;旨在帮助用户轻松保存、标记和分享图像、视频和网页。它提供了一种便于快速浏览的格式&#xff0c;适合喜欢整理和分享多种媒体内容的人。 主要特点 图像抓取和在线预览&#xff1a;支持从网页…

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

【数据结构】初识链表

顺序表的优缺点 缺点&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度效率较低&#xff0c;为O(N) 空间不够的时候需要扩容。 如果是异地扩容&#xff0c;增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff0c;会有不小的消耗。 扩容可能会存在…

I.MX6ULL 中断介绍上

i.MX6ULL是NXP&#xff08;原Freescale&#xff09;推出的一款基于ARM Cortex-A7内核的微处理器&#xff0c;广泛应用于嵌入式系统。在i.MX6ULL中&#xff0c;中断&#xff08;Interrupt&#xff09;是一种重要的机制&#xff0c;用于处理外部或内部事件&#xff0c;允许微处理…

4-图像梯度计算

文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…

苍穹外卖——数据统计

在商家管理端的左侧&#xff0c;有一个名为"数据统计"的菜单&#xff0c;该页面负责展示各个维度的数据统计&#xff0c;分别是营业额统计、用户统计、订单统计、销量排名top10。统计的数据是借助一些图形化的报表技术来生成并展示的。在左上角还可选择时间段&#x…

优盘恢复原始容量工具

买到一个优盘&#xff0c;显示32mb&#xff0c;我见过扩容盘&#xff0c;但是这次见到的是缩容盘&#xff0c;把2g的容量缩成32MB了&#xff0c;首次见到。。用芯片查询工具显示如下 ChipsBank(芯邦) CBM2199E 使用以下工具&#xff0c;恢复原始容量。。 其他CMB工具可能不行…

Flutter Candies 一桶天下

| | | | | | | | 入魔的冬瓜 最近刚入桶的兄弟&#xff0c;有责任心的开发者&#xff0c;对自己的项目会不断进行优化&#xff0c;达到最完美的状态 自定义日历组件 主要功能 支持公历&#xff0c;农历&#xff0c;节气&#xff0c;传统节日&#xff0c;常用节假日 …

[Collection与数据结构] B树与B+树

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

ROS应用之SwarmSim在ROS 中的协同路径规划

SwarmSim 在 ROS 中的协同路径规划 前言 在多机器人系统&#xff08;Multi-Robot Systems, MRS&#xff09;中&#xff0c;SwarmSim 是一个常用的模拟工具&#xff0c;可以对多机器人进行仿真以实现复杂任务的协同。除了任务分配逻辑以外&#xff0c;SwarmSim 在协同路径规划方…