路由 - 完整的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: 'Main',
description: '通用助手',
model: 'claude-3-sonnet',
systemPrompt: '你是一个有用的交易助手...',
allowedTools: ['*'], // 所有工具
},
trading: {
name: 'Trading',
description: '订单执行专家',
model: 'claude-3-haiku',
systemPrompt: '你高效执行交易...',
allowedTools: ['execute', 'portfolio', 'markets', 'feeds'],
},
research: {
name: 'Research',
description: '市场分析专家',
model: 'claude-3-opus',
systemPrompt: '你提供深入的市场分析...',
allowedTools: ['web-search', 'web-fetch', 'markets', 'news'],
},
alerts: {
name: 'Alerts',
description: '通知处理程序',
model: 'claude-3-haiku',
systemPrompt: '你管理价格警报...',
allowedTools: ['alerts', 'feeds'],
},
},
// 存储
storage: 'sqlite',
dbPath: './routing.db',
});
路由消息
// 路由确定最佳代理
const route = await routing.route({
message: 'Buy 100 shares of 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 Specialist',
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 | 通知 | 警报,Feeds |
路由规则
消息根据以下规则进行路由:
- 频道绑定 — 如果频道已绑定,则使用该代理
- 模式匹配 — 与代理模式匹配
- 关键词检测 — 交易术语 → 交易代理
- 默认回退 — 使用主代理
模式示例
{
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用于时间敏感操作
- 适当限制工具 — 交易代理不需要浏览器
- 频道绑定 — 为特定工作流程专用频道
- 自定义代理 — 为您的用例创建专门的代理
- 监控路由 — 查看日志以了解路由决策