LangChain 06:端到端项目蓝图——把知识库客服做成可上线服务

2026-09-01
12995 分钟
...

1、本篇任务:把前五课装成一个能维护的后端

这一篇不再介绍新概念,而是给出项目边界、目录、API 和迭代顺序。目标是把退款政策与订单助手做成可运行服务,而不是继续在 Notebook 中调用 agent.invoke()

2、先确定第一版做什么、不做什么

第一版支持:政策 RAG、当前用户订单查询、结构化回答、SSE 流式事件、退款草案与审批、会话恢复、trace 和最小评测。

第一版不做:多渠道、语音、自动退款、多 Agent、任意 MCP、自动学习所有用户信息。明确不做的事能让权限和测试范围保持可控。

3、推荐架构

Web / App
HTTPS + 登录态
API鉴权限流输入 schemarequest_idSSE
注入 RequestContext
Agent Application
  ├─ triage / answer schema
  ├─ get_orderOrderServiceDB
  ├─ search_policyRetrieverVector DB
  ├─ draft/submit refundApproval + Domain Service
  └─ checkpointer / store

LangSmith trace + 应用日志 + metrics

模型永远不直接连接数据库。工具调用领域服务;领域服务可以脱离 Agent 单独测试和复用。

4、目录按责任拆,而不是按框架名堆文件

src/
  api/          # HTTP认证SSE公共错误
  agent/        # Agent 装配promptmiddleware事件适配
  domain/       # OrderServiceRefundService业务不变量
  tools/        # 领域服务到 Agent tool 的薄适配
  retrieval/    # ingestionretriever引用验证
  persistence/  # threadcheckpointoutboxrepository
  contracts/    # Pydantic/Zod/OpenAPI schema
tests/
  unit/         # 无模型的领域路径权限测试
  integration/  # DB向量库工具checkpoint
  evals/        # Agent/RAG 固定案例

Python 和 TypeScript 版本采用相同边界;区别只是 Pydantic/FastAPI 与 Zod/Fastify/Nest 等实现选择。

5、公共 API 合同

POST /conversations                 创建会话返回 conversationId
POST /conversations/:id/messages    创建 run立即返回 runId
GET  /runs/:id/events?after=42      SSE支持从 sequence 恢复
POST /runs/:id/decisions            提交 approve/edit/reject
GET  /conversations/:id             恢复消息当前 run 和待审批动作

请求 body 不接受 userId/tenantId/roles。这些值由认证中间件放入 RequestContext。公共事件只暴露产品状态,不暴露 LangGraph 节点对象、原始 prompt、密钥或工具堆栈。

6、一次请求的完整时序

  1. API 验证登录态和消息长度,生成 request_id/run_id
  2. 确认 conversation 属于当前用户,加载 thread_id
  3. Agent 根据问题调用政策或订单工具。
  4. 后端把框架 stream 转为带 sequence 的公共事件并持久化必要状态。
  5. 普通问答完成后保存结构化 answer 与引用。
  6. 遇到退款草案时 run 进入 waiting_for_approval
  7. 决策 API 校验身份、action 和过期时间,恢复同一 thread。
  8. 写工具通过 action ID 幂等执行,最终发 run.completed

7、迭代顺序与每步验收

迭代只增加的能力验收
1政策两步 RAG10 条检索案例、引用有效、无证据拒答
2订单只读工具越权测试通过,工具失败不编造
3会话与 SSE刷新恢复、断线续传、事件不重复
4退款审批未批准零副作用、重复批准幂等
5LangSmith 与 CI eval坏 prompt/ACL 变更能阻止发布

不要先写完整 UI 再补安全,也不要一次接入十个工具。每个迭代都应该能部署、回滚和单独验证。

8、前后端共享的结果合同

type Answer = {
  text: string;
  citations: { documentId: string; chunkId: string; title: string }[];
  confidence: "high" | "medium" | "low";
  needsHuman: boolean;
};

Python 用 Pydantic 定义同样字段,并通过 OpenAPI 或 schema 生成保持同步。不要让前端从模型 Markdown 猜引用、订单号或审批动作。

9、上线前最小门禁

