2026-07-20-langgraph-requirements-summary.md 15 KB

LangGraph Sidecar 迁移 — 需求与决策汇总

日期: 2026-07-20 状态: 终稿(已批准) 版本: 1.0


1. 背景与动因

1.1 现有 AI 架构

cfc-backend 自 2025 年起接入 Dify(开源 LLM 应用平台)提供全部 AI 能力:

使用场景 Dify 能力 Java 消费者
家庭 AI 聊天(通用助手 + 精准营养助手) Chatbot API AIService.sendMessage(), sendNutritionMessage()
工作流(任务解析/舌诊/异步摘要) Workflow API AIService.runWorkflow(), sendTongueDiagnosis()
知识库检索 Datasets API DifySyncService.syncToDify()
文章 AI 问答 Chatbot API ArticleService.getAiQuestions()

Dify 深度嵌入 8 个 Service、3 个 Controller,承担 AI 能力中间件角色。

1.2 迁移动因

问题 描述 优先级
数据安全 所有对话/报告数据经 Dify 平台流转,无法保证数据不外泄 P0
黑盒 Prompt Dify 应用内的 prompt 编辑无版本管理,调试困难 P1
不可控发布 Dify 版本升级可能引入不兼容变更,发布节奏被动 P1
运维负担 Dify 自部署实例需单独维护资源,偶发不可用 P2
灵活性不足 Agent 编排能力有限,难以实现复杂条件路由和 HITL P2
成本 Dify 本身无授权费,但作为中间层增加了调用链路开销 P3

2. 需求分析

2.1 核心需求

ID 需求 说明 优先级
R1 消除 Dify 单点依赖 所有 AI 能力线下部署,不依赖外部平台 P0
R2 Java 8/Spring Boot 2.7 不动 后端不升级 JDK/框架,最小化 Java 侧改动 P0
R3 Agent 编排能力 支持条件路由、多步骤、工具调用、循环 P0
R4 对话记忆 短期(窗口)+ 长期(实体/事实)+ 语义(向量召回) P0
R5 RAG 知识库 知识文档加载、分块、向量化、混合检索 P1
R6 工具调用安全 Python Agent 通过 HTTP 调 Java 获取数据,不直连 MySQL P1
R7 灰度迁移 Dify 保留为 fallback,流量逐步切换 P0
R8 运维简单 最小化中间件依赖,单机可部署 P1

2.2 覆盖场景

场景 当前实现 目标 Agent
家庭聊天(通用) Dify Chatbot → AIService ChatAgent(StateGraph)
精准营养推荐 Dify Chatbot → AIService RecommendAgent(LLM + RAG)
健康报告解读 Dify Workflow AnalysisAgent
舌诊分析 Dify Workflow MultiModalAgent
任务自动解析 Dify Workflow TaskAgent(ChatAgent 子节点)
文章 AI 问答 Dify Chatbot ChatAgent + RAG
知识库同步 Dify Datasets API KnowledgePipeline

2.3 非需求

  • 不改动 Java 端 JDK/Spring Boot 版本
  • 不改动 cfc 业务逻辑(Controller/Service 现有行为不变)
  • 不立即引入 PostgreSQL/Redis 等额外中间件
  • 不做完整的 A/B 测试平台

3. 方案评估

3.1 候选方案

A. Spring AI(Java 侧内嵌)

维度 评估
技术栈 Spring AI 1.x + Spring Boot 3.x → 需升级 JDK 8→21
Agent 能力 基础 Tool Calling + Chain, 无 StateGraph/条件路由
RAG 基础 ETL pipeline, 不如 LangChain 成熟
学习成本 团队熟悉 Java, 但 Spring AI 2025 年才 GA, 生态不完善
结论 ❌ 否决 — 需要 JDK 升级 + Agent 能力不足

B. LangChain4j(Java 侧内嵌)

