任务循环
openmcp-sdk 是以任务循环的机制构建 agent 并允许用户与之交互的。如果用户需要实时控制这个任务循环,可以通过 openmcp-sdk 提供的事件来注册对应的钩子函数来完成这件事。
以 极速部署 中的为例,通过下面的代码,你可以获取到控制任务循环的对象:
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:在调用工具函数后触发registerOnTokenConsumption:在 openmcp 计算完成 token 消耗量与价格等等后触发,可以用于获取当前一次 agent loop 的调用价格。
这些钩子函数接收一个回调函数,回调函数会在对应事件触发时被调用。
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;
});
loop.registerOnTokenConsumption((result) => {
console.log('⚙️ Agent Token Consumption', result);
});