必须验证:跨租户隔离;提示注入无副作用;模型、工具和向量库超时有降级;checkpoint 可恢复;密钥和 PII 不进入 trace;P95、token 和工具调用有预算;prompt、模型、索引、代码都带版本;旧版本可回滚。

下一课只关注前端如何消费这些稳定事件。后端内部实现可以变化,前端合同不应跟着 LangChain API 一起变化。

官方阅读:AgentsContext Engineering

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
AI2026-09-01
Deep Agents 01:何为 Agent Harness,以及如何开始
1、本篇任务:完成一份多步骤、带证据的技术调研 普通客服 Agent 的问题短、工具少、输出即时。技术调研或编码任务会持续很久,产生计划、搜索结果、文件和中间结论。Deep Agents 在 LangChain/LangGraph 之上预装规划、虚拟文件系统、上下文压缩和子 Agent,适合这类开放任务。 本课让 Agent 比较两种向量数据库,并交付一份可验证报告。 2、什么时候需要 Deep Agent 满足以下两项以上再考虑:任务...
学习
AI2026-09-01
Deep Agents 02:子 Agent、虚拟文件系统与长期记忆
1、本篇任务:让主管只看结论,让子 Agent 处理细节 技术调研会产生几十次搜索和大量文件。如果全部进入主管上下文,真正的目标会被噪音淹没。本课用两个子 Agent: 收集证据, 检查结论;主管负责计划与最终合成。 2、什么时候委派,什么时候直接调用工具 适合委派:子任务有多步;需要专门提示或工具;会产生大量中间结果;只需返回有限结论。不适合:一步查询;主管需要全部中间上下文;协调成本超过任务本身。 3、配置专门子 Agent Pyt...
学习
AI2026-09-01
Deep Agents 03:生产化、Sandbox、权限与上线验收
1、本篇任务:让 Deep Agent 在隔离环境中分析代码 只读研究 Agent 风险有限;编码 Agent 需要读写文件、安装依赖和执行测试。本课不讲如何让模型写更漂亮的代码,只讲执行环境、权限、恢复和上线验收。 2、先做威胁模型 资产包括源代码、用户文件、云凭证、生产网络和发布权限;攻击入口包括用户消息、仓库内容、网页、依赖包、MCP 返回和命令输出。 Prompt injection 不是靠一句 system prompt 解决...
学习
AI2026-09-01
LangChain 01:全景、原理与学习路线
1、本篇学完要得到什么 这一篇只解决三个问题:LangChain 到底负责什么;它与 LangGraph、Deep Agents、LangSmith 是什么关系;后面应按什么顺序学习。 贯穿整套课程的项目是“退款政策与订单助手”。它最终能够:回答知识库中的退款规则;查询当前用户的订单;生成结构化答复;对真正的退款操作进行人工审批;断线后恢复;通过评测后发布。 先记住一句话: 模型负责理解与生成,应用负责数据、权限、状态和副作用。 如果把...
学习
AI2026-09-01
LangChain 02:模型、消息与结构化输出
1、本篇任务:让模型输出成为程序可以依赖的合同 上一课只证明 Agent 能运行。本课暂时不接业务工具,只完成一个“客服分诊器”:输入用户问题,输出意图、紧急程度、是否需要人工和给用户的答复。 本课的核心不是学更多模型参数,而是理解三层合同:消息决定模型看到了什么;schema 决定程序期待什么;业务校验决定结果是否真的可用。 2、消息不是一段字符串,而是一条执行记录 一次工具型对话通常包含四种消息: | 类型 | 由谁产生 | 作用...
学习
AI2026-09-01
LangChain 03:工具与 Agent——从函数到可控行动
1、本篇任务:让 Agent 安全地读取订单 上一课得到结构化分诊结果,但模型不知道真实订单。本课增加一个只读工具 ,走通完整 Agent 循环,并把模型、工具包装和领域服务的责任分开。 完成后,用户问“我的 A100 发货了吗”,Agent 会选择工具;工具只按当前登录用户查询;模型基于工具结果回答。它仍然不能退款,因为我们没有提供写工具。 2、工具的本质是受 schema 约束的应用函数 一个好工具需要:稳定名称、清楚描述、窄输入...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录