Skip to content

Agent ​

字数
729 字
阅读时间
3 分钟

ctx.agents(由 @chatluna/agent 提供)是 Agent 的核心注册表与运行时入口。每个 Agent 实例都会绑定一条会话日志,负责驱动「输入 → 模型调用 → 工具执行」的生命周期循环。

创建与获取 ​

方法作用
create(sessionId, options, at?)创建新的 Agent 实例(要求会话尚不存在)
open(sessionId, options, at?)复用已有的在线实例;若会话不存在则自动创建
spawn({ model, tools?, inherit?, prompt?, title?, id?, setup? })快速创建 Agent,其中 model 为必填项(格式为 provider:model)
get(sessionId)根据会话 ID 获取在线实例
list()列出当前所有在线的 Agent 实例
groupByRoot()按根会话分组(子代理会挂载在对应的根会话下)
closeSession(id) / closeRoot(id)关闭单个会话实例或整棵会话树
runtime(name, runtime)注册自定义运行时实现

在 options 配置中,常见的字段包括 config: { provider, model }、engine、toolMode、presetId、conversationKey、location 和 permissions。

Agent 句柄 ​

成员作用
receive(message, { when })投递输入,支持 next、now 或 quiet 调度时机,同步返回 void
drop()丢弃队列中尚未被接纳的排队输入
discard(messageId, reason)移除指定的排队消息,返回布尔值表示是否移除成功
abort(reason, { keepPending })中止当前的执行流程
idle()等待排队任务与执行流程结束并进入空闲状态
close()关闭当前 Agent 并释放其占用的 fiber 资源
status / pending获取当前运行状态与待处理的输入列表
session / options获取绑定的会话实例与创建时传入的配置项

中间件 ​

注册边界
ingest(mw)输入被接纳前执行
turn(mw)拦截并包裹单个完整回合
step(mw)单步执行的前后阶段
request(mw)向模型派发请求的阶段
shapeCommit(fn)助手回复写回会话前对结果进行整形
prepareStep(fn, opts)每步开始前调整模型、工具与参数,并可按需提供输入消息
stopWhen(conditions)注册单步或回合的提前停止条件

所有注册操作都会跟随调用方的 fiber 生命周期,插件卸载时会自动释放。

需要注意的是,prepareStep 不能直接覆盖整个 messages 数组,也不允许伪造来自模型的历史消息;若需新增输入,请通过 contribute 注入。

手动驱动 ​

如果你需要完全控制执行循环(例如在自定义引擎中实现特定的流程),也可以逐个调用底层的执行步骤:

  • runIngest → runTurn → runStep → runRequest

这些方法在执行后不会自动重试或重复调用,后续的推进循环需要由调用方自行负责。

继续 ​

页面历史

在 CC-BY-SA-4.0 许可下发布