掘金 人工智能 07月31日 14:35
LangChain框架入门01:LangChain是什么?
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

LangChain是一个强大的Python开源框架,旨在简化和标准化大语言模型(LLM)应用的开发。它解决了直接调用LLM API时遇到的提示词管理困难、模型切换不便、复杂功能实现混乱等问题。LangChain通过模块化的设计,将LLM调用、提示词模板、链式操作、RAG检索、记忆管理以及工具调用等功能整合,提供了一个统一的开发架构。其核心组件包括langchain-core、integrations、langchain、langchain-community、langgraph和langsmith,分别覆盖基础组件、第三方集成、应用核心、社区贡献、流程管理和全生命周期监控。该框架支持Python和JavaScript/TypeScript,为开发者快速构建智能应用提供了便利,尤其适合需要处理多轮对话、知识库集成和外部工具调用的场景。

💡 **标准化LLM应用开发**:LangChain通过模块化设计,将大模型调用、提示词管理、记忆、知识库、RAG检索和工具调用等功能进行标准化,解决了开发者在直接使用LLM API时遇到的代码耦合、提示词管理混乱等问题,使得构建复杂的AI应用更加高效和易于维护。

🛠️ **核心组件与功能**:框架包含langchain-core(基础组件)、integrations(模型集成)、langchain(应用核心)、langchain-community(社区集成)、langgraph(流程图构建)和langsmith(生命周期管理)。这些组件协同工作,支持从基础的LLM交互到复杂的Agent和RAG系统构建。

🔗 **链(Chain)与Agent**:LangChain的核心思想之一是“链”,即将多个模块(如提示词模板、LLM、输出解析器)串联起来完成特定任务,类似于Linux的管道符。Agent则能让LLM自行思考、规划并调用工具来完成复杂任务,极大地扩展了AI的能力边界。

📚 **RAG与记忆功能**:LangChain支持检索增强生成(RAG),允许LLM根据外部特定文档进行回答,提高回答的准确性和时效性。同时,它还提供了记忆模块,使LLM能够记住对话历史,实现连贯的多轮对话体验。

🌐 **多语言支持与社区**:LangChain提供成熟的Python版本和适用于前端及Node.js的JavaScript/TypeScript版本,满足不同开发需求。活跃的社区也为框架的不断发展和集成提供了有力支持。

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

一、为什么要了解LangChain?

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

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

二、LangChain是什么?

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

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

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

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

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

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

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

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

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

三、LangChain核心模块简介

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

3.1 LLM接口

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

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的内容。

from langchain_core.prompts import ChatPromptTemplatesystem_chat_prompt = ChatPromptTemplate.from_messages([    ("system", "你是一个AI大模型,我是{name}"),])human_chat_prompt = ChatPromptTemplate.from_messages([    ("human", "{question}")])chat_prompt = system_chat_prompt + human_chat_promptprint(chat_prompt.invoke({"name": "alice",                          "question": "你好,请问你是?"}))

3.3 Chain链

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

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

prompt = ChatPromptTemplate.from_template("{question}")llm = ChatOpenAI(model="gpt-3.5-turbo")parser = StrOutputParser()chain = prompt | llm | parserprint(chain.invoke({"question": "要把大象装冰箱总共分几步"}))

3.4 RAG检索

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

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

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

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

from langchain_community.document_loaders import TextLoadertextLoader = TextLoader("./项目API文档.txt", encoding="utf-8")# 加载文档documents = textLoader.load()

3.5. Memory记忆

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

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

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

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain 大模型 AI应用开发 LLM框架 RAG
相关文章