维度 评估
技术栈 LangChain4j 1.x, 兼容 Java 8
Agent 能力 Tool Calling + 简单链, 无 LangGraph 编排
RAG 完整 pipeline (embedding/store/retrieval)
社区 较小, 文档不完善
LLM 调用 需通过 Spring AI 或直接 HTTP
结论 ❌ 否决 — Agent 编排能力不足, 无图执行引擎

C. Python LangGraph Sidecar ✅

维度 评估
技术栈 FastAPI + LangChain + LangGraph + ChromaDB
Agent 能力 完整 StateGraph:条件路由/循环/并行/HITL/持久化
RAG 最成熟的 LangChain RAG pipeline
记忆 三层记忆(BufferMemory + EntityMemory + VectorStoreMemory)
Java 改动 最小——仅 AIService 加 HTTP 路由, 新增 AiGateway
社区 全球最大 LLM 框架生态
部署 Docker Compose / systemd 均可
结论 ✅ 选定方案

3.2 决策树

Dify 替代方案
├─ 留在 Java 侧
│  ├─ Spring AI    → ❌ 需 JDK 21 + Agent 能力不足
│  └─ LangChain4j  → ❌ Agent 编排能力不足 + 社区小
└─ Python 侧服务   → ✅ LangGraph Sidecar

3.3 已否决但文档化的选择

方案 否决原因 存档位置
Spring Boot 3 升级 + Spring AI 需 JDK 8→21 全量升级, 风险大, Agent能力不足 docs/backup/architecture/
LangChain4j 内嵌 Agent编排受限, 无StateGraph, 社区不成熟 —
Dify 继续使用 + 小修小补 数据安全问题不解决, 长期不可持续 —
替换 Dify 但保留 AxonHub 路由 增加第三方依赖, 不如直接调 LLM API —

4. 最终架构

4.1 架构总览

用户 (微信小程序 / Web)
  │ HTTP
  ▼
cfc-backend (Java 8, Spring Boot 2.7.18)
  ├── 业务 Controller (不变)
  ├── AIService.java → AiGateway.java (HTTP→Python, fallback→Dify)
  └── AiContextService.java (Python 调用的数据接口)
  │ HTTP (内网)
  ▼
langgraph-service (Python 3.11, FastAPI :9000)
  ├── FastAPI 网关 + Agents (RecommendAgent / ChatAgent / AnalysisAgent / MultiModalAgent)
  ├── LangGraph StateGraph 引擎 + Checkpointer + Memory Manager
  ├── RAG Pipeline (ChromaDB 文件模式 + 混合检索 + 重排序)
  └── Tool 层 (HTTP → Java 数据接口)
  │
  ▼
LLM API (DeepSeek-V3 / Qwen2.5 / Embedding API)

4.2 关键设计决策

决策 选项 选择 理由
JDK 版本 8 / 21 Java 8 不变 全量升级风险大, LangGraph sidecar 不需要
内存数据库 SQLite / Chroma / PGVector ChromaDB 文件模式 零配置, 10 万条内足够
Checkpointer MemorySaver / PG MemorySaver 优先 Phase 1-2 不依赖 PG, 后续按需升级
工具调用方式 直连 MySQL / HTTP 调 Java HTTP 调 Java 数据主权在 Java 侧, 安全可控
部署方式 Docker Compose / systemd 两者皆可 开发用 Docker, 生产按实际情况选
模型路由 直调 LLM / 通过 AxonHub 直调 LLM API 简化架构, 减少第三方依赖
记忆同步 Python 主写 / Java 主写 Python 主写 记忆是 Agent 的一部分,自然归 Python
Dify 处理 立即停用 / 保留 fallback 保留 fallback 灰度迁移, 按阶段逐步关闭

4.3 项目结构

D:\workspace\cfc\cfc-langgraph\        # 新建 Python 项目
├── pyproject.toml / Dockerfile / docker-compose.yml
├── app/
│   ├── main.py / config.py / api/    # FastAPI 入口 + 路由
│   ├── agents/                        # LangGraph Agent 定义
│   ├── graphs/                        # StateGraph 图定义
│   ├── tools/                         # Agent Tool (HTTP→Java)
│   ├── rag/                           # RAG Pipeline
│   ├── memory/                        # 记忆管理
│   └── models/                        # Pydantic 模型
├── data/chroma_db/                    # 向量数据库持久化
└── tests/

