当前位置: 首页 > article >正文

20年老程序员×AI:2小时搭建社保智能客服系统实战

20年老程序员×AI2小时搭建社保智能客服系统实战一、背景去年用 Python 现学现卖做了一个社保知识 RAG 问答系统——用 Milvus 向量库 Ollama(BGE-M3) DeepSeek用户问政策系统从知识库里找最像的问题喂给大模型回答。跑了一段时间发现不对——用户不只是想问问题他们想办事查养老金发了多少、转移社保关系、开参保证明、异地就医备案……这就需要从单轮 QA变成有状态的多轮 Agent。下面是我和 AI 一起从头搭建这个 Agent 系统的完整过程。先说结论一个人2-3 小时12 个业务类型后端前端语音HTTPS 全栈。传统开发哪个 10 人团队不得干两周二、核心对话实录回合1桩/真分层——开发效率的第一刀我后端接口现在先全部用桩模块实现……LLM、Milvus、OCR 真实人脸服务、业务 API 桩模拟。这个需求背后的经验判断如果全真卡在联调上一个服务不通整体跑不起来如果全桩验证不了核心链路。真/假分层后LLM 的 Function Calling、向量检索、OCR 身份证识别走真实服务验证核心能力人脸和业务 API 走桩返回模拟数据保证流程能从头跑到尾。AI 改了 2 个文件face_handler.py去掉 requests 调外部接口固定返回通过api_caller.py根据 business_id 返回对应的模拟 JSON。回合2字段校验失败跳 QA我 43103 输入后没有继续要身份证号跳去回答问题了。这是一个典型的边界条件 AI 自己想不到。用户办异地就医备案我输入43103不完整的身份证号系统回答您好社会保障号码就是您的身份证号码……——把残缺输入当成了提问。原因是_handle_collecting里的逻辑LLM 把43103识别为answer_question校验失败后优先走了 QA 路径。修法很简单校验失败一律返回纠错提示不跳 QA。# 去掉这个分支# if intent answer_question:# return self._handle_qa(...)# 验证失败始终return {type: text, content: validated_value, next_action: collecting}回合3办理没有上下文我 系统推荐了 您可能需要办理【异地就医备案】回复’办理’即可开始用户回办理系统却又让重新说办什么。用户说办理两个字LLM 不知道办什么——它没看见上一轮的推荐。修法给 IntentEngine 的 LLM 调用注入最少最近 6 条对话历史作为上下文。def_build_messages(self,system_content,user_text,session):messages[{role:system,content:system_content}]historysession.get(history,[])ifhistory:forhinhistory[-6:]:messages.append({role:h.get(role),content:h.get(content,)[:300]})messages.append({role:user,content:user_text})returnmessages加系统指令“如果用户说办理、好的、可以等简短确认词参考对话历史中最近一次推荐的业务来判定。”效果有历史→match_business无历史→answer_question。回合4JSON 转卡片我前端用户直接看到 JSON太不友好了。业务 API桩返回的 JSON 被原样展示为代码块。加了一个renderJsonBlocks()函数解析precode classlanguage-json块转成 key-value 表格卡片。配了 40 英译中字段映射表varlabelMap{id_card:身份证号,monthly_pension:月养老金,application_id:申请编号,direct_settlement:直接结算,...};嵌套 object 不再显示[object Object]转成 JSON 字符串展示。回合5聊天历史丢了我前端聊天记录历史丢了。原来是每条新消息直接覆盖#resultdiv。改成追加模式——用户消息蓝色气泡右对齐AI 回复白色气泡左对齐 头像chat-history容器自动滚底。回合6-9语音按钮——4 次迭代踩坑这是与讯飞 IAT SDK 集成时踩的坑也是整个开发过程里调最久的部分。第一版需求按住不放开始录音松开提交文本10 秒无语音自动放弃。坑1点了没反应。原因btn.onclick null之后才去读origClick永远是 null → 先把原始点击保存了再清空。坑2一直连接中…“不到录音中…”。原因window.iatWS不存在——index.js里是let iatWS不在 window 上 → 改typeof iatWS ! undefined直接引用。坑3松开后文字为空。原因松开→立即关 WebSocket截断了正在回来的识别结果 → 改成松开只停录音等 WebSocket 收到status2自然关闭后延迟 300ms 再取文字。坑4同事反馈——“要考虑建立通道的时间不能让客户白说” → 分两段按住→连接中…→WebSocket 就绪→录音中…→现在可以说话了。// 最终流程btn.innerText连接中...;// 按下的瞬间// checkReady 轮询 iatWS.readyState 1btn.innerText录音中...;// 就绪后// 说话...// 松开 → 处理中... → 等 close → 取文字 → 提交坑5语音识别结果自带句号。讯飞识别结果 “北京市。” 被^\d{17}[\dXx]$校验拦下 → 加rstrip(\u3002...)去掉中文标点。顺便加了中文日期智能解析“026年3月5号” →2026-03-05。回合10并发安全我要支持并发多个客户的上下文不能混在一起。Redis key 天然按agent:session:{user_id}隔离。FlowController 单例加双重检查锁_flow_lockthreading.Lock()def_get_flow():globalflowifflowisNone:with_flow_lock:ifflowisNone:flowFlowController(...)returnflowSessionStore 加了 Redis 不可用时的内存回退不依赖特定环境。回合11RAG 老说根据上下文我回答问题里面出现了根据上下文。Prompt 调了一轮从不要提示根据提供的上下文改成严禁说根据上下文、参考以上信息、根据提供的内容之类的话要像自己本来就知道一样直接回答。顺手修了一个 bug——for 循环里的q变量名覆盖了用户原始问题。回合12可配置化——业务的灵魂我业务太少还要有参保登记、个人信息修改、异地就医备案等——可配置化。核心设计业务规则不进代码只改 YAML。字段定义、校验规则、API 映射全部配置化-id:remote_medicalname:异地就医备案type:handlefields:-key:medical_citylabel:就医城市validate:^[\\u4e00-\\u9fa5]{2,10}(?:市|区|县)?$-key:hospitallabel:就医医院...require_confirm:trueconfig.yaml 里新增一个业务api_caller.py加一段桩数据前端bizNameMap补一行——不写任何业务逻辑代码。从 5 个业务扩到 12 个纯加配置。最终 12 个业务养老金发放查询、缴费记录查询、养老金资格认证、社保关系转移、参保证明开具、参保登记、个人信息修改、异地就医备案、社保卡申领、医疗费用报销、失业保险金申领、生育保险申领。回合13身份证后置我一个销售同事提的——身份证号是敏感信息应该最后再要求客户输入容易获取信赖。我考虑后觉得合理。12 个业务类型凡是含id_number字段的全部调到最后一个。用户先回答城市、医院、日期这些低敏感信息建立信任感之后最后才要身份证号。config.yaml 里重新排序即可代码不动。回合14手机端语音需要 HTTPS我要有 HTTPS要不手机端语音功能用不了——getUserMedia在 HTTP 下被禁止。OpenSSL 生成自签名证书启动代码加双模式# 默认 HTTPS 443手机端可用语音# $env:FLASK_HTTP1 → HTTP 5000本地调试ifos.environ.get(FLASK_HTTP)1:app.run(host0.0.0.0,port5000,debugTrue)else:app.run(host0.0.0.0,port443,ssl_context(cert_path,key_path),debugTrue)三、关于 AI 写代码这件事知道好的代码长什么样让 AI 写。判断力比编码力更稀缺。创造从想要什么开始不是从会什么开始。AI 把去找什么的时间从 3 天压到 3 分钟而已。四、技术栈层技术LLMDeepSeek API (deepseek-chat)向量化Ollama (bge-m3)向量数据库Milvus会话存储Redis (30min TTL, 内存回退)意图识别Function Calling 对话历史上下文 业务推荐前端Flask jQuery AmazeUI 讯飞 IAT/TTS marked.jsHTTPSFlask SSL OpenSSL 自签名证书人脸服务和业务 API 当前用桩实现联调时替换即可。五、结语有人说 AI coding 提升效率 50%有人说 10%。看看这个项目的实际数据传统开发 11-17 天实际 2-3 小时——效率提升至少 80%。原因有两个项目类型恰好是 AI 最强项样板代码、配置驱动、CRUD、前端适配经验差决定了 AI 的放大倍数初级程序员不知道该做什么、不该做什么、哪里会出问题。经验让 AI 从能跑的代码生成器变成精准的工具

