元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
LangChain简介
什么是LangChain
核心概念解析
典型应用场景
▶
环境搭建
Python环境配置
安装LangChain
开发工具准备
▶
快速入门
第一个示例程序
示例分步解析
代码结构说明
▶
核心组件
Models组件
Prompts模板
Chains工作流
▶
模型集成
OpenAI集成
HuggingFace接入
▶
Chain实战
简单Chain构建
Sequential Chain
▶
记忆管理
对话记忆原理
记忆存储实现
▶
应用案例
智能问答系统
文档摘要生成
▶
调试技巧
常见错误排查
日志记录分析
▶
后续学习
学习路线图
官方资源推荐
发布时间:
2025-03-29 18:54
↑
☰
# Chains工作流详解 本文将详细介绍LangChain中的Chains工作流组件,帮助你理解和使用不同类型的Chain来构建复杂的处理流程。 ## 什么是Chain Chain是LangChain中的核心概念,它允许我们将多个组件(如LLMs、Prompts、其他Chains等)连接在一起,形成一个完整的处理流程。 ## Chain类型 ### 1. LLMChain 最基础的Chain类型,将Prompt和LLM结合: ```python from langchain.chains import LLMChain from langchain.llms import OpenAI from langchain.prompts import PromptTemplate # 创建提示模板 template = "请用{style}的语气介绍{topic}" prompt = PromptTemplate( input_variables=["style", "topic"], template=template ) # 创建Chain llm = OpenAI(temperature=0.7) chain = LLMChain( llm=llm, prompt=prompt ) # 运行Chain result = chain.run(style="专业", topic="人工智能") print(result) ``` ### 2. SimpleSequentialChain 将多个Chain按顺序连接: ```python from langchain.chains import SimpleSequentialChain # 创建第一个Chain prompt1 = PromptTemplate( input_variables=["topic"], template="给出{topic}的三个关键点" ) chain1 = LLMChain(llm=llm, prompt=prompt1) # 创建第二个Chain prompt2 = PromptTemplate( input_variables=["points"], template="基于这些要点详细展开:{points}" ) chain2 = LLMChain(llm=llm, prompt=prompt2) # 组合Chains overall_chain = SimpleSequentialChain( chains=[chain1, chain2], verbose=True ) # 运行组合Chain result = overall_chain.run("机器学习") ``` ### 3. SequentialChain 更灵活的序列Chain,支持多个输入输出: ```python from langchain.chains import SequentialChain # 第一个Chain:生成主题大纲 outline_chain = LLMChain( llm=llm, prompt=PromptTemplate( input_variables=["topic"], template="为{topic}创建一个大纲" ), output_key="outline" ) # 第二个Chain:生成内容 content_chain = LLMChain( llm=llm, prompt=PromptTemplate( input_variables=["outline", "style"], template="根据大纲{outline},用{style}风格写一篇文章" ), output_key="article" ) # 组合Chains chain = SequentialChain( chains=[outline_chain, content_chain], input_variables=["topic", "style"], output_variables=["outline", "article"] ) # 运行Chain result = chain({"topic": "Python编程", "style": "通俗易懂"}) print("大纲:", result["outline"]) print("文章:", result["article"]) ``` ### 4. RouterChain 根据输入选择不同的处理流程: ```python from langchain.chains.router import RouterChain from langchain.chains.router.llm_router import LLMRouterChain from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE # 创建不同的处理Chain math_chain = LLMChain(llm=llm, prompt=math_prompt) physics_chain = LLMChain(llm=llm, prompt=physics_prompt) # 创建路由Chain destination_chains = { "math": math_chain, "physics": physics_chain } router_chain = LLMRouterChain.from_llm(llm) chain = RouterChain( router_chain=router_chain, destination_chains=destination_chains, default_chain=default_chain ) # 使用路由Chain response = chain.run("求解二次方程") ``` ## 高级用法 ### 1. 自定义Chain ```python from langchain.chains.base import Chain from typing import Dict, List class CustomChain(Chain): prompt: PromptTemplate llm: BaseLanguageModel @property def input_keys(self) -> List[str]: return self.prompt.input_variables @property def output_keys(self) -> List[str]: return ["text"] def _call(self, inputs: Dict[str, str]) -> Dict[str, str]: # 实现Chain的核心逻辑 prompt_value = self.prompt.format(**inputs) response = self.llm(prompt_value) return {"text": response} ``` ### 2. Chain组合模式 ```python from langchain.chains import TransformChain, LLMChain # 数据转换Chain def transform_func(inputs: dict) -> dict: text = inputs["text"] transformed = text.upper() return {"transformed_text": transformed} transform_chain = TransformChain( input_variables=["text"], output_variables=["transformed_text"], transform=transform_func ) # 组合转换和LLM Chain final_chain = SimpleSequentialChain( chains=[transform_chain, llm_chain] ) ``` ## 最佳实践 ### 1. Chain设计原则 1. **单一职责** - 每个Chain专注一个任务 - 便于复用和维护 - 易于测试和调试 2. **模块化组合** - 合理拆分任务 - 灵活组装流程 - 支持配置变更 ### 2. 错误处理 ```python from langchain.chains import LLMChain def run_chain_safely(chain: LLMChain, **kwargs) -> str: try: return chain.run(**kwargs) except Exception as e: print(f"Chain运行错误:{e}") return "" ``` ### 3. 性能优化 1. **并行处理** ```python from concurrent.futures import ThreadPoolExecutor def parallel_chain_run(chains, inputs): with ThreadPoolExecutor() as executor: futures = [executor.submit(chain.run, **input_) for chain, input_ in zip(chains, inputs)] return [f.result() for f in futures] ``` 2. **缓存结果** ```python from functools import lru_cache @lru_cache(maxsize=100) def cached_chain_run(chain, **kwargs): return chain.run(**kwargs) ``` ## 总结 Chains是LangChain中最强大的功能之一: - 支持多种Chain类型 - 灵活的组合方式 - 强大的扩展能力 - 完善的错误处理 掌握Chains的使用,将帮助你构建更复杂和强大的AI应用。