RAG笔记:常见问题以及解决方法

本文探讨了RAG系统在内容检索和生成过程中遇到的五个问题,包括答案质量控制、文档检索精度、上下文理解和回答具体性。提出了解决方案,如设置质量阈值、分析用户意图、文档标签管理和模型微调等,以及应对大数据的分布式处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  内容缺失

  • 知识库中缺少必要的上下文信息。
  • 当知识库没有包含正确答案时,RAG 系统可能会给出一个貌似合理但实际上错误的回答,而不是明确表示它不知道答案。

1.1 解决方法

1.1.1 设置阈值

  • 在回答问题前先设定一个质量标准。
  • 如果召回内容达不到标准或无召回,系统不会提供答案,而是告诉用户需要更多信息或返回固定话术,防止错误或不准确的信息误导用户。

遗漏重要文档

  • 在初始的检索步骤中,有时会漏掉关键文档,导致它们没有出现在系统返回的最顶端结果之中
    • ——>正确的答案可能被忽略了,使得系统无法准确回答问题

2.1 解决方法

2.1.1 分析用户意图

分析用户的查询词汇和历史交互,缩小搜索范围,提高检索的相关性

脱离上下文

  • 数据库检索到了包含答案的文档,但这些文档没有被纳入生成答案的上下文中
  • 这种情况发生在从数据库返回许多文档并进行整合过程以检索答案时

3.1 解决方法

3.1.1 添加文档标签过滤

通过标签分类文档,在搜索时通过标签来缩小搜索范围,减少无关信息干扰,检索与用户查询最相关的文档

3.1.2  微调 embedding 模型

  • 进一步调整文档的embedding
    • 使用特定领域的数据集进一步finetune,以适应特定领域的任务或需求

错误的特定性

  • ​​​​​​​回答在响应中返回,但不够具体或太具体,无法满足用户的需求

4.1 解决方法

4.1.1 级联增强

  • 根据用户的初始查询生成回答
  • 系统分析第一次回答的结果,识别出更多细节,并据此生成更具体的问题
  • 系统使用更具体的问题再次进行 RAG,逐步提高回答的质量。

5 数据量大

5.1 解决方法

5.1.1 分布式处理

采用分布式处理框架提升力,确保系统在面对大规模数据时仍能保持高性能和高可用性

参考内容:RAG开发中常见的12个痛点及天壤解法

### 构建本地环境中的RAG系统 #### 准备工作 为了在本地环境中成功部署检索增强生成(RAG)系统,需先安装必要的软件包和工具。这包括但不限于Python及其开发环境、Docker用于容器化服务、Milvus作为向量数据库以及Elasticsearch来提高文本检索能力[^2]。 #### 安装依赖项 建议创建一个新的虚拟环境以隔离项目所需的特定版本库文件。接着可以使用pip命令安装`rag`, `elasticsearch`, `pymilvus`等Python包: ```bash python3 -m venv rag_env source rag_env/bin/activate pip install elasticsearch pymilvus rag ``` 对于非Python组件如Milvus或Elasticsearch,则推荐采用Docker镜像快速启动实例: ```dockerfile version: '3' services: milvus: image: milvusdb/milvus:v2.0-cpu-d070521-8c1fbb ports: - "19530:19530" - "9091:9091" elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1 environment: discovery.type: single-node ports: - "9200:9200" - "9300:9300" ``` 保存上述配置到名为`docker-compose.yml`的文件中,并执行`docker-compose up -d`指令一键搭建所需的服务集群[^1]。 #### 数据准备与导入 完成基础设施建设之后,下一步就是准备好要被索引的数据集并将其加载至相应的存储引擎内。针对结构化表格类资料可以直接通过API接口写入Milvus;而对于非结构化的文档则可能需要预先转换成适合的形式再提交给Elasticsearch进行全文搜索优化处理。 #### 集成应用逻辑 最后一步是在应用程序层面实现对这两个后台系统的调用。通常情况下会涉及到编写一段中间件代码负责接收前端请求后分别查询两个不同的搜索引擎并将结果汇总返回给客户端展示。这里给出一个简单的Flask Web API例子说明这一过程: ```python from flask import Flask, request, jsonify import requests app = Flask(__name__) @app.route('/query', methods=['POST']) def query(): data = request.json['text'] # Query Elasticsearch for text-based search results. es_response = requests.post('http://localhost:9200/_search?q=' + data).json() # Query Milvus for vector similarity matching. mv_response = requests.get(f'http://localhost:9091/vectors/search?data={data}').json() combined_results = { "es": es_response, "milvus": mv_response } return jsonify(combined_results) if __name__ == '__main__': app.run(debug=True) ``` 此段脚本展示了如何同时访问Elasticsearch和Milvus来进行综合性的信息检索操作,并将两者的结果合并起来提供给最终用户查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值