news 2026/4/16 13:42:45

LangChain入门指南:从零构建大模型应用的完整框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain入门指南:从零构建大模型应用的完整框架

LangChain是构建大语言模型应用的框架,提供工具和接口简化LLM应用开发。其核心组件包括模型封装、提示模板、数据检索、记忆机制、链式处理和智能代理。支持多模型集成、多步骤任务串联,可构建文档问答、聊天机器人等应用。通过LangChain,开发者能高效实现RAG系统、向量存储和智能代理,简化LLM应用从开发到部署的全流程。

前排提示,文末有大模型AGI-CSDN独家资料包哦!

什么是LangChain?

🍋

LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。

类似于Java中的Spring,Python中的Django

官网地址:https://python.langchain.com/docs/introduction/

中文地址:https://www.langchain.com.cn/docs/introduction/

GitHub源码地址:https://github.com/langchain-ai/langchain

为什么需要大模型框架

场景一:串联多个步骤(多轮思考、逻辑判断)

你想让 LLM:先调用知识库;再判断答案是否不完整;如果不完整,再调用另一个模型补足。 你怎么办?原始代码写死逻辑就麻烦了。框架可以让你用链(Chain)或Agent来封装这类流程,非常容易扩展。

API代码

response = openai.ChatCompletion.create( model="gpt-4", messages=[{"role": "user", "content": "请推荐三本书"}])

场景二:多模型、多任务集成

你希望系统: 用户提问 → Claude 回答; 遇到结构草图 → 用 GPT-4; 编程代码 → 用kimi k2; 语义分析 → 用本地模型; 你要怎么切换?怎么统一接口?怎么路由调用逻辑?

框架可以一键适配 OpenAI、Anthropic、本地模型、HuggingFace 等,统一抽象出 Model 类调用接口。 而且还能一点点扩展,而且避免你代码中充满:

if model == 'gpt-3.5': passelif model == 'claude-3': pass

LangChain介绍

🎉

LangChain is a framework for developing applications powered by large language models (LLMs).

LangChain simplifies every stage of the LLM application lifecycle:

  • Development: Build your applications using LangChain’s open-source building blocks, components, and third-party integrations. Use LangGraph to build stateful agents with first-class streaming and human-in-the-loop support.
  • Productionization: Use LangSmith to inspect, monitor and evaluate your chains, so that you can continuously optimize and deploy with confidence.
  • Deployment: Turn your LangGraph applications into production-ready APIs and Assistants with LangGraph Cloud.

LangChain简化了LLM应用程序生命周期的各个阶段:

开发阶段:使用LangChain的开源构建块和组件构建应用程序,利用第三方集成和模板快速启动。

生产化阶段:使用LangSmith检查、监控和评估您的链,从而可以自信地持续优化和部署。

部署阶段:使用LangServe将任务链转化为API。

Langchain的核心组件

🐸

  • 模型(Models):包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts):使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes):构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory):通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你。
  • 链(Chains):LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成任务。
  • 代理(Agents):另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使智能Agent成为可能。

封装了一系列模块

模型 I/O 封装,包括:

🐸

  • LLMs:大语言模型
  • ChatModels:一般基于 LLMs,但按对话结构重新封装
  • Prompt:提示词模板
  • OutputParser:解析输出

Retrieval 数据连接与向量检索封装,包括:

  • Retriever: 向量的检索
  • Document Loader:各种格式文件的加载器
  • Embedding Model:文本向量化表示,用于检索等操作
  • Verctor Store: 向量的存储
  • Text Splitting:对文档的常用操作

Agents 根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能,包括:

🐰

  • Tools:调用外部功能的函数,例如:调 google 搜索、文件 I/O、Linux Shell 等等
  • Toolkits:操作某软件的一组工具集,例如:操作 DB、操作 Gmail 等等

开源库组成

  • langchain-core :基础抽象和LangChain表达式语言
  • langchain-community :第三方集成。合作伙伴包(如langchain-openai、langchain-anthropic等),一些集成已经进一步拆分为自己的轻量级包,只依赖于langchain-core
  • langchain :构成应用程序认知架构的链、代理和检索策略
  • langgraph:通过将步骤建模为图中的边和节点,使用 LLMs 构建健壮且有状态的多参与者应用程序
  • langserve:将 LangChain 链部署为 REST API
  • LangSmith:一个开发者平台,可让您调试、测试、评估和监控LLM应用程序,并与LangChain无缝集成

