跳到主要内容

DeepSeek-V3.2+LangChain 1.1 Agent开发实战

课程说明:

  体验课时间有限,若想深度学习大模型技术,欢迎大家报名由我主讲的《2025大模型Agent智能体开发实战》(12月班)

ac4f2a592e0453c3089da3643ee3404a

《2025大模型Agent智能体开发实战》(12月班) 为【100+小时】体系大课,总共20大模块精讲精析,零基础直达大模型企业级应用!

课程完整介绍

a55d48e952ed59f8d93e050594843bc 6ee2fbee6b72608bee2888620fac1932

部分课程成果演示

from IPython.display import Video
  • Dify+DeepSeek搭建智能微信语音客服
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/2f1b47f42c65fd59e8d3a83e6cb9f13b_raw.mp4", width=800, height=400)
  • Coze自动图文视频创作流程
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/Coze%E5%8A%A8%E6%80%81%E8%A7%86%E9%A2%91%E7%94%9F%E6%88%90%E5%AE%9E%E4%BE%8B.mp4", width=800, height=400)
  • 可视化数据分析Multi-Agent
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E5%8F%AF%E8%A7%86%E5%8C%96%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90Multi-Agent%E6%95%88%E6%9E%9C%E6%BC%94%E7%A4%BA%E6%95%88%E6%9E%9C.mp4", width=800, height=400)
  • 高效微调全自动数据集创建
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/easy_daset_yanshi.mp4", width=800, height=400)
  • MateGen Pro 项目功能演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/MG%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91.mp4", width=800, height=400)
  • 智能客服项目展示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E6%99%BA%E8%83%BD%E5%AE%A2%E6%9C%8D%E6%A1%88%E4%BE%8B%E8%A7%86%E9%A2%91.mp4", width=800, height=400)
  • GraphRAG+多模态文档检索
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/7%E6%9C%8817%E6%97%A5%281%29%20%E8%BF%9B%E5%BA%A6%E6%9D%A1.mp4", width=800, height=400)

此外,若是对大模型底层原理感兴趣,也欢迎报名由我和菜菜老师共同主讲的《2025大模型原理与实战课程》(秋季班)

a9c8776df826a9ee8e9fb8e31c72b180 3

详细信息扫码添加助教,回复“大模型”,即可领取课程大纲&查看课程详情👇

0

国产最强DeepSeek-V3.2 Agent开发实战

Part 2.DeepSeek-V3.2+LangChain 1.1 Agent开发实战

一、LangChain技术生态回顾

  在 LangChain 1.x 中,最大的变化肯定是推出了全新的Agent API:create_agent。至此,LangChain Agent就已经不再是早期那种“带点魔法味的模型调用器”,它正式被定义为:一个可感知上下文、具备行动能力、可扩展、可插拔的智能运行体(Intelligent Runtime Unit)。简单来说,Agent 不再只是“用大模型回答问题”,而是能根据任务动态调用工具、推理决策、规划步骤,并与外部世界进行交互的 自治式执行体

  • LangChain Agent API大一统

  LangChain 在 1.0 版本中,将所有 Agent 的创建方式统一为了一个入口——create_agent()。它取代了旧版本中的 create_react_agentcreate_json_agentcreate_tool_calling_agent 等多种分支函数,真正让开发者用一行代码即可创建任何类型的智能体。

  在 LangChain 0.x 时代,框架内的 Agent 系统经历了“碎片化”阶段。当时的设计理念是 “针对场景设计特定 Agent”——如果你要实现思维链推理(ReAct),就用 create_react_agent;如果需要结构化输出,就用 create_structured_chat_agent;要工具调用,则用 create_tool_calling_agent。这种方式灵活,但也带来了三个明显问题:

  1. 心智负担高——每种 Agent 都要单独记忆 API 与参数;
  2. 可组合性差——多个 Agent 之间无法统一调度;
  3. 生态碎片化——不同模块难以复用或协同演化。

