聊到智能客服,很多人第一反应就是那种"您好,请问有什么可以帮您"的固定话术机器人,问东它答西,稍微绕一点就卡壳。近两年大模型火起来之后,开始琢磨能不能做一个真正"听得懂人话"的客服——不仅能聊天,还能自己查天气、算订单、翻知识库,就像一个真正的客服人员那样会动手干活。
本文介绍一套从后端到前端完全自己搭建的 AI Agent 客服系统。
简单说,这就是一个基于 LangChain Agent 的智能客服系统。用户发来一句话,后端跑起来的 Agent 会判断需要调什么工具(查天气、算数、查订单、搜知识库等),拿到结果之后再组织成自然的回复,通过 SSE 流式推送到前端,实时显示在聊天界面上。整个过程支持多轮对话,Agent 能记住上下文,不会聊着聊着就失忆。
技术栈方面,后端用 FastAPI 提供接口,LangChain 负责 Agent 的调度和工具编排,前端则是 React 18 搭配 TypeScript 和 Tailwind CSS。前后端通过 SSE(Server-Sent Events)通信,实现类似打字机的流式输出效果。
┌─────────────────────────────────────────────────────────────┐│ 前端 (React) ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ ││ │ ChatInterface│ │MessageBubble│ │ LoadingDots │ ││ │ 聊天界面 │ │ 消息气泡 │ │ 加载动画 │ ││ └─────────────┘ └─────────────┘ └─────────────────────┘ ││ │ │ ││ └────────────── useChatStream ──────┘ ││ (SSE 流式接收) │└─────────────────────────────────────────────────────────────┘ │ ▼ SSE 流式请求┌─────────────────────────────────────────────────────────────┐│ 后端 (FastAPI) ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ ││ │ main.py │ │ agent.py │ │ tools.py │ ││ │ API入口 │ │ Agent核心 │ │ 8个工具(天气/计算等) │ ││ │ /chat/stream│ │ 创建&执行 │ │ get_weather │ ││ │ /history │ │ │ │ calculate │ ││ └─────────────┘ └─────────────┘ └─────────────────────┘ ││ │ │ ││ ┌──────┴──────┐ ┌───────┴────────┐ ││ │ memory.py │ │ llm.py │ ││ │ 对话记忆 │ │ LangChain LLM │ ││ │ Conversation│ │ ChatOpenAI │ ││ │ BufferMemory│ │ │ ││ └─────────────┘ └────────────────┘ │└─────────────────────────────────────────────────────────────┘数据流转说明:
1、用户在前端输入消息,useChatStream 发起 SSE 连接
2、后端 /api/chat/stream 接口接收请求,将消息和 conversation_id 传给 Agent
3、Agent 从 memory.py 拉取该会话的历史记忆,结合当前输入做推理
4、Agent 判断是否需要调用工具,如需调用则执行 tools.py 中对应的工具函数
5、工具返回结果后,Agent 组织成最终回复,通过 SSE 分块推送给前端
6、前端 MessageBubble 组件逐字渲染,形成打字机效果
7、对话历史通过 memory.py 持久化到 JSON 文件
Agent 自主决策:区别于传统的意图识别加规则匹配,LangChain Agent 会根据用户输入自主判断调哪个工具、怎么调、甚至串联多个工具完成任务
流式体验优先:大模型生成速度再快也有延迟,SSE 流式推送让用户能实时看到内容逐字出现,心理等待感会好很多
工具可插拔:新增工具只需要写一个函数加 @tool 装饰器,再注册到工具列表里,完全不影响现有逻辑
全栈工程化:前端用 TypeScript 做类型约束,后端用 Pydantic 做数据校验,前后端接口契约清晰
轻量存储方案:没用重型数据库,对话历史直接存 JSON 文件,开发阶段足够用,想换数据库也就是改几行代码的事
开箱即用:配置好 API Key,两条命令就能跑起来,很适合作为 AI 应用的脚手架项目
实际测试下来,几个典型场景的响应速度还不错:
天气查询:用户问"杭州今天天气怎么样",Agent 调用天气工具,3 到 4 秒返回结果
多步计算:用户说"帮我算一下 (100+200)*3 再除以 2",Agent 一次调用计算器工具就能搞定
上下文接力:用户先问"我的订单 ORD001 到哪了",再问"那这个订单多少钱",Agent 能记住刚才说的订单号,不需要重复提供
知识库检索:问"你们怎么退货",Agent 会从预置的知识库里匹配相关条款返回
项目代码完整托管,目录结构清晰,前后端分离:
ai-customer-service/├── backend/ # Python 后端│ ├── app/│ │ ├── main.py # FastAPI 入口,路由定义│ │ ├── llm.py # LLM 配置│ │ ├── agent.py # Agent 核心创建和执行│ │ ├── tools.py # 8 个工具定义│ │ ├── memory.py # 对话记忆管理│ │ └── schemas.py # Pydantic 数据模型│ ├── requirements.txt│ └── .env.example├── frontend/ # React 前端│ ├── src/│ │ ├── components/│ │ │ ├── ChatInterface.tsx│ │ │ ├── MessageBubble.tsx│ │ │ └── LoadingDots.tsx│ │ ├── hooks/│ │ │ └── useChatStream.ts│ │ ├── api/│ │ │ └── chat.ts│ │ ├── App.tsx│ │ └── main.tsx│ ├── package.json│ ├── vite.config.ts│ └── tailwind.config.js├── README.md # 项目总览└── LICENSE如果想本地跑起来,按下面的步骤操作:
# 1、后端cd backendpython -m venv venvsource venv/bin/activate # Windows 用 venv\Scripts\activatepip install -r requirements.txtcp .env.example .env# 编辑 .env 填上 OPENAI_API_KEYuvicorn app.main:app --reload --port 8000# 2、前端(新开终端)cd frontendnpm installnpm run dev然后打开 http://localhost:5173 就能用了。
流式聊天接口
GET /api/chat/stream?message=你好&conversation_id=xxx或 POST 方式:
POST /api/chat/stream{"message": "你好","conversation_id": "xxx"}对话历史接口
# 获取历史GET /api/history/{conversation_id}# 清除历史DELETE /api/history/{conversation_id}做这个项目最大的感触是,LangChain 把 Agent 的门槛拉低了很多。以前要实现类似的工具调用能力,得自己写意图识别、参数抽取、工具路由一大堆逻辑,现在用 LangChain 的 create_openai_functions_agent 加几个 @tool 装饰器就搞定了。当然,它也不是银弹,复杂业务场景下 Agent 的稳定性和可控性还需要花功夫去打磨,但作为快速验证和搭建 MVP 来说,这套组合拳的效率确实很高。
后续想继续完善的方向有几个:一是接入更多的业务工具,比如查物流、退换货申请、工单流转;二是加上 RAG(检索增强生成)能力,让知识库问答更精准;三是前端可以补上多会话管理,支持同时开多个对话窗口。
LangChain、AI Agent、智能客服、FastAPI、React、SSE流式响应、工具调用、多轮对话、ConversationBufferMemory、TypeScript、Tailwind CSS、全栈开发、OpenAI API
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
这套框架比 Vue-element 还快?配置只花一分钟,后端仔的福音
从 0 到 1 落地AI管理系统:Spring Boot 3 + Vue 3 实战全记录
Vue 3 + ECharts 搭建 YOLOv8 检测数据可视化大屏
Vue 3 + Vite + Avue 搭建企业级大屏可视化方案


方便大家交流、资源共享和共同成长
纯技术交流群、需要的小伙伴请扫码
有收获?不妨分享让更多人受益
关注「程序员开源栈」,共同提升技术实力



