目录

一、LangChain的介绍

1.1 核心组成:像“积木”一样的模块

1.2 其他大模型应用开发框架

1.3 为什么需要LangChain

1.4 LangChain的使用场景

1.5 LangChain的学习资料

1.6 LangChain的架构设计

1.6.1 结构1:LangChain

1.6.2 结构2:langGraph

1.6.3 结构3:LangSmith

1.6.4 结构4:LangServe

二、开发前的准备工作

2.1、安装python建议3.10及以上

2.2、创建虚拟环境

2.3、下载安装包

2.4 PyCharm开发环境

三、大模型应用开发

3.1 基于RAG架构的开发

3.2 基于Agent架构开发

3.3 大模型应用开发的4个场景

3.3.1 场景1:纯Prompt

3.3.2 Agent + Function Calling

3.3.3 场景3:RAG (Retrieval-Augmented Generation)

3.3.4 场景4:Fine-tuning(精调/微调)

3.3.5 如何选择

四、LangChain的核心组件

4.1 一个问题引发的思考

4.2 核心组件的概述

4.3 核心组件的说明

4.3.1 核心组件1:Model l/O

4.3.2 核心组件2:Chains

4.3.3 核心组件3:Memory

4.4.4 核心组件4:Agents

4.3.5 核心组件5:Retrieval

4.3.6 核心组件6:Callbacks

4.4小结

五、LangChain的helloworld

5.1 获取大模型

5.2 使用提示词模版

5.3 使用输出解析器

5.4 使用向量存储

5.5  RAG(检索增强生成)

5.6 使用Agent


前言:大模型langchain快速上手,输出自己的大模型框架应用实战(智能体、问答系统、对话机器人、文档搜索系统、去也私有知识库)。官方文档

一、LangChain的介绍

        LangChain是一个用于构建基于大型语言模型(LLM)的应用程序的开源框架。你可以把它理解为一个强大的“连接器”和“组装线”,它本身不生产“大脑”(即LLM),但能帮你把现成的“大脑”与各种外部工具、数据、记忆系统高效地连接起来,搭建出功能复杂的AI应用(智能体、问答系统、对话机器人、文档搜索系统、去也私有知识库)。

        它的核心目标是让AI应用具备上下文感知推理能力,从而连接起语言模型与现实世界。

1.1 核心组成:像“积木”一样的模块

核心模块 核心作用与说明
模型 (Models) 提供与各种LLM(如GPT、文心一言)的统一接口,简化调用。
提示 (Prompts) 管理和优化与模型的交互指令,支持模板化,提升效果与复用性。
链 (Chains) 最核心的抽象。将多个步骤(调用模型、工具等)按顺序组合成一个完整的处理流程。
数据连接/检索器 (Retrieval) 实现检索增强生成 (RAG) 的关键。负责加载、处理外部数据,并为模型提供相关上下文。
代理 (Agents) 赋予LLM“决策”能力,让其能自主选择调用合适的工具(如计算器、搜索API)来完成任务。
记忆 (Memory) 在对话或多步交互中保存和回顾历史信息,实现有状态的连续对话。

1.2 其他大模型应用开发框架

1.3 为什么需要LangChain

当ChatGPT、QwenLM、DeepSeek等大语言模型(LLM)横空出世时,开发者们立刻意识到:LLM不是终点,而是构建智能应用的“大脑”。但要让这个“大脑”真正解决实际问题,还需要解决三个关键痛点:

信息过时

LLM的知识截止于训练数据的时间节点(如GPT-4的训练数据截止到2023年),无法回答诸如“2024年最新AI论文内容”或“今天纽约股市收盘价”这样的问题。

无法动手

LLM虽然能生成自然语言,但它不能执行外部操作,比如调用API、计算数值、查询数据库、发送邮件等。它就像一个只会思考的“脑壳”,没有“手脚”。

记忆有限

LLM的上下文窗口(例如GPT-4最多支持32,768个tokens)限制了它处理长文本的能力,难以记住对话历史或文档细节。

因此,我们需要一个框架,将LLM的“大脑”与“感官(数据)”、“手脚(工具)”、“记忆(上下文)”连接起来,让它从“聊天机器人”升级为“能解决具体问题的助手”。