LangChain的基本使用

安装指定版本的LangChain

pip install langchain==0.3.7 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install langchain-openai==0.2.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

通过LangChain的接口来调用OpenAI对话

from dotenv import load_dotenvload_dotenv()import osfrom langchain_openai import ChatOpenAI# llm = ChatOpenAI()qwllm = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus") dpllm = ChatOpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com", model="deepseek-chat")# 直接提供问题,并调用llmresponse = qwllm .invoke("什么是大模型?")print(response)print("="*50)print(response.content)

多轮对话的封装

from langchain_openai import ChatOpenAI# 默认是gpt-3.5-turbo# llm = ChatOpenAI() llm = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus")from langchain.schema import ( AIMessage, #等价于OpenAI接口中的assistant role HumanMessage, #等价于OpenAI接口中的user role SystemMessage #等价于OpenAI接口中的system role)messages = [ SystemMessage(content="你是于老师的个人助理。你叫小沐"), HumanMessage(content="我叫同学小张"), HumanMessage(content="你是谁?") ]response = llm.invoke(messages)print(response.content)

使用提示模板

# 我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活from langchain_core.prompts import ChatPromptTemplate# 需要注意的一点是,这里需要指明具体的role,在这里是system和用户prompt = ChatPromptTemplate.from_messages([ ("system", "您是世界级的技术文档编写者"), ("user", "{input}") # {input}为变量])print(prompt)result = llm.invoke(prompt.format(input="大模型中的LangChain是什么"))print(result)# 我们可以把prompt和具体llm的调用和在一起(通过chain,chain可以理解为sequence of calls to take) Linux ps aux | grep redis# chain = prompt | llm# chain.invoke({"input": "大模型中的LangChain是什么?"})

使用输出解析器

from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParser, JsonOutputParser# 初始化模型llm = ChatOpenAI()# 创建提示模板prompt = ChatPromptTemplate.from_messages([ ("system", "您是世界级的技术文档编写者。"), ("user", "{input}")])# 使用输出解析器output_parser = StrOutputParser()# output_parser = JsonOutputParser()# 将其添加到上一个链中chain = prompt | llm | output_parser # chain = prompt | llm # 调用它并提出同样的问题。答案是一个字符串,而不是ChatMessagechain.invoke({"input": "LangChain是什么?"})# chain.invoke({"input": "LangChain是什么? 问题用question 回答用answer 用JSON格式回复"})

向量存储

使用一个简单的本地向量存储 FAISS,首先需要安装它

pip install faiss-cpupip install langchain_community==0.3.7
# 导入和使用 WebBaseLoaderfrom langchain_community.document_loaders import WebBaseLoaderfrom dotenv import load_dotenvload_dotenv()import bs4import osos.environ["http_proxy"] = "http://127.0.0.1:7897"os.environ["https_proxy"] = "http://127.0.0.1:7897"loader = WebBaseLoader( web_path="https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm", bs_kwargs=dict(parse_only=bs4.SoupStrainer(id="UCAP-CONTENT")))docs = loader.load()# print(docs)# 对于嵌入模型,这里通过 API调用from langchain_openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()# qwen的embding模型from langchain_community.embeddings.dashscope import DashScopeEmbeddingsembeddings = DashScopeEmbeddings( model="text-embedding-v3", dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"))#使用此嵌入模型将文档摄取到矢量存储中from langchain_community.vectorstores import FAISSfrom langchain_text_splitters import RecursiveCharacterTextSplitter# 使用分割器分割文档text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)documents = text_splitter.split_documents(docs)print(len(documents))# 向量存储 embeddings 会将 documents 中的每个文本片段转换为向量,并将这些向量存储在 FAISS 向量数据库中vector = FAISS.from_documents(documents, embeddings)

RAG+Langchain,基于外部知识,增强大模型回复

from langchain.chains.combine_documents import create_stuff_documents_chainfrom langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_template("""仅根据提供的上下文回答以下问题:<context>{context}</context>问题: {input}""")from langchain_openai import ChatOpenAIllm = ChatOpenAI()# 创建文档组合链 将文档内容和用户问题组合成一个完整的提示,然后传递给语言模型生成回答document_chain = create_stuff_documents_chain(llm, prompt)from langchain.chains import create_retrieval_chainretriever = vector.as_retriever()retriever.search_kwargs = {"k": 3} # 限制为最多检索3个文档# 创建检索链 该链结合了检索器和文档组合链,实现了从向量数据库中检索相关文档,并将这些文档与用户问题组合成提示retrieval_chain = create_retrieval_chain(retriever, document_chain)# 调用检索链并获取回答response = retrieval_chain.invoke({"input": "建设用地使用权是什么?"})print(response["answer"])