而进入 LangChain 1.0 后,团队做出了彻底重构:将所有 Agent 的创建入口合并为 create_agent(),同时在底层通过“中间件机制(Middleware)”和“标准模型接口(invoke / stream)”实现全局统一。这让框架更轻、更稳,也更易于被集成到其他 Agent 平台中。

  • create_agent API极简调用流程

  而LangChain 1.0中的create_agent API的实际调用过程也非常简单,从代码层面来看,我们只需要将模型和工具拼接到一起,即可完成Agent创建:

# 1.导入相关库
from langchain.agents import create_agent
from langchain_deepseek import ChatDeepSeek
from langchain_community.tools.tavily_search import TavilySearchResults

# 2.导入模型和工具
web_search = TavilySearchResults(max_results=2)
model = ChatDeepSeek(model="deepseek-chat")

# 3.创建Agent
agent = create_agent(
model=model,
tools=[web_search],
system_prompt="你是一名多才多艺的智能助手,可以调用工具帮助用户解决问题。"
)

# 4.运行Agent获得结果
result = agent.invoke(
{"messages": [{"role": "user", "content": "请帮我查询2024年诺贝尔物理学奖得主是谁?"}]}
)
result['messages'][-1].content
  • create_agent API底层LangGraph架构

  而从底层架构来看,从 LangChain 1.0 开始,官方对框架的整体架构进行了根本性的角色重置:LangGraph 被正式确立为 LangChain 的底层运行框架(Runtime Foundation),而非附属扩展。在 0.x 时代,LangGraph 还被视作 LangChain 的“高层封装”——它是开发者在 LangChain 基础上进一步实现复杂 Agent 编排、状态流转与多节点控制的可选工具;换言之,那时 LangChain 是核心、LangGraph 是外挂。而进入 1.0 之后,情况彻底反转:LangGraph 被下沉为 LangChain 的底层执行引擎,一切新的高级 API(包括统一的 create_agent()、中间件系统、状态管理机制、流式回调与事件调度等)都直接运行在 LangGraph 架构之上。这样一来,LangChain 不再只是一个“Prompt 组织与调用库”,而是一个基于图结构的智能体运行时系统:每个 Agent 的生命周期、每次模型调用、每个工具执行,都是图中一个节点或边的执行过程。LangGraph 提供了稳定的调度、状态传递与事件流控制,而 LangChain 则提供了上层接口与开发体验。也就是说,上述Agent的实际运行逻辑,如果用LangGraph的语言来描述就是:

image-20251028154837987

这种统一架构并以LangGraph为底层框架带来的优势如下:

  1. 接口统一,降低心智负担

    • 无论是工具型、规划型还是对话型 Agent,都用同一个入口创建。
    • 开发者不再需要区分不同 Agent 的实现逻辑。
  2. 跨生态兼容性增强

    • LangChain 1.0 的 Agent 架构与 LangGraph、LangServe、甚至 OpenAI Responses API 都完全兼容。
    • 这意味着同一个 Agent 可以同时运行在命令行、Web UI、LangGraph 节点或云端推理环境中。
  3. 中间件机制的加入

    • 新版本允许通过装饰器或中间件在 Agent 生命周期中插入逻辑: 如日志、速率限制、记忆压缩、PII 审查、内容重写等。
    • 这使得 Agent 更像一个“微型操作系统进程”,具备可观察性与可管理性。
  4. 可扩展性与定制性更强

    • 统一 API 底层基于标准化状态流(State Graph), 这意味着用户可以自由地扩展 Agent 行为而不破坏核心逻辑。

