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;
});
```