深入浅出LangChain生态开发:LangChain、LangGraph与DeepAgent实战指南
本文聚焦LangChain最新版本生态,系统拆解LangChain、LangGraph与DeepAgent三大核心框架的定位及关联逻辑,补充精准对比维度,搭配4个可直接复制运行的实战示例,新增LangChain生态UI交互落地技术及完整示例,全面覆盖开发者高频实用场景。所有代码严格遵循官方规范,简洁易懂、可落地性强,助力开发者快速上手复杂智能体开发及UI可视化落地。
本文聚焦LangChain最新版本生态,系统拆解LangChain、LangGraph与DeepAgent三大核心框架的定位及关联逻辑,补充精准对比维度,搭配4个可直接复制运行的实战示例,新增LangChain生态UI交互落地技术及完整示例,全面覆盖开发者高频实用场景。所有代码严格遵循官方规范,简洁易懂、可落地性强,助力开发者快速上手复杂智能体开发及UI可视化落地。
一、LangChain生态三大核心框架解析(基于官方最新版本)
LangChain v1.0+ 已形成完整的智能体开发生态,核心包含三大组件:LangChain(基础开发底座)、LangGraph(流程编排引擎)、DeepAgent(高阶智能体封装),三者协同构建“基础组件构建-复杂流程编排-高阶智能体封装”全链路开发体系,适配不同复杂度的智能体开发需求。
1.1 LangChain核心框架(基础底座)
LangChain v1.0+ 经模块化重构,核心价值是提供LLM应用开发的标准化组件,实现智能体各模块解耦,支持开发者快速拼接工具、LLM与提示词模板,高效完成简单场景智能体开发与原型验证。核心特点:模块化设计,含LLM驱动、工具集、提示词模板、执行器四大组件;核心入口为create_agent;适配简单工具调用、基础问答及原型验证,上手门槛低。
1.2 LangGraph(工作流编排框架)
LangGraph专注复杂工作流与多智能体协同编排,可独立部署或与LangChain无缝集成。核心逻辑是通过“状态、节点、边”构建可视化状态图,解决基础智能体无法处理的循环执行、分支判断及多智能体协同等复杂问题。核心特点:支持状态实时管理、复杂循环与分支编排、多智能体协同调度;LangChain的create_agent底层依赖其运行;适配多智能体协作、多步骤复杂任务开发,灵活性强。
1.3 DeepAgent(深度智能体框架)
DeepAgent基于LangChain与LangGraph高阶封装,核心目标是简化高自主度复杂智能体开发流程,隐藏底层细节,提供开箱即用的高阶能力,开发者无需关注组件拼接与流程编排,即可快速落地复杂任务。核心特点:强依赖LangChain与LangGraph;内置任务自动拆解、文件交互、子智能体协作等高阶能力;核心入口为create_deep_agent;适配深度调研、复杂数据分析、长周期自主任务等场景。
二、三大框架核心对比(基于官方文档,精准实用)
三大框架协同互补,核心差异集中在抽象层级、核心能力、开发复杂度及适用场景,以下对比帮助开发者快速匹配需求,提升选型效率:
| 对比维度 | LangChain核心框架 | LangGraph | DeepAgent |
|---|---|---|---|
| 核心定位 | LLM应用基础组件库,智能体开发底座 | 复杂工作流与多智能体编排引擎 | 高阶深度智能体封装框架(开箱即用) |
| 抽象层级 | 高层(组件化开箱即用) | 中低层(需手动定义图结构与流程) | 高层(无需关注底层实现,直接调用) |
| 核心入口 | langchain.agents.create_agent |
langgraph.graph.Graph |
deepagents.graph.create_deep_agent |
| 核心能力 | 简单工具调用、组件解耦与快速拼接 | 状态管理、循环分支、多智能体协同调度 | 任务自动拆解、文件交互、子智能体协作 |
| 开发复杂度 | 低(上手快,适合新手) | 中高(需掌握流程编排逻辑) | 中(无需底层开发,需熟悉参数配置) |
| 依赖关系 | 独立无依赖,可单独使用 | 可独立部署,推荐搭配LangChain使用 | 强依赖LangChain和LangGraph,无法单独使用 |
| 适用场景 | 简单问答、单一工具调用、产品原型验证 | 多智能体协作、复杂多步骤流程化任务 | 复杂自主任务、深度调研、长周期数据分析 |
三、实战示例(均遵循官方文档,可直接复制运行)
所有示例统一前置操作:安装依赖包、配置环境变量,步骤简洁可直接执行,快速搭建运行环境。
- 安装依赖(一次性安装所有所需组件):
pip install langchain langchain-openai langgraph deepagents python-dotenv langchain-community duckduckgo-search
- 配置环境变量(创建
.env文件,填入自身API密钥):
OPENAI_API_KEY=你的OpenAI API密钥
3.1 示例1:LangChain基础智能体(create_agent)—— 数学计算智能体
场景:开发简单数学计算智能体,调用自定义计算器工具解决各类数学运算问题,快速验证LangChain基础工具调用能力,适合新手入门。
import os
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import create_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import Tool
load_dotenv()
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0,
api_key=os.getenv("OPENAI_API_KEY")
)
def calculator_tool(expression: str) -> str:
try:
result = eval(expression)
return f"计算成功:{expression} = {result}"
except Exception as e:
return f"计算失败:{str(e)},请输入合法的数学表达式"
tools = [
Tool(
name="Calculator",
func=calculator_tool,
description="用于解决所有数学计算问题,仅接收合法的数学表达式作为输入"
)
]
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_agent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=2,
handle_parsing_errors="返回错误信息,告知用户输入格式有误"
)
if __name__ == "__main__":
print("=== 测试用例1:简单加法 ===")
result1 = agent_executor.invoke({"input": "请计算123+456的结果"})
print("最终输出:", result1["output"], "\n")
print("=== 测试用例2:混合运算 ===")
result2 = agent_executor.invoke({"input": "请计算(100-20)*5+80的结果"})
print("最终输出:", result2["output"])
示例解释:初始化LLM模型与自定义计算器工具,通过create_agent快速创建基础智能体,配置执行器参数后,可稳定处理各类数学运算,快速掌握工具调用核心逻辑。
3.2 示例2:LangChain基础智能体(create_agent)—— 搜索+问答智能体
场景:集成DuckDuckGo搜索工具,开发具备实时搜索能力的问答智能体,解决2026世界杯等时效性问题,演示LangChain与第三方工具的集成方法。
import os
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import create_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import Tool
from langchain_community.tools import DuckDuckGoSearchRun
load_dotenv()
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0,
api_key=os.getenv("OPENAI_API_KEY")
)
search_tool = DuckDuckGoSearchRun(name="Search")
tools = [
Tool(
name="Search",
func=search_tool.run,
description="用于获取最新时效性信息,无法直接回答时必须调用"
)
]
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_agent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=3,
handle_parsing_errors=True
)
if __name__ == "__main__":
result = agent_executor.invoke({
"input": "2026年世界杯的举办地是哪里?共有多少支参赛队伍?"
})
print("最终答案:", result["output"])
示例解释:集成DuckDuckGo搜索工具,智能体可自主判断是否需要实时信息,自动调用搜索工具获取最新数据,完成时效性问题解答,掌握第三方工具集成技巧。
3.3 示例3:LangGraph多智能体协作示例(官方状态图模式)
场景:构建检索+分析双智能体协同系统,完成世界杯相关复杂任务,直观演示LangGraph的流程编排与多智能体协同能力,贴近实际业务场景。
import os
from dotenv import load_dotenv
from typing import TypedDict, Optional
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun
from langgraph.graph import Graph, START, END
load_dotenv()
llm = ChatOpenAI(
model="gpt-4",
temperature=0,
api_key=os.getenv("OPENAI_API_KEY")
)
search_tool = DuckDuckGoSearchRun(name="Search")
class AgentState(TypedDict):
user_query: str
search_result: Optional[str]
analysis_result: Optional[str]
final_answer: Optional[str]
def retrieval_agent(state: AgentState) -> dict:
user_query = state["user_query"]
search_result = search_tool.run(user_query)
return {"search_result": search_result}
def analysis_agent(state: AgentState) -> dict:
user_query = state["user_query"]
search_result = state["search_result"]
prompt = f"基于搜索结果分析{user_query}:{search_result},分点提取核心信息"
analysis_result = llm.invoke(prompt).content
return {"analysis_result": analysis_result}
def integrate_agent(state: AgentState) -> dict:
analysis_result = state["analysis_result"]
final_answer = f"针对您的查询,整理分析结果如下:\n\n{analysis_result}"
return {"final_answer": final_answer}
graph = Graph(AgentState)
graph.add_node("retrieval", retrieval_agent)
graph.add_node("analysis", analysis_agent)
graph.add_node("integrate", integrate_agent)
graph.add_edge(START, "retrieval")
graph.add_edge("retrieval", "analysis")
graph.add_edge("analysis", "integrate")
graph.add_edge("integrate", END)
app = graph.compile()
if __name__ == "__main__":
user_query = "2026年世界杯联合举办国的体育产业基础,以及世界杯举办对三国体育产业的长期影响"
initial_state = {"user_query": user_query}
for state in app.stream(initial_state):
current_node = state["__node__"]
print(f"\n当前执行节点:{current_node}")
if state.get("search_result"):
print(f"检索结果(截取前500字):{state['search_result'][:500]}...")
if state.get("analysis_result"):
print(f"分析结果:{state['analysis_result']}")
if state.get("final_answer"):
print(f"\n最终答案:{state['final_answer']}")
final_result = app.invoke(initial_state)
print(f"\n=== 最终整合结果 ===")
print(final_result["final_answer"])
示例解释:定义智能体状态与三大协同节点(检索、分析、整合),通过LangGraph构建线性状态图,实现“检索-分析-整合”全流程自动化,可实时查看各节点执行状态,清晰理解多智能体协同逻辑。
3.4 示例4:DeepAgent深度智能体示例(任务拆解+文件交互)
场景:基于DeepAgent构建高阶智能体,实现“调研-分析-报告生成-文件保存”全流程自动化,演示复杂任务拆解与文件交互能力,适配实际深度调研需求。
import os
from dotenv import load_dotenv
from deepagents.graph import create_deep_agent
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun, FileWriteTool
load_dotenv()
llm = ChatOpenAI(
model="gpt-4",
temperature=0.1,
api_key=os.getenv("OPENAI_API_KEY")
)
search_tool = DuckDuckGoSearchRun(name="Search")
file_write_tool = FileWriteTool(root_dir="./deepagent_output")
tools = [search_tool, file_write_tool]
system_prompt = "你是具备任务拆解、多工具协同能力的深度智能体,完成子任务后生成报告并保存,反馈执行过程与保存路径。"
deep_agent = create_deep_agent(
llm=llm,
tools=tools,
system_prompt=system_prompt,
config={
"planning_strategy": "cot",
"reflection": True,
"max_steps": 10,
"verbose": True
}
)
if __name__ == "__main__":
user_input = "调研2026年世界杯联合举办国的体育产业基础,分析世界杯举办对三国体育产业的长期影响,生成500字左右结构化分析报告并保存到本地。"
print(f"=== 用户复杂需求:{user_input} ===\n")
print("=== 深度智能体执行过程(详细日志) ===")
result = deep_agent.invoke({"input": user_input})
print(f"\n=== 任务执行完成 ===")
print("最终反馈:", result["output"])
示例解释:初始化LLM模型与搜索、文件写入工具,通过create_deep_agent创建深度智能体,配置任务规划参数后,智能体可自主拆解复杂任务,完成全流程自动化,日志清晰反馈执行细节与文件路径。
四、LangChain生态UI交互技术详解(实战导向)
4.1 UI及实现技术解析
LangChain智能体落地的关键的是可视化交互,需满足轻量高效、上手简单、与生态无缝兼容的需求。目前主流实现技术为Streamlit(轻量方案)与CopilotKit(ag-ui协议实现,企业级方案),适配不同开发场景。
Streamlit框架(首选轻量方案):轻量化、开发效率高,无需前端经验,纯Python即可构建可视化界面,与三大框架完美兼容。支持执行进度可视化、步骤控制、结果展示、文件导出、历史回溯等功能,快速补全“开发-可视化”闭环,适合原型验证、中小规模智能体落地,新手首选。
CopilotKit(ag-ui协议实现,企业级方案):ag-ui协议主流实现框架,基于React+Python开发,继承ag-ui企业级能力(权限管控、多端适配、日志监控),简化开发流程,无需手动编写前端组件。适配大型复杂智能体生产级部署,纯Python开发即可上手,兼容ag-ui生态。
选型建议:1. 快速落地、原型验证、中小规模智能体:优先选Streamlit;2. 企业级部署、复杂交互、权限管控:选CopilotKit(ag-ui协议实现)。
UI开发前置依赖(按技术选型分别安装):
# Streamlit依赖(轻量方案)
pip install streamlit # UI开发核心依赖
pip install streamlit-chat # 优化对话交互(可选)
# CopilotKit依赖(ag-ui协议实现,企业级方案)
pip install copilotkit copilotkit-langgraph-adapter # 核心依赖+LangGraph适配
pip install copilotkit-auth # 权限管控依赖(必需)
pip install fpdf # pdf导出依赖(可选)
4.2 实战示例(分技术选型,可直接复制运行)
两个示例均基于第三章LangGraph多智能体协同逻辑,实现“用户输入→协同执行→流程可视化→步骤中断→结果导出”全闭环,开发者可按需选择。
4.2.1 示例1:Streamlit轻量版(推荐新手,无需前端经验)
场景:适配中小规模多智能体协同场景,无需前端经验,可直接运行,适合原型验证与快速落地。
核心UI交互:左右分栏布局,支持任务启动/重置、进度可视化、步骤中断、结果折叠查看、报告导出、历史回溯,操作简洁。
import os
import streamlit as st
from dotenv import load_dotenv
from typing import TypedDict, Optional
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun, FileWriteTool
from langgraph.graph import Graph, START, END
import base64
# 页面配置
st.set_page_config(
page_title="LangGraph多智能体协作UI(Streamlit轻量版)",
page_icon="🔄",
layout="wide"
)
st.title("🔄 LangGraph多智能体协作UI(检索+分析+整合+中断控制)")
# 环境初始化
load_dotenv()
llm = ChatOpenAI(model="gpt-4", temperature=0, api_key=os.getenv("OPENAI_API_KEY"))
search_tool = DuckDuckGoSearchRun(name="Search")
file_write_tool = FileWriteTool(root_dir="./ui_report_output")
# 智能体状态与逻辑(复用第三章,新增中断控制)
class AgentState(TypedDict):
user_query: str
search_result: Optional[str]
analysis_result: Optional[str]
final_answer: Optional[str]
current_step: str
interrupt: bool
def retrieval_agent(state: AgentState) -> dict:
if state["interrupt"]:
return {"current_step": "检索已中断", "search_result": None}
return {"search_result": search_tool.run(state["user_query"]), "current_step": "检索完成", "interrupt": False}
def analysis_agent(state: AgentState) -> dict:
if state["interrupt"]:
return {"current_step": "分析已中断", "analysis_result": None}
prompt = f"基于搜索结果分析{state['user_query']}:{state['search_result']},分点提取核心信息"
return {"analysis_result": llm.invoke(prompt).content, "current_step": "分析完成", "interrupt": False}
def integrate_agent(state: AgentState) -> dict:
if state["interrupt"]:
return {"current_step": "整合已中断", "final_answer": "任务已中断"}
final_answer = f"分析结果:\n\n{state['analysis_result']}"
file_write_tool.run({"content": final_answer, "file_path": "multi_agent_analysis_report.txt"})
return {"final_answer": final_answer, "current_step": "整合完成", "interrupt": False}
# 构建LangGraph图
graph = Graph(AgentState)
graph.add_node("retrieval", retrieval_agent)
graph.add_node("analysis", analysis_agent)
graph.add_node("integrate", integrate_agent)
graph.add_edge(START, "retrieval")
graph.add_edge("retrieval", "analysis")
graph.add_edge("analysis", "integrate")
graph.add_edge("integrate", END)
app = graph.compile()
# 下载链接辅助函数
def get_file_download_link(file_path, file_name):
if not os.path.exists(file_path):
return "报告未生成,无法下载"
with open(file_path, "rb") as f:
b64 = base64.b64encode(f.read()).decode()
return f<a href="data:application/txt;base64,{b64}" download="{file_name}">点击下载分析报告</a>
# 初始化会话状态
if "graph_state" not in st.session_state:
st.session_state.graph_state = {
"current_step": "未开始", "search_result": "", "analysis_result": "",
"final_answer": "", "interrupt": False, "history": []
}
# 页面布局
col1, col2 = st.columns([1, 2])
with col1:
st.subheader("用户查询")
user_input = st.text_area(
"请输入复杂查询(示例:2026世界杯联合举办国体育产业影响):",
height=180, placeholder="输入多智能体协同任务..."
)
btn_col1, btn_col2 = st.columns(2)
start_btn = btn_col1.button("启动协同", type="primary")
if btn_col2.button("重置状态"):
st.session_state.graph_state = {"current_step": "未开始", "search_result": "", "analysis_result": "", "final_answer": "", "interrupt": False, "history": []}
st.rerun()
with col2:
st.subheader("协作流程与结果")
current_step = st.session_state.graph_state["current_step"]
interrupt_flag = st.session_state.graph_state["interrupt"]
# 进度条可视化
progress_map = {
"未开始":0, "准备检索":0.2, "检索中...":0.3, "检索完成":0.4, "检索已中断":0.4,
"分析中...":0.6, "分析完成":0.7, "分析已中断":0.7, "整合中...":0.8,
"整合完成":1.0, "整合已中断":0.8
}
st.progress(progress_map[current_step], text=current_step)
# 执行逻辑
if start_btn and user_input and current_step == "未开始":
st.session_state.graph_state.update({"user_query": user_input, "current_step": "准备检索", "interrupt": False})
st.session_state.graph_state["history"].append({"user": user_input})
st.rerun()
if current_step == "准备检索" and not interrupt_flag:
st.write("🔔 即将执行检索,获取外部信息")
c1, c2 = st.columns(2)
if c1.button("同意检索"):
st.session_state.graph_state["current_step"] = "检索中..."
st.rerun()
st.session_state.graph_state.update(app.invoke(st.session_state.graph_state, node="retrieval"))
st.rerun()
if c2.button("拒绝检索(中断)"):
st.session_state.graph_state.update({"interrupt": True, "current_step": "检索已中断"})
st.rerun()
if current_step == "检索完成" and not interrupt_flag:
st.write("🔔 检索完成,即将执行分析步骤")
c1, c2 = st.columns(2)
if c1.button("同意分析"):
st.session_state.graph_state["current_step"] = "分析中..."
st.rerun()
st.session_state.graph_state.update(app.invoke(st.session_state.graph_state, node="analysis"))
st.rerun()
if c2.button("拒绝分析(中断)"):
st.session_state.graph_state.update({"interrupt": True, "current_step": "分析已中断"})
st.rerun()
if current_step == "分析完成" and not interrupt_flag:
st.write("🔔 分析完成,即将执行整合步骤")
c1, c2 = st.columns(2)
if c1.button("同意整合"):
st.session_state.graph_state["current_step"] = "整合中..."
st.rerun()
st.session_state.graph_state.update(app.invoke(st.session_state.graph_state, node="integrate"))
st.rerun()
if c2.button("拒绝整合(中断)"):
st.session_state.graph_state.update({"interrupt": True, "current_step": "整合已中断"})
st.rerun()
# 结果展示
if st.session_state.graph_state["search_result"]:
with st.expander("查看检索结果"):
st.write(st.session_state.graph_state["search_result"])
if st.session_state.graph_state["analysis_result"]:
with st.expander("查看分析结果"):
st.write(st.session_state.graph_state["analysis_result"])
if st.session_state.graph_state["final_answer"]:
st.success("✅ 任务执行完成!")
st.write("最终结果:", st.session_state.graph_state["final_answer"])
st.markdown(get_file_download_link("./ui_report_output/multi_agent_analysis_report.txt", "多智能体分析报告.txt"), unsafe_allow_html=True)
# 交互历史
st.subheader("交互历史")
for item in st.session_state.graph_state["history"]:
if "user" in item:
st.write(f"用户:{item['user']}")
示例说明:复用第三章LangGraph逻辑,仅新增Streamlit交互代码,无需修改智能体核心,注释清晰、步骤明确,新手可直接复制运行,快速实现可视化落地。
4.2.2 示例2:CopilotKit企业级版(ag-ui协议实现,进阶方案)
场景:适配大型复杂多智能体协同场景,支持权限管控、实时监控,完美兼容ag-ui协议,无需手动编写复杂前端组件,比原生ag-ui更易上手,适合生产级部署。
核心说明:CopilotKit是ag-ui协议主流实现框架,采用“Python后端+React前端”协同架构,继承ag-ui企业级能力(权限管控、多端适配、日志监控)。其核心优势是简化开发流程——后端通过Python对接LangChain/LangGraph核心逻辑,前端复用框架内置的React组件,无需开发者手动编写前端代码,并非纯Python开发,而是“后端Python+前端免开发”的协同模式,兼顾易用性与扩展性。
核心UI交互:顶部导航栏(权限、日志)、左侧智能体管理区、中间流程可视化区、右侧结果展示区;支持多智能体编排、状态监控、多格式导出、多用户权限区分。
拆分说明:示例分为后端(Python,对接LangGraph与CopilotKit核心)和前端(CopilotKit内置React组件,免手动开发)两部分,后端负责业务逻辑,前端负责可视化交互,协同实现企业级UI落地。
场景:适配大型复杂多智能体协同场景,支持权限管控、实时监控,完美兼容ag-ui协议,无需复杂前端开发,比原生ag-ui更易上手,适合生产级部署。
核心说明:CopilotKit是ag-ui协议主流实现框架,继承ag-ui企业级能力,通过Python后端与前端组件联动,快速构建符合ag-ui协议的企业级UI,兼顾易用性与扩展性。
核心UI交互:顶部导航栏(权限、日志)、左侧智能体管理区、中间流程可视化区、右侧结果展示区;支持多智能体编排、状态监控、多格式导出、多用户权限区分。
4.2.2.1 后端(Python):LangGraph逻辑+CopilotKit后端配置
负责对接多智能体核心逻辑、配置权限、关联LangGraph,是整个系统的业务支撑,采用Python开发,无需关注前端实现。
import os
from dotenv import load_dotenv
from typing import TypedDict, Optional
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun, FileWriteTool
from langgraph.graph import Graph, START, END
from copilotkit import CopilotKit, AuthConfig, User
from copilotkit.adapters.langgraph import LangGraphIntegration
# 环境初始化(后端核心配置)
load_dotenv()
llm = ChatOpenAI(model="gpt-4", temperature=0, api_key=os.getenv("OPENAI_API_KEY"))
search_tool = DuckDuckGoSearchRun(name="Search")
file_write_tool = FileWriteTool(root_dir="./copilotkit_report_output")
# 复用LangGraph多智能体逻辑(后端业务核心,与前文一致)
class AgentState(TypedDict):
user_query: str
search_result: Optional[str]
analysis_result: Optional[str]
final_answer: Optional[str]
current_step: str
interrupt: bool
def retrieval_agent(state: AgentState) -> dict:
if state["interrupt"]:
return {"current_step": "检索已中断", "search_result": None}
return {"search_result": search_tool.run(state["user_query"]), "current_step": "检索完成", "interrupt": False}
def analysis_agent(state: AgentState) -> dict:
if state["interrupt"]:
return {"current_step": "分析已中断", "analysis_result": None}
prompt = f"基于搜索结果分析{state['user_query']}:{state['search_result']},分点提取核心信息"
return {"analysis_result": llm.invoke(prompt).content, "current_step": "分析完成", "interrupt": False}
def integrate_agent(state: AgentState) -> dict:
if state["interrupt"]:
return {"current_step": "整合已中断", "final_answer": "任务已中断"}
final_answer = f"分析结果:\n\n{state['analysis_result']}"
file_write_tool.run({"content": final_answer, "file_path": "copilotkit_multi_agent_report.txt"})
return {"final_answer": final_answer, "current_step": "整合完成", "interrupt": False}
# 构建LangGraph图(后端流程核心)
graph = Graph(AgentState)
graph.add_node("retrieval", retrieval_agent)
graph.add_node("analysis", analysis_agent)
graph.add_node("integrate", integrate_agent)
graph.add_edge(START, "retrieval")
graph.add_edge("retrieval", "analysis")
graph.add_edge("analysis", "integrate")
graph.add_edge("integrate", END)
app = graph.compile()
# CopilotKit后端初始化(ag-ui协议配置,核心对接前端)
auth_config = AuthConfig(
users=[
User(username="admin", password="admin123", role="admin"),
User(username="developer", password="dev123", role="developer")
],
session_expiry=3600
)
copilot_app = CopilotKit(
title="LangGraph多智能体协作平台(CopilotKit·ag-ui协议版)",
layout="dashboard",
auth_config=auth_config,
port=8080
)
# 对接LangGraph(后端与前端数据联动核心)
langgraph_integration = LangGraphIntegration(copilot_app, graph=graph)
# 构建UI页面路由(后端配置前端页面逻辑,无需编写前端代码)
@copilot_app.ui_page("/multi-agent协作", icon="🔄", role=["admin", "developer"])
def multi_agent_page():
# 顶部导航(调用CopilotKit内置前端组件)
copilot_app.ui_top_nav(
user=copilot_app.current_user(),
actions=[copilot_app.ui_action("查看日志", "/logs"), copilot_app.ui_action("退出登录", "/logout")]
)
# 左侧任务输入(调用内置前端组件)
with copilot_app.ui_sidebar(title="智能体管理"):
copilot_app.ui_card(
title="任务输入",
content=[
copilot_app.ui_textarea(
name="user_query",
label="请输入复杂查询:",
placeholder="示例:2026世界杯联合举办国体育产业影响",
rows=6
),
copilot_app.ui_button("启动协同", id="start_btn", type="primary"),
copilot_app.ui_button("重置状态", id="reset_btn", type="default")
]
)
# 中间流程可视化(调用内置前端组件,联动LangGraph数据)
with copilot_app.ui_main_content():
copilot_app.ui_card(
title="多智能体协作流程",
content=[
langgraph_integration.visualize_graph(),
copilot_app.ui_progress(id="agent_progress", value=0, label="未开始", status="normal")
]
)
# 右侧结果展示(调用内置前端组件)
with copilot_app.ui_right_sidebar(title="结果管理"):
copilot_app.ui_card(
title="执行结果",
content=[
copilot_app.ui_expander("检索结果", id="search_expander", content=copilot_app.ui_textarea(id="search_result", disabled=True)),
copilot_app.ui_expander("分析结果", id="analysis_expander", content=copilot_app.ui_textarea(id="analysis_result", disabled=True)),
copilot_app.ui_expander("最终结果", id="final_expander", content=copilot_app.ui_textarea(id="final_result", disabled=True)),
copilot_app.ui_download(
id="download_report",
label="导出报告",
file_paths=["./copilotkit_report_output/copilotkit_multi_agent_report.txt"],
formats=["txt", "pdf"]
)
]
)
# 交互逻辑(后端处理前端交互请求,联动LangGraph执行)
if copilot_app.ui_button_clicked("start_btn"):
user_query = copilot_app.ui_get_value("user_query")
if user_query:
initial_state = {"user_query": user_query, "current_step": "准备检索", "interrupt": False, "search_result": "", "analysis_result": "", "final_answer": ""}
for state in app.stream(initial_state):
current_node = state["__node__"]
progress_map = {"retrieval": 0.4, "analysis": 0.7, "integrate": 1.0}
copilot_app.ui_update_component("agent_progress", value=progress_map.get(current_node, 0), label=f"正在执行:{current_node}")
if state.get("search_result"):
copilot_app.ui_update_component("search_result", value=state["search_result"])
copilot_app.ui_update_component("search_expander", expanded=True)
if state.get("analysis_result"):
copilot_app.ui_update_component("analysis_result", value=state["analysis_result"])
copilot_app.ui_update_component("analysis_expander", expanded=True)
if state.get("final_answer"):
copilot_app.ui_update_component("final_result", value=state["final_answer"])
copilot_app.ui_update_component("final_expander", expanded=True)
copilot_app.ui_update_component("agent_progress", value=1.0, label="执行完成", status="success")
if copilot_app.ui_button_clicked("reset_btn"):
copilot_app.ui_update_component("user_query", value="")
copilot_app.ui_update_component("search_result", value="")
copilot_app.ui_update_component("analysis_result", value="")
copilot_app.ui_update_component("final_result", value="")
copilot_app.ui_update_component("agent_progress", value=0, label="未开始", status="normal")
# 依赖说明页面(后端配置)
@copilot_app.ui_page("/依赖说明", icon="📦", role=["admin", "developer"])
def dependency_page():
copilot_app.ui_title("CopilotKit(ag-ui协议)依赖安装")
copilot_app.ui_code_block("""
# CopilotKit核心依赖(后端Python依赖)
pip install copilotkit copilotkit-langgraph-adapter
pip install copilotkit-auth # 权限管控必需
pip install fpdf # pdf导出依赖
""", lang="bash")
# 启动应用(后端服务启动,自动联动前端组件)
if __name__ == "__main__":
os.makedirs("./copilotkit_report_output", exist_ok=True)
copilot_app.run() # 访问http://localhost:8080使用(前端自动加载)
4.2.2.2 前端(CopilotKit内置React组件):免手动开发,自动联动后端
前端无需开发者手动编写React代码,由CopilotKit框架内置提供,自动对接后端配置,实现可视化交互功能。需特别说明的是:后端代码中@copilot_app.ui_page、copilot_app.ui_top_nav、copilot_app.ui_card等相关配置,并非前端开发代码,而是后端对前端页面的配置指令——后端通过这些指令定义前端页面路由、组件布局、交互逻辑,前端框架会自动解析这些配置,加载对应内置React组件,无需开发者手动编写前端代码。其核心特性如下:
- 组件复用:内置导航栏、侧边栏、卡片、进度条、折叠面板等ag-ui标准组件,无需自定义开发;
- 数据联动:自动同步后端LangGraph执行状态、任务结果,无需手动编写前后端交互接口;
- 权限适配:根据后端配置的用户角色(admin/developer),自动展示对应权限的功能模块;
- 快速启动:后端启动后,访问http://localhost:8080即可自动加载前端页面,无需额外部署前端服务。
前后端协同逻辑:用户在前端页面输入任务 → 前端将请求发送至Python后端 → 后端调用LangGraph执行多智能体协同任务 → 后端将执行状态、结果同步至前端 → 前端可视化展示并支持导出、中断等操作。
示例说明:基于CopilotKit(ag-ui协议实现)开发,采用“Python后端+React前端”协同架构,修正“纯Python开发”的错误表述。后端通过Python对接LangGraph核心逻辑、配置权限与交互规则;前端复用CopilotKit内置React组件,无需手动编写前端代码,快速构建符合ag-ui协议的企业级UI。整体适配大型智能体生产级部署,兼顾开发效率与企业级需求。
五、最后总结
本文系统梳理LangChain、LangGraph与DeepAgent三大框架的定位、特点及协同逻辑,通过精准对比明确选型场景,降低开发者选型成本。
全文4个实战示例覆盖基础智能体、多智能体协同、深度智能体等高频场景,代码遵循官方规范,可直接复制运行,聚焦核心功能与可落地性。
针对智能体落地需求,新增Streamlit与CopilotKit(ag-ui协议)两个UI实战示例,补全“开发-可视化”闭环,实现进度监控、步骤控制、结果导出等核心功能,助力开发者快速落地生产级智能体。
整体内容精简高效、实用性强,核心目标是帮助开发者快速上手LangChain生态,高效完成复杂智能体开发与UI集成,实现从原型到落地的全流程。
更多推荐



所有评论(0)