1.LangChain Agent开发必备工具套件回顾

  在对LangChain 1.0有了一定的基础了解之后,对于开发者来说,还需要进一步了解和掌握LangChain Agent必备的开发者套件。分别是LangChain Agent运行监控框架LangSmith、底层LangGraph图结构可视化与调试框架LangGraph Studio和LangGraph服务部署工具LangGraph Cli。可以说这些开发工具套件,是真正推动LangGraph的企业级应用开发效率大幅提升的关键。同时监控、调试和部署工具,也是全新一代企业级Agent开发框架的必备工具,也是开发者必须要掌握的基础工具。

1.1 LangGraph运行监控框架:LangSmith

LangSmith官网地址:https://docs.smith.langchain.com/

  LangSmith 是一款用于构建、调试、可视化和评估 LLM 工作流的全生命周期开发平台。它聚焦的不是模型训练,而是我们在构建 AI 应用(尤其是多工具 Agent、LangChain/Graph)时的「可视化调试」、「性能评估」与「运维监控」。

image-20250626130104156
功能类别描述场景
🧪 调试追踪(Trace Debugging)可视化展示每个 LLM 调用、工具调用、Prompt、输入输出Agent 调试、Graph 调用链分析
📊 评估(Evaluation)支持自动评估多个输入样本的回答质量,可自定义评分维度批量测试 LLM 表现、A/B 对比
🧵 会话记录(Sessions / Runs)每次 chain 或 agent 的运行都会被记录为一个 Run,可溯源Agent 问题诊断、用户问题分析
🔧 Prompt 管理器(Prompt Registry)保存、版本控制、调用历史 prompt多版本 prompt 迭代测试
📈 流量监控(Telemetry)实时查看运行次数、错误率、响应时间等在生产环境中监控 Agent 质量
📁 Dataset 管理管理自定义测试集样本,支持自动化评估微调前评估、数据对比实验
📜 LangGraph 可视化对 LangGraph 中每个节点运行情况进行实时可视化展示Graph 执行追踪

1.2 LangGraph图结构可视化与调试框架:LangGraph Studio

LangGraph Studio官网地址:https://www.langgraph.dev/studio

  LangGraph Studio 是一个用于可视化构建、测试、分享和部署智能体流程图的图形化 IDE + 运行平台。

image-20250626130624364
功能模块说明应用场景
🧩 Graph 编辑器以拖拽方式创建节点(工具、模型、Router)并连接零代码构建 LangGraph
🔍 节点配置器每个节点可配置 LLM、工具、Router 逻辑、Memory灵活定制 Agent 控制流
▶️ 即时测试输入 prompt 可在浏览器中运行整个图实时测试执行结果
💾 云端保存 / 分享将构建的 Graph 保存为公共 URL / 私人项目团队协作,Demo 分享
📎 Tool 插件管理可连接自定义工具(MCP)、HTTP API、Python 工具插件式扩展 Agent 功能
🔁 Router 分支节点创建条件分支,支持 if/else 路由决策型智能体
📦 上传文档 / 多模态可以上传文件(如 PDF)并嵌入进图中处理流程RAG 结构、OCR、图文问答等
🧠 Prompt 输入/预览编辑 prompt 并观察其运行效果Prompt 工程调试
📤 一键部署将 Graph 部署为可被 Agent Chat UI 使用的 Assistant快速集成到前端

1.3 LangGraph服务部署工具:LangGraph Cli

LangGraph Cli官网地址:https://www.langgraph.dev/ (需要代理环境)

  LangGraph CLI 是用于本地启动、调试、测试和托管 LangGraph 智能体图的开发者命令行工具。

image-20250626131252066
功能类别命令示例说明
✅ 启动 Graph 服务langgraph dev启动 Graph 的开发服务器,供前端(如 Agent Chat UI)调用
🧪 测试 Graph 输入langgraph run graph:graph --input '{"input": "你好"}'本地 CLI 输入测试,输出结果
🧭 管理项目结构langgraph init初始化一个标准 Graph 项目目录结构
📦 部署 Graph(未来)langgraph deploy(预留)发布 graph 至 LangGraph 云端(已对接 Studio)
🧱 显示 Assistant 列表langgraph list显示当前 graph 中有哪些 assistant(即 entrypoint)
🔄 重载运行时自动热重载修改 graph.py 时,dev 模式自动重启生效

