57 lines
1.7 KiB
Markdown
57 lines
1.7 KiB
Markdown
# 任务循环
|
|
|
|
openmcp-sdk 是以任务循环的机制构建 agent 并允许用户与之交互的。如果用户需要实时控制这个任务循环,可以通过 openmcp-sdk 提供的事件来注册对应的钩子函数来完成这件事。
|
|
|
|
以 [极速部署](./fast-deploy.md) 中的为例,通过下面的代码,你可以获取到控制任务循环的对象:
|
|
|
|
```typescript
|
|
import { OmAgent } from '../openmcp-sdk/service/sdk';
|
|
|
|
const agent = new OmAgent();
|
|
agent.loadMcpConfig('./mcpconfig.json');
|
|
|
|
const loop = await agent.getLoop();
|
|
```
|
|
|
|
:::warning
|
|
注册钩子和获取 loop 必须在 `agent.ainvoke` 之前完成!
|
|
:::
|
|
|
|
通过这个 `loop` 对象,我们可以注册如下的钩子:
|
|
|
|
- `registerOnChunk`:在模型返回 chunk 时触发
|
|
- `registerOnDone`:在任务完成时触发
|
|
- `registerOnError`:在任务出错时触发
|
|
- `registerOnEpoch`:在每个任务轮次开始时触发
|
|
- `registerOnToolCall`:在调用工具函数前触发
|
|
- `registerOnToolCalled`:在调用工具函数后触发
|
|
|
|
这些钩子函数接收一个回调函数,回调函数会在对应事件触发时被调用。
|
|
|
|
```typescript
|
|
loop.registerOnChunk((chunk) => {
|
|
console.log('⚙️ Agent Chunk', chunk);
|
|
});
|
|
|
|
loop.registerOnDone(() => {
|
|
console.log('⚙️ Agent Done');
|
|
});
|
|
|
|
loop.registerOnError((err) => {
|
|
console.log('⚙️ Agent Error', err);
|
|
});
|
|
|
|
loop.registerOnEpoch(() => {
|
|
console.log('⚙️ Agent Epoch');
|
|
});
|
|
|
|
loop.registerOnToolCall((toolCall) => {
|
|
console.log('⚙️ Agent Tool Call', toolCall);
|
|
return toolCall;
|
|
});
|
|
|
|
loop.registerOnToolCalled((toolCalled) => {
|
|
console.log('⚙️ Agent Tool Called', toolCalled);
|
|
return toolCalled;
|
|
});
|
|
``` |