基于LangChat搭建RAG与Function Call结合的聊天机器人方案
#简述流程思路
用户提问 → 意图识别(是否需要动态数据) →
需要动态数据: 调用Function获取数据 → LLM生成回答
不需要动态数据: 向量检索 → 重排 → LLM生成回答
#使用到的技术组件
开发语言: python
向量数据库: milvus (docker部署单机版)
存储所有知识库文档的 BEG-Base-ZH-V1 向量
支持快速近似最近邻搜索(ANN)
向量嵌入模型: beg-base-zh-v1 cross_encoder
beg轻量对中文较为友好 适用于大规模检索场景 (点积或余弦相似度来衡量匹配程度)
cor精度高 适合小范围本文进一步做相似度对比
其他:
langChat框架作为核心控制器
业务端提供HTTP REST API作为Function Call数据源
fastapi 部署为web项目
LLM 通过ollama调用Qwen1.5-0.5B 和 在线deepseekv3
#流程图
#关键点
意图识别的方式
1 可以利用小参数模型 通过 问题原文本+定义的funcation参数 发送一次LLM ,通过相应内是否包含 tool_call信息判断; --我的实现方式 使用的是 Qwen1.5-0.5B
2 关键词匹配 规则或正则表达式判断关键词 (如“天气”、“订单号”等)
3 分词 , nlp语义相似度 , 如果与关键词近似值>0.95以上 可以认为是有意图
RAG提升准确度
stup1: 用户问题 ==> Embedding ==> milvus索引 ==> 相似度排序取前10条
stup2: 用户问题 依次和 向量结果集的原文本 精细对比 再取前3条
ps: milvus存储 文档向量时, 切片的原文也要一并存储关联!!!
总结:
- 搭建 Milvus 并导入知识库;
- 配置好 Embedding 和 Cross-Encoder;
- 实现意图识别模块;
- 用 LangChain 构建完整的问答链;
- 多轮对话状态管理;