人工智能篇---RAG-LangChain-Agent
一、 三者关系:一个生动的比喻
首先,我们用一个“超级侦探团队”的比喻来直观理解三者的关系:
-
RAG:是这个团队的“档案管理员”。当侦探遇到未知信息时,管理员会快速地从庞大的档案库(你的私有数据)中查找相关资料,并把相关档案片段交给侦探。它解决了大模型“知识陈旧”和“幻觉”的问题。
-
LangChain:是这个团队的“调度中心”和“工作流程”。它规定了侦探破案的标准流程:先让管理员(RAG)查资料,再决定是否需要调用外部工具(如调用地图API、查询航班信息),最后整理答案并生成报告。它解决了“如何将多个组件串联起来”的问题。
-
Agent:是这个团队的“侦探本人”,是决策大脑。他接收用户的问题(“帮我规划一个去北京的行程”),然后利用调度中心(LangChain)制定的流程,主动思考:第一步该做什么(查资料),第二步该做什么(调用天气API),第三步该做什么(调用航班查询工具)。它解决了“如何让大模型主动使用工具”的问题。
总结关系:
-
RAG 是增强模型知识的核心技术。
-
LangChain 是构建和管理 RAG、Agent 等应用的框架和工具包。
-
Agent 是赋予模型推理和使用工具能力的范式或架构。
-
在实践中,我们常常用 LangChain 这个框架,来构建一个具备 RAG 能力的 Agent。
二、 发展历程:为什么是它们三个?
它们的出现不是偶然,而是大模型应用发展的必然结果。
-
原始时代(Prompt Engineering):人们发现直接问大模型,它经常胡说八道(幻觉),而且不知道2023年之后的事情(知识陈旧)。
-
RAG 的诞生(2023年初):为了解决幻觉和知识更新问题,人们想到把最新的、私有的资料和问题一起传给大模型,让它基于这些“证据”来回答。这就是 RAG,它成了大模型应用的“标配”。
-
LangChain 的兴起(2023年中):随着大家纷纷构建 RAG 应用,发现里面步骤繁多(加载文档、切分、向量化、检索、生成...)。于是,LangChain 这个框架出现了,它把所有这些步骤封装成标准模块,让开发者能像搭乐高一样快速构建应用。
-
Agent 的爆发(2023年底至今):人们不再满足于“问答”,希望大模型能“做事”(比如自动发邮件、分析数据)。Agent 的概念火了起来,它让大模型具备了“思考-行动”的循环能力。而 LangChain 自然也成为了构建 Agent 的首选框架。
这个演进历程,清晰地展示了大模型应用从“静态知识库”到“动态智能体”的进化路径,其核心驱动力如下图所示:

