11# Agent 与 Sub-Agent
22
3- ChatLuna 现在提供了一套更高层的 Agent API。
4-
5- 推荐优先使用 ` ctx.chatluna.createAgent(...) ` 创建 Agent,再通过 ` generate() ` 、` stream() ` 、` asTool() ` 和 ` createTaskTool() ` 组合主 Agent、Sub-Agent 与任务委派能力。
3+ ChatLuna 提供了一套更高层的 Agent API,用于组装 Agent,甚至是多 Agent 服务。
64
75## 创建 Agent
86
9- 最常见的入口是 ` ctx.chatluna.createAgent() ` 。
7+ 使用 ` ctx.chatluna.createAgent() ` 来快速创建 Agent 。
108
11- ``` ts
9+ ``` ts twoslash
10+ // @noImplicitAny: false
11+ // @strictNullChecks: false
1212import type {} from " koishi-plugin-chatluna/services/chat" ;
1313
1414const agent = await ctx .chatluna .createAgent ({
@@ -26,11 +26,11 @@ const agent = await ctx.chatluna.createAgent({
2626
2727<br >
2828
29- 平时最常用的几个参数 :
29+ 常用的参数 :
3030
3131- ` model ` : 必填,通常直接写 ` platform/model `
32- - ` tools ` : 可选,传工具名数组即可
33- - ` preset ` 或 ` system ` : 二选一;想复用预设就传 ` preset ` ,想快速写一个 Agent 就直接传 ` system `
32+ - ` tools ` : 可选,传工具名数组或 Langchain 的工具数组。不传数组则默认激活全部可用的工具。
33+ - ` preset ` 或 ` system ` : 二选一;想复用已有预设就传入 ` preset ` ,想快速写一个 Agent 就直接传 ` system ` (用于指定 Agent 的 System Prompt)
3434- ` mode ` : 可选,默认 ` tool-calling `
3535- ` maxSteps ` : 可选,限制最多调用多少轮工具
3636
@@ -59,7 +59,7 @@ console.log(result.message);
5959
6060- ` output ` : 最终文本输出
6161- ` message ` : 最终消息对象
62- - ` intermediateSteps ` : 当创建 Agent 时设置了 ` returnIntermediateSteps: true ` 才会返回
62+ - ` intermediateSteps ` : 工具调用的步骤。创建 Agent 时设置了 ` returnIntermediateSteps: true ` 才会返回。
6363
6464## 流式调用
6565
@@ -111,7 +111,7 @@ await agent.generate({
111111
112112` agent.asTool() ` 可以把一个 Agent 直接包装成 LangChain ` StructuredTool ` 。
113113
114- 这种方式适合一次性交接 :主 Agent 把某个任务完整交给子 Agent,然后拿回最终结果。
114+ 这种方式更适合一次性交接 :主 Agent 把某个任务完整交给子 Agent,然后拿回最终结果。
115115
116116``` ts
117117const explore = await ctx .chatluna .createAgent ({
@@ -135,26 +135,24 @@ const delegateTool = explore.asTool({
135135});
136136```
137137
138- 如果你希望主 Agent 直接能调用这个工具,通常会在创建主 Agent 前先把它注册成平台工具,或在你自己的装配层中一起构造工具列表 。
138+ 如果你希望主 Agent 直接能调用这个工具,通常会在创建主 Agent 前先把它注册成平台工具,或在你自己的代码中构造工具列表 。
139139
140140## 主 Agent + Sub-Agent
141141
142- 推荐的心智模型是 :
142+ 推荐的使用方式是 :
143143
144- - 主 Agent 也是 Agent
145- - Sub-Agent 也是 Agent
146- - 一次性交接用 ` asTool() `
147- - 长任务、多轮跟进、后台继续执行用 ` createTaskTool() `
144+ - 主 Agent 和 Sub-Agent 都 Agent
145+ - 使用 ` asTool() ` 做一次性交接和 ` handoff `
146+ - 当需要长期执行任务、多轮对话跟进、后台执行时,采用 ` createTaskTool() `
148147
149148也就是说,主 Agent 和 Sub-Agent 的区别主要在“如何被调用”,而不是底层实现不同。
150149
151150## 任务工具与 Sub-Agent 教程
152151
153152当你希望:
154153
155- - 主 Agent 把工作交给某个专门 Agent
156- - 任务可以后台运行
157- - 之后还能 ` status ` / ` list ` / ` message ` / ` resume `
154+ - 主 Agent 把工作交给某个专门 Agent,任务可以后台运行
155+ - 之后还能恢复对话
158156
159157就应该使用 ` createTaskTool() ` 。
160158
@@ -297,19 +295,19 @@ console.log(msg.content);
297295
298296这和 extension-agent 里展示 ` <available_sub_agents> ` 的方式是一致的。
299297
300- ## 何时用 asTool,何时用 task
298+ ## asTool 和 task 的场景
301299
302- ### 使用 ` asTool() ` 的场景
300+ ### 使用 ` asTool() `
303301
304- - 只需要一次性交接
302+ - 只需要子 Agent 一次性交接
305303- 子 Agent 执行完成后直接返回结果
306- - 不需要后台运行和任务状态管理
304+ - 不需要复杂的后台运行和任务状态管理
307305
308- ### 使用 ` createTaskTool() ` 的场景
306+ ### 使用 ` createTaskTool() `
309307
310- - 子 Agent 任务可能比较长
308+ - 子 Agent 的任务可能比较长
311309- 希望后台继续执行
312- - 之后还要继续查看状态、补发消息、恢复执行
310+ - 后续还需要继续恢复执行
313311
314312## 底层 API
315313
0 commit comments