Skip to main content

概述

Agent 是 AgentScope 的核心抽象——一个无状态的推理-行动循环引擎,将模型、工具、权限系统、人机交互、上下文管理、中间件、状态管理和事件系统整合到一个统一接口中。 其主要职责包括:
  • 接收输入消息或事件,调用工具完成任务
  • 管理上下文,包括上下文压缩和工具结果卸载
  • 在关键生命周期节点运行中间件
  • 自动管理并发和串行工具执行

核心接口

Agent 类的主要接口如下:

主循环

智能体在每次 reply 调用时运行推理-行动循环,下图展示了主要控制流程:

配置智能体

在初始化时将参数传入 Agent(...),以下示例涵盖最常见的几种配置场景。

参数说明

运行智能体

replyreply_stream 都接受相同的 inputs 参数,驱动相同的推理-行动循环,区别在于结果的交付方式。 inputs 参数支持:
  • 单个 MsgMsg 列表——开始新的 reply
  • UserConfirmResultEventExternalExecutionResultEvent——从暂停状态恢复
  • None——不输入新内容,从当前状态继续

reply

reply 在内部消费所有事件,当智能体完成或因外部交互暂停时返回最终 Msg

reply_stream

reply_stream 逐一产出 AgentEvent 对象,让你实时将文本输出、工具调用进度和生命周期事件流式传输给用户。

observe

使用 observe 将消息注入智能体上下文而不触发 reply——适用于多智能体场景中,一个智能体需要观察另一个智能体输出的情况。

压缩上下文

当 token 数量超过 context_config.trigger_ratio × model.context_length 时,智能体会自动压缩上下文。压缩会对较旧的消息进行摘要,如果配置了 offloader,还会将其卸载到磁盘。 也可以手动触发压缩:
如果系统提示词本身就超过了压缩阈值,compress_context 会抛出 RuntimeError。请保持系统提示词简洁,或增大模型的上下文长度。
超过 tool_result_limit token 的工具结果会被自动截断。如果设置了 offloader,截断的部分会被卸载,智能体会收到一个可按需读取的路径引用。

人机交互

当智能体遇到以下两种情况时,会暂停执行并发出特殊事件:需要用户确认的工具调用(权限系统返回 ASK),或标记为外部执行的工具(结果必须来自智能体外部)。两种情况下,都可以通过向 reply 传入结果事件来恢复智能体。

用户确认

当权限系统判断某个工具调用需要用户批准时,智能体会发出 RequireUserConfirmEvent 并暂停。
1

接收 RequireUserConfirmEvent

使用 reply_stream 检测暂停。事件结构如下:
str
必填
当前 reply 的 ID,用于恢复智能体。
list[ToolCallBlock]
必填
等待用户确认的工具调用列表。每个 ToolCallBlock 包含:
2

构建确认结果

为每个待处理的工具调用创建 ConfirmResult,指明是否允许执行。也可以修改工具调用输入或接受建议的权限规则:
3

恢复智能体

UserConfirmResultEvent 传回 replyreply_stream
  • 已确认的工具调用立即执行,智能体继续推理
  • 已拒绝的工具调用会产生 LLM 可见的错误结果,LLM 可能会用不同方式重试
  • 已接受的规则会持久化到权限引擎中——匹配的未来调用将自动允许,无需再次提示

外部工具执行

当智能体调用 is_external_tool = True 的工具时,会发出 RequireExternalExecutionEvent 并暂停。工具的逻辑在智能体外部运行——通常由人工操作员或外部系统执行。
1

接收 RequireExternalExecutionEvent

事件结构如下:
str
必填
当前 reply 的 ID,用于恢复智能体。
list[ToolCallBlock]
必填
需要外部执行的工具调用列表。每个 ToolCallBlock 包含:
2

外部执行并构建结果

在智能体外部执行操作,并将结果封装为 ToolResultBlock 对象:
3

恢复智能体

传回 ExternalExecutionResultEvent 以恢复智能体:
结果会被注入智能体上下文,推理从中断处继续。
构建交互式 UI 时使用 reply_stream——它可以实时检测暂停事件并立即提示用户。以编程方式处理事件的自动化流程则使用 reply

持久化智能体状态

AgentState 是一个 Pydantic 模型,保存了恢复智能体所需的全部信息——对话上下文、压缩摘要、权限规则、工具状态和当前 reply 位置。由于它是标准的 Pydantic 模型,可以序列化为 JSON 并存储在任意后端。 RedisStorage 是内置的存储后端,以 (user_id, agent_id, session_id) 为键层级组织状态,并提供两个面向热路径的方法:
若 session 尚不存在,update_session_state 会抛出 KeyError。首次创建时请使用 upsert_session 建立 session 记录,后续轮次再切换为 update_session_state

延伸阅读

权限系统

控制智能体可以调用哪些工具以及在什么条件下调用。

中间件

在 reply、reasoning、acting 和 model call 钩子处拦截和修改智能体行为。