23 - 综合实战(上):需求分析与架构设计!从零到一构建生产级智能客服Agent
2026/8/30 6:07:37 网站建设 项目流程

适合前后端/测试等有编程基础的同学,手把手带你走完企业级Agent项目的完整交付流程

前言

经过前面22节课的系统学习,你已经掌握了AI Agent开发的完整技能树

模块课时核心能力
模块一:认知篇第1-2节理解Agent是什么、能做什么
模块二:基础篇第3-6节API调用、Prompt Engineering、Function Calling、上下文管理
模块三:框架篇第7-12节LangChain核心组件、Chain、Memory、RAG、LangGraph
模块四:进阶篇第13-18节ReAct、Plan-and-Execute、多Agent协作、记忆系统、安全对齐
模块五:工程篇第19-22节评估测试、部署上线、可观测性、性能优化

现在是时候把所有知识串起来了。

一句话定义:综合实战是将前面22节课的所有知识点,通过一个完整的企业级项目从需求分析、架构设计、代码开发、测试评估到部署上线的全流程,进行一次系统性的整合与验证。

今天这一节(第23节)聚焦于需求分析与架构设计——这是整个项目成败的关键。代码可以重构,但架构错了,整个项目都要推倒重来。

一、项目选题:三个实战方向

我们从以下三个实战项目中三选一,每个项目都覆盖了前面22节课的核心知识点:

项目A:智能客服Agent(推荐⭐)

业务场景:为一家中型电商公司构建智能客服系统,处理用户售前咨询、售后问题和工单创建。

核心功能涉及的技术点对应课时
多轮对话Memory + Checkpointer第6、9、17节
知识库问答(商品信息、退换货政策)RAG + Vector Store第10节
订单查询Function Calling + Tool第5、11节
自动创建工单Tool + API集成第11节
人工转接Human-in-the-Loop第18节
多Agent协作(售前/售后分流)Multi-Agent第15-16节

为什么推荐:业务逻辑清晰、技术覆盖全面、可落地性强、简历含金量高。

项目B:代码审查Agent

业务场景:为开发团队构建自动化代码审查工具,在PR阶段自动分析代码质量、发现潜在Bug。

核心功能涉及的技术点对应课时
代码解析与静态分析Tool + Code Parser第5、11节
AI代码审查ReAct + LLM第13节
自动修复建议Plan-and-Execute第14节
多语言支持Tool扩展第11节
审查报告生成Chain + Output Parser第4、8节
CI/CD集成部署与API第20节

项目C:数据分析Agent

业务场景:让业务人员用自然语言查询数据、自动生成SQL、执行分析并输出可视化图表。

核心功能涉及的技术点对应课时
NL2SQLTool + LLM第5、11节
数据查询与聚合Tool + 数据库第11节
自动可视化Tool + 图表库第5、11节
分析报告生成Chain + RAG第8、10节
多数据源支持Tool扩展第11节

二、项目选择与决策

💡建议:如果你时间有限或想快速上手,选择项目A(智能客服)。它是三个项目中最“标准”的Agent应用场景,技术覆盖最全面,也是面试中最常被问到的案例。

决策矩阵

你的背景推荐项目理由
后端/全栈开发项目A(智能客服)涉及API集成、数据库、服务化部署,后端技能可复用
前端/测试开发项目B(代码审查)代码分析、CI/CD集成,贴近开发工具链
数据/算法背景项目C(数据分析)NL2SQL、数据可视化,发挥数据技能

本文以项目A(智能客服)为主线进行完整实战,项目B和C的架构思路类似,可在理解A的基础上自行迁移。

三、需求分析与功能拆解

3.1 业务需求文档(BRD)

项目名称:智能客服Agent系统(E-commerce Customer Service Agent)

目标用户:电商平台普通消费者(C端)+ 客服管理人员(B端)

核心价值

  • 7×24小时即时响应,解决80%的常见问题
  • 自动分流复杂问题到人工客服
  • 降低客服人力成本40%以上

3.2 功能需求清单(FRD)

