news 2026/8/15 12:52:52

AI Agent从无到有19:LangChain 核心模块与首个链式应用实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Agent从无到有19:LangChain 核心模块与首个链式应用实战

纲要

  • 环境准备与基础依赖
    • Python 版本要求与虚拟环境配置
    • 核心依赖包:langchainlangchain-openailangchain-corepython-dotenv
    • 环境变量配置:OPENAI_API_KEYOPENAI_BASE_URL
  • LangChain 三大基础模块
    • 大模型组件(ChatOpenAI):应用的大脑
    • 提示词模板(ChatPromptTemplate):指令参数化与动态构建
    • 输出解析器(CommaSeparatedListOutputParser):从文本到结构化数据
  • 构建首个链式应用:起名大师
    • 任务定义:基于国家与性别生成文化适配的名字列表
    • 代码演进:
      1. 直接调用模型
      2. 引入提示词模板进行参数化
      3. 集成输出解析器以获取结构化结果
    • 完整可运行示例
  • 开发环境选项
    • 在线 IDE 的优势与局限
    • 本地开发环境的推荐实践

环境准备与基础依赖

在开始构建 LangChain 应用之前,需要确保 Python 环境就绪。推荐使用 Python 3.12 或更高版本,并创建一个独立的虚拟环境以隔离项目依赖。

安装核心依赖

使用pip安装以下必需的包:

pipinstalllangchain langchain-openai langchain-core python-dotenv
  • langchain:核心框架库。
  • langchain-openai:OpenAI 模型的 LangChain 集成。
  • langchain-core:包含基础抽象类和核心组件。
  • python-dotenv:用于从.env文件加载环境变量。

配置 API 密钥

在项目根目录下创建.env文件,并添加以下内容:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx OPENAI_BASE_URL=https://api.openai.com/v1

OPENAI_API_KEY是必填项。OPENAI_BASE_URL为可选配置,在需要代理或使用兼容 OpenAI 接口的第三方服务(如 DeepSeek、通义千问等)时可进行设置。

LangChain 三大基础模块

LangChain 应用的核心架构由三个基础模块串联而成:大模型组件、提示词模板和输出解析器。理解这三者的职责是掌握 LangChain 开发范式的关键。

模块作用常用类
大模型组件接收提示词并生成文本回复ChatOpenAI
提示词模板将指令参数化,动态构造提示词ChatPromptTemplate
输出解析器将模型的自然语言输出转换为结构化数据(如列表、JSON)CommaSeparatedListOutputParser,JsonOutputParser

这三个模块通过 LangChain 表达式语言(LCEL)的管道符|进行串联。数据在链(Chain)中从左至右依次流经各模块,形成清晰的处理流程。

用户输入参数

Prompt 模板格式化

LLM 调用

Output Parser 解析

结构化结果

构建首个链式应用:起名大师

本部分将通过一个“起名大师”应用的开发过程,演示上述三个模块如何协同工作。该应用根据指定的国家文化和性别,生成一组符合背景的名字,并以 Python 列表形式输出。

第 1 步:直接调用模型

最基础的方式是直接实例化模型对象,并向其发送硬编码的提示词。

fromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenvimportos 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将提示中的可变部分抽取为参数,实现提示词的动态构建。

fromlangchain_core.promptsimportChatPromptTemplate prompt=ChatPromptTemplate.from_messages([("system","你是一个专业的起名大师。"),("human","请帮我起一个具有{country}特色的{boy_or_girl}名字,只返回名字本身,不要多余解释。")])formatted_prompt=prompt.invoke({"country":"美国","boy_or_girl":"男孩"})print(formatted_prompt.to_messages())

通过这种方式,可以通过改变传入参数字典轻松适配不同场景。注意提示中已添加了对输出格式的约束(“只返回名字本身”),这有助于简化后续解析工作。

第 3 步:集成输出解析器

为了生成多个名字并获得结构化输出,可以使用CommaSeparatedListOutputParser。该解析器会引导模型以逗号分隔的格式返回结果,并将其自动转换为 Python 列表。

fromlangchain_core.output_parsersimportCommaSeparatedListOutputParser parser=CommaSeparatedListOutputParser()print(parser.get_format_instructions())

get_format_instructions()方法会生成一段格式说明,告知模型应以何种格式返回数据。我们需要在提示词中引用这段说明。

将三者通过 LCEL 串联成链:

chain=prompt|llm|parser result=chain.invoke({"country":"中国","boy_or_girl":"男孩","format_instructions":parser.get_format_instructions()})print(result)# 输出:['狗蛋', '铁柱', '建国', '志强']print(type(result))# <class 'list'>

至此,我们完成了一个完整的链式应用。它接收参数,通过动态提示词调用模型,并最终输出结构化数据。

完整可运行代码

