1. 项目概述:当情感聊天机器人遇上RAG技术
去年我在开发一款情感陪伴型聊天机器人时,遇到了一个典型问题:虽然大语言模型能生成流畅的对话,但在涉及用户个人历史(比如"记得上周我提过的那只流浪猫吗?")或专业领域知识时,经常出现事实性错误或"幻觉"。这正是RAG(Retrieval-Augmented Generation)技术大显身手的场景——通过外接知识库为AI装上"第二大脑"。
ChromaDB作为轻量级开源向量数据库,特别适合快速验证RAG方案。它可以直接在内存中运行,无需复杂部署,同时支持持久化存储。在Day7的实践中,我将展示如何用不到200行代码构建完整的RAG流程,让AI的回答既保持情感温度又具备事实准确性。
关键认知:RAG不是要替代大模型,而是通过实时检索相关文档片段作为生成依据,显著降低幻觉率。实测显示,在医疗咨询场景中,采用RAG的答案准确率能从63%提升至89%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件拆解:从文本到向量
2.1 文本分块策略优化
原始文本需要被切割成适合检索的片段。经过多次测试,我总结出这些分块原则:
- 重叠分块法:设置20%的文本重叠(如每块500token,重叠100token),避免关键信息被硬切断
python复制from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=100,
separators=["\n\n", "\n", "。", "!", "?"]
)
- 语义完整性检测:通过以下启发式规则判断分块质量:
- 包含完整的主谓宾结构
- 专业术语不被截断
- 引文标注保持完整
2.2 向量化模型选型对比
测试了三种主流的嵌入模型在MTEB基准测试中的表现:
| 模型名称 | 参数量 | 嵌入维度 | 平均得分 | 适合场景 |
|---|---|---|---|---|
| bge-small-zh | 33M | 512 | 58.2 | 中文通用场景 |
| paraphrase-multilingual | 110M | 768 | 65.7 | 多语言混合场景 |
| text-embedding-3-small | 未知 | 1536 | 72.3 | 英文专业文档 |
最终选择bge-small-zh,虽然得分不是最高,但在中文情感对话场景中:
- 对"想念"、"焦虑"等情绪词捕捉更精准
- 资源占用低,适合实时检索
- 专为中文优化的停用词处理
2.3 ChromaDB的架构设计
Chroma的核心优势在于