为什么不使用模型 API 开发

不使用LangChain,确实可以使用GPT 或GLM4 等模型的API进行开发。比如,搭建“智能体”(Agent)、问答系统、对话机器人等复杂的 LLM 应用。

但使用LangChain的好处有:

  • 简化开发难度:更简单、更高效、效果更好
  • 学习成本更低:不同模型的API不同,调用方式也有区别,切换模型时学习成本高。使用LangChain,可以以统一、规范的方式进行调用,有更好的移植性。
  • 现成的链式组装:LangChain提供了一些现成的链式组装,用于完成特定的高级任务。让复杂的逻辑变得结构化、易组合、易扩展

1.4 LangChain的使用场景

作为一名运维工程师,可以用 LLM(大模型)+ 工具链 的方式构建「智能运维机器人」,帮你在已有监控、告警、日志、K8s 平台上实现自动诊断 + 智能决策

项目方向 简要说明 可实现功能
智能告警分析助手 对接 Prometheus Alertmanager、Oncall 平台 分析当前活跃告警、聚合历史告警趋势、关联处理手册,自动建议处理方案、支持“告警认领”/“告警屏蔽” 等操作
日志智能检索助手 对接 ELK / Loki / VictoriaLogs LLM自动生成日志查询语句、关联上下文日志事件、 一键分析“异常原因”
Grafana 智能分析助手 对接 Grafana API 接收 PromQL / 指标表达式、生成趋势图、自动分析性能瓶颈
Kubernetes 智能巡检 / 故障定位助手 对接 kubectl、K8s API Server 自动检测Pod异常原因(ImagePullBackOff、CrashLoopBackOff等)、 一键修复(重启Pod、删除Evicted等)
自愈自动化运维平台 (AIOps) LangGraph 构建可控流程图 事件 → 诊断 → 人工确认 → 执行动作、形成闭环:检测-诊断-修复-验证
监控配置生成助手 自动生成PrometheusRule、Blackbox配置 根据自然语言生成监控项、自动生成PromQL和yaml配置
工单/变更智能处理机器人 对接内部ITSM系统(如Jira/禅道) 解析工单内容 → 推荐处理流程、生成执行脚本或kubectl命令

LangChain的位置

1.5 LangChain的学习资料

1.6 LangChain的架构设计

1.6.1 结构1:LangChain

1.6.2 结构2:langGraph

LangGraph可以看做基于LangChain的api的进一步封装,能够协调多个Chain、Agent、Tools完
成更复杂的任务,实现更高级的功能。

1.6.3 结构3:LangSmith

https://docs.smith.langchain.com/
链路追踪 :提供了6大功能,涉及Debugging(调试)、Playground(沙盒)、Prompt Management
(提示管理)、Annotation(注释)、Testing(测试)、Monitoring(监控)等。与LangChain无缝集成。
帮助你从原型阶段过渡到生产阶段。

1.6.4 结构4:LangServe

将LangChain的可运行项和链部署为RESTAPI,使得它们可以通过网络进行调用。
Java怎么调用langchain呢?就通过这个langserve。将langchain应用包装成一个restapi,对外
暴露服务。同时,支持更高的并发,稳定性更好。

总结:LangChain当中,最有前途的两个模块就是:LangGraph,LangSmith。
LangChain能做RAG,其它的一些框架也能做,而且做的也不错,比如Llamalndex。所以这
时候LangChain要在Agent这块发力,那就需要LangGraph。而LangSmith,做运维、监控。
故,二者是LangChain里最有前途的。

二、开发前的准备工作

2.1、安装python建议3.10及以上

2.2、创建虚拟环境

2.3、下载安装包

#安装包(默认最新版)

pip install langchain

# 指定版本

pip install langchain==0.3.25


#批量安装(空格分隔)

pip install langchain requests numpy

# 升级包

pip install --upgrade langchain

# 卸载包

pip uninstall langchain

# 查看己安装包

pip list

# 如果需要升级pip
python.exe -m pip install --upgrade pip

# openai
pip install openai

pip install langchain-openai

pip install dotenv

2.4 PyCharm开发环境

import sys
import langchain
import openai