编号功能优先级说明
F1多轮对话P0支持上下文记忆,理解用户意图
F2售前咨询P0商品信息查询、推荐、比价
F3售后服务P0订单查询、退换货、物流跟踪
F4知识库问答P0基于产品手册、政策文档的RAG问答
F5工单创建P1复杂问题自动创建工单流转到人工
F6人工转接P1识别需要人工介入的场景并转接
F7用户身份识别P2识别登录用户,个性化服务
F8多轮对话P0支持上下文记忆,理解用户意图
F9售前咨询P0商品信息查询、推荐、比价
F10售后服务P0订单查询、退换货、物流跟踪
F11知识库问答P0基于产品手册、政策文档的RAG问答
F12工单创建P1复杂问题自动创建工单流转到人工
F13人工转接P1识别需要人工介入的场景并转接
F14用户身份识别P2识别登录用户,个性化服务

3.3 非功能需求(NFR)

编号需求目标值
N1响应延迟(P95)< 3秒
N2并发支持100 QPS
N3可用性99.5%
N4Token成本< ¥0.1/会话
N5会话持久化支持断点续传
N6可观测性LangSmith全链路追踪

3.4 Agent能力边界定义

这是架构设计中最容易被忽略、但最关键的环节:

Agent应该做什么,不应该做什么?

应该做不应该做
回答商品信息和库存状态直接修改库存(只读操作)
查询订单状态和物流信息直接操作订单(通过工具间接)
创建售后工单(提交后需人工审核)自动执行退款
引导用户自助完成退换货绕过用户确认直接发起退款

能力边界的影响

  • 工具设计:你只需要给Agent“只读”或“受控写入”的工具
  • 权限模型:Agent不需要拥有写权限,只有受控写入的中间层
  • 安全风险:如果有人注入攻击,最多泄露信息而不是删除数据

四、技术选型

4.1 技术栈总览

层级技术选型理由
Web框架FastAPI高性能、异步、自动生成OpenAPI文档
Agent框架LangChain + LangGraph工业级标准,生态完善
大模型DeepSeek-V4-Flash(推理) + BGE(Embedding)性价比高,中文友好
向量数据库Chroma(开发) / Milvus(生产)轻量级→分布式平滑迁移
关系数据库PostgreSQL(+ pgvector)检查点持久化+向量存储二合一
任务队列Celery + Redis异步处理长耗时任务
容器化Docker + Docker Compose一键启动全部服务
可观测性LangSmith + LangFuse全链路追踪+成本监控
评估框架LangSmith + Ragas离线评估+质量监控

4.2 为什么选DeepSeek-V4-Flash?

维度DeepSeek-V4-FlashGPT-4o-mini通义千问
价格(输入/输出)$0.003 / $0.015$0.15 / $0.60¥0.002 / ¥0.006
中文能力⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
工具调用⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
推理能力⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

DeepSeek的性价比优势在客服场景中非常明显——每日海量会话,成本差异直接决定项目能否盈利。

五、架构设计

5.1 系统架构图

┌─────────────────────────────────────────────────────────────────────┐ │ 用户层 │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Web/小程序 │ │ APP客户端 │ │ API调用方 │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ └─────────────────┼─────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ API Gateway / Nginx │ │ │ │ (限流 + 认证 + 负载均衡) │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ FastAPI 服务层 │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ 会话管理 │ │ 意图识别 │ │ 路由分发 │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ LangGraph Agent 核心编排层 │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ │ │ Supervisor │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ │ │ 售前Agent│ │ 售后Agent│ │ 工单Agent│ │ │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ └──────┬──────┘ │ │ │ │ │ │ │ ↓ ↓ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ │ │ │ │ RAG引擎 │ │工具执行器│ │ │ │ │ │ │ └──────────┘ └──────────┘ │ │ │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ 基础设施层 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │PostgreSQL│ │ Redis │ │ 向量数据库│ │ 对象存储 │ │ │ │ │ │(检查点) │ │(缓存/队列)│ │ (知识库) │ │ (日志) │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ 可观测性层 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │LangSmith │ │ LangFuse │ │Prometheus│ │ │ │ │ │(追踪+评估)│ │ (成本监控)│ │ (指标) │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘

5.2 Agent工作流设计(LangGraph状态图)

fromtypingimportTypedDict,Literalfromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.checkpoint.memoryimportInMemorySaverclassCustomerServiceState(TypedDict):"""客服Agent全局状态"""messages:list# 对话历史user_id:str# 用户IDintent:str# 意图分类query:str# 当前查询knowledge_context:str# RAG检索结果order_info:dict# 订单信息need_human:bool# 是否需要转人工ticket_created:bool# 是否已创建工单iteration:int# 当前迭代次数defsupervisor_node(state:CustomerServiceState)->dict:"""监督者节点:意图识别与路由分发"""# 1. 识别用户意图(售前/售后/转人工/通用)intent=classify_intent(state["query"])return{"intent":intent}defrouter(state:CustomerServiceState)->Literal["pre_sales","after_sales","human","general"]:"""路由函数:根据意图分发到不同子Agent"""returnstate["intent"]# 构建图graph=StateGraph(CustomerServiceState)graph.add_node("supervisor",supervisor_node)graph.add_node("pre_sales_agent",pre_sales_node)# 售前Agentgraph.add_node("after_sales_agent",after_sales_node)# 售后Agentgraph.add_node("human_agent",human_node)# 转人工Agentgraph.add_node("general_agent",general_node)# 通用Agentgraph.add_node("retriever",retriever_node)# RAG检索节点graph.add_node("tool_executor",tool_executor_node)# 工具执行节点# 定义路由graph.add_edge(START,"supervisor")graph.add_conditional_edges("supervisor",router,{"pre_sales":"pre_sales_agent","after_sales":"after_sales_agent","human":"human_agent","general":"general_agent"})graph.add_edge("pre_sales_agent","retriever")graph.add_edge("after_sales_agent","tool_executor")graph.add_edge("retriever","tool_executor")graph.add_edge("tool_executor",END)graph.add_edge("human_agent",END)graph.add_edge("general_agent",END)checkpointer=InMemorySaver()app=graph.compile(checkpointer=checkpointer)

5.3 数据模型设计

-- 用户表CREATETABLEusers(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),phoneVARCHAR(20)UNIQUE,emailVARCHAR(255)UNIQUE,created_atTIMESTAMPDEFAULTNOW());-- 会话表CREATETABLEsessions(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),user_id UUIDREFERENCESusers(id),thread_idVARCHAR(255)UNIQUE,-- LangGraph thread_idstatusVARCHAR(20)DEFAULT'active',created_atTIMESTAMPDEFAULTNOW(),updated_atTIMESTAMPDEFAULTNOW());-- 消息表CREATETABLEmessages(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),session_id UUIDREFERENCESsessions(id),roleVARCHAR(20),-- user / assistant / toolcontentTEXT,tool_calls JSONB,created_atTIMESTAMPDEFAULTNOW());-- 工单表CREATETABLEtickets(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),session_id UUIDREFERENCESsessions(id),user_id UUIDREFERENCESusers(id),categoryVARCHAR(50),descriptionTEXT,statusVARCHAR(20)DEFAULT'pending',created_atTIMESTAMPDEFAULTNOW());-- 知识库(向量存储在pgvector)CREATETABLEknowledge_base(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),contentTEXT,metadata JSONB,embedding vector(1536),-- pgvectorcreated_atTIMESTAMPDEFAULTNOW());-- 创建向量索引CREATEINDEXknowledge_embedding_idxONknowledge_baseUSINGivfflat(embedding vector_cosine_ops)WITH(lists=100);

5.4 工具设计(Tools)