而一旦应用成功部署上线,LangGraph Cli还会非常贴心的提供后端接口说明文档:

image-20250626132044152

而对于LangGraph构建的智能体,除了能够本地部署外,官方也提供了云托管服务,借助LangGraph Platform,开发者可以将构建的智能体 Graph部署到云端,并允许公开访问,同时支持支持长时间运行、文件上传、外部 API 调用、Studio 集成等功能。

1.4 LangGraph Agent前端可视化工具:Agent Chat UI

  Agent Chat UI 是 LangGraph/LangChain 官方提供的多智能体前端对话面板,用于与后端 Agent(Graph 或 Chain)进行实时互动,支持上传文件、多工具协同、结构化输出、多轮对话、调试标注等功能。

Agent Chat UI官网地址:https://langchain-ai.github.io/langgraph/agents/ui/

39f6cd74c2d5ff2401fd511e9aa9b42
功能模块描述应用场景
💬 多轮对话框类似 ChatGPT 的输入区域,支持多轮上下文用户提问,Agent 回复
🛠 工具调用轨迹显示显示每个调用的工具、参数、结果(结构化)Agent 推理透明化
📄 上传 PDF / 图片支持上传文档、图片、嵌入多模态输入RAG、OCR、图像问答
📁 文件面板可查看上传历史文件、删除、重新引用管理文档输入
🧭 Assistant 切换支持切换不同 Assistant(Graph entry)一键切换模型能力(如 math / weather)
🧩 插件支持与 MCP 工具、LangGraph 图打通工具式 Agent 调用
🔍 调试视图显示每轮 Agent 的思维过程和中间状态Prompt 调试、模型行为分析
🌐 云部署支持支持接入远端 Graph API(如 dev 服务器)前后端分离部署
🧪 与 LangSmith 对接(可选)若后端启用 tracing,可同步显示运行 trace调试闭环

2.借助LangGraph Cli创建完整智能体项目

2.1 LangGraph智能体项目说明

  LangSmithLangGraph Studio 都是 LangChain AI 生态中非常核心的工具,前者是用于跟踪和分析大模型的使用情况,而langGraph Studio则是对于LangChian Agent来说,则是比LangSmith更加方便和高效的可视化调试工具平台。

  大家可以思考一个问题:基于LangGraph框架可以开发出各种复杂的应用、AgentWorkflow等,那么这些应用、AgentWorkflow等在生产中如何部署和运行呢? 解决方案就是把它们部署成一个Server。 而对如何方便高效的把LangGraphGraph部署成一个ServerLangGraph官方提供了LangGraph Platform,其完整架构如下所示:

  • LangGraph Studio:桌面版应用(目前仅支持Mac)和本地运行(适用于所有操作系统);
  • LangServer:最终构建出来的服务,提供Assistant API接口;
  • Python/JS SDK:通过接口可以直接和 LangServer 提供的各个API接口连接;
  • Remote Graph:类似于之前LangServe的用法,可以直接用 Graph 的接口去调用,这样拿到的Graph就是一个 Runable对象,就可以去调用它的invokebatch 等。

  LangGraph Studio 是专为 LangGraph 图式代理打造的本地/云端 IDE,具备可视化节点和状态及实时调试功能。LangGraph Studio 在本地可视化运行时会自动把调用过程上传到 LangSmith;而在 LangSmith 网页端查看任何 Trace 时,又能一键Run in Studio回放整条执行链,所以它是通过统一 Trace SDKLangSmith 紧密集成。而LangGraph CLI则是构建这个项目的关键

  接下来我们就来详细的讲解下如何使用LangGraph CLI来创建一个完整的LangGraph Agent项目,并在此过程中使用LangGraph Chat Agent UI进行前端对话,以及使用LangGraph Studio进行架构实时演示,并使用LangSmith进行运行效果监督。

  首先需要说明的是,如果想要把一个定义的Graph添加到LangGraph Studio中,需要严格按照官方要求的项目结构进行构建,需要执行的步骤依次是:

