Skip to main content

LangChain Go 动态路由和智能决策系统

这是一个基于 LangChain Go 和通义千问大模型的智能路由和决策系统演示项目。系统能够根据用户输入智能选择最适合的处理路由,实现动态的对话管理和智能决策。

✨ 特性

🎯 智能路由功能

  • 意图识别: 自动识别用户的真实意图
  • 动态路由: 根据输入内容智能选择处理路由
  • 置信度评估: 为每个路由选择提供置信度分数
  • 上下文感知: 考虑对话历史进行路由决策

🧠 支持的路由类型

  1. 技术支持 (technical_support)

    • 编程问题解答
    • 代码调试帮助
    • 技术方案建议
  2. 商业智能 (business_intelligence)

    • 数据分析
    • 报表生成
    • 趋势预测
  3. 创意写作 (creative_writing)

    • 文章创作
    • 故事编写
    • 创意内容生成
  4. 教育辅导 (educational_tutor)

    • 概念解释
    • 学习指导
    • 知识问答
  5. 个人助理 (personal_assistant)

    • 日程安排
    • 任务管理
    • 实用建议
  6. 一般对话 (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)

🏗️ 架构设计

核心组件

  1. TongyiLLM: 通义千问模型客户端

    • 实现 LangChain Go 的 llms.Model 接口
    • 处理 API 调用和响应解析
  2. IntelligentRouter: 基础智能路由器

    • 意图分类
    • 路由匹配
    • 响应生成
  3. AdvancedIntelligentRouter: 高级智能路由器

    • 复杂条件匹配
    • 上下文感知
    • 多维度分析
  4. 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()

返回的统计信息包括:

  • 总对话数
  • 路由使用分布
  • 意图识别分布
  • 会话信息

性能监控

每次决策都会记录:

  • 处理时间
  • 置信度分数
  • 路由选择路径
  • 上下文信息

🎯 演示内容

基础演示

展示六种不同类型的查询及其路由选择:

  1. 天气查询
  2. 翻译请求
  3. 数学计算
  4. 编程问题
  5. 知识问答
  6. 一般对话

高级演示

包含三个部分:

  1. 路由准确性测试: 验证系统对不同类型输入的路由选择
  2. 多轮对话演示: 展示上下文保持和对话流程管理
  3. 上下文感知演示: 验证系统对上下文的理解和应用

交互模式

提供实时交互界面,支持:

  • 实时对话
  • 统计查看
  • 帮助信息
  • 优雅退出

🛠️ 扩展开发

添加新路由

  1. loadAdvancedRoutes() 中添加新的路由配置
  2. getPromptTemplate() 中添加对应的提示模板
  3. 根据需要实现自定义处理函数

自定义分析器

func (air *AdvancedIntelligentRouter) analyzeInput(ctx context.Context, input string) (*InputAnalysis, error) {
// 实现自定义分析逻辑
}

添加新动作类型

executeRoute() 方法中添加新的动作处理逻辑。

📝 注意事项

  1. API 密钥安全: 请妥善保管您的 DashScope API 密钥
  2. 请求频率: 注意 API 调用频率限制
  3. 错误处理: 系统包含完善的错误处理机制
  4. 性能优化: 大量请求时考虑实现请求缓存

🙏 致谢