fromlangchain.toolsimporttool# 只读工具(低风险)@tooldefget_product_info(product_name:str)->str:"""查询商品信息,包括价格、库存、规格。仅用于售前咨询。"""# SELECT * FROM products WHERE name LIKE '%{product_name}%'pass@tooldefget_order_status(order_id:str)->str:"""查询订单状态和物流信息。仅用于售后咨询。"""# SELECT status, tracking FROM orders WHERE order_id = '{order_id}'pass# 受控写入工具(中风险,需要确认)@tooldefcreate_return_request(order_id:str,reason:str)->str:"""创建退换货申请。需要用户确认后才能调用。"""# INSERT INTO returns (order_id, reason, status) VALUES ...pass# 高风险操作(需要Human-in-the-Loop)@tooldefescalate_to_human(reason:str)->str:"""将对话转接给人工客服。用于复杂问题。"""# 触发转人工流程pass

5.5 RAG知识库设计

文档类型内容分割策略
商品手册商品规格、使用方法按商品分块,每块500-800字符
退换货政策退换货规则、流程按政策条款分块
FAQ常见问题及答案每问一答,独立成块
物流说明配送范围、时效按物流方式分块

六、项目初始化

6.1 项目目录结构

customer-service-agent/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI入口 │ ├── agent/ │ │ ├── __init__.py │ │ ├── graph.py # LangGraph定义 │ │ ├── nodes.py # 各节点实现 │ │ └── state.py # 状态定义 │ ├── tools/ │ │ ├── __init__.py │ │ ├── product.py # 商品查询工具 │ │ ├── order.py # 订单查询工具 │ │ ├── ticket.py # 工单工具 │ │ └── human.py # 转人工工具 │ ├── rag/ │ │ ├── __init__.py │ │ ├── loader.py # 文档加载器 │ │ ├── splitter.py # 文本分割器 │ │ ├── embedding.py # 向量化 │ │ └── retriever.py # 检索器 │ ├── memory/ │ │ ├── __init__.py │ │ ├── checkpointer.py # 检查点配置 │ │ └── store.py # 长期记忆配置 │ ├── api/ │ │ ├── __init__.py │ │ ├── routes.py # API路由 │ │ └── models.py # Pydantic模型 │ ├── config/ │ │ ├── __init__.py │ │ └── settings.py # 配置管理 │ └── utils/ │ ├── __init__.py │ └── logging.py # 日志配置 ├── tests/ │ ├── unit/ │ └── integration/ ├── deployments/ │ ├── docker-compose.yml │ └── Dockerfile ├── scripts/ │ ├── init_db.py # 数据库初始化 │ └── load_knowledge.py # 知识库加载 ├── requirements.txt ├── .env.example └── README.md

6.2 环境配置

# .env.example# LangChainLANGSMITH_API_KEY=your_langsmith_keyLANGSMITH_TRACING=trueLANGSMITH_PROJECT=cs-agent# 模型LLM_API_KEY=your_deepseek_keyLLM_BASE_URL=https://api.deepseek.comLLM_MODEL=deepseek-v4-flash# 数据库DATABASE_URL=postgresql://agent:pass@localhost:5432/cs_agent# RedisREDIS_URL=redis://localhost:6379/0# 向量数据库VECTOR_STORE_PATH=./chroma_db

6.3 依赖清单

# requirements.txt # Core langchain>=1.0.0 langgraph>=1.0.0 langchain-openai>=1.0.0 langchain-community>=1.0.0 # Web fastapi>=0.115.0 uvicorn[standard]>=0.30.0 pydantic>=2.0.0 # Database asyncpg>=0.29.0 pgvector>=0.2.5 sqlalchemy>=2.0.0 # Vector DB chromadb>=0.5.0 # Async celery>=5.3.0 redis>=5.0.0 # Observability langsmith>=0.1.0 langfuse>=2.0.0 # Utils python-dotenv>=1.0.0 python-multipart>=0.0.9

6.4 核心配置类

