1.7 KiB

任务循环

openmcp-sdk 是以任务循环的机制构建 agent 并允许用户与之交互的。如果用户需要实时控制这个任务循环,可以通过 openmcp-sdk 提供的事件来注册对应的钩子函数来完成这件事。

极速部署 中的为例,通过下面的代码,你可以获取到控制任务循环的对象:

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:在调用工具函数后触发

这些钩子函数接收一个回调函数,回调函数会在对应事件触发时被调用。

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