print(langchain.__version__)
print(openai.__version__)
print(sys.version)

三、大模型应用开发

大模型应用技术特点:门槛低、天花板高。

3.1 基于RAG架构的开发

背景:

  • 大模型的知识冻结
  • 大模型的幻觉

而RAG就可以非常精准的解决这两个问题。

何为RAG?

Reranker使用场景

这里有三个位置涉及到大模型的使用:

3.2 基于Agent架构开发

充分利用LLM的推理决策能力,通过增加规划、记忆和工具调用的能力,构造一个能够独立
思考、逐步完成给定目标的智能体。

一个数学公式来表示:

Agent =LLM + Memory + Tools + Planning + Action

比如,打车到西藏玩。

  • ·大脑中枢:规划行程的你
  • ·规划:步骤1:规划打车路线,步骤2:定饭店、酒店,。。。
  • ·调用工具:调用MCP或FunctionCalling等API,滴滴打车、携程、美团订酒店饭店
  • ·记忆能力:沟通时,要知道上下文。比如定酒店得知道是西藏路上的酒店,不能聊着聊
  • 着忘了最初的目的。
  • 能够执行上述操作。说走就走,不能纸上谈兵。

智能体核心要素被细化为以下模块:
1、大模型(LLM)作为“大脑”:提供推理、规划和知识理解能力,是AIAgent的决策中枢。
大脑主要由一个大型语言模型LLM组成,承担着信息处理和决策等功能,并可以呈现推理
和规划的过程,能很好地应对未知任务。
2、记忆(Memory)
记忆机制能让智能体在处理重复工作时调用以前的经验,从而避免用户进行大量重复交互。

  短期记忆:存储单次对话周期的上下文信息,属于临时信息存储机制。受限于模型的上下

文窗口长度。

  长期记忆:可以横跨多个任务或时间周期,可存储并调用核心知识,非即时任务。
长期记忆,可以通过模型参数微调(固化知识)、知识图谱(结构化语义网络)或向量
数据库(相似性检索)方式实现。|

3、工具使用(ToolUse):调用外部工具(如API、数据库)扩展能力边界。

4、规划决策(Planning):通过任务分解、反思与自省框架实现复杂任务处理。例如,利用
思维链(ChainofThought)将目标拆解为子任务,并通过反馈优化策略。

3.3 大模型应用开发的4个场景

3.3.1 场景1:纯Prompt

  • ·Prompt是操作大模型的唯一接口
  • ·当人看:你说一句,ta回一句,你再说一句,ta再回一句...

