这是一个面向车载任务型对话场景的多轮交互项目,核心目标是让系统在复杂车载环境中实现更准确的落域、意图识别、槽位抽取和外部服务调用。我在项目中重点参与了基于 LLM、Agent、Function Calling 和 MCP 的多阶段对话链路设计,并将拒识、意图识别、NLU 和多轮改写串成一套完整方案。
从简历项目总结视角看,这个系统覆盖 12 个领域、400+ 技能,目标是支撑车载场景中的高效任务执行与对话控制,日均可处理 10w+ 指令。当前 GitHub 仓库保留的是项目核心交付内容,也就是 模型文件 和 项目源码 两部分。
- 面向真实车载任务型对话场景,覆盖多领域、多技能路由
- 结合 LLM、微调模型、Agent、Function Calling 和 MCP 完成对话编排
- 支持拒识、意图识别、槽位抽取、第三方服务调用与流式回复
- 同时保留训练资源、模型文件和推理源码,方便演示与复现
- 参与任务型对话整体链路设计,打通拒识、意图识别、NLU、改写和工具调用流程
- 参与基于微调模型的拒识与意图识别方案落地,提升落域和意图判断质量
- 参与基于
DeepSeek + Function Calling的 NLU 与槽位抽取流程设计 - 参与 MCP 服务接入,支持天气查询、音乐播放、导航搜索等第三方能力调用
- 参与多轮对话改写方案设计,提升跨轮上下文理解和任务连续性
- 领域覆盖:12 个领域
- 技能规模:400+ 技能
- 系统吞吐:日均处理 10w+ 指令
- 拒识模型:50w 条语料,拒识率 90%+,QPS 500+
- 意图识别:40w 条语料,TOP1 准确率 85%,TOP5 准确率 98%
- NLU 效果:意图识别率 87%,槽位抽取准确率 91%
- 多轮改写:域内与跨域综合改写准确率 92%
这个项目的关键不只是“把模型接起来”,而是把不同阶段拆开处理,让每个模块各自负责最合适的任务。
- 先用轻量级模型做第一阶段意图筛选和 top-k 召回
- 再让 LLM 在候选范围内完成更精确的意图匹配和关键信息抽取
- 对多轮对话先做 query 改写,补齐上下文
- 对可执行任务通过 Function Calling 和 MCP 调用外部服务
- 最后通过服务端流式返回结果
这套设计的核心价值是避免让 LLM 直接在海量工具库中做全量匹配,从而降低误匹配率并提升响应效率。
- Python
- Flask
- Flask-SocketIO
- Redis
- Hugging Face / Transformers
- BERT / 轻量级拒识模型
- DeepSeek
- Function Calling
- Agent 式服务编排
- MCP 服务接入
.
├─模型文件/ 训练数据、预训练模型、已训练权重
└─项目源码/ 对话系统源码、训练脚本、MCP 与功能调用模块
说明:
- 这是从原始项目目录中裁剪出来的公开版本
- 仓库只上传了
模型文件和项目源码 - 原目录中的视频、压缩包、截图等内容没有进入仓库
项目源码/
├─client/ 各类客户端调用逻辑
├─config/ 配置与环境变量
├─function_call/ 工具调用与任务处理
├─mcp_core/ MCP 相关服务
├─test/ 测试与基准脚本
├─train/ 训练相关代码与资源
├─utils/ 日志和工具函数
├─start.py 服务主入口
├─dialog.py 对话逻辑
├─prompts.py Prompt 配置
└─requirements.txt 依赖列表
data/:拒识、意图识别等任务的数据pretrained/:预训练模型资源saved/:训练好的模型权重
cd 项目源码
pip install -r requirements.txt项目示例配置位于 项目源码/config/config.ini。正式运行前请根据环境修改以下内容:
API_KEYBASE_URLBOT_URLAMAP_MAPS_API_KEYREJECT_URLINTENT_URLNLU_URLENTRY_URL
cd 项目源码
python start.py服务启动后可访问:
GET /health
start.py:主服务入口,负责 SocketIO 事件、请求流转和结果回传client/:封装聊天、NLU、拒识、重写、仲裁等服务调用function_call/:负责工具调用和任务执行逻辑mcp_core/:MCP 服务端与客户端核心代码train/:训练与推理相关脚本
- 当前仓库已设置为公开仓库
- 仓库中包含多个较大的模型权重文件,超大文件已通过 Git LFS 管理
- 如果克隆后发现模型文件没有完整拉取,请先确认本地已安装 Git LFS
项目源码/config/config.ini中的密钥和地址只是占位示例,使用前必须替换- 项目运行依赖 Redis 和多个下游服务,仅启动
start.py不能保证全链路可用 - 仓库体积较大,首次克隆和拉取会比较慢