一.什么是LangChain?

简单说,LangChain 不是一个能直接聊天的 AI(比如 ChatGPT),而是帮 AI “变能干” 的 “工具集合 + 流程管家”—— 就像给普通厨师配齐 “切菜机、烤箱、食材库”,再帮他规划 “先备菜、再烹饪、最后摆盘” 的流程,让厨师能做出更复杂的菜,而不是只能炒个蛋。

举个更贴近生活的例子:你手机里的导航 APP,本身不会 “自己开车”,但它能连你的位置、连实时路况、连加油站信息,还能规划 “避开拥堵→到目的地→找停车场” 的完整路线 ——LangChain 就类似导航 APP 的 “连接 + 规划能力”,只不过服务的是 AI,不是司机。

二.为什么需要Langchin?

单纯的大语言模型(比如 GPT、LLaMA 这些)本身,其实 “能力很受限”—— 就像一个绝顶聪明但 “没带手机、没带笔记本、不会用工具” 的人,空有脑子却干不了太多实际活儿。

而 LangChain 的存在,本质上是为了弥补这些 “受限”,让 AI 从 “能聊天” 变成 “能解决实际问题”。具体来说,有三个核心原因:

1. 大语言模型本身有 “天生短板”,需要被 “补全”

大语言模型(LLMs)虽然能生成流畅的文字,但有几个绕不开的硬伤:

  • “记性差”

    :比如你和 AI 聊了 10 分钟,前面说过的关键信息(比如 “我对花生过敏”)可能被后面的对话冲掉,导致它后面推荐含花生的食物。

  • “知识老”

    :LLMs 的训练数据有截止日期(比如 GPT-4 截止到 2023 年 10 月),问它 “2024 年的诺贝尔奖得主”“今天的股市行情”,它只能说 “不知道”。

  • “不会动手”

    :它不能直接打开你的 Excel 算数据、不能查你公司的数据库、不能调用 API 订机票 —— 这些 “需要和外部世界交互” 的事,纯 LLM 做不到。

  • “怕复杂”

    :如果让它做 “先查天气、再根据天气推荐景点、再查景点门票价格、最后生成行程” 这种多步骤任务,它很容易乱序或遗漏步骤。

而 LangChain 的核心作用,就是给 LLMs “装插件”“补短板”:比如用 “记忆模块” 帮它记事儿,用 “工具调用模块” 帮它连网 / 查数据库,用 “流程模块” 帮它规划复杂任务的步骤。

2. 开发 AI 应用时,“重复造轮子” 太麻烦

假设你是个开发者,想做一个 “AI 合同分析工具”:用户上传 PDF 合同,AI 能自动提取关键条款、标出风险点。
如果没有 LangChain,你需要自己写一堆代码:

  • 再写个 “存储模块”,把拆好的内容存起来,方便 AI 随时调取;

  • 还要写个 “逻辑控制器”,让 AI 先读条款、再对比法律库、最后生成风险报告;

  • 如果用户追问 “这条款和上次那个合同有啥区别”,你还得写个 “对话记忆” 模块,让 AI 记住之前的合同内容。

    这些工作,每个开发者做类似工具时都要重复一遍,效率极低。

而 LangChain 已经把这些 “通用功能” 做成了现成的 “积木”:比如有现成的 PDF 拆分工具、现成的记忆模块、现成的流程控制器。开发者只需要像拼乐高一样把这些积木组合起来,就能快速做出复杂的 AI 应用,不用从零写代码。

3. 企业和个人需要 “定制化 AI”,而不只是 “通用聊天”

普通人可能觉得 “ChatGPT 够用了”,但企业和专业场景需要更 “定制化” 的 AI:

  • 医生需要 “能查医院内部病历系统的 AI”;

  • 运营需要 “能分析自家产品用户评论、自动生成周报的 AI”。

    这些场景的核心是 “让 AI 结合特定数据 / 工具干活”,而不是聊通用话题。LangChain 的价值就在于:它提供了一套 “连接方案”,让 LLMs 能轻松对接企业的内部数据(比如数据库、文档)、专业工具(比如 Excel、CRM 系统),从而变成 “懂你业务的专属 AI”,而不是一个 “啥都知道但啥都不精” 的通用聊天机器人。

    图片

三.Models I/O模块