# app/config/settings.pyfrompydantic_settingsimportBaseSettingsclassSettings(BaseSettings):"""应用配置"""# LangSmithlangsmith_api_key:strlangsmith_tracing:bool=Truelangsmith_project:str="cs-agent"# LLMllm_api_key:strllm_base_url:str="https://api.deepseek.com"llm_model:str="deepseek-v4-flash"llm_temperature:float=0.3# Embeddingembedding_model:str="text-embedding-3-small"# Databasedatabase_url:str="postgresql://agent:pass@localhost:5432/cs_agent"# Redisredis_url:str="redis://localhost:6379/0"# Vector Storevector_store_path:str="./chroma_db"# Agentmax_iterations:int=10max_tokens_per_session:int=50000cost_budget_per_session:float=0.5# USDclassConfig:env_file=".env"settings=Settings()

七、动手:搭建项目骨架

🚀本节动手任务:完成项目的初始化搭建,为下一节的完整开发做好准备。

任务清单

任务说明状态
1. 创建项目目录结构按上述结构创建所有目录和__init__.py
2. 初始化虚拟环境python -m venv venv && source venv/bin/activate
3. 安装依赖pip install -r requirements.txt
4. 配置环境变量复制.env.example.env并填写
5. 启动基础设施docker-compose up -d postgres redis
6. 初始化数据库运行scripts/init_db.py创建表
7. 加载知识库运行scripts/load_knowledge.py
8. 启动API服务uvicorn app.main:app --reload
9. 验证健康检查curl http://localhost:8000/health
10. 创建第一个Agent节点实现supervisor_node基础版本

快速启动脚本

#!/bin/bash# scripts/setup.shecho"🚀 初始化智能客服Agent项目..."# 1. 创建虚拟环境python-mvenv venvsourcevenv/bin/activate# 2. 安装依赖pipinstall-rrequirements.txt# 3. 复制环境配置cp.env.example .envecho"⚠️ 请编辑.env文件,填写API Key"# 4. 启动依赖服务docker-composeup-dpostgres redis# 5. 初始化数据库python scripts/init_db.py# 6. 加载示例知识库python scripts/load_knowledge.py--sampleecho"✅ 项目初始化完成!"echo"启动API服务:uvicorn app.main:app --reload"

八、实战小练习(作业)

练习:完成项目骨架搭建 + 架构文档

第一部分:动手搭建

按照本节的任务清单,完成项目的初始化搭建,确保所有服务能够正常启动。

第二部分:架构文档

撰写一份简短的架构文档(README.md),包含:

  1. 项目概述(一句话说明项目是什么)
  2. 技术栈(列出所有使用的技术和版本)
  3. 系统架构图(可以手绘或用工具绘制)
  4. 核心流程说明(用户请求的完整处理链路)
  5. 部署说明(如何启动、如何配置)

第三部分:扩展思考

请思考以下问题并写出你的答案:

  1. 如果客服Agent每天要处理10万次会话,架构中哪个环节最可能成为瓶颈?
  2. 如果用户恶意攻击(如高频请求、注入攻击),你的架构如何防御?
  3. 如果大模型API突然不可用,系统应该如何降级?

提交物

  1. 项目Git仓库地址(或本地目录截图)
  2. README.md(架构文档)
  3. 扩展思考的答案

结语

今天这节课,我们完成了综合实战项目的第一阶段——需求分析与架构设计

阶段产出物状态
项目选题智能客服Agent(三选一决策)
需求分析BRD + FRD + NFR + Agent能力边界
技术选型完整技术栈清单
架构设计系统架构图 + Agent工作流 + 数据模型 + 工具设计
项目初始化目录结构 + 配置文件 + 启动脚本
动手任务10项任务清单🔄 待完成

第23节核心价值“一个清晰、完整的架构设计,比草率的代码实现重要100倍。”好的架构能让后续开发事半功倍,糟糕的架构会让你在代码中迷失方向。

下节课(第24节,最后一节),我们将进入综合实战(下)——完成全部代码开发、集成测试、部署上线与项目交付!

如果觉得有帮助,欢迎点赞、收藏、评论三连!我们最后一节课见!

📌 本文是《AI Agent开发实战》课程第23节的完整内容,系列文章持续更新中,关注我不迷路!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询