57 lines
1.8 KiB
Markdown
57 lines
1.8 KiB
Markdown
# Task Loop
|
|
|
|
openmcp-sdk builds agents using a task loop mechanism and allows users to interact with them. If users need real-time control over this task loop, they can register corresponding hook functions through the events provided by openmcp-sdk.
|
|
|
|
Taking the example from [Quick Deployment](./fast-deploy.md), you can obtain the object controlling the task loop with the following code:
|
|
|
|
```typescript
|
|
import { OmAgent } from '../openmcp-sdk/service/sdk';
|
|
|
|
const agent = new OmAgent();
|
|
agent.loadMcpConfig('./mcpconfig.json');
|
|
|
|
const loop = await agent.getLoop();
|
|
```
|
|
|
|
:::warning
|
|
Registering hooks and obtaining the loop must be completed before `agent.ainvoke`!
|
|
:::
|
|
|
|
With this `loop` object, we can register the following hooks:
|
|
|
|
- `registerOnChunk`: Triggered when the model returns a chunk
|
|
- `registerOnDone`: Triggered when the task is completed
|
|
- `registerOnError`: Triggered when the task encounters an error
|
|
- `registerOnEpoch`: Triggered at the start of each task epoch
|
|
- `registerOnToolCall`: Triggered before calling a tool function
|
|
- `registerOnToolCalled`: Triggered after calling a tool function
|
|
|
|
These hook functions accept a callback function, which will be called when the corresponding event is triggered.
|
|
|
|
```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;
|
|
});
|
|
``` |