Skip to main content

LangChain Go 多步骤任务演示

这个项目演示了如何使用 langchaingo 实现 LLMChainSequentialChain 来构建复杂的多步骤任务处理系统。

功能特性

  • 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. 条件处理系统

  • 类型判断: 识别文本类型
  • 条件分支: 根据类型选择不同处理路径
  • 专业分析: 针对不同类型提供专业分析

最佳实践

  1. 错误处理: 每个链调用都应该检查错误
  2. 输入验证: 确保输入数据的类型和格式正确
  3. 输出键设置: 为每个链设置明确的输出键名
  4. 提示工程: 精心设计提示模板以获得更好的结果
  5. 资源管理: 合理使用 API 调用,避免不必要的请求

扩展功能

自定义链

项目还演示了如何创建自定义链类型:

type CustomChain struct {
llm llms.Model
inputKeys []string
outputKeys []string
name string
description string
}

并行处理

虽然 langchaingo 本身是顺序执行的,但项目展示了如何通过 goroutine 实现并行处理。

故障排除

常见问题

  1. API Key 错误: 确保设置了正确的 DEEPSEEK_API_KEY 环境变量
  2. 网络连接: 确保可以访问 DeepSeek API
  3. 依赖问题: 运行 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 # 运行所有演示