2.1 创建完整LangGraph智能体项目流程

  • Step 1. 创建一个LangChain Agent项目主文件夹

  我们这里创建一个LangChain Chatbot文件夹,如下图所示:

image-20251203201257221
  • Step 2. 创建requirements.txt文件

  在LangChain Chatbot文件夹中,新建一个requirements.txt文件,里面需要填写在运行该项目时需要安装的依赖项,如下所示:

FENCE0

image-20251028174939509
  • Step 3. 注册LangSmith(可选)

  对于企业级的Agent项目,为了更好的监控智能体实时运行情况,我们可以考虑借助LangSmith进行追踪(会将智能体运行情况实时上传到LangGraph官网并进行展示)。

  要开始使用 LangSmith,我们需要创建一个帐户。可以在这里注册一个免费帐户进入LangSmith登录页面: https://smith.langchain.com/ , 支持使用 Google、GitHub、Discord 和电子邮件登录。

  注册并等登录后,可以直接查看到仪表板:

image-20250624190009348 image-20250624190049558 image-20250624190123279 image-20250624190228537

  在构建程序跟踪前,首先需要创建一个 API 密钥,该密钥将允许我们的项目开始向 Langsmith 发送跟踪数据。创建完密钥后,在后续配置环境变量环节设置开启追踪、并输入密钥即可接入LangSmith。

  • Step 4. 创建.env配置文件

  在LangChain Chatbot文件夹中,新建一个.env文件,将敏感信息(如API密钥)放在环境变量中而不是硬编码。如下所示:

image-20251028175031725

这里需要注意的是,如果不设置LangSmith,则无需设置中间三个环境变量,而具体工具也可以根据实际需求进行设置。

  • Step 5. 创建agent.py核心文件

  在LangChain Chatbot文件夹中,新建一个agent.py文件,在该文件中编写构建图的具体运行逻辑,如状态、节点、变、图的编译等。此外,在使用LangGraph CLI创建智能体项目时,会自动设置记忆相关内容,并进行持久化记忆存储,无需手动设置。因此此时智能体代码如下所示:

FENCE0

image-20251203201701317
  • Step 6. 创建langgraph.json文件

  在LangChain Chatbot文件夹中,新建一个langgraph.json文件,在该json文件中配置项目信息,遵循规范如下所示:

  • 必须包含 dependenciesgraphs 字段
  • graphs 字段格式:"图名": "文件路径:变量名"
  • 配置文件必须放在与Python文件同级或更高级的目录

  注意: 项目文件的名称必须为langgraph.json。如下所示:

image-20251203201750462

