ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/8/15 12:52:54 拓冰建站 浏览量
AI Agent从无到有19:LangChain 核心模块与首个链式应用实战 纲要环境准备与基础依赖Python 版本要求与虚拟环境配置核心依赖包langchain、langchain-openai、langchain-core、python-dotenv环境变量配置OPENAI_API_KEY与OPENAI_BASE_URLLangChain 三大基础模块大模型组件ChatOpenAI应用的大脑提示词模板ChatPromptTemplate指令参数化与动态构建输出解析器CommaSeparatedListOutputParser从文本到结构化数据构建首个链式应用起名大师任务定义基于国家与性别生成文化适配的名字列表代码演进直接调用模型引入提示词模板进行参数化集成输出解析器以获取结构化结果完整可运行示例开发环境选项在线 IDE 的优势与局限本地开发环境的推荐实践环境准备与基础依赖在开始构建 LangChain 应用之前需要确保 Python 环境就绪。推荐使用 Python 3.12 或更高版本并创建一个独立的虚拟环境以隔离项目依赖。安装核心依赖使用pip安装以下必需的包pipinstalllangchain langchain-openai langchain-core python-dotenvlangchain核心框架库。langchain-openaiOpenAI 模型的 LangChain 集成。langchain-core包含基础抽象类和核心组件。python-dotenv用于从.env文件加载环境变量。配置 API 密钥在项目根目录下创建.env文件并添加以下内容OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxx OPENAI_BASE_URLhttps://api.openai.com/v1OPENAI_API_KEY是必填项。OPENAI_BASE_URL为可选配置在需要代理或使用兼容 OpenAI 接口的第三方服务如 DeepSeek、通义千问等时可进行设置。LangChain 三大基础模块LangChain 应用的核心架构由三个基础模块串联而成大模型组件、提示词模板和输出解析器。理解这三者的职责是掌握 LangChain 开发范式的关键。模块作用常用类大模型组件接收提示词并生成文本回复ChatOpenAI提示词模板将指令参数化动态构造提示词ChatPromptTemplate输出解析器将模型的自然语言输出转换为结构化数据如列表、JSONCommaSeparatedListOutputParser,JsonOutputParser这三个模块通过 LangChain 表达式语言LCEL的管道符|进行串联。数据在链Chain中从左至右依次流经各模块形成清晰的处理流程。用户输入参数Prompt 模板格式化LLM 调用Output Parser 解析结构化结果构建首个链式应用起名大师本部分将通过一个“起名大师”应用的开发过程演示上述三个模块如何协同工作。该应用根据指定的国家文化和性别生成一组符合背景的名字并以 Python 列表形式输出。第 1 步直接调用模型最基础的方式是直接实例化模型对象并向其发送硬编码的提示词。fromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenvimportos load_dotenv()llmChatOpenAI(modelgpt-3.5-turbo,temperature0.7,openai_api_keyos.getenv(OPENAI_API_KEY),openai_api_baseos.getenv(OPENAI_BASE_URL),)responsellm.invoke(帮我起一个具有中国特色的男孩名字)print(response.content)这种方法虽然直观但存在明显缺陷提示词与业务逻辑耦合无法动态适配不同场景且返回的非结构化文本不便于程序消费。第 2 步引入提示词模板使用ChatPromptTemplate将提示中的可变部分抽取为参数实现提示词的动态构建。fromlangchain_core.promptsimportChatPromptTemplate promptChatPromptTemplate.from_messages([(system,你是一个专业的起名大师。),(human,请帮我起一个具有{country}特色的{boy_or_girl}名字只返回名字本身不要多余解释。)])formatted_promptprompt.invoke({country:美国,boy_or_girl:男孩})print(formatted_prompt.to_messages())通过这种方式可以通过改变传入参数字典轻松适配不同场景。注意提示中已添加了对输出格式的约束“只返回名字本身”这有助于简化后续解析工作。第 3 步集成输出解析器为了生成多个名字并获得结构化输出可以使用CommaSeparatedListOutputParser。该解析器会引导模型以逗号分隔的格式返回结果并将其自动转换为 Python 列表。fromlangchain_core.output_parsersimportCommaSeparatedListOutputParser parserCommaSeparatedListOutputParser()print(parser.get_format_instructions())get_format_instructions()方法会生成一段格式说明告知模型应以何种格式返回数据。我们需要在提示词中引用这段说明。将三者通过 LCEL 串联成链chainprompt|llm|parser resultchain.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()llmChatOpenAI(modelgpt-3.5-turbo,temperature0.7,openai_api_keyos.getenv(OPENAI_API_KEY),openai_api_baseos.getenv(OPENAI_BASE_URL),)promptChatPromptTemplate.from_messages([(system,你是一个专业的起名大师。),(human,请帮我起4个具有{country}特色的{boy_or_girl}名字仅返回用逗号分隔的名字不要序号不要解释。\n{format_instructions})])parserCommaSeparatedListOutputParser()chainprompt|llm|parserif__name____main__:params{country:美国,boy_or_girl:男孩,format_instructions:parser.get_format_instructions(),}nameschain.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.ChatOpenAIOpenAI 大语言模型的 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 应用的关键环节。