相关文章:

20年老程序员×AI:2小时搭建社保智能客服系统实战

20年老程序员AI:2小时搭建社保智能客服系统实战 一、背景 去年用 Python 现学现卖做了一个社保知识 RAG 问答系统——用 Milvus 向量库 Ollama(BGE-M3) DeepSeek,用户问政策,系统从知识库里找最像的问题喂给大模型回答。 跑了一段时间发现不…...

OpenClaw智能体断点续传插件:轻量级任务恢复方案详解

1. 项目概述:为OpenClaw智能体注入“断点续传”能力如果你正在使用OpenClaw构建自动化工作流,大概率遇到过这样的场景:一个处理文档、分析数据或者执行复杂命令的智能体任务,运行到一半,突然因为网络超时、工具调用失败…...

高性能SQL解析库-fast-sqlparse

原本是我写的一个C 17跨平台SQL解析库,后面用pybind11编译成了pyd和so文件,然后二次开发而来,他的速度有一定的损失,但是我们解析SQL更简单、更快、更直观了。经过一年7个大版本的迭代开发、反复测试和不断完善,今年我…...

张量基础与NumPy操作全解析

1. 张量基础概念解析在机器学习领域,张量(Tensor)是最基础的数据结构之一。Google的TensorFlow框架名称就来源于此,足见其重要性。简单来说,张量是向量和矩阵的高维推广,可以理解为多维数组。1.1 张量的数学…...