1.Langchain接入大模型的方法

首先需要安装OpenAI的集成依赖包langchain-openai,执行命令

pip install langchain-openai

Langchain目前抽象出来的详细类型有:

图片

常用的就是AIMessage、HumanMessage和SystemMessage,因此我们需要导入如下模块:

图片

可以把大模型接收到的一条完整的消息理解为系统消息(SystemMessage)+用户消息(HumanMessage)。

现在定义一个消息列表:

图片

现在需要调用大模型执行推理,Langchain提供了调用大模型的统一的接口:

图片

这里的invoke(messages),用作处理单条消息。

除了invoke的调用方式,还有stream流式调用,也就是返回的内容一个字一个字出现:

图片

如果需要多条消息同时执行,可以使用batch批量调用:

图片

图片

2.Langchain接入指定类型大模型

针对不同的模型,LangChain也提供个对应的接入方法,其相关说明文档地址(只可以接入文档中有的模型):https://python.langchain.com/docs/integrations/chat/

这里可以百川大模型为例:

图片

可以看到,使用ChatBaichuan指定的大模型,不需要再写base_url。

四.提示词模板Prompt

提示词模板通俗的理解就是,Langchain提供了一套模板,当用户输入对应的提示词后,可以自动生成一套完整的提示词。

例如,“你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}”,这是一个模板,给input_language赋值为“中文”,给“output_language”赋值为英文,自动生成的提示词为“你是一个专业的翻译助手,擅长将中文文本准确翻译成英文”,更加灵活。

Langchain提供了创建和使用提示词模板的各种工具。

图片

1.PromptTemplate

构造提示词的过程本质就是实例化这个类,需要传递两个重要的参数:template和input_variables。

  • template: 这是一个字符串,表示你想要生成的提示词模板。例如,如果你想要一个用于生成故事的提示词,你的模板可能是 "Once upon a time in {location}, there was a {character}..."。

  • input_variables: 这是一个字典,包含了所有你希望在提示词中出现的变量。这些变量会在 template 字符串中被替换。例如,对于上面的模板,你可能需要提供一个包含 location 和 character 键的字典。

使用步骤:

(1)定义模板和输入变量

图片

(2)实例化PromptTemplate类

图片

(3)生成完整的提示词

图片

(4)结合大模型使用

图片

2.ChatPromptTemplate

构造的提示词是一个消息列表,而不是一个字符串。并且支持输出Message对象,使得在处理复杂对话时更加灵活。

图片

使用步骤:

(1)构建模板

图片

(2)通过调用ChatPromptTemplate的类方法生成最终的提示词

图片

(3)基于invoke函数动态更换填充内容

图片

(4)加入模型中使用

图片

3.MessagesPlaceholder

MessagesPlaceholder 是一个占位符,用于在聊天提示模板中预留位置,以便后续填充具体的对话历史。它的作用类似于一个“变量”,但专门用于存储消息列表。

在 LangChain 中,MessagesPlaceholderChatPromptTemplate都是构建聊天提示(Chat Prompt)的核心组件,但它们的定位和作用有本质区别,核心差异体现在“是否固定消息结构”和“是否支持动态插入消息”上。

两者本质区别:

ChatPromptTemplate定义模板的固定框架,例如 “先有一条系统消息,再有一条用户消息”,其中的内容可以用变量替换,但消息的 “角色”(如system/human)和 “数量” 是固定的。

这就像一张提前设计好的 “表格”,表格里的 “栏目”(消息角色和顺序)是固定的,但每个栏目里的内容可以灵活填写。

图片

MessagePlaceholder是一个“动态消息占位符”,用于在ChatPromptTemplate的固定框架中预留位置,以便后续动态插入任意数量、任意角色的消息列表 (通常是历史对话记录)。
它的核心是 “兼容动态内容”,解决固定模板无法灵活加入动态消息(如多轮对话历史)的问题。

这就像在 “固定表格” 里留了一个 “附加页位置”,这个位置可以根据需要插入任意数量的 “历史记录”(比如之前的对话、补充材料等),这些内容的数量和顺序是不固定的。

图片

图片

这里的history就是一个占位符,用于存放历史的对话。

MessagesPlaceholder在聊天机器人、对话总结、多轮任务处理中应用非常广泛。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