LangChain 快速入门:从环境搭建到链式调用实战
LangChain 框架的快速入门方法,涵盖环境安装、API 密钥配置及核心组件的使用。详细讲解了 LLM 与 ChatModel 的区别、Prompt 模板的构建技巧、Output Parser 的自定义实现以及 LCEL 链式调用的实战代码。文章去除了无关的广告引流内容,专注于技术原理与代码逻辑,适合希望从零开始构建大模型应用的开发者参考。

LangChain 框架的快速入门方法,涵盖环境安装、API 密钥配置及核心组件的使用。详细讲解了 LLM 与 ChatModel 的区别、Prompt 模板的构建技巧、Output Parser 的自定义实现以及 LCEL 链式调用的实战代码。文章去除了无关的广告引流内容,专注于技术原理与代码逻辑,适合希望从零开始构建大模型应用的开发者参考。

在开始构建基于大语言模型(LLM)的应用之前,理解基础架构至关重要。快速入门的过程类似于安装家庭防盗门,需要经历几个关键步骤:安装硬件、设置密码、测试功能。对应到软件开发领域,这通常意味着:
对于 LangChain 框架,前两个步骤与常规 Python 项目无异,核心难点在于如何高效地编写 Demo 并理解其组件间的交互。本文旨在通过类比和实战代码,帮助开发者快速掌握 LangChain 的核心架构与使用方法。
要开始使用 LangChain,首先需要安装相应的 Python 包。推荐使用虚拟环境(如 venv 或 conda)来隔离依赖。
pip install langchain
conda install langchain -c conda-forge
注意: 建议查阅官方文档获取最新的安装指南,因为依赖项可能会随版本更新而变化。
LangChain 通常需要与外部模型提供者(如 OpenAI)、数据存储或 API 进行集成。本教程以 OpenAI 的模型 API 为例。
首先安装用于连接 OpenAI 服务的 Python 包:
pip install openai
访问 API 需要一个有效的密钥。请前往 OpenAI 官网创建账户并获取密钥。
推荐方式:环境变量 为了安全起见,建议将密钥设置为环境变量,避免硬编码在代码中:
export OPENAI_API_KEY="your_api_key_here"
备选方式:直接传递 如果在初始化时直接传递密钥,请注意不要将包含密钥的代码上传至公共仓库:
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="your_api_key_here")
LangChain 提供了丰富的模块来构建语言模型应用。这些模块既可以作为独立组件使用,也可以组合成复杂的链路。
LLMChain 是 LangChain 应用程序的核心,它结合了三个关键方面:
本文将逐一介绍这三个组件,并演示如何将它们组合在一起。
LangChain 主要支持两种类型的语言模型接口:
ChatModels 中的 Message 对象基于 BaseMessage 接口,包含两个必需属性:
content: 消息的具体内容。role: 消息的角色标识。LangChain 预定义了以下角色类:
HumanMessage: 用户发送的消息。AIMessage: AI 助手回复的消息。SystemMessage: 系统设定的指令或上下文。FunctionMessage / ToolMessage: 函数调用相关的消息。如果预定义角色不适用,可以使用 ChatMessage 手动指定角色。
所有 LangChain 表达式语言 (LCEL) 对象都提供标准的 .invoke() 方法:
LLM.invoke(): 接受字符串,返回字符串。ChatModel.invoke(): 接受 BaseMessage 列表,返回 BaseMessage。from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
# 初始化模型
llm = OpenAI()
chat_model = ChatOpenAI()
# 准备输入
text = "What would be a good company name for a company that makes colorful socks?"
messages = [HumanMessage(content=text)]
# 调用模型
print(llm.invoke(text))
# 输出示例:Feetful of Fun
print(chat_model.invoke(messages))
# 输出示例:AIMessage(content="Socks O'Color")
提示:
OpenAI和ChatOpenAI对象本质上是配置对象。可以通过temperature等参数调整模型的随机性和创造性。
大多数生产级应用不会直接将用户输入传递给 LLM。通常需要将用户输入嵌入到一个更大的文本片段中,即提示模板(Prompt Template),以提供任务所需的额外上下文。
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")
formatted_prompt = prompt.format(product="colorful socks")
print(formatted_prompt)
# 输出:What is a good name for a company that makes colorful socks?
使用模板的优势包括:
对于 ChatModels,通常使用 ChatPromptTemplate,它由一系列 ChatMessageTemplate 组成,每个模板定义了一条消息的角色和内容。
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
template = "You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
formatted_messages = chat_prompt.format_messages(input_language="English", output_language="French", text="I love programming.")
print(formatted_messages)
# 输出:[SystemMessage(...), HumanMessage(...)]
OutputParsers 负责将 LLM 的原始文本输出转换为程序可处理的格式。常见的类型包括:
在本例中,我们将创建一个简单的解析器,将逗号分隔的字符串转换为列表。
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
"""Parse the output of an LLM call to a comma-separated list."""
def parse(self, text: str):
"""Parse the output of an LLM call."""
return text.strip().split(", ")
parser = CommaSeparatedListOutputParser()
result = parser.parse("hi, bye")
print(result)
# 输出:['hi', 'bye']
LangChain Expression Language (LCEL) 提供了一种声明式的方式来组合组件。通过链(Chain),我们可以将输入变量传递给提示模板,生成提示,发送给 LLM,最后通过输出解析器处理结果。
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
def parse(self, text: str):
return text.strip().split(", ")
template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_message_prompt = HumanMessagePromptTemplate.from_template("{text}")
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
llm=ChatOpenAI(),
prompt=chat_prompt,
output_parser=CommaSeparatedListOutputParser()
)
response = chain.run("colors")
print(response)
# 输出示例:['red', 'blue', 'green', 'yellow', 'orange']
通过上述步骤,我们完成了从环境配置到构建简单 LangChain 应用的全过程。以下是开发过程中的一些最佳实践建议:
掌握这些核心概念后,您可以进一步探索 LangGraph、RAG(检索增强生成)以及 Agent 等高级特性,构建更复杂的企业级 AI 应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online