深度学习图像数据集目录设计与Keras数据生成器实践

1. 深度学习图像数据集目录结构设计在计算机视觉项目中,合理组织图像数据是模型训练的第一步。我见过太多项目因为初期目录结构混乱,导致后续数据加载和模型训练遇到各种问题。经过多年实践,我发现遵循以下目录结构能避免90%的数据管理问题。…...

GHelper:华硕笔记本性能调控神器,轻量级控制工具轻松搞定

GHelper:华硕笔记本性能调控神器,轻量级控制工具轻松搞定 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivoboo…...

如何3秒获取百度网盘提取码:智能工具让资源获取不再烦恼

如何3秒获取百度网盘提取码:智能工具让资源获取不再烦恼 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而困扰吗?每次找到心仪的学习资料或工作文档,却卡在…...

谁拿下边缘 AI,谁就更可能赢下整个 AI 时代

过去两年,AI 行业的热闹几乎都集中在云端。大家都在比模型参数、训练数据、算力规模和推理能力,好像只要把数据中心堆得够大,AI 的未来就会水到渠成。但一个时代真正的转折点,往往不出现在最喧嚣的地方。高通 CEO 克里斯蒂亚诺阿蒙…...

基于Kotlin/JVM的轻量级负载均衡器nekot:动态服务发现与容器化部署实践

1. 项目概述:一个轻量级、高可用的负载均衡解决方案最近在折腾一个内部服务集群,后端节点一多,流量分发就成了头疼事。用Nginx吧,配置是灵活,但每次增减节点都得手动改配置、重载,在动态伸缩的容器化环境里…...

程序合成技术与LLM结合的实践与优化

1. 程序合成技术概述程序合成(Program Synthesis)作为形式化方法领域的重要分支,其核心目标是从高级规范自动生成满足特定要求的程序代码。这项技术起源于20世纪50年代Church提出的电路综合问题,经过数十年的发展已经形成了多种技…...

Sorcerer:AI应用开发的模块化工具箱,快速构建生产级智能系统

1. 项目概述:Sorcerer,一个面向AI应用开发的“魔法”工具箱最近在GitHub上闲逛,发现了一个挺有意思的项目,叫aetherci-hq/sorcerer。光看名字“Sorcerer”(巫师/术士),就透着一股神秘和强大的气…...

LLM训练中的无损压缩技术:QLC编码原理与实践

1. 无损压缩在LLM训练中的关键作用在大规模语言模型(LLM)训练和服务过程中,网络带宽往往是性能瓶颈的主要来源。当模型参数规模达到数十亿甚至数千亿级别时,需要在多个加速器之间频繁交换权重、激活值和梯度数据。典型的分布式训练…...

Go语言ECS框架GECS:游戏开发中的数据驱动架构实践

1. 项目概述:一个面向游戏开发的ECS框架如果你在游戏开发圈子里待过一段时间,尤其是关注性能优化和架构设计,那么“ECS”这个词对你来说一定不陌生。它代表着“Entity-Component-System”,一种将数据(组件)…...

Qwen3-4B-Thinking入门必看:Gemini 2.5 Flash蒸馏模型本地化部署详解

Qwen3-4B-Thinking入门必看:Gemini 2.5 Flash蒸馏模型本地化部署详解 1. 模型概述 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是基于通义千问Qwen3-4B官方模型进行优化的版本。这个模型经过特殊训练,能够输出带有推理过程的思考链,特…...

TMS320C645x DSP EMAC模块性能调优与实战解析

1. TMS320C645x DSP EMAC模块深度解析与性能调优实战在嵌入式网络通信领域,以太网媒体访问控制器(EMAC)是实现高速数据交换的核心引擎。德州仪器(TI)的TMS320C645x系列DSP集成的EMAC模块,凭借其独特的描述符…...

在多轮对话任务中感受Taotoken路由策略的稳定性体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多轮对话任务中感受Taotoken路由策略的稳定性体验 在开发依赖大语言模型的对话应用时,开发者不仅关注单次请求的响应…...

一眨眼这只小狐狸发布 150 版了

一眨眼,这只小狐狸发布了 150 版。 还挺喜欢官方网站上使用的数字字体。 https://www.isharkfly.com/t/topic/9815...

