name: routing description: “多代理路由、通道绑定和工具策略” emoji: “🔀”
路由 - 完整 API 参考
将消息路由到专门代理,配置通道绑定,并管理工具访问策略。
聊天命令
代理管理
/agents 列出可用代理
/agent trading 切换到交易代理
/agent research 切换到研究代理
/agent main 切换到主代理
/agent status 当前代理信息
通道绑定
/bind trading 将通道绑定到交易代理
/bind research 将通道绑定到研究代理
/unbind 移除通道绑定
/bindings 列出所有绑定
工具策略(管理员)
/tools 列出可用工具
/tools allow <agent> <tool> 允许代理使用工具
/tools deny <agent> <tool> 禁止代理使用工具
/tools policy <agent> 查看代理的工具策略
TypeScript API 参考
创建路由服务
import { createRoutingService } from 'clodds/routing';
const routing = createRoutingService({
// 默认代理
defaultAgent: 'main',
// 代理定义
agents: {
main: {
name: '主代理',
description: '通用助手',
model: 'claude-3-sonnet',
systemPrompt: '您是一个有用的交易助手...',
allowedTools: ['*'], // 所有工具
},
trading: {
name: '交易代理',
description: '订单执行专家',
model: 'claude-3-haiku',
systemPrompt: '您高效执行交易...',
allowedTools: ['execute', 'portfolio', 'markets', 'feeds'],
},
research: {
name: '研究代理',
description: '市场分析专家',
model: 'claude-3-opus',
systemPrompt: '您提供深入的市场分析...',
allowedTools: ['web-search', 'web-fetch', 'markets', 'news'],
},
alerts: {
name: '警报代理',
description: '通知处理器',
model: 'claude-3-haiku',
systemPrompt: '您管理价格警报...',
allowedTools: ['alerts', 'feeds'],
},
},
// 存储
storage: 'sqlite',
dbPath: './routing.db',
});
路由消息
// 路由确定最佳代理
const route = await routing.route({
message: '买入100股Trump YES',
channelId: 'telegram-123',
userId: 'user-456',
});
console.log(`路由到: ${route.agent}`);
console.log(`置信度: ${route.confidence}`);
console.log(`原因: ${route.reason}`);
获取可用代理
const agents = routing.getAgents();
for (const [id, agent] of Object.entries(agents)) {
console.log(`${id}: ${agent.name}`);
console.log(` ${agent.description}`);
console.log(` 模型: ${agent.model}`);
console.log(` 工具: ${agent.allowedTools.join(', ')}`);
}
添加自定义代理
routing.addAgent({
id: 'defi',
name: 'DeFi 专家',
description: 'Solana 和 EVM DeFi 专家',
model: 'claude-3-sonnet',
systemPrompt: '您是DeFi协议专家...',
allowedTools: ['solana', 'evm', 'bridge', 'portfolio'],
patterns: [
/swap|dex|liquidity|pool/i,
/solana|jupiter|raydium/i,
/uniswap|1inch|bridge/i,
],
});
更新代理
routing.updateAgent('trading', {
model: 'claude-3-sonnet', // 升级模型
allowedTools: [...currentTools, 'futures'],
});
通道绑定
// 将通道绑定到特定代理
await routing.addBinding({
channelId: 'telegram-trading-group',
agentId: 'trading',
});
// 获取通道的绑定
const binding = await routing.getBinding('telegram-trading-group');
console.log(`通道绑定到: ${binding?.agentId || '默认'}`);
// 列出所有绑定
const bindings = await routing.getBindings();
for (const b of bindings) {
console.log(`${b.channelId} → ${b.agentId}`);
}
// 移除绑定
await routing.removeBinding('telegram-trading-group');
工具策略
// 检查工具是否允许用于代理
const allowed = routing.isToolAllowed('trading', 'web-search');
console.log(`web-search 允许用于交易代理: ${allowed}`);
// 获取代理允许的工具
const tools = routing.getAllowedTools('trading');
console.log(`交易代理工具: ${tools.join(', ')}`);
// 更新工具策略
routing.setToolPolicy('trading', {
allow: ['execute', 'portfolio', 'futures'],
deny: ['web-search', 'browser'],
});
内置代理
| 代理 | 模型 | 目的 | 工具 |
|---|---|---|---|
| main | Sonnet | 通用助手 | 所有 |
| trading | Haiku | 快速订单执行 | 执行, 投资组合 |
| research | Opus | 深度分析 | 搜索, 获取, 新闻 |
| alerts | Haiku | 通知 | 警报, 数据源 |
路由规则
消息基于以下路由:
- 通道绑定 — 如果通道已绑定,使用该代理
- 模式匹配 — 匹配代理模式
- 关键词检测 — 交易术语 → 交易代理
- 默认回退 — 使用主代理
模式示例
{
trading: [/buy|sell|order|position|close/i],
research: [/analyze|research|explain|why/i],
alerts: [/alert|notify|when|watch/i],
}
工具类别
| 类别 | 工具 |
|---|---|
| 执行 | execute, portfolio, markets |
| 数据 | feeds, news, web-search, web-fetch |
| 加密货币 | solana, evm, bridge |
| 系统 | files, browser, docker |
工作空间隔离
每个代理可以有隔离的工作空间:
routing.addAgent({
id: 'research',
workspace: {
directory: '/tmp/research',
allowedPaths: ['/tmp/research/**'],
sandboxed: true,
},
});
最佳实践
- 为交易使用快速模型 — Haiku 用于时间敏感操作
- 适当限制工具 — 交易代理不需要浏览器
- 通道绑定 — 专用通道用于特定工作流
- 自定义代理 — 为您的用例创建专门代理
- 监控路由 — 检查日志以查看路由决策