LangChain框架入门01:LangChain是什么?

本文较长,建议点赞收藏,以免遗失。更多AI大模型开发 学习视频/籽料/面试题 都在这>>Github<<

一、为什么要了解LangChain?

近两年来,大语言模型(如ChatGPT、DeepSeek、Claude)持续火爆,从写文案、AI绘图,到写代码、AI智能客服,几乎"无所不能"。并且大语言模型的调用成本越来越低,作为程序员的你可能已经开始尝试用OpenAI、DeepSeek的API做些小应用,但是很快可能就会遇到一些问题:

  • 提示词(Prompt)无法复用,而且内容过长不易管理。
  • 每个大模型都有自己的API,想用多个模型切换很困难,代码耦合很严重。
  • 想自己实现复杂功能,比如多轮对话、工具调用、知识库等功能,导致逻辑混乱。
  • 不同的Prompt、大模型、工具的使用没有统一规范。

因此,LangChain 就出现了,它可以帮助开发者把模型调用、提示词管理、记忆模块、外部工具调用等等模块标准化,不同的模块可自由组合。

二、LangChain是什么?

LangChain 是一个基于Python语言的大语言模型应用开源框架,LangChain可以帮你快速搭好项目架构,下图为LangChain技术体系的示意图。

LangChain技术体系主要包括以下模块:

langchain-core : 封装好的基础聊天模型和其他组件。

integrations:LangChain集成包,目前LangChain会将一些重要的集成包单独拆分出来(例如 langchain-openailangchain-anthropic 等),让集成包更轻量级,这些包将会由LangChain团队和集成包的开发者共同维护。

langchain : 构成AI应用的链、AI agent和检索器。

langchain-community : 社区维护的第三方集成包。

langgraph : LangGraph 专门用于构建能处理 复杂任务流程的 AI 应用 。它的核心思想是用 "图"(Graph) 来管理任务流程,就像画一张路线图,让 AI 知道何时该执行什么操作、何时需要循环或分支判断,还能自动记住执行到哪一步了。

langsmith:LangSmith 是 LLM 应用的全生命周期管理平台,覆盖开发→测试→部署→监控全流程,可以观察到AI应用运行的每一个步骤,它与 LangChain深度集成,但它不仅适用于 LangChain,也可以用于监控任何使用 LLM 的应用。

LangChain 目前支持两个主要版本:

  • Python 版(最成熟,社区最大)
  • JavaScript/TypeScript 版(适合前端和Node.js应用)

三、LangChain核心模块简介

在学习LangChain,先了解一些在LangChain框架中,甚至AI应用开发中一些核心的概念和模块,一定要首先清楚地知道是什么,之后再研究怎么做,下图展示了一个LangChain框架开发的应用的核心运行流程。

3.1 LLM接口

LangChain 封装了不同模型的调用方式,它统一了各种模型的接口,切换变得轻松。如下示例,创建了一个gpt-3.5-turbo的LLM模型。

ini 复制代码
from langchain_community.chat_models import ChatOpenAI

# 创建大语言模型
llm = ChatOpenAI(model="gpt-3.5-turbo")

3.2 PromptTemplate提示词模板

大模型的输出质量在很大程度上取决于提示词(Prompt) 的设计,在LangChain 把提示词封装成模板,支持变量动态替换,管理起来更清晰,能灵活控制 Prompt 内容,避免硬编码。

如下示例,一个模板中包含了两条消息,分别是人类消息和系统消息,并且设置了name和question两个动态变量,使用invoke方法进行动态替换,这里invoke之后返回的是渲染后Prompt的内容。

css 复制代码
from langchain_core.prompts import ChatPromptTemplate

system_chat_prompt = ChatPromptTemplate.from_messages([    ("system", "你是一个AI大模型,我是{name}"),])
human_chat_prompt = ChatPromptTemplate.from_messages([    ("human", "{question}")])

chat_prompt = system_chat_prompt + human_chat_prompt

print(chat_prompt.invoke({"name": "alice",
                          "question": "你好,请问你是?"}))

3.3 Chain链

Chain链是 LangChain 的核心思想之一,一个 Chain 就是将多个模块串起来完成一系列操作,Chain链可以将上一步操作的结果交给下一步进行执行,比如用提示词模板生成 Prompt,将渲染后的提示词交给大模型生成回答,再将大模型的回答将结果输出到控制台,Chain和Linux中的管道符十分类似,每一步的输出自动作为下一步输入,实现模块串联。

如下是Chain链的基本实例,它将提示词模板、LLM、输出解析器连接在一起。

ini 复制代码
prompt = ChatPromptTemplate.from_template("{question}")
llm = ChatOpenAI(model="gpt-3.5-turbo")
parser = StrOutputParser()

chain = prompt | llm | parser

print(chain.invoke({"question": "要把大象装冰箱总共分几步"}))

3.4 RAG检索

在一些LLM的使用场景,需要使用一些特定的文档让LLM根据这些文档的内容进行回复,而这些特定的文档通常不在LLM的训练数据中,此时RAG检索就有用武之地。

在LangChain中,可以读取文档使用知识库,来进行大模型的增强搜索,LangChain封装各种类型的文档读取器,可以将读取文档得到的数据,通过LangChain文档分割器对文档进行分割,通过文本嵌入模型对文本进行向量化,将文本的向量信息保存到向量数据库。