三、 本质与原理深度剖析
1. RAG - 检索增强生成
-
本质:开卷考试。不让大模型死记硬背(参数化知识),而是允许它在答题时去查阅指定的参考资料(私有数据)。
-
原理:
-
预处理:将你的私有文档(Word, PDF等)进行切块,变成一段段文字。
-
向量化:使用嵌入模型将每一段文字转换成一个数字向量(一组数字),并存入向量数据库。这个向量代表了这段文字的语义。
-
检索:当用户提问时,同样将问题转换成向量,然后在向量数据库中查找语义最相似的文本片段(即向量距离最近)。
-
增强:将检索到的文本片段和用户问题一起组合成一个详细的提示词(Prompt),送给大模型。
-
生成:大模型基于这个“带着资料的提示词”来生成答案,从而保证答案有据可依,减少幻觉。
-
2. LangChain
-
本质:大模型应用的“脚手架”或“标准工厂流水线”。它提供了一套预制的、可组装的组件,来简化构建复杂应用的过程。
-
核心原理与组件:
-
Models:抽象层,可以对接不同的大模型(OpenAI, Anthropic, 国内智谱、通义千问等)。
-
Prompts:管理提示词模板,方便复用。
-
Chains:核心思想。将多个组件(如一个RAG流程:检索 -> 生成)链接成一个完整的序列。
-
Agents:提供了一系列工具,并封装了让大模型决定使用哪个工具的逻辑。
-
Memory:管理对话历史,让模型有上下文记忆。
-
3. Agent
-
本质:赋予大模型“大脑”和“手脚”。大脑负责思考决策,手脚就是外部工具(API, 函数等)。
-
原理 - ReAct 框架:这是Agent最经典的思维模式。
-
Thought:模型思考当前情况,并决定下一步该做什么。
-
Action:根据思考,执行一个动作(调用一个工具,如
search_weather)。 -
Observation:获取工具执行的结果(如“北京晴,25度”)。
然后循环这个过程:根据观察结果再次 Thought -> Action -> Observation... 直到得出最终答案。
-
四、 怎样做:从零构建一个 LangChain-Agent-RAG 应用
我们将构建一个 “旅行规划专家” 智能体,它能结合你的私有旅行偏好(RAG)和实时信息(Agent工具)来规划行程。
架构图:
用户: “帮我规划一个去北京的3天美食之旅”
|
v
[LangChain Agent]
|
|-- 思考: 需要先了解用户的饮食偏好和预算 (RAG)
|-- 行动: 从“用户偏好文档”中检索相关信息
|
|-- 思考: 需要知道北京的实时天气 (Tool)
|-- 行动: 调用 get_weather("北京") API
|
|-- 思考: 需要推荐一些当地热门餐厅 (Tool)
|-- 行动: 调用 search_restaurants("北京", "美食") API
|
|-- 综合所有信息,生成一份完整的行程计划
|
v
最终答案: “根据您偏好...,结合北京近期晴朗天气,为您规划...”
实战步骤(概念性代码):
第1步:准备RAG——用户偏好档案
-
创建一个
user_preference.txt文件,内容如:“该用户偏好中式餐饮,预算中等,不喜欢过于拥挤的景点。” -
使用 LangChain 将其切块、向量化,并存入向量数据库(如Chroma)。
第2步:定义Agent的工具
from langchain.agents import tool
@tool
def get_weather(city: str) -> str:
"""根据城市名获取实时天气。"""
# 调用一个真实的天气API,如 OpenWeatherMap
return f"{city}的天气是晴朗,25度。"
@tool
def search_restaurants(city: str, keyword: str) -> str:
"""根据城市和关键词搜索餐厅。"""
# 调用大众点评或Google Places的API
return f"在北京找到以下美食餐厅:全聚德烤鸭,护国寺小吃..."
第3步:构建LangChain Agent
import os
from langchain.agents import AgentType, initialize_agent
from langchain.chat_models import ChatOpenAI # 或者其它模型
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.schema import SystemMessage
# 1. 初始化大模型
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 2. 加载RAG向量数据库
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
# 3. 定义工具列表。注意:我们将RAG的检索器也封装成一个工具!
tools = [get_weather, search_restaurants]
# 注: 高级用法中,可以用 LangChain 的 `tool` 装饰器将 retriever 也包装成一个工具。
# 4. 创建系统提示,告诉Agent它的角色和能力
system_message = SystemMessage(content="你是一个旅行规划专家。你可以先查阅用户偏好档案,然后使用工具获取实时信息来规划行程。")
# 5. 初始化Agent
agent = initialize_agent(
tools,
llm,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, # 使用ReAct模式的Agent
verbose=True, # 打印出详细的思考过程,便于调试
system_message=system_message,
handle_parsing_errors=True # 处理解析错误
)
# 6. 运行Agent!
result = agent.run(“帮我规划一个去北京的3天美食之旅”)
print(result)
当你运行这个程序时,在 verbose 模式下你会看到类似这样的思考过程:
Thought: 用户需要规划一个北京的美食之旅。我需要先了解他有什么偏好。
Action: 查阅用户偏好档案
Observation: 用户偏好中式餐饮,预算中等...
Thought: 好的,我知道他喜欢中餐。现在我需要知道北京的天气来决定室内还是室外活动。
Action: get_weather
Action Input: {"city": "北京"}
Observation: 北京的天气是晴朗,25度。
Thought: 天气很好,可以安排一些户外小吃街。现在我需要找一些具体的餐厅。
Action: search_restaurants
Action Input: {"city": "北京", "keyword": "美食"}
Observation: 在北京找到以下美食餐厅:全聚德烤鸭,护国寺小吃...
Thought: 现在我有了所有信息,可以综合用户偏好、天气和餐厅信息,生成一个3天的行程了。
Final Answer: 为您规划如下:第一天...
总结与展望
-
RAG:模型的知识源,负责“知”。
-
Agent:模型的决策脑,负责“思”和“行”。
-
LangChain:应用的骨架,负责“连”和“控”。
未来展望:这三者正在深度融合。未来的AI应用将是:一个由LangChain这类框架编排的、具备RAG长期记忆和领域知识、并能像Agent一样自主完成复杂任务的超级智能体。
更多推荐
所有评论(0)