4.4 API 接口

端点 方法 Agent 说明
/api/v1/chat POST ChatAgent 家庭 AI 聊天
/api/v1/recommend POST RecommendAgent 商品/活动/文章推荐
/api/v1/analyze POST AnalysisAgent 健康报告解读
/api/v1/agent POST Orchestrator 多 Agent 编排
/api/v1/tongue POST MultiModalAgent 舌诊图像分析
/api/v1/health GET — 健康检查

Java AI Gateway 接口(供 Python Tool 层调用):

端点 方法 用途
/api/ai/context/user/{id} GET 用户/家庭上下文
/api/ai/context/report/{id} GET 健康报告详情
/api/ai/context/emotion/{id} GET 情绪数据
/api/product/search POST 商品/活动检索

4.5 资源估算

资源 最低 推荐
CPU 0.5 核 1 核
内存 256MB 512MB
磁盘 1GB (代码+Chroma) 5GB (含日志)
LLM Token 与 Dify 基本持平 (+10% Agent 多轮) —

5. 分阶段迁移计划

Phase 1:基建 + RecommendAgent(第1-2周)

目标: Python 服务跑起来, 第一个 Agent 上线

Task 内容 文件
1 脚手架:pyproject.toml, FastAPI 骨架, Dockerfile cfc-langgraph/
2 配置管理 + .env 模板 app/config.py, .env.example
3 健康检查 + 基础中间件 app/api/health.py
4 ChromaDB 初始化 + 知识库文章加载 app/rag/
5 RecommendAgent (LLM + tool search_product/search_article) app/agents/recommend_agent.py
6 推荐 API (POST /api/v1/recommend) app/api/recommend.py
7 Java AiGateway (HTTP→Python + 熔断 + Dify fallback) cfc-backend/.../service/AiGateway.java
8 RecommendationController 改造:灰度 5% 走 Python cfc-backend/.../controller/
9 Docker Compose 编排 docker-compose.yml
10 集成测试 + 边界验证 tests/

交付标准:

  • curl /api/v1/health 返回 200
  • curl /api/v1/recommend 返回推荐结果(含 LLM 理由)
  • Java 侧 5% 流量走 Python, 异常自动 fallback
  • 编译验证 mvn clean compile

计划文档: docs/superpowers/plans/2026-07-20-langgraph-phase1.md

Phase 2:ChatAgent + RAG + 记忆(第3-4周)

目标: 替代 Dify 核心聊天能力

Task 内容
1 三层记忆(BufferMemory + EntityMemory + VectorStoreMemory)
2 意图分类器(classify_intent node)
3 ChatAgent StateGraph(classify→load_context→llm_call→parse_tasks)
4 RAG Pipeline(混合检索 + 重排序 + 压缩)
5 Java Context API(供 Python 调用的 HTTP 数据接口)
6 Java AIService 改造:聊天优先走 Python, Dify fallback
7 集成测试 + 灰度 30%
8 AiUserFact / AiConversationSummary 设为只读

计划文档: docs/superpowers/plans/2026-07-20-langgraph-phase2.md

Phase 3:高级 Agent + 知识库自动化(第5-6周)

目标: 剩余场景迁移 + 运维就绪

Task 内容
1 AnalysisAgent(报告解读 StateGraph)
2 MultiModalAgent(舌诊)
3 KnowledgePipeline(定时从 Java 拉文章→分块→向量化)
4 LangSmith Trace 接入
5 DifySyncService 标记废弃
6 灰度 100%, Dify 降级为冷备

计划文档: docs/superpowers/plans/2026-07-20-langgraph-phase3.md

Phase 4:收尾 + 运维(第7-8周)

目标: 运维完善, 代码清理