当用户向AI发起提问时,在向量数据库中检索出与提问相关的文档,然后与用户问题一起发送给大模型,这个过程就叫做RAG(检索增强生成,Retrieval-Augmented Generation) ,RAG 能让大模型回答特定领域的问答变得更加精准、实时,避免出现幻觉。

下面代码示例,展示了LangChain中提供了文档读取相关加载类,对知识库中的文档进行读取。

ini 复制代码
from langchain_community.document_loaders import TextLoader

textLoader = TextLoader("./项目API文档.txt", encoding="utf-8")

# 加载文档
documents = textLoader.load()

3.5. Memory记忆

在和大模型对话时,大模型本身并不具备有记忆历史对话的功能,但是在ChatGPT、DeepSeek等大模型时,发现它们在同一个会话内有"上下文记忆"的能力,这样能使对话更加连贯。

LangChain 也提供了类似的记忆功能。通过 memory,可以把用户的历史对话保存下来,使大模型拥有历史记忆的能力,如下示例,每一轮对话会从ConversationSummaryBufferMemory中读取历史对话,渲染到Prompt供大模型使用。

对话结束之后,会将对话内容保存到ConversationSummaryBufferMemory,如果历史记忆超过一定大小,为了节省和大模型之间调用的token消耗,会对历史记忆进行摘要提取、压缩之后再保存,这样大模型拥有了记忆功能。

ini 复制代码
prompt = ChatPromptTemplate.from_messages([
    ('system', "你是OpenAI开发的AI机器人"),
    MessagesPlaceholder("history_chat"),
    ("human", "{question}")
])

memory = ConversationSummaryBufferMemory(max_token_limit=400,return_messages=True,
                                         input_key="question",llm=ChatOpenAI())
llm = ChatOpenAI()
chain = RunnablePassthrough.assign(
    history_chat=RunnableLambda(memory.load_memory_variables) | itemgetter("history_chat")
) | prompt | llm | StrOutputParser()

# 循环进行对话
while True:
  ...

3.6 Tool工具调用

大语言模型本身是一种基于大量数据训练而成的人工智能,它本身是基于大量的数据为基础对结果进行预测,因此,大模型可能会出现给出1+1=3这种情况,大模型本身是不会"上网", 也不会算数的,因此可以给大模型接入各种各样的工具如Google搜索、高德地图定位信息查询、图像生成等等。

那么大模型是怎么使用工具的呢?在现如今,很多的大模型都支持了工具调用,也就是将可用的工具信息列表在调用大模型时传递过去,这些信息包括工具的用途、参数说明等等,大模型会根据这些工具的作用确定调用哪些工具,并且根据参数的描述,来返回调用工具的参数。

最终将工具调用结果返回给大模型,完成用户交给的任务,整个过程中,大模型会根据任务判断是否调用工具,并组织执行,这个自动决策执行的过程,就是由 agent 完成的。

agent 会自己思考、分步骤执行,非常适合复杂任务处理,后续我们也会深入介绍如何通过 LangChain 创建一个完整的 agent,自动协调多个工具完成复杂任务。

对于那些不支持工具调用的大模型,也可以根据提示词将可选的工具和调用方法传递给大模型,但是大模型的预测有很强的不确定性,返回结果的准确率会显著下降。

四、总结

LangChain 是一个强大又灵活的大模型开发框架,它将 LLM 的调用和创建、提示词管理、记忆、知识库、RAG检索、工具调用等模块化,通过LangChain快速构建 AI 应用。

如果你被各种不同厂商的LLM提供的API写出很多不好维护的代码,那么LangChain就是你最好的选择,本文主要介绍了LangChain框架是什么以及它的核心模块,接下来我们将深入介绍 LangChain 中的每个模块,逐步构建你自己的智能应用,敬请期待下一篇《LangChain框架入门 02:PromptTemplate 提示词模板用法》。

原文地址:https://www.cnblogs.com/fengyun2019/p/19014296

相关推荐
dong_junshuai4 小时前
每天一个开源项目#99 OpenResearch:2.2K星的本地研究Agent工作台
开源·github·agent
花椒技术4 小时前
把 AI 视频接进直播:提前生成、按次生成、持续生成怎么选?
agent·音视频开发
用户8082598666874 小时前
用 LangGraph 重写自己手写的 Agent:框架替你解决了什么,什么它不管
agent
能不能静下心来看4 小时前
从 RAG 到 Agent:跑通两个 Demo 后,我终于分清了这两个词
agent
ZGi.ai4 小时前
知识库权限变了,怎样避免答错?
agent·权限管理·知识库·工作流·zgi·客服运营
大模型真好玩5 小时前
DeepSeek Harness 入门很简单(四)——DeepSeek Harness接入插件
人工智能·agent·deepseek
掰头战士5 小时前
MCP、Skill、Plugin,都是给agent拓展能力,到底有何区别?
typescript·llm·agent
嘟嘟嘟95276 小时前
AI Agent 的边缘困境
人工智能·架构·agent
HYDtomako6 小时前
Agent checkpoint设计
ai·agent·checkpoint·claude code
梦在远山后7 小时前
从需求到架构:我的企业研发 Agent 整体设计
langchain·agent