LangChain Go 动态路由和智能决策系统
这是一个基于 LangChain Go 和通义千问大模型的智能路由和决策系统演示项目。系统能够根据用户输入智能选择最适合的处理路由,实现动态的对话管理和智能决策。
✨ 特性
🎯 智能路由功能
- 意图识别: 自动识别用户的真实意图
- 动态路由: 根据输入内容智能选择处理路由
- 置信度评估: 为每个路由选择提供置信度分数
- 上下文感知: 考虑对话历史进行路由决策
🧠 支持的路由类型
-
技术支持 (
technical_support)- 编程问题解答
- 代码调试帮助
- 技术方案建议
-
商业智能 (
business_intelligence)- 数据分析
- 报表生成
- 趋势预测
-
创意写作 (
creative_writing)- 文章创作
- 故事编写
- 创意内容生成
-
教育辅导 (
educational_tutor)- 概念解释
- 学习指导
- 知识问答
-
个人助理 (
personal_assistant)- 日程安排
- 任务管理
- 实用建议
-
一般对话 (
general_conversation)- 日常交流
- 闲聊对话
📊 高级功能
- 对话历史管理: 保持对话上下文
- 性能监控: 记录处理时间和统计信息
- 实体识别: 提取关键实体信息
- 情感分析: 分析用户情感倾向
- 多轮对话: 支持连续对话流程
🚀 快速开始
环境要求
- Go 1.21+
- 通义千问 API 密钥
安装依赖
go mod tidy
设置 API 密钥
export DASHSCOPE_API_KEY="your_dashscope_api_key_here"
运行演示
1. 高级演示(默认)
go run .
# 或
go run . advanced
2. 基础演示
go run . basic
3. 交互模式
go run . interactive
📖 使用示例
基础路由示例
// 创建通义模型实例
tongyi, err := NewTongyi(apiKey, "qwen-plus")
if err != nil {
log.Fatal(err)
}
// 创建智能路由器
router := NewIntelligentRouter(tongyi)
// 处理用户请求
ctx := context.Background()
result, err := router.Route(ctx, "我的Go代码有bug,能帮我看看吗?")
if err != nil {
log.Fatal(err)
}
fmt.Printf("路由: %s, 回应: %s\n", result.Intent, result.Action)
高级路由示例
// 创建高级智能路由器
router := NewAdvancedIntelligentRouter(tongyi)
// 执行智能决策
result, err := router.MakeDecision(ctx, userInput)
if err != nil {
log.Fatal(err)
}
fmt.Printf("选择路由: %s\n", result.Route)
fmt.Printf("置信度: %.2f\n", result.Confidence)
fmt.Printf("意图: %s\n", result.Intent)
fmt.Printf("回应: %s\n", result.Response)
🏗️ 架构设计
核心组件
-
TongyiLLM: 通义千问模型客户端
- 实现 LangChain Go 的
llms.Model接口 - 处理 API 调用和响应解析
- 实现 LangChain Go 的
-
IntelligentRouter: 基础智能路由器
- 意图分类
- 路由匹配
- 响应生成
-
AdvancedIntelligentRouter: 高级智能路由器
- 复杂条件匹配
- 上下文感知
- 多维度分析
-
DecisionMaker: 决策制定器
- 整合路由结果
- 优化决策逻辑
数据流程
用户输入 → 输入分析 → 路由匹配 → 动作执行 → 响应生成 → 上下文更新
↓ ↓ ↓ ↓ ↓ ↓
文本处理 意图识别 条件评估 LLM调用 格式化 历史记录
🔧 配置说明
路由配置
路由配置采用 JSON 格式,包含以下字段:
type AdvancedRouteConfig struct {
Name string `json:"name"` // 路由名称
Description string `json:"description"` // 路由描述
Priority int `json:"priority"` // 优先级 (1-10)
Keywords []string `json:"keywords"` // 关键词列表
Conditions []RouteCondition `json:"conditions"` // 匹配条件
Actions []RouteAction `json:"actions"` // 执行动作
FallbackRoute string `json:"fallback_route"` // 回退路由
ResponseFormat string `json:"response_format"` // 响应格式
Parameters map[string]interface{} `json:"parameters"` // 参数配置
}
条件类型
keyword: 关键词匹配intent: 意图匹配sentiment: 情感匹配complexity: 复杂度匹配length: 长度匹配
动作类型
prompt: 提示模板chain: 链式处理function: 函数调用redirect: 重定向
📊 监控和分析
对话统计
report := router.GenerateAnalyticsReport()
返回的统计信息包括:
- 总对话数
- 路由使用分布
- 意图识别分布
- 会话信息
性能监控
每次决策都会记录:
- 处理时间
- 置信度分数
- 路由选择路径
- 上下文信息
🎯 演示内容
基础演示
展示六种不同类型的查询及其路由选择:
- 天气查询
- 翻译请求
- 数学计算
- 编程问题
- 知识问答
- 一般对话
高级演示
包含三个部分:
- 路由准确性测试: 验证系统对不同类型输入的路由选择
- 多轮对话演示: 展示上下文保持和对话流程管理
- 上下文感知演示: 验证系统对上下文的理解和应用
交互模式
提供实时交互界面,支持:
- 实时对话
- 统计查看
- 帮助信息
- 优雅退出
🛠️ 扩展开发
添加新路由
- 在
loadAdvancedRoutes()中添加新的路由配置 - 在
getPromptTemplate()中添加对应的提示模板 - 根据需要实现自定义处理函数
自定义分析器
func (air *AdvancedIntelligentRouter) analyzeInput(ctx context.Context, input string) (*InputAnalysis, error) {
// 实现自定义分析逻辑
}
添加新动作类型
在 executeRoute() 方法中添加新的动作处理逻辑。
📝 注意事项
- API 密钥安全: 请妥善保管您的 DashScope API 密钥
- 请求频率: 注意 API 调用频率限制
- 错误处理: 系统包含完善的错误处理机制
- 性能优化: 大量请求时考虑实现请求缓存
🙏 致谢
- LangChain Go - 优秀的 Go 语言 LangChain 实现
- 通义千问 - 强大的大语言模型服务