@astack-tech/components 中的 Agent 运行这样一个循环:
- 把对话和工具列表发送给模型。
- 如果回复中没有工具调用,就停止并返回该回复。
- 否则执行模型请求的每个工具,把结果加入对话,然后回到第 1 步。
即使模型一直请求工具,循环也会在模型被调用 maxIterations 次后停止。
import { Agent } from '@astack-tech/components';
import { ModelProvider } from '@astack-tech/integrations';
const agent = new Agent({
model: new ModelProvider.Deepseek({ apiKey }),
tools: [multiply],
systemPrompt: 'Use tools for arithmetic.',
});
const output = await agent.run('What is 37 times 43?');
配置
| 选项 | 默认值 | 含义 |
|---|---|---|
model |
— | 一个模型提供方 |
tools |
[] |
提供 invoke(args) 或 execute(args) 的工具 |
systemPrompt |
You are a helpful assistant. |
工具列表会追加在它后面 |
maxIterations |
10 |
每次运行最多调用模型的次数 |
memory |
DefaultMemory |
每次运行时清空,并以系统提示词作为开头 |
verbose |
false |
在控制台输出每一步 |
输入与输出
run() 接受一个字符串,或 { messages, context }。对于没有 metadata 的消息,context 会成为它的 metadata。
run() 返回的结果包含:
| 字段 | 内容 |
|---|---|
message |
最后一段 assistant 文本 |
toolCalls |
每个执行过的工具的 { tool, args, result },包括失败的调用 |
history |
完整对话,包括工具调用的各轮 |
usage |
所有模型调用的 token 用量之和 |
工具错误
智能体不会因为工具而抛出错误。未知的工具、无效的 JSON 参数,或者工具本身抛出的错误,都会变成结果消息中的一行错误信息,由模型决定下一步怎么做。模型本身的错误则会使 run() 被拒绝。
在管道中
智能体在 in 上读取字符串或 AgentInput,在 out 上发送 AgentOutput。如果运行失败,它会发送一个 error 字段带有错误信息的输出。