工具是使 Agent 能够与外部世界交互的核心能力。Tarko 支持遵循 OpenAI Function Call 协议的各种类型工具。
所有工具都使用 Tool 类创建,遵循 OpenAI Function Call 协议。
import { Tool, z } from '@tarko/agent';
// 获取当前位置的工具
const locationTool = new Tool({
id: 'getCurrentLocation',
description: "获取用户当前位置",
parameters: z.object({}),
function: async () => {
return { location: 'Boston' };
},
});
// 获取天气信息的工具
const weatherTool = new Tool({
id: 'getWeather',
description: '获取指定位置的天气信息',
parameters: z.object({
location: z.string().describe('位置名称,如城市名'),
}),
function: async (input) => {
const { location } = input;
return {
location,
temperature: '70°F (21°C)',
condition: 'Sunny',
precipitation: '10%',
humidity: '45%',
wind: '5 mph',
};
},
});Tarko 推荐使用 Zod 来定义工具参数,提供类型安全和运行时验证:
import { Tool, z } from '@tarko/agent';
// 复杂参数的工具
const searchTool = new Tool({
id: 'search',
description: '在互联网上搜索信息',
parameters: z.object({
query: z.string().describe('搜索查询'),
maxResults: z.number().optional().describe('最大结果数,默认 10'),
language: z.enum(['zh', 'en']).optional().describe('搜索语言'),
}),
function: async (input) => {
const { query, maxResults = 10, language = 'zh' } = input;
// 实现搜索逻辑
return {
results: [
{ title: '搜索结果 1', url: 'https://example.com/1' },
{ title: '搜索结果 2', url: 'https://example.com/2' },
],
totalResults: maxResults
};
},
});也可以使用标准 JSON Schema:
const fileTool = new Tool({
id: 'readFile',
description: '读取文件内容',
parameters: {
type: 'object',
properties: {
path: {
type: 'string',
description: '文件路径'
},
encoding: {
type: 'string',
enum: ['utf8', 'base64'],
description: '文件编码'
}
},
required: ['path']
},
function: async (params: { path: string; encoding?: string }) => {
// 实现文件读取逻辑
return { content: '文件内容', size: 1024 };
},
});将工具添加到 Agent:
import { Agent } from '@tarko/agent';
const agent = new Agent({
model: {
provider: 'openai',
id: 'gpt-4',
apiKey: process.env.OPENAI_API_KEY,
},
tools: [
locationTool,
weatherTool,
searchTool,
fileTool
]
});
// 也可以动态注册工具
agent.registerTool(newTool);
// 获取所有已注册的工具
const allTools = agent.getTools();
console.log('已注册工具:', allTools.map(t => t.name));完整的工具使用示例:
// 来自真实示例:multimodal/tarko/agent/examples/tool-calls/basic.ts
const agent = new Agent({
model: {
provider: 'volcengine',
id: 'doubao-seed-1-6-vision-250815',
apiKey: process.env.ARK_API_KEY,
},
tools: [locationTool, weatherTool],
});
const response = await agent.run("今天天气怎么样?");
console.log(response);