LangChain教程-2、Langchian基础(二)
作者:admin | 分类:顶尖机器人 | 浏览:3 | 日期:2026年03月26日一、LangChain核心组件深度解析
在上一篇基础教程中,我们初步认识了LangChain的整体架构,这一篇我们将深入拆解其核心组件,理解它们如何协同工作构建强大的LLM应用。
(一)模型层(Models):LLM应用的核心大脑
模型层是LangChain的核心,它提供了统一的接口来调用不同的大语言模型,无论是OpenAI的GPT系列、Anthropic的Claude,还是本地部署的LLaMA等模型,都可以通过LangChain的标准化方式进行调用。这意味着开发者无需为不同模型学习不同的API调用方式,极大降低了学习成本和迁移成本。
例如,调用OpenAI的GPT-3.5-turbo模型只需几行代码:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="你的API密钥")
response = llm.invoke("请解释一下LangChain的核心优势")
print(response.content)
如果后续需要切换到Anthropic的Claude模型,只需修改模型初始化的代码,其余业务逻辑无需改动。
(二)提示词管理(Prompts):引导LLM输出的关键
提示词是与大语言模型交互的核心,LangChain提供了强大的提示词管理功能,包括提示词模板、动态提示词生成等。提示词模板允许开发者将固定的提示词结构与动态变量结合,既保证了提示词的规范性,又提升了灵活性。
比如创建一个生成公司名称的提示词模板:
from langchain_core.prompts import PromptTemplate
template = "我想让你扮演一个公司命名顾问。请为一家生产{product}的公司起一个有创意的名字。"
prompt = PromptTemplate(input_variables=["product"], template=template)
formatted_prompt = prompt.format(product="智能机器人")
print(formatted_prompt)
运行这段代码,会生成"我想让你扮演一个公司命名顾问。请为一家生产智能机器人的公司起一个有创意的名字。"这样的提示词,通过替换product变量,可以轻松适配不同的产品命名需求。
(三)输出解析器(Output Parsers):让LLM输出结构化
大语言模型的输出通常是自然语言文本,但在实际应用中,我们往往需要结构化的数据,比如JSON、字典或者自定义的数据类。LangChain的输出解析器可以将LLM的非结构化输出转换为结构化数据,方便后续的业务处理。
例如,我们可以定义一个订单信息的数据类,并使用输出解析器从LLM输出中提取结构化的订单信息:
from langchain_core.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
class OrderInfo(BaseModel):
order_id: str = Field(description="订单编号")
order_type: str = Field(description="订单类型")
user_demand: str = Field(description="用户诉求")
parser = PydanticOutputParser(pydantic_object=OrderInfo)
# 构造包含格式要求的提示词
prompt = PromptTemplate(
template="请从以下文本中提取订单信息:{text}\n{format_instructions}",
input_variables=["text"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
formatted_prompt = prompt.format(text="用户查询订单123456的物流状态,这是一个物流咨询订单。")
# 调用LLM并解析输出
response = llm.invoke(formatted_prompt)
order_info = parser.parse(response.content)
print(order_info.order_id) # 输出:123456
二、链(Chains):组件的协同工作
链是LangChain的核心概念之一,它将多个组件(模型、提示词、输出解析器等)串联起来,形成一个完整的工作流程。通过链,我们可以实现复杂的业务逻辑,比如先使用提示词模板生成问题,再调用LLM生成回答,最后使用输出解析器处理结果。
最简单的链是LLMChain,它将提示词模板和LLM结合起来:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(product="智能机器人")
print(result)
除了LLMChain,LangChain还提供了SequentialChain(顺序链)、RouterChain(路由链)等多种链类型,满足不同的业务需求。例如,SequentialChain可以将多个链按顺序执行,前一个链的输出作为后一个链的输入,实现复杂的多步骤任务。
三、实战:构建简单的问答系统
现在我们将结合以上组件,构建一个简单的问答系统。该系统将接收用户的问题,使用提示词模板格式化问题,调用LLM生成回答,并将结果返回给用户。
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# 初始化模型
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="你的API密钥")
# 创建提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个知识渊博的问答专家,能够准确回答用户的各种问题。"),
("user", "{question}")
])
# 创建输出解析器
parser = StrOutputParser()
# 构建链
chain = prompt | llm | parser
# 运行链
result = chain.invoke({"question": "LangChain适合用来构建哪些类型的应用?"})
print(result)
运行这段代码,系统会调用LLM回答关于LangChain应用场景的问题,并将结果以字符串形式返回。