3.3.2 Agent + Function Calling

  • ·Agent:Al主动提要求
  • ·FunctionCalling:需要对接外部系统时,Al要求执行某个函数
  • ·当人看:你问他[我明天去杭州出差,要带伞吗?」,他让你先看天气预报,你看了告诉

他,他再告诉你要不要带伞

3.3.3 场景3:RAG (Retrieval-Augmented Generation)

RAG:需要补充领域知识时使用

  • ·Embeddings:把文字转换为更易于相似度计算的编码。这种编码叫向量
  • ·向量数据库:把向量存起来,方便查找
  • ·向量搜索:根据输入向量,找到最相似的向量

举例:考试答题时,到书上找相关内容,再结合题目组成答案

3.3.4 场景4:Fine-tuning(精调/微调)


举例:努力学习考试内容,长期记住,活学活用。

3.3.5 如何选择

面对一个需求,如何开始,如何选择技术方案?下面是个常用思路:

注意:其中最容易被忽略的,是准备测试数据

四、LangChain的核心组件

学习Langchain最简单直接的方法就是阅读官方文档。
https://python.langchain.com/v0.1/docs/modules/
通过文档目录我们可以看到,Langchain构成的核心组件。

两个红框内容(Components、Guides)是核心。

中间的integrations:集成各种工具或云平台。

4.1 一个问题引发的思考

如果要组织一个AI应用,开发者一般需要什么?
第1 ,提示词模板的构建,不仅仅只包含用户输入。
第2,模型调用与返回,参数设置,返回内容的格式化输出。
第3,知识库查询,这里会包含文档加载,切割,以及转化为词嵌入(Embedding)向量。
第4,其他第三方工具调用,一般包含天气查询、Google搜索、一些自定义的接口能力调用。
第5,记忆获取,每一个对话都有上下文,在开启对话之前总得获取到之前的上下文吧?

4.2 核心组件的概述

LangChain的核心组件涉及六大模块,这六大模块提供了一个全面且强大的框架,使开发者能
够创建复杂、高效且用户友好的基于大模型的应用。

4.3 核心组件的说明

4.3.1 核心组件1:Model l/O


这个模块使用最多,也最简单
ModelI/o:标准化各个大模型的输入和输出,包含输入模版,模型本身和格式化输出。
以下是使用语言模型从输入到输出的基本流程。

以下是对每一块的总结:

  • ·Format(格式化):即指代PromptsTemplate,通过模板管理大模型的输入。将原始数据格式化成模型可以处理的形式,插入到一个模板问题中,然后送入模型进行处理。
  • ·Predict(预测):即指代Models,使用通用接口调用不同的大语言模型。接受被送进来的问题,然后基于这个问题进行预测或生成回答。
  • Parse(生成):即指代outputParser部分,用来从模型的推理中提取信息,并按照预先设定好的模版来规范化输出。比如,格式化成一个结构化的JSON对象。

4.3.2 核心组件2:Chains


Chain:“链条",用于将多个模块串联起来组成一个完整的流程,是LangChain框架中最重要
的模块。
例如,一个chain可能包括一个Prompt模板、一个语言模型和一个输出解析器,它们一起工
作以处理用户输入、生成响应并处理输出。
常见的Chain类型:

  • LLMChain:最基础的模型调用链
  • SSequentialchain:多个链串联执行
  • Routerchain:自动分析用户的需求,引导到最适合的链
  • RetrievalQA:结合向量数据库进行问答的链

4.3.3 核心组件3:Memory


Memory:记忆模块,用于保存对话历史或上下文信息,以便在后续对话中使用。
常见的Memory类型:

  • ConversationBufferMemory:保存完整的对话历史
  • ConversationSummaryMemory:保存对话内容的精简摘要(适合长对话)
  • ConversationSummaryBufferMemory:混合型记忆机制,兼具上面两个类型的特点
  • VectorStoreRetrieverMemory:保存对话历史存储在向量数据库中

4.4.4 核心组件4:Agents


Agents,对应着智能体,是LangChain的高阶能力,它可以自主选择工具并规划执行步骤。
Agent 的关键组成:

  • ·AgentType:定义决策逻辑的工作流模式
  • ·ToO1:是一些内置的功能模块,如API调用、搜索引擎、文本处理、数据查询等工具。Agents通过这些工具来执行特定的功能。
  • ·AgentExecutor:用来运行智能体并执行其决策的工具,负责协调智能体的决策和实际的工具执行。


目前最热门的智能体开发实践,未来能够真正实现通用人工智能的落地方案。
这里的Agent,就会涉及到前面讲的memory,以及tools。

4.3.5 核心组件5:Retrieval


Retrieval:对应着RAG,检索外部数据,然后在执行生成步骤时将其传递到LLM。步骤包括文
档加载、切割、Embedding等

  • Source:数据源,即大模型可以识别的多种类型的数据:视频、图片、文本、代码、文档等。
  • Load:负责将来自不同数据源的非结构化数据,加载为文档(Document)对象
  • Transform:负责对加载的文档进行转换和处理,比如将文本拆分为具有语义意义的小块。
  • Embed:将文本编码为向量的能力。一种用于嵌入文档,另一种用于嵌入查询
  • Store:将向量化后的数据进行存储
  • Retrieve:从大规模文本库中检索和查询相关的文本段落

4.3.6 核心组件6:Callbacks


Callbacks:回调机制,允许连接到LLM应用程序的各个阶段,可以监控和分析LangChain的运
行情况,比如日志记录、监控、流传输等,以优化性能。

回调函数,对于程序员们应该都不陌生。这个函数允许我们在LLM的各个阶段使用各种各样
的“钩子”,从而达实现日志的记录、监控以及流式传输等功能。


4.4小结

  • ·Model/o模块:使用最多,也最简单
  • ·Chains模块:最重要的模块
  • ·Retrieval模块、Agents模块:大模型的主要落地场景

在这个基础上,其它组件要么是它们的辅助,要么只是完成常规应用程序的任务。


辅助:比如,向量数据库的分块和嵌入,用于追踪、观测的Callbacks
任务:比如,Tools,Memorv

五、LangChain的helloworld

5.1 获取大模型

#导入dotenv库的load_dotenv函数,用于加载环境变量文件(.env)中的配置
import dotenv
from langchain_openai import ChatOpenAI
import os
dotenv.load_dotenv()
#加载当前目录下的.env文件
os.environ['OPENAI_API_KEY']= os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL']=os.getenv("OPENAI_BASE_URL")
# 创建大模型实例
llm=ChatOpenAI(model="gpt-4o-mini")#默认使用gpt-3.5-turbo
#直接提供问题,并调用11m
response=llm.invoke("什么是大模型?")
print(response)

.env文件,帐号需要自己申请

密钥来自于:https://www.closeai-asia.com   【不是免费的午餐---咔咔咔咔咔咔】

OPENAI_API_KEY1="sk-qfjtMhNoMCLWT7TzL7T7BaVK9hIyRUFGYo35Ak2100g8Ixm2"
OPENAI_BASE_URL="https://api.openai-proxy.org/v1"
OPENAI_MODEL="gpt-4o-mini"
#阿里云百炼平台
DASHSC0PE_API_KEY="sk-f1a873242acb44f4980e3de6a819a482"
DASHScoPE_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
#智谱
ZHIPUAI_API_KEY="63a0f275b3a9424c9e02cffdccba53f7.k9rA4Y8daGaLydxQ"
ZHIPUAI_URL="https://open.bigmodel.cn/api/paas/v4/"
#硅基流动
SILIcoN_API_KEY="sk-auciaxqpzchyauiovpzkwrjhznkzepozralhwleyrdoyjani"

5.2 使用提示词模版

我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活

from langchain_core.prompts import ChatPromptTemplate
# 需要注意的一点是,这里需要指明具体的role,在这里是system和用户
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的技术文档编写者"),
("user", "{input}") # {input}为变量
])
# 我们可以把prompt和具体llm的调用和在一起。
chain = prompt | llm
message = chain.invoke({"input": "大模型中的LangChain是什么?"})
print(message)