FENCE0

  其中:

  • dependencies: ["./"] - 告诉LangGraph在当前目录查找依赖项(会自动读取requirements.txt
  • chatbot: "./graph.py:graph" - 定义图名为chatbot,来自graph.py文件中的graph变量
  • env: ".env" - 指定环境变量文件位置

  最终完整项目结构如下所示:

FENCE0

image-20251203201812723

  完整的代码已经上传至百度网盘中的langgraph_chatbot文件夹中,大家可以扫描下方二维码免费领取

image-20251203201906394 0
  • Step 7. 安装langgraph-cli以及其他依赖

  然后,安装langgraph-cli依赖,执行如下代码:

FENCE0

image-20251028175548340/>

  然后进入到langgraph_chatbot文件夹,安装相关基础依赖:

FENCE0

image-20251028175629045

  最后,进入到langgraph_chatbot文件夹,执行LangGraph dev即可启动项目

FENCE0

image-20251028175822701 image-20251028175752261

  启动成功后能看到三个连接,其中第一个连接是当前部署完成后的服务端口,第二个是LangGraph Studio的可视化页面,第三个端口是端口说明。

3. LangChain Agent部署后调用流程

  • 后端服务接口

  这里我们首先可以看下第三个连接,其中包含了详细的接口调用方法:

image-20250626193027400

这些暴露的接口和调用方法,接下来就可以用于进行进一步开发和测试。

  • LangGraph Studio

然后我们可点击Studio UI中显示的链接,在浏览器中打开并访问Studio,如下所示:

image-20251028175930816

完整演示流程如下所示:

Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/2025-06-26%2019-29-04.mp4", width=800, height=400)
  • LangSmith

而如果此前设置了追踪,此时就能在LangSmith中看到当前项目运行情况:

image-20251028180028060
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/2025-06-26%2019-52-57.mp4", width=800, height=400)

4. LangChain Agent后端接入Agent Chat UI完整流程

image-20250626195531310
  • Step 1.克隆项目:

FENCE0

image-20251028180207164 image-20251203202001954 0

GitHub代理设置(若开启代理且端口为10080时):
git config --global http.proxy http://127.0.0.1:10080
git config --global https.proxy http://127.0.0.1:10080

  • Step 2. 安装npm

  node.js官网:https://nodejs.org

image-20250626195919940

FENCE0

image-20250626200108284
  • Step 3. 安装前端项目依赖

FENCE0

image-20250627163550759
  • Step 4. 开启Chat Agent UI

FENCE0

image-20250626200239972 image-20250626200317093 image-20251028180711172
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/2025-06-26%2020-03-25.mp4", width=800, height=400)
  • 完整源码领取:
image-20251203201906394 0

注意需要自己创建.env文件

二、基于DeepSeek-V3.2+LangChain 1.1的数据分析Agent开发实战

1. Data Agent项目介绍

1.1 项目定位

  本项目是一个基于 LangChain 1.1 标准架构LangGraph 编排引擎开发的端到端数据分析智能体。它旨在打破传统 BI 工具的静态限制,通过集成 DeepSeek-V3.2 强大的代码生成与推理能力,实现“数据即对话,对话即洞察”的全新交互模式。用户只需上传 CSV 数据集,即可通过自然语言指令完成从数据清洗、统计分析到复杂可视化绘图的全流程任务。

1.2 核心功能 (Core Features)

  • 全自动数据挂载与清洗:支持 CSV 文件一键上传,后端自动执行类型推断、缺失值填充与 Schema 提取,实现数据“零配置”入库。
  • 内置 Python 代码解释器:基于 ReAct 范式,Agent 能够自主编写、调试并执行 Pandas 代码,精准回答复杂的统计学问题(如“计算销售额同比增长率”),而非依赖大模型的幻觉。
  • 智能可视化绘图:支持 Matplotlib/Seaborn 绘图指令的语义理解,自动解决中文乱码与 GUI 线程冲突问题,将自然语言(如“画出性别分布的柱状图”)实时转化为高质量图表。
  • 混合式交互分析:结合了 LLM 的灵活性与传统算法的确定性,既支持开放式对话分析,也提供“相关性计算”等点击即用的确定性功能接口。

1.3 技术亮点与教学价值 (Technical Highlights)

  • 前沿架构实践 (LangChain 1.1 + LangGraph)

    • 摒弃过时的 AgentExecutor,全面采用 LangGraph 构建图式状态机,符合 2025 年 Agent 开发的最新工业标准,展示了可观测、可调试的现代 Agent 架构。
    • 使用了 create_agent 高阶 API,演示了如何以最简洁的代码实现复杂的工具调用(Tool Calling)逻辑。
  • 动态上下文注入 (Dynamic Context Middleware)

    • 创新性地使用了 Middleware (中间件) 机制与 @dynamic_prompt 技术。
    • 解决了 System Prompt 僵化的问题,实现了 Agent 记忆的实时刷新——无论用户何时更换数据集,Agent 都能毫秒级感知最新的字段结构与数据摘要。
  • 企业级工程化落地

    • 前后端分离:采用 FastAPI 构建高并发后端,配合 Figma/React 前端,展示了完整的全栈开发流程。
    • 流式交互 (Streaming):基于 SSE (Server-Sent Events) 协议实现打字机效果,并深度解析 LangGraph 的嵌套消息结构,实现了“思考过程”与“最终结果”的分层展示。
    • 稳健的工具沙箱:通过重构 Python 执行环境(作用域合并、stdout 捕获、Headless 绘图模式),解决了生产环境中常见的执行报错与线程安全问题。
befdc7058180975b763c73beef59ad55 image-20251203200107945 0

2. 后端架构说明

2.1 整体架构设计理念 (Architectural Design)

本项目后端采用 “分层解耦 (Layered Decoupling)” 的设计思想,将系统划分为四个核心层次,确保代码的可维护性与扩展性:

  • 接入层 (Entry Layer):基于 FastAPI,负责 HTTP 请求处理、CORS 跨域安全、文件上传及静态资源(图片)挂载。
  • 编排层 (Orchestration Layer):基于 LangChain 1.1LangGraph,负责智能体的状态管理、工具路由分发及流式响应。
  • 能力层 (Capability Layer):自定义工具集(Tools),提供 Python 代码沙箱执行与 Matplotlib 绘图能力。
  • 数据层 (Data Layer):负责 Pandas DataFrame 的内存管理、数据清洗(ETL)与 Schema 提取。

2.2 项目目录结构 (Directory Structure)

FENCE0

2.3 核心模块代码解析 (Module Deep Dive)

A. 服务端 (src/server.py)
  • 功能:系统的“大门”。
  • 关键实现
    • 混合协议支持:同时支持 RESTful API(文件上传 /upload)与 SSE 流式接口(对话 /agent/stream)。
    • CORS 动态防御:使用正则 (allow_origin_regex) 完美解决 Figma 动态沙盒域名与本地调试环境的跨域问题。
    • 静态挂载:通过 app.mount("/static") 将生成的图表目录暴露为 Web 服务,让前端可通过 URL 访问图片。
B. 智能体编排 (src/agent.py)
  • 功能:系统的“大脑”。
  • 关键实现
    • LangChain 1.1 标准:使用 create_agent 高阶 API,自动完成 Model 与 Tools 的绑定。
    • 动态上下文中间件 (@dynamic_prompt):这是本架构的灵魂。它拦截每一次请求,实时从数据层读取最新的 DataFrame 摘要(Schema),注入到 System Prompt 中。解决了“上传新数据后 Agent 依然只有旧记忆”的难题。
C. 工具箱 (src/tools.py)
  • 功能:系统的“双手”。
  • 关键实现
    • Headless 绘图模式:强制设置 matplotlib.use('Agg'),防止在服务器端弹出 GUI 窗口导致线程崩溃。
    • 执行环境沙箱:通过合并作用域 (env) 并结合 exec,既保证了代码执行的灵活性(支持列表推导式),又通过 contextlib 捕获了标准输出 (stdout),让 Agent 能“看到”打印结果。
    • 中文乱码修复:内置字体自动配置逻辑,自适应 Windows/Mac/Linux 环境。
D. 数据管家 (src/data_manager.py)
  • 功能:系统的“短期记忆”。
  • 关键实现
    • 单例模式管理:在 Demo 阶段使用全局变量 (GLOBAL_DF) 存储 DataFrame,保证工具层与 Agent 层访问的是同一份数据。
    • 鲁棒性清洗:在加载数据时自动处理混合类型列和缺失值,防止生成的 Python 代码因脏数据而报错。

2.4 核心工作流 (Core Workflow)

场景:用户上传数据并询问“帮我画图”

  1. 数据注入:用户 POST /upload -> data_manager 清洗数据 -> 存入内存 -> 返回 Schema 预览。
  2. 动态感知:用户发消息 -> agent.py 中间件触发 -> 调用 get_data_info() -> 组装含最新列名的 Prompt -> 发送给 DeepSeek。
  3. 推理与执行
    • DeepSeek 生成绘图代码 -> LangGraph 路由到 fig_inter 工具。
    • tools.py 在后台(Agg模式)绘图 -> 保存至 /static/images -> 返回 IMAGE_GENERATED: xxx.png 标记。
  4. 结果渲染:Server 通过 SSE 推送标记 -> 前端解析标记 -> 通过 URL 加载并展示图片。
image-20251203202208765
  • 核心Agent.py代码解释

FENCE0

这段 src/agent.py 代码的职责是:组装一个能够实时感知数据变化、并自主调用工具的智能体对象(Graph)。

1. 模块导入与环境准备

FENCE0

  • create_agent: 这是 LangChain 1.1 统一的 Agent 构建入口。它取代了旧版繁琐的 AgentExecutor 定义方式,底层自动封装了图(Graph)结构、工具绑定(Tool Binding)和输出解析器。
  • dynamic_prompt: 这是一个中间件装饰器。它是本架构的核心亮点,用于解决“静态提示词僵化”问题,允许 Agent 在每一次思考前“动态刷新”自己的人设和上下文。

2. 初始化模型 (The Brain)

FENCE1

  • model="deepseek-chat": 我们选用 DeepSeek V3.2 (Chat) 模型。它在指令遵循(Instruction Following)和代码生成方面表现卓越,非常适合这种需要精确写代码的场景。
  • temperature=0: 极度重要。数据分析要求代码严谨、逻辑确定,不能有随机创造性(Hallucination)。将温度设为 0,让模型输出最稳定、最准确的代码。

3. 定义动态提示词中间件 (The Dynamic Soul)

这是整个 Agent 最具“智慧”的部分。

FENCE2

  • 设计痛点:传统的 Agent 写法是将 System Prompt 写死在代码里的(例如 system_prompt="你有个数据表...")。但用户上传新 CSV 后,变量已经变了,Agent 却还只记得旧表结构,导致写错代码。
  • 中间件机制
    • 拦截 (Intercept):每当用户发一句对话,create_agent 内部的运行时会在调用 LLM 之前,先运行这个 dataset_context_middleware 函数。
    • 注入 (Inject):函数内部调用 get_data_info(),直接去内存(Pandas DataFrame)里查最新的列名、行数。
    • 刷新 (Refresh):将最新的表格结构拼接到 Prompt 里。
  • 效果:实现了**“上传即感知”**。用户上一秒上传文件,下一秒问 Agent,Agent 就能准确说出列名,完全不需要重启服务。

4. 构建智能体 (The Assembly)

FENCE3

  • middleware=[...]: 这里展示了 LangChain 1.1 的插件式架构。我们将刚才定义的动态逻辑像“插件”一样插进去。Agent 启动后,这个中间件就会像守护进程一样,确保每次对话的 System Prompt 都是最新鲜的。
  • tools=[python_inter, fig_inter]: 赋予 Agent 两项核心能力——通用计算(Python)和绘图(Matplotlib)。
  • graph 返回值:这个对象本质上是一个编译好的 Runnable Graph。它既可以直接被 agent.invoke() 调用,也能完美兼容 LangGraph CLI 进行流式部署。

3.项目运行流程

  • 下载源码并解压缩

  • 安装后端依赖:

FENCE0

  • 开启后端

FENCE0

image-20251203202618804
  • 安装前端依赖

FENCE0

  • 开启前端

FENCE0

image-20251203202739863
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/d785514f32f7125bd859045b10d3ae3a.mp4", width=800, height=400)