将以下代码保存为name_master.py,并在确保.env文件配置正确后运行。

importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportCommaSeparatedListOutputParser 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|parserif__name__=="__main__":params={"country":"美国","boy_or_girl":"男孩","format_instructions":parser.get_format_instructions(),}names=chain.invoke(params)print("生成的名字列表:",names)fori,nameinenumerate(names,1):print(f"{i}.{name.strip()}")

运行结果示例:

生成的名字列表: ['James', 'William', 'Liam', 'Benjamin'] 1. James 2. William 3. Liam 4. Benjamin

若遇到网络连接问题,可考虑更换为国内可访问的模型端点,或调整temperature参数。temperature值越低(如 0.0),生成结果越确定;值越高(如 0.9),创造性越强。

开发环境选项

对于初学者,在线 AI 开发平台(如 Google Colab 等)提供了“零配置”的便利性,预装了主流库并支持浏览器内运行。这适合快速验证原型或进行小型实验。

然而,在线环境通常存在资源限制,且可能不支持异步流式输出、多线程等高级特性。推荐的学习路径是先通过在线环境熟悉核心 API,再迁移至本地开发环境,以便充分利用调试工具和系统资源,为构建更复杂的 Agent 或 RAG 应用打下基础。

API 速览

langchain_openai.ChatOpenAI

OpenAI 大语言模型的 LangChain 集成类。

  • 所属库:langchain-openai
  • 方法签名:ChatOpenAI(model: str, temperature: float, openai_api_key: str, openai_api_base: Optional[str] = None)
  • 关键参数:
    • model(str): 模型名称,如gpt-3.5-turbo,gpt-4
    • temperature(float): 控制生成随机性,取值范围 0.0 到 1.0。
    • openai_api_key(str): OpenAI API 密钥。
    • openai_api_base(str, optional): API 基础 URL,用于自定义端点或代理。
  • 常用方法:invoke(input: str) -> BaseMessage,用于发送提示并获取响应。

langchain_core.prompts.ChatPromptTemplate

用于创建多轮对话提示词模板的类。

  • 所属库:langchain-core
  • 创建方法:from_messages(messages: List[Tuple[str, str]]) -> ChatPromptTemplate
  • 参数: 消息列表,每个元素为(角色, 内容)元组。内容中可使用{变量名}作为占位符。
  • 常用方法:invoke(kwargs: dict) -> PromptValue,传入参数字典,返回格式化后的提示词对象。

langchain_core.output_parsers.CommaSeparatedListOutputParser

将模型输出的逗号分隔列表解析为 Python 列表的解析器。

  • 所属库:langchain-core
  • 方法:get_format_instructions() -> str,返回用于指导模型输出格式的说明文本。
  • 解析: 当链被调用时,该解析器会自动将模型的字符串输出转换为List[str]
  • 版本:langchain-core>= 0.1.0。

参考文档

官方文档

  • LangChain 官方文档
  • LangChain 核心概念指南
  • LangChain LCEL 文档

参考链接

  • OpenAI API 文档
  • python-dotenv 项目地址

总结

本文系统梳理了 LangChain 的三大核心基础模块——模型、提示词模板与输出解析器,并通过一个“起名大师”的实战案例,演示了如何通过 LCEL 将它们组合成一个可运行的链式应用。

我们明确了各模块的职责分工,并提供了从基础调用到结构化输出的完整代码演进过程。文章强调了对提示词模板进行参数化以提升灵活性,以及利用输出解析器将模型输出转换为程序可消费的结构化数据,这是构建可靠 AI 应用的关键环节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 12:47:52

告别14天倒计时:三步让Navicat的试用窗口一直刷新

告别14天倒计时&#xff1a;三步让Navicat的试用窗口一直刷新 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac macOS 用户请注…

作者头像 李华
网站建设 2026/8/15 12:47:41

AOSP 概述介绍

一、本书内容概览 全书共 67 个章节,自底向上逐层拆解 Android 完整系统架构,分卷内容如下: 表格 分卷板块 对应章节 核心主题 前言卷 0 卷首前言 第一部分 1 系统整体概述 第一部分 2 源码与编译系统(Soong/Bazel/Kleaf) 第一部分 3 功能特性控制开关(aconfig) 第二部…

作者头像 李华
网站建设 2026/8/15 12:45:22

基于LangChain Agent构建智能代码助手:从原理到实战

1. 项目概述&#xff1a;为什么我们需要一个代码助手 Agent&#xff1f;如果你和我一样&#xff0c;日常开发中总在重复着一些“体力活”&#xff1a;比如&#xff0c;写一个复杂的 SQL 查询&#xff0c;需要反复调试&#xff1b;或者&#xff0c;想用 Python 的某个库实现一个…

作者头像 李华