当前位置: 首页 > news >正文

案例实战LangChain的核武器-chain

文章目录

    • 1. 链式组合(Sequential Chains)
      • 案例:文本总结+翻译组合链
    • 2. 路由链(Router Chains)
      • 案例:领域专家路由系统
    • 3. 代码生成与验证链
      • 案例:AI代码生成+语法检查
    • 对比总结

本文将介绍LangChain框架中最核心的Chain组件,通过三个渐进式案例展示如何构建高效的大语言模型工作流。我们将从简单的链式组合开始,逐步深入到路由逻辑和代码生成检查的复杂场景。

1. 链式组合(Sequential Chains)

顺序执行链
本质:函数式编程的compose操作
核心:数据流单向管道(A→B→C)
一句话:“LLM版的UNIX管道”

案例:文本总结+翻译组合链

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI# 初始化模型
llm = ChatOpenAI(base_url="https://api.deepseek.com/", api_key="your-api-key",model="deepseek-chat")# 1. 总结链
summary_chain = (ChatPromptTemplate.from_template("用一句话总结:{text}")| llm
)# 2. 翻译链
translation_chain = (ChatPromptTemplate.from_template("翻译成中文:{text}")| llm
)# 组合链(管道操作)
report_chain = summary_chain | translation_chain# 执行
english_text = "LangChain provides tools to build LLM-powered applications."
result = report_chain.invoke({"text": english_text})
print(result.content)

关键点:

  • 使用|管道符连接多个链
  • 前一个链的输出自动作为下一个链的输入
  • 适合线性任务流(如:总结→翻译→格式化)

2. 路由链(Router Chains)

选择链
本质:模式匹配的状态机
核心:(输入→谓词)→目标链的映射
一句话:“LLM流量控制器”

案例:领域专家路由系统

from langchain_core.runnables import RunnableBranch# 定义领域专家链
physics_chain = (ChatPromptTemplate.from_template("你是一个物理学家,请专业回答:{input}")| llm
)math_chain = (ChatPromptTemplate.from_template("你是一个数学家,请分步骤解答:{input}")| llm
)general_chain = (ChatPromptTemplate.from_template("回答这个问题:{input}")| llm
)# 构建路由逻辑
router_chain = RunnableBranch((lambda x: "物理" in x["input"], physics_chain),(lambda x: "数学" in x["input"], math_chain),general_chain  # 默认链
)# 测试
questions = [{"input": "解释相对论"},      # 路由到物理链{"input": "解方程x^2=4"},    # 路由到数学链{"input": "如何煮咖啡"}       # 路由到通用链
]
for q in questions:print(router_chain.invoke(q))

关键点:

  • RunnableBranch实现条件路由
  • 每个分支可定制不同的prompt模板
  • 适合多场景分流(如客服、教育领域)

3. 代码生成与验证链

让chain执行自定义接口
本质:编译器前端简化版
核心:生成→解析→沙箱三级流水线
一句话:“AI时代的编译器”

案例:AI代码生成+语法检查

from langchain_core.runnables import RunnableLambda
import ast, re# 代码生成链
code_chain = (ChatPromptTemplate.from_template("用Python实现:{task}")| llm| {"code": RunnablePassthrough()}  # 保留原始输出
)# 语法检查函数
def syntax_check(code_dict):try:content = code_dict["code"].contentcode_match = re.search(r'```python\n(.*?)\n```', content, re.DOTALL)if code_match:code = code_match.group(1)ast.parse(code)  # 语法验证return {"status": "VALID", "code": code}return {"status": "INVALID: No code block"}except SyntaxError as e:return {"status": f"INVALID: {e}"}# 组合链
full_chain = code_chain | RunnableLambda(syntax_check)# 测试
result = full_chain.invoke({"task": "快速排序函数"})
if result["status"] == "VALID":print("生成的代码:\n", result["code"])
else:print("错误:", result["status"])

关键点:

  • RunnableLambda实现自定义处理逻辑
  • 正则表达式提取Markdown代码块
  • ast.parse进行Python语法验证
  • 适合代码生成类场景的完整流水线

对比总结

功能类型适用场景核心组件案例亮点
链式组合线性多步骤任务管道符``
路由链多分支条件逻辑RunnableBranch领域专家路由
验证链输入/输出处理与校验RunnableLambda代码生成+语法检查

相关文章:

  • WPS JS宏编程教程(从基础到进阶)-- 第七部分:JS对象在WPS中的应用
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day13
  • 泛微相关文档以及相关安装包下载
  • 软考中级-软件设计师 2022年上半年下午题真题解析:通关秘籍+避坑指南
  • 编程行业语言学习与竞争剖析:探寻冷门中的机遇
  • 在Linux的top命令输出中,各列的含义
  • 复变函数摘记3
  • Wan2.1 文生视频 Wan2.1-T2V-14B-Diffusers
  • 深度学习--激活函数
  • 【Bluedroid】A2DP Sink播放流程源码分析(二)
  • 关于在Spring Boot + SpringSecurity工程中Sercurity上下文对象无法传递至新线程的问题解决
  • 高级语言调用C接口(二)回调函数(3)C#
  • 智慧生态评估体系构建与三维可视化实践——基于多源数据融合的内蒙古风电场生态效应研究
  • 杰理10k3950温度测量
  • 3.数组(随想录)
  • C语言学习之sizeof函数和strlen函数
  • 【Code】《代码整洁之道》笔记-Chapter17-味道与启发
  • 云服务器和物理服务器有什么区别
  • 2025年3月,再上中科院1区TOP,“等级熵+状态识别、故障诊断”
  • 制作一款打飞机游戏教程6:射击优化
  • 大学2025丨浙大哲学院院长王俊:文科的价值不在于直接创造GDP
  • 人民热评:大尺度色情语聊、撮合卖淫,社交APP岂止跑偏
  • 南阳市委副书记、政法委书记金浩任内落马
  • 第六次国民体质监测展开,高抬腿俯卧撑等新增运动指标受关注
  • 多元布局、抱团取暖……上海虹口区召开外向型企业圆桌会议
  • 法官颁布紧急临时禁止令,中国留学生诉美国政府“首战胜利”