代理的使用

在LangChain框架中,Agents是一种利用大型语言模型(Large Language Models,简称LLMs)来执行任务和做出决策的系统

在 LangChain 的世界里,Agent 是一个智能代理,它的任务是听取你的需求(用户输入)和分析当前的情境(应用场景),然后从它的工具箱(一系列可用工具)中选择最合适的工具来执行操作

  • 使用工具(Tool):LangChain中的Agents可以使用一系列的工具(Tools)实现,这些工具可以是API调用、数据库查询、文件处理等,Agents通过这些工具来执行特定的功能。
  • 推理引擎(Reasoning Engine):Agents使用语言模型作为推理引擎,以确定在给定情境下应该采取哪些行动,以及这些行动的执行顺序。
  • 可追溯性(Traceability):LangChain的Agents操作是可追溯的,这意味着可以记录和审查Agents执行的所有步骤,这对于调试和理解代理的行为非常有用。
  • 自定义(Customizability):开发者可以根据需要自定义Agents的行为,包括创建新的工具、定义新的Agents类型或修改现有的Agents。
  • 交互式(Interactivity):Agents可以与用户进行交互,响应用户的查询,并根据用户的输入采取行动。
  • 记忆能力(Memory):LangChain的Agents可以被赋予记忆能力,这意味着它们可以记住先前的交互和状态,从而在后续的决策中使用这些信息。
  • 执行器(Agent Executor):LangChain提供了Agent Executor,这是一个用来运行代理并执行其决策的工具,负责协调代理的决策和实际的工具执行。
from langchain.tools.retriever import create_retriever_tool# 检索器工具retriever_tool = create_retriever_tool( retriever, "CivilCodeRetriever", "搜索有关中华人民共和国民法典的信息。关于中华人民共和国民法典的任何问题,您必须使用此工具!",)tools = [retriever_tool]from langchain_openai import ChatOpenAIfrom langchain import hubfrom langchain.agents import create_openai_functions_agentfrom langchain.agents import AgentExecutor# https://smith.langchain.com/hubprompt = hub.pull("hwchase17/openai-functions-agent")llm = ChatOpenAI(model="gpt-4", temperature=0)agent = create_openai_functions_agent(llm, tools, prompt)agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 运行代理agent_executor.invoke({"input": "建设用地使用权是什么"})

读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。

针对0基础小白:

如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段:从大模型系统设计入手,讲解大模型的主要方法;

第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉大模型视频和PDF合集👈

这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求:大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能,学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力:大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

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

负载均衡-HAProxy 全解析

HAProxy 负载均衡全解析 从基础部署、负载策略到会话保持及性能优化指南 官网 https://www.haproxy.org/ 文档 https://www.haproxy.org/#docs 下载 https://www.haproxy.org/#down HAProxy 介绍 HAProxy 是一款提供高可用性、负载均衡以及基于TCP&#xff08;第四层&#xff…

作者头像 李华
网站建设 2026/4/16 10:57:22

GetBox PyMOL插件:分子对接框自动生成的完整解决方案

GetBox PyMOL插件&#xff1a;分子对接框自动生成的完整解决方案 【免费下载链接】GetBox-PyMOL-Plugin A PyMOL Plugin for calculating docking box for LeDock, AutoDock and AutoDock Vina. 项目地址: https://gitcode.com/gh_mirrors/ge/GetBox-PyMOL-Plugin 还在为…

作者头像 李华
网站建设 2026/4/13 11:16:48

Godot游戏资源解包全攻略:快速提取内部素材的完整方案

Godot游戏资源解包全攻略&#xff1a;快速提取内部素材的完整方案 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 在游戏开发与资源分析领域&#xff0c;Godot引擎的.pck文件格式常常成为访问游戏内…

作者头像 李华
网站建设 2026/4/16 10:52:38

33、Ansible的进阶应用与实践

Ansible的进阶应用与实践 1. Ansible调试器与实战示例 1.1 Playbook执行与调试 在执行Ansible的Playbook时,若只有一个任务,Playbook会顺利完成。例如,执行后输出显示: PLAY RECAP *************************************************************************** ****…

作者头像 李华