AI Agent白手起家19: LangChain 基本模块与第一个实例实战
纲要
- 快速回顾与环境准备
- 已有环境:Python 3.12+、虚拟环境、Jupyter(可选)
- 必装依赖:
langchain、langchain-openai、python-dotenv - API Key 配置与
.env文件
- LangChain 三大基础模块
- 大模型组件(
ChatOpenAI):创建大脑 - 提示词模板(
ChatPromptTemplate):动态化指令 - 输出解析器(
Output Parser):文本转结构化数据
- 大模型组件(
- 一步步构建第一个智能应用
- 任务描述:起名大师,根据国家和性别生成名字列表
- 代码演进过程
- 第 1 步:直接调用模型生成名字
- 第 2 步:引入提示词模板,参数化国家和性别
- 第 3 步:添加输出解析器,将结果强制转为列表
- 完整可运行代码
- 在线 IDE 辅助学习
- 免配置环境的优势与适用场景
- 本地开发与在线工具的配合使用建议
快速回顾与环境准备
在之前的章节中,我们已经了解了 LangChain 是什么,并完成了 Python 虚拟环境的搭建。如果你还没准备好,请确认以下几步:
- Python 版本 ≥ 3.8,推荐 3.12+。
- 创建并激活虚拟环境(避免依赖冲突)。
- 安装核心依赖:
pip install langchain langchain-openai python-dotenv
- 在项目根目录创建
.env文件,填写你的大模型 API Key。本示例以 OpenAI 的gpt-3.5-turbo为例,你也可以换成 DeepSeek、通义千问等任何 LangChain 支持的模型,只需修改对应的包和参数。
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_BASE_URL 是可选的,当你在国内网络环境下可能需要配置代理地址,或者使用兼容 OpenAI 接口的第三方服务。
LangChain 三大基础模块
任何 LangChain 应用都由三个核心模块串联而成:模型(Model)、提示词(Prompt) 和 输出解析器(Output Parser)。理解这三个模块,你就掌握了 LangChain 的骨架。
| 模块 | 作用 | LangChain 中常用类 |
|---|---|---|
| 大模型组件 | 接收提示并生成文本 | ChatOpenAI, ChatDeepSeek |
| 提示词模板 | 将指令参数化,动态构造提示 | ChatPromptTemplate |
| 输出解析器 | 把模型的自然语言回答转为结构化数据(列表、JSON 等) | StrOutputParser, CommaSeparatedListOutputParser, JsonOutputParser |
它们通过 LCEL(LangChain Expression Language)的管道符 | 串联成一个链(Chain),数据从左向右流动,清晰且易调试。
一步步构建第一个智能应用
我们的目标是实现一个“起名大师”应用:用户可以指定国家特色(如“中国”“美国”)和性别(男孩/女孩),模型返回多个符合该文化背景的名字,最终以 Python 列表的形式输出,便于后续程序消费。
下面我们通过代码的逐步演进,展示各个模块如何组合。
第 1 步:直接调用模型,生成名字
最原始的用法:硬编码一句提示词,调用模型得到文本结果。
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os
load_dotenv()
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7,
openai_api_key=os.getenv("OPENAI_API_KEY"),
openai_api_base=os.getenv("OPENAI_BASE_URL"),
)
response = llm.invoke("帮我起一个具有中国特色的男孩名字")
print(response.content) # 输出类似:狗剩
这种方法简单直接,但每次提问都要重新构造提示字符串,且返回的仍然是普通文本,不利于后续处理。
第 2 步:引入提示词模板
将提示中的可变部分(国家、性别)抽取为参数,使用 ChatPromptTemplate 动态组装。
from langchain_core.prompts import ChatPromptTemplate
# 定义模板,用 {变量名} 作为占位符
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的起名大师。"),
("human", "请帮我起一个具有{country}特色的{boy_or_girl}名字,只返回名字本身,不要多余解释。")
])
# 格式化提示
formatted = prompt.invoke({"country": "美国", "boy_or_girl": "男孩"})
print(formatted.to_messages())
此时,你只需改变传入的参数,就可以得到不同文化背景的名字提示。注意我们已经在提示中加了一条约束:“只返回名字本身,不要多余解释”,这能有效减少模型“废话”,为后续解析铺路。
第 3 步:加上输出解析器,获取结构化数据
如果希望一次生成多个名字,并且以 Python 列表形式返回,就需要输出解析器的帮助。LangChain 内置了 CommaSeparatedListOutputParser,它可以自动让模型输出逗号分隔的列表,然后解析成真正的列表对象。
from langchain_core.output_parsers import CommaSeparatedListOutputParser
parser = CommaSeparatedListOutputParser()
# 解析器会向提示中自动添加格式说明
print(parser.get_format_instructions())
# 输出:Your response should be a list of comma separated values, eg: `foo, bar, baz`
将这三个组件串联成链:
chain = prompt | llm | parser
result = chain.invoke({"country": "中国", "boy_or_girl": "男孩"})
print(result) # 比如:['狗蛋', '铁柱', '建国', '志强']
print(type(result)) # <class 'list'>
现在你得到的是干净的 Python 列表,可以直接插入数据库、返回给前端或参与后续逻辑。
完整可运行代码
整合以上步骤,保存为 name_master.py,确保 .env 文件配置正确,即可直接运行。
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import CommaSeparatedListOutputParser
# 加载配置
load_dotenv()
# 初始化模型
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7,
openai_api_key=os.getenv("OPENAI_API_KEY"),
openai_api_base=os.getenv("OPENAI_BASE_URL"),
)
# 提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的起名大师。"),
("human", "请帮我起4个具有{country}特色的{boy_or_girl}名字,"
"仅返回用逗号分隔的名字,不要序号,不要解释。\n{format_instructions}")
])
# 输出解析器
parser = CommaSeparatedListOutputParser()
# 构建链
chain = prompt | llm | parser
if __name__ == "__main__":
# 示例:起4个美国特色的男孩名字
params = {
"country": "美国",
"boy_or_girl": "男孩",
"format_instructions": parser.get_format_instructions(),
}
names = chain.invoke(params)
print("生成的名字列表:", names)
# 遍历使用
for i, name in enumerate(names, 1):
print(f"{i}. {name.strip()}")
运行结果示例:
生成的名字列表: ['James', 'William', 'Liam', 'Benjamin']
1. James
2. William
3. Liam
4. Benjamin
如果遇到网络问题,可以尝试将 model 切换为国内可访问的模型,或者调整 temperature 参数观察生成结果的变化。temperature=0 会让结果更确定,适合对一致性要求高的场景;temperature=0.7~1.0 则赋予模型更大的创造自由。
在线 IDE 辅助学习
对于不想折腾本地环境的初学者,市面上也出现了一些在线 AI 开发平台,它们预装了 LangChain、Python 环境和常用依赖,打开浏览器即可编写和运行代码。这类工具的优势在于“零配置”,非常适合快速体验课程示例、验证想法。但受资源和安全限制,这类平台通常不支持异步流式输出、多线程等高级特性,因此完整的学习路径仍建议回归本地开发。
无论你选择哪种方式,LangChain 的核心模块和用法都完全一致。你可以先在在线 IDE 中跑通第一个链,再逐步迁移到本地,为后续构建 Agent、RAG 等复杂应用打下基础。
更多推荐


所有评论(0)