LangChain 中的链:Chain

   LangChain 中的 Chain(链) 是其最核心的组件之一,可以把它理解为一个可编排、可复用、按顺序执行的任务流水线

简单来说,Chain 允许把“调用大模型”、“检索文档”、“处理文本”等多个步骤串联起来,上一个步骤的输出自动成为下一个步骤的输入。这让你能像搭积木一样,构建出从简单问答到复杂知识库检索等各式各样的 AI 应用。

链条怎么搭

目前的 LangChain 推荐使用一种函数式编程风格的LCEL(LangChain 表达式语言) 来构建链。它使用管道符 | 将不同组件连接起来,代码非常简洁直观。

1. 基础单步链:最简单的“一问一答”

这是最基础的用法,将一个提示模板(Prompt)和模型(Model)连接起来。

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

# 1. 定义提示模板
prompt = PromptTemplate.from_template("为'{city}'这个城市写一句旅游宣传语。")

# 2. 定义模型
model = ChatOpenAI(model="gpt-3.5-turbo")

# 3. 用 | 运算符构建链
chain = prompt | model

# 4. 运行链
response = chain.invoke({"city": "成都"})
print(response.content) # 例如:输出“成都,一座来了就不想走的城市。”
2. 顺序链:搭积木式组合

这是最常用的模式,能实现更复杂的工作流,例如“先生成一份大纲,再根据大纲扩写成完整文章”。

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-3.5-turbo")

# 步骤 1: 生成大纲的链
outline_prompt = PromptTemplate.from_template("为'{topic}'写一份文章大纲")
outline_chain = outline_prompt | model

# 步骤 2: 根据大纲扩写文章的链
article_prompt = PromptTemplate.from_template("根据下面的大纲,写一篇完整的文章:\n\n大纲: {outline}")
article_chain = article_prompt | model

# 将两个链组合起来
full_chain = outline_chain | (lambda x: {"outline": x.content}) | article_chain

# 运行
result = full_chain.invoke({"topic": "人工智能发展史"})
print(result.content)
3. RAG 检索链:让模型“开卷考试”

这是目前最主流的用法之一,让模型先从一个知识库(如向量数据库)中检索相关文档,再根据这些文档来回答问题,可以有效减少“幻觉”。

from langchain_openai import ChatOpenAI
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain

# 假设已有一个 retriever(检索器)
retriever = ... 

model = ChatOpenAI(model="gpt-3.5-turbo")

# 1. 定义“整合文档并提问”的链
combine_chain = create_stuff_documents_chain(model, prompt)

# 2. 创建最终的 RAG 检索链
rag_chain = create_retrieval_chain(retriever, combine_chain)

# 3. 运行链
response = rag_chain.invoke({"input": "根据文档,2026年公司的主要战略是什么?"})
print(response["answer"])

Chain 的主要类型

除了 LCEL,LangChain 也保留了更显式的链类型,以应对特定场景。

链类型核心原理适用场景
LLMChain最基础的链,直接将提示模板语言模型组合。单一的LLM调用任务。
顺序链 (SequentialChain)固定顺序执行多个链,上一个的输出是下一个的输入。线性、多步骤的任务,如内容提炼、翻译、代码生成流水线。
路由链 (RouterChain)根据输入内容动态选择后续的子链来执行。多领域问答、客户服务分流等需要条件分支的场景。
检索链 (RetrievalQA)先从向量库检索相关文档,再将这些文档作为上下文交给LLM生成答案。构建基于私有数据的问答系统(RAG应用)。
转换链 (TransformChain)用于在链中对数据进行清洗、格式化等预处理后处理清洗用户输入、解析LLM的输出为特定格式(如JSON)。

Chain 这种模块化设计,可以轻松地构建、调试和维护复杂的 AI 应用。它最大的价值在于,将“模型的强大推理能力”与“具体的业务逻辑”完美地衔接了起来。

如果正在用 LangChain 开发,建议优先使用 LCEL 语法。

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值