5.3 使用输出解析器

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

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

5.4 使用向量存储

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

pip install faiss-cpu
pip install langchain_community==0.3
# 导入和使用 WebBaseLoader
from langchain_community.document_loaders import WebBaseLoader
import bs4
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 OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
from langchain_community.vectorstores import FAISS
from 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)

5.5  RAG(检索增强生成)

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

from langchain_core.prompts import PromptTemplate
retriever = vector.as_retriever()
retriever.search_kwargs = {"k": 3}
docs = retriever.invoke("建设用地使用权是什么?")
# for i,doc in enumerate(docs):
# print(f"⭐第{i+1}条规定:")
# print(doc)
# 6.定义提示词模版
prompt_template = """
你是一个问答机器人。
你的任务是根据下述给定的已知信息回答用户问题。
确保你的回复完全依据下述已知信息。不要编造答案。
如果下述已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。
已知信息:
{info}
用户问:
{question}
请用中文回答用户问题。
"""
# 7.得到提示词模版对象
template = PromptTemplate.from_template(prompt_template)
# 8.得到提示词对象
prompt = template.format(info=docs, question='建设用地使用权是什么?')
## 9. 调用LLM
response = llm.invoke(prompt)
print(response.content)

5.6 使用Agent

from langchain.tools.retriever import create_retriever_tool
# 检索器工具
retriever_tool = create_retriever_tool(
retriever,
"CivilCodeRetriever",
"搜索有关中华人民共和国民法典的信息。关于中华人民共和国民法典的任何问题,您必须使用此工
具!",
)
tools = [retriever_tool]
from langchain import hub
from langchain.agents import create_openai_functions_agent
from langchain.agents import AgentExecutor
# https://smith.langchain.com/hub
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 运行代理
agent_executor.invoke({"input": "建设用地使用权是什么"})

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