首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >新版langchain1.x+RAG+多智能体协作 从入门到实战

新版langchain1.x+RAG+多智能体协作 从入门到实战

原创
作者头像
97it-3
发布2026-06-11 18:24:03
发布2026-06-11 18:24:03
1160
举报

新版 LangChain 1.x + RAG + 多智能体协作:从入门到实战

2026年,大模型应用开发已经从"能不能做"进入了"怎么做好"的阶段。LangChain 1.x 以 LangGraph 为底层引擎,配合 RAG 检索增强与多智能体协作,构成了当下最完整的 AI 应用开发技术栈。


一、为什么是 LangChain 1.x?

LangChain 由 Harrison Chase 于 2022 年 10 月发起,从一个 800 行代码的个人项目,成长为全球增长最快的开源项目之一。但真正让它脱胎换骨的,是 1.x 版本的推倒重来。

维度

0.x 时代

1.x 时代

底层编排

DAG 有向无环图

LangGraph 图结构,支持循环、分支、人工介入

API 数量

十几种(create_react_agent、create_json_agent…)

统一为 create_agent

智能体能力

线性链式调用

ReAct 推理循环 + 中间件可控 + 持久化执行

架构层次

扁平混乱

三层架构:模型抽象 → LCEL 工作流 → Agent API

一句话总结:LangChain 1.x 本质上是 LangGraph 的封装,在保留品牌生态的同时,提供了更强大、更可控的智能体开发体验。


二、5 分钟搞定环境搭建(Python 3.10+)

代码语言:javascript
复制
bash# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 一键安装核心栈
pip install -U langchain langgraph langchain-community langchain-openai chromadb python-dotenv

国内模型接入(无需 OpenAI 账号)

LangChain 1.x 通过 langchain[openai] 兼容所有 OpenAI 协议的国内服务:

模型

安装方式

接入地址

DeepSeek

langchain[openai]

base_url="https://api.deepseek.com"

通义千问

langchain[openai]

base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"

GLM 智谱

langchain[openai]

base_url="https://open.bigmodel.cn/api/paas/v4"

代码语言:javascript
复制
env# .env 配置
OPENAI_API_KEY=sk-xxxxx
# 或
DEEPSEEK_API_KEY=sk-xxxxx
TAVILY_API_KEY=tvly-xxxxx  # 多智能体搜索场景用

三、RAG 入门:让大模型"有据可查"

3.1 RAG 到底在干什么?

用一张图讲透:

代码语言:javascript
复制
📂 离线准备(图书馆上架新书)
文档加载 → 切块 → 向量化 → 存入向量数据库

💬 在线问答(读者来借书)
用户提问 → 向量化 → 库里找相似内容 → 打包给大模型 → 输出答案

RAG 解决的是大模型的四大顽疾:知识过时、领域盲区、幻觉编造、数据安全。

3.2 核心代码实战

代码语言:javascript
复制
pythonimport os
from langchain_openai import ChatOpenAI
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# ── 1. 文档加载 ──
loader = PyPDFLoader("企业知识库.pdf")
docs = loader.load()  # 返回 List[Document]

# ── 2. 文本切分 ──
# 最佳实践: 256-512 token, overlap 20-50
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50)
splits = splitter.split_documents(docs)

# ── 3. 向量化 + 入库 ──
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=OpenAIEmbeddings(),
    persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})

# ── 4. 构建 RAG 链 ──
llm = ChatOpenAI(
    model="qwen3-max",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
prompt = ChatPromptTemplate.from_template("""
你是一个企业知识助手。请根据以下参考资料回答问题。
如果资料中没有答案,请明确说"不知道"。

参考资料: {context}
用户问题: {question}
""")

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

3.3 RAG 标准 7 步流程

步骤

说明

关键技术点

原始文档加载

读取 PDF、Word、CSV、HTML 等

PyPDFLoader、UnstructuredLoader

文本切块

将长文档切分为语义完整的短文本

chunk_size=512, overlap=50

文本向量化

用 Embedding 模型将文本转为向量

OpenAIEmbeddings、BGE

向量数据库入库

存储到向量数据库,建立索引

Chroma、FAISS、Milvus

用户 Query 查询

问题向量化

同一 Embedding 模型

向量相似度检索

余弦相似度召回 Top-K 相关文档

k=4~8

召回文档拼接 + 生成

拼接至 Prompt,大模型生成答案

LCEL 链式调用

关键提醒: 问题向量化必须使用与入库完全相同的 Embedding 模型,否则检索将完全失效。


四、Agent 智能体:让 AI 学会"思考-行动-观察"

4.1 最简代码示例

代码语言:javascript
复制
pythonfrom langchain.agents import create_agent
from langchain_openai import ChatOpenAI

def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"

llm = ChatOpenAI(
    model="qwen3-max",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.environ.get("CHAT_OPENAI_API_KEY"),
    streaming=True,
)

agent = create_agent(
    model=llm,
    tools=[get_weather],
    system_prompt="You are a helpful assistant",
)

result = agent.invoke({"messages": [{"role": "user", "content": "what is the weather in sf"}]})
print(result["messages"][-1].content)
# 输出: It's always sunny in San Francisco!

4.2 Agent 的执行机制:ReAct 决策循环

agent.invoke() 启动后,内部运行一个循环:

代码语言:javascript
复制
思考(LLM Node) → 行动(可选) → 观察结果 → 再思考 → ... → 最终回答
  • Tool 只是"行动"环节的备选项,只有当模型认为需要外部信息时才会调用
  • 0.x 时代有十几种 API(create_react_agent、create_json_agent…),1.x 统一为 create_agent

五、1.x 重磅新特性

5.1 Middleware 中间件系统——细粒度流程管控

这是 1.x 版本的标志性新增功能,无需修改 Agent 与工具源码,在请求前后挂载钩子函数。

① SummarizationMiddleware:对话自动摘要

超长多轮对话逼近 token 上限时,自动压缩历史会话:

代码语言:javascript
复制
pythonfrom langchain.agents import create_agent
from langchain_openai import ChatOpenAI

agent = create_agent(
    model=ChatOpenAI(model="gpt-4o", api_key="..."),
    tools=[weather_tool, cal_tool],
    middleware=[
        SummarizationMiddleware(
            model="gpt-4o-mini",
            trigger=("tokens", 4000),  # 4000 token 触发摘要
            keep=("messages", 20)       # 保留最后 20 条原始消息
        )
    ]
)
② HumanInTheLoopMiddleware:人工介入审批

高风险操作(数据库写入、文件修改、金融运算)暂停流程,人工审批后再执行:

代码语言:javascript
复制
pythonfrom langchain.agents import create_agent
from langchain_openai import ChatOpenAI

agent = create_agent(
    model=ChatOpenAI(model="gpt-4o", api_key="..."),
    tools=[write_file_tool, execute_sql_tool, read_data_tool],
    middleware=[
        HumanInTheLoopMiddleware(
            interrupt_on={
                "writefile": True,   # 文件写入需要人工审批
                "executesql": True,  # SQL 执行需要审批
                "read_data": False   # 只读无需审批
            }
        )
    ]
)

5.2 统一 content_blocks——标准化输出

不同厂商大模型返回格式不统一?1.x 新增 content_blocks 属性,全模型输出统一结构化解析,自动区分推理思考段(reasoning)与正文文本(text):

代码语言:javascript
复制
pythonfrom langchain.messages import AIMessage

msg = AIMessage(...)  # 统一结构化字段,无视底层模型来源
blocks = msg.content_blocks  # 可直接遍历 reasoning、text 字段

5.3 原生结构化输出——Pydantic 自动映射 JSON

支持三种配置策略,直接绑定 Pydantic 模型,模型自动按定义字段返回结构化数据:

代码语言:javascript
复制
pythonfrom pydantic import BaseModel, Field

class MeetingAction(BaseModel):
    action: str = Field(description="提取的会议行动项")
    priority: str = Field(description="优先级: high/medium/low")
    assignee: str = Field(description="负责人")

# 三种返回策略:
# ProviderStrategy: 利用模型厂商原生 JSON 格式能力(GPT 系列)
# ToolStrategy: 通过工具调用实现结构化,兼容全品类大模型
# 自动策略: 传入 Pydantic 实体,框架自动择优

六、多智能体协作:让 AI 团队像公司一样运转

6.1 官方五种实现模式

模式

核心思想

适用场景

Subagents

主智能体统一管控,子智能体作为工具被调用

集中式控制,并行执行

Handoffs

工具调用更新状态变量,触发智能体切换

动态流程,状态驱动

6.2 Subagents 实战:基于 LangGraph 构建搜索工作流

代码语言:javascript
复制
pythonfrom typing import Annotated, TypedDict
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_community.client.tavily import TavilyClient

# 定义状态结构
class SearchState(TypedDict):
    messages: Annotated[list, add_messages]
    user_query: str
    search_query: str
    search_results: str
    final_answer: str
    step: str

# 初始化
tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
llm = ChatOpenAI(model="gpt-4o-mini", api_key="...", temperature=0.7)

# 构建 LangGraph 工作流
workflow = StateGraph(SearchState)

# 节点1: 理解查询,生成搜索关键词
def understand_query_node(state: SearchState) -> SearchState:
    user_message = ""
    for msg in reversed(state["messages"]):
        if isinstance(msg, HumanMessage):
            user_message = msg.content
            break
    
    prompt = f"""分析用户的查询:"{user_message}"。
请完成: 1.总结用户需求 2.生成搜索关键词
格式: 理解:[总结] 搜索词:[关键词]"""
    
    response = llm.invoke([SystemMessage(content=prompt)])
    return {**state, "search_query": response.content, "step": "search"}

# 节点2: Tavily 搜索
def search_node(state: SearchState) -> SearchState:
    results = tavily_client.search(state["search_query"], max_results=5)
    return {**state, "search_results": results, "step": "answer"}

# 节点3: 生成最终答案
def answer_node(state: SearchState) -> SearchState:
    prompt = f"""根据以下搜索结果回答用户问题:
    查询: {state['user_query']}
    结果: {state['search_results']}"""
    response = llm.invoke([SystemMessage(content=prompt)])
    return {**state, "final_answer": response.content, "step": "done"}

# 组装图
workflow.add_node("understand", understand_query_node)
workflow.add_node("search", search_node)
workflow.add_node("answer", answer_node)
workflow.set_entry_point("understand")
workflow.add_edge("understand", "search")
workflow.add_edge("search", "answer")
workflow.add_edge("answer", END)

app = workflow.compile()

6.3 多智能体角色分工

智能体

职责

用户交互智能体

理解需求,分发任务

RAG 检索智能体

从知识库高效检索信息

数据分析智能体

处理和解释数据

领域专家智能体

法律/医疗/金融深度解答

任务规划智能体

协调其他智能体工作流程


七、实战建议:从易到难的学习路径

阶段

目标

推荐项目

Starter Agents

跑通第一个 AI 应用

openai-chat-assistant(~100行代码)

Advanced + RAG

掌握工作流与外部知识

博客视频写作器、企业知识库

Multi-Agent Teams

模拟团队协作

CrewAI 内容创作团队(主编+写手+编辑)

Multimodal Apps

突破纯文本界限

图片理解→动画生成

核心原则:不要一口气吃成胖子。 先跑通 2-3 个 Starter Agents,再深入一个业务相关的 RAG 项目,最后挑战多智能体。


八、生产级落地的关键考量

维度

建议

向量数据库选型

原型用 Chroma(纯内存),生产评估 Pinecone(全托管)或 Weaviate(功能强大)

本地模型

高频调用用 Ollama + Llama,控制成本 + 数据隐私

检索准确率

RAG 的核心是检索,没有任何理论能保证 100% 最优,需要持续调优

结构化输出

优先用 ProviderStrategy(GPT 系列),国内模型用 ToolStrategy

中间件优先级

SummarizationMiddleware > HumanInTheLoopMiddleware(先控成本,再控风险)


写在最后

LangChain 1.x 不是又一个 API 教程的堆砌,而是一套经过生产验证的 AI 应用开发标准流水线。三层架构 + LangGraph 引擎 + 中间件可控 + 统一 Agent API,让你从"能跑通"直接跨越到"能落地"。

2026 年的大模型应用开发,拼的不是谁会调 API,而是谁能把 RAG、Agent、多智能体协作这三块积木搭成真正解决问题的系统。

现在,环境已经搭好,代码已经就位——剩下的,就是你的想象力了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新版 LangChain 1.x + RAG + 多智能体协作:从入门到实战
    • 一、为什么是 LangChain 1.x?
    • 二、5 分钟搞定环境搭建(Python 3.10+)
      • 国内模型接入(无需 OpenAI 账号)
    • 三、RAG 入门:让大模型"有据可查"
      • 3.1 RAG 到底在干什么?
      • 3.2 核心代码实战
      • 3.3 RAG 标准 7 步流程
    • 四、Agent 智能体:让 AI 学会"思考-行动-观察"
      • 4.1 最简代码示例
      • 4.2 Agent 的执行机制:ReAct 决策循环
    • 五、1.x 重磅新特性
      • 5.1 Middleware 中间件系统——细粒度流程管控
      • 5.2 统一 content_blocks——标准化输出
      • 5.3 原生结构化输出——Pydantic 自动映射 JSON
    • 六、多智能体协作:让 AI 团队像公司一样运转
      • 6.1 官方五种实现模式
      • 6.2 Subagents 实战:基于 LangGraph 构建搜索工作流
      • 6.3 多智能体角色分工
    • 七、实战建议:从易到难的学习路径
    • 八、生产级落地的关键考量
    • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档