Qwen3-4B-Thinking开源大模型部署教程:免Docker纯Python环境搭建

Qwen3-4B-Thinking开源大模型部署教程:免Docker纯Python环境搭建 1. 引言 今天我们要介绍的是Qwen3-4B-Thinking开源大模型的部署方法。这个模型基于通义千问Qwen3-4B官方模型,经过Gemini 2.5 Flash大规模蒸馏数据训练,具有256K原生tokens上…...

用Python+AKSHARE+MySQL搭建你的第一个量化选股数据库(附沪深300历史数据抓取脚本)

从零构建Python量化数据库:AKShareMySQL实战指南 在量化投资领域,数据是策略开发的基石。一个设计良好的本地数据库不仅能提高研究效率,还能避免频繁的网络请求限制。本文将带你用Python生态中的AKShare库和MySQL数据库,搭建一个包…...

测试团队能力定级模型实战评测

① 主流组织架构模型适配性分析 在着手构建测试团队的能力定级模型之前,我们首先得看清脚下的“地基”,也就是团队所处的组织架构。不同的组织形态,对人才的需求密度和能力分布有着截然不同的要求。这就好比盖房子,地基是圆形的,你很难强行盖出一座方正的摩天大楼。 目前…...

基于MPA的微前端架构:轻量级、低侵入的前端应用集成方案

1. 项目概述:一个轻量级、可扩展的微前端架构方案最近在梳理团队前端架构时,又翻出了mattmezza/mpa这个项目。它不是那种动辄几千星、社区活跃度爆表的明星项目,但在特定场景下,它提供了一种极其务实、甚至可以说是“返璞归真”的…...

【限时24h】奇点智能大会完整PPT+逐页批注版:标注19处技术话术陷阱、7个可复用架构模板、4个已验证避坑checklist

更多请点击: https://intelliparadigm.com 第一章:奇点智能大会PPT回放:SITS2026精彩回顾 SITS2026(Singularity Intelligence Technology Summit)于2026年4月在上海张江科学会堂圆满落幕,大会聚焦大模型推…...

AI代码质量守护:eslint-plugin-ai-guard 插件实战指南

1. 项目概述:为什么我们需要一个专为AI代码“体检”的ESLint插件? 如果你和我一样,在日常开发中已经离不开GitHub Copilot、Cursor或者Claude Code这类AI编程助手,那你肯定也经历过那种“哭笑不得”的时刻:AI生成的代…...

别让LaTeX编译日志搞晕你:SpringerLink投稿系统生成PDF的底层逻辑解析

别让LaTeX编译日志搞晕你:SpringerLink投稿系统生成PDF的底层逻辑解析 第一次在SpringerLink投稿系统提交LaTeX源文件时,看到生成的PDF里全是密密麻麻的编译日志而非论文内容,相信很多研究者都会瞬间崩溃。这背后其实隐藏着学术出版系统处理L…...

刘翔鸥123

...

Kafka架构 主题中的分区和段

分区是隶属于主题之下的。第一个图满足了最基本的消息的发布订阅,但是kafka是一个高吞吐量的消息队列,假如producer生产的速度远远大于consumer的消费能力,那么会造成topic下的数据堆积。消息堆积满之后就需要扩展了,否则效率低下…...

快速下载ollama,为Deepseek本地部署提速!

在将deepseek部署到本地时需要安装软件ollama 常常面临的就是网速很慢,龟速 下面提供一个方法可以快速下载 在ollama软件选择好要下载的软件,比如windows系统,在Download for windows按钮上右键选择新建标签页打开(火狐浏览器&am…...

Hyprland下Roblox游戏锁屏方案:进程监控与Swaylock定制

1. 项目概述:一个为Roblox玩家打造的Hyprland锁屏工具 如果你是一名深度使用Linux的Roblox玩家,同时又对Hyprland这类现代Wayland合成器情有独钟,那么你很可能遇到过这样一个痛点:如何在游戏过程中,快速、安全且美观地…...

基于LLM的量化交易实验框架:从ChatGPT实盘到投资者行为基准

1. 项目概述:一个用大语言模型做实盘交易的实验框架看到那些铺天盖地的“AI选股神器”广告,你是不是也和我一样,第一反应是翻个白眼?这些营销话术听起来天花乱坠,但背后到底有多少真材实料,谁也不知道。与其…...

Windows下用Anaconda安装onnx-simplifier踩坑实录(附onnx==1.11.0解决方案)

Windows下Anaconda环境安装onnx-simplifier的深度排坑指南 如果你正在Windows上使用Anaconda管理Python环境,并尝试安装onnx-simplifier来优化你的AI模型,那么这篇文章就是为你准备的。我们将深入探讨安装过程中可能遇到的编译错误,特别是那些…...