Task 内容
1 Python 侧性能调优(连接池、缓存、异步)
2 Prometheus 监控 + /metrics 暴露
3 JSON 日志标准化 + 日志聚合
4 生产级 Docker Compose
5 Java 侧清理 Dify 相关代码
6 运维文档 + 架构文档更新

计划文档: docs/superpowers/plans/2026-07-20-langgraph-phase4.md


6. 决策日志

6.1 已决定的否决项

否决项 时间 原因
Spring Boot 3 升级 2026-07-20 全量升级 JDK 8→21 风险大, 收益不足
Dify 原地修补 2026-07-20 数据安全问题不解决
AxonHub 模型路由 2026-07-20 增加第三方依赖, 直调 LLM API 更简单
Java LangChain4j 2026-07-20 Agent 编排能力不足, 社区小
Python 直连 MySQL 2026-07-20 数据安全性、事务一致性风险
Dify 立即下线 2026-07-20 需要灰度过渡期

6.2 已确立的原则

  1. 数据主权: Agent Tool 一律通过 HTTP 调 Java 接口, Python 不直连 DB
  2. 最小改动: Java 侧只改 AIService 路由和新增 AiGateway, 不动业务逻辑
  3. 灰度安全: 每个 Phase 都有流量开关 + Dify fallback, 可随时回退
  4. 渐进式迁移: 4 个 Phase 串行, 每阶段有独立验证点
  5. 无锁定: LangGraph 是标准 Python 框架, 无需特殊基础设施

7. 文档清单

7.1 当前有效文档(无需变更)

文件 说明
docs/superpowers/specs/2026-07-20-langgraph-migration-design.md LangGraph 迁移设计文档(架构/API/记忆/部署)
docs/superpowers/specs/2026-07-20-langgraph-requirements-summary.md 本文件 — 需求与决策汇总
docs/superpowers/plans/2026-07-20-langgraph-phase1.md Phase 1 实施计划(10 个 Task)
docs/superpowers/plans/2026-07-20-langgraph-phase2.md Phase 2 实施计划(8 个 Task)
docs/superpowers/plans/2026-07-20-langgraph-phase3.md Phase 3 实施计划(6 个 Task)
docs/superpowers/plans/2026-07-20-langgraph-phase4.md Phase 4 实施计划(6 个 Task)

7.2 已归档文档(被本方案否决)

原路径 现路径 说明
docs/architecture/SpringBoot3升级+Dify替代实施计划.md docs/backup/architecture/SpringBoot3升级+Dify替代实施计划.md Spring Boot 3 + Spring AI 方案(JDK 升级前提)
docs/architecture/Dify替代迁移可行性分析.md docs/backup/architecture/Dify替代迁移可行性分析.md Spring AI 替代可行性分析
docs/architecture/2026-07-20-SB3-upgrade-plan.md docs/backup/architecture/2026-07-20-SB3-upgrade-plan.md SB3 升级 + Dify 替代实现计划
docs/数据与AI结合技术方案.md docs/backup/数据与AI结合技术方案.md 原始数据+AI 技术方案(Dify 时代)
docs/实现计划.md docs/backup/实现计划.md 原始实现计划(Dify 时代)

8. 风险登记册

风险 概率 影响 应对 责任人
Python 服务不稳定 中 高 Phase 1 灰度 5% + 熔断 + Dify fallback 开发
LangGraph 学习成本 高 中 Phase 1 从最简 Agent 开始 开发
记忆数据迁移丢失 低 中 Phase 2 前 Java 侧保持双写 开发
ChromaDB 性能瓶颈 低 中 10 万条内足够, 超出切 PGVector 架构
LLM API 费用增加 中 低 Agent 多轮约多 10% token 运营
Java 8 兼容性 低 高 Java 侧不改依赖, 不影响 开发

9. 当前状态

  • ✅ 方案评审通过
  • ✅ 设计文档发布
  • ✅ 4 个 Phase 计划已编写并推送 (cfclub 分支)
  • ⏸ 等待执行指令
  • ❌ Phase 1-4 尚未开始实施

下一步: 用户确认 → 开始 Phase 1 Task 1(脚手架搭建)