LangChain Go 多步骤任务演示
这个项目演示了如何使用 langchaingo 实现 LLMChain 和 SequentialChain 来构建复杂的多步骤任务处理系统。
功能特性
- ✅ LLMChain: 单步骤语言模型链
- ✅ SequentialChain: 多步骤顺序执行链
- ✅ 文章写作助手: 大纲→内容→总结的完整流程
- ✅ 客户服务流程: 问题分类→解决方案→邮件回复
- ✅ 并行处理: 多维度产品分析
- ✅ 条件处理: 基于内容类型的不同处理路径
- ✅ 错误处理: 数据验证和清洗流程
- ✅ DeepSeek 集成: 使用 DeepSeek API 替代 OpenAI
安装和设置
1. 克隆或创建项目
mkdir langchain-seq-demo
cd langchain-seq-demo
2. 初始化 Go 模块
go mod init langchain-seq-demo
go mod tidy
3. 设置环境变量
export DEEPSEEK_API_KEY=your_deepseek_api_key_here
4. 安装依赖
go mod download
运行演示
代码结构演示(无需 API Key)
go run . -demo=structure
模拟演示(无需 API Key)
go run . -demo=simulate
SequentialChain 演示
go run . -demo=sequential
快速测试
go run . -demo=test
简单测试
go run . -demo=simple
基础演示 - 文章写作助手
go run . -demo=basic
示例演示 - 多种链类型
go run . -demo=examples
高级演示 - 条件和错误处理
go run . -demo=advanced
运行所有演示
go run . -demo=all
项目结构
langchain-seq-demo/
├── main.go # 主要的文章写作助手演示
├── demo.go # 演示入口和命令行处理
├── examples.go # 基础示例演示
├── advanced.go # 高级功能演示
├── structure.go # 代码结构说明(无需API Key)
├── test.go # 快速功能测试
├── setup.sh # 项目设置脚本
├── go.mod # Go 模块文件
└── README.md # 项目说明
核心概念
LLMChain
LLMChain 是最基础的链类型,它将一个提示模板和语言模型组合在一起:
// 创建提示模板
template := prompts.NewPromptTemplate(
"请为以下产品写一个创意广告语:{{.product}}",
[]string{"product"},
)
// 创建 LLMChain
chain := chains.NewLLMChain(llm, template)
// 执行链
result, err := chains.Call(ctx, chain, map[string]any{
"product": "智能手表",
})
SequentialChain
SequentialChain 允许将多个链按顺序组合,前一个链的输出作为后一个链的输入:
// 创建多个链
outlineChain := chains.NewLLMChain(llm, outlinePrompt)
contentChain := chains.NewLLMChain(llm, contentPrompt)
summaryChain := chains.NewLLMChain(llm, summaryPrompt)
// 组合成顺序链
sequentialChain := chains.NewSequentialChain([]chains.Chain{
outlineChain,
contentChain,
summaryChain,
})
演示案例
1. 文章写作助手
- 步骤1: 根据主题生成文章大纲
- 步骤2: 基于大纲扩展详细内容
- 步骤3: 为文章创建简洁总结
2. 客户服务流程
- 步骤1: 客户问题分类
- 步骤2: 生成解决方案
- 步骤3: 生成专业回复邮件
3. 产品分析系统
- 并行处理: 市场分析、技术分析、竞争分析
- 独立执行: 每个分析维度独立处理
4. 数据处理管道
- 步骤1: 数据验证
- 步骤2: 数据清洗
- 步骤3: 数据分析
- 错误处理: 每个步骤都包含错误检查
5. 条件处理系统
- 类型判断: 识别文本类型
- 条件分支: 根据类型选择不同处理路径
- 专业分析: 针对不同类型提供专业分析
最佳实践
- 错误处理: 每个链调用都应该检查错误
- 输入验证: 确保输入数据的类型和格式正确
- 输出键设置: 为每个链设置明确的输出键名
- 提示工程: 精心设计提示模板以获得更好的结果
- 资源管理: 合理使用 API 调用,避免不必要的请求
扩展功能
自定义链
项目还演示了如何创建自定义链类型:
type CustomChain struct {
llm llms.Model
inputKeys []string
outputKeys []string
name string
description string
}
并行处理
虽然 langchaingo 本身是顺序执行的,但项目展示了如何通过 goroutine 实现并行处理。
故障排除
常见问题
- API Key 错误: 确保设置了正确的
DEEPSEEK_API_KEY环境变量 - 网络连接: 确保可以访问 DeepSeek API
- 依赖问题: 运行
go mod tidy确保所有依赖都正确安装
调试模式
在代码中添加详细的日志输出来跟踪链的执行过程。
贡献
欢迎提交 Issue 和 Pull Request 来改进这个演示项目。
许可证
MIT License
无需 API Key 的演示
go run . -demo=structure # 代码结构说明 go run . -demo=simulate # 模拟完整工作流程
需要 API Key 的功能演示
go run . -demo=simple # 简单 DeepSeek 测试 go run . -demo=basic # 完整文章写作助手 go run . -demo=examples # 多种链类型演示 go run . -demo=advanced # 高级功能演示 go run . -demo=all # 运行所有演示