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

RAG 检索优化的五种常见手段及实现

概述

RAG(Retrieval-Augmented Generation)通过检索外部知识来增强大模型的生成效果。本文介绍五种常见的 RAG 检索优化手段,并通过一个纯 Python 实现的示例脚本展示其实现细节。

优化手段

1. 混合检索(Dense + Sparse)

混合检索结合了稀疏检索(如 BM25)和密集检索(如向量检索)的优点,显著提升召回率与准确率。

实现代码片段

def hybrid_retrieve(query: str, docs: List[str], top_k: int = 3) -> List[Tuple[int, float]]:bm25 = bm25_scores(query, docs)dense = dense_scores(query, docs)fusion = [0.7 * b + 0.3 * d for b, d in zip(bm25, dense)]return sorted(enumerate(fusion), key=lambda x: x[1], reverse=True)[:top_k]

2. 查询构建(Query Construction)

查询构建技术包括拼写纠错、同义词扩展等,用于优化用户输入的查询。

实现代码片段

def construct_query(raw_query: str) -> str:q = spell_correct(raw_query)  # 拼写纠错q = synonym_expand(q)         # 同义词扩展return q

3. 查询翻译(Query Translation)

将用户问题转化为结构化查询或另一种自然语言,提升检索效果。

实现代码片段

def translate_to_english(query: str) -> str:mapping = {"混合检索": "hybrid retrieval", "重排序": "re-ranking"}for zh, en in mapping.items():query = re.sub(rf"\b{zh}\b", en, query, flags=re.I)return query

4. 查询路由(Query Routing)

根据查询意图将问题分发到最合适的知识库或检索子系统。

实现代码片段

def route_query(query: str) -> str:keywords = {"混合": "hybrid", "重排序": "rerank"}lowered = query.lower()for kw, domain in keywords.items():if kw in lowered:return domainreturn "general"

5. 重排序(Re-ranking)

使用更精细的模型对初排结果再次打分,提升结果相关性。

实现代码片段

def rerank(query: str, candidates: List[Tuple[int, float]]) -> List[Tuple[int, float]]:def tri_gram_overlap(q, d):q3 = set("".join(t) for t in zip(*[iter(q)] * 3))d3 = set("".join(t) for t in zip(*[iter(d)] * 3))return len(q3 & d3) / (len(q3 | d3) + 1e-8)new_scores = []for idx, old_score in candidates:overlap = tri_gram_overlap(query, CORPUS[idx])new_score = 0.7 * old_score + 0.3 * overlapnew_scores.append((idx, new_score))return sorted(new_scores, key=lambda x: x[1], reverse=True)

端到端 Pipeline

将上述优化手段整合为一个端到端的 RAG 检索流程:

def advanced_rag_pipeline(raw_query: str):q1 = construct_query(raw_query)          # 查询构建q2 = translate_to_english(q1)            # 查询翻译domain = route_query(q2)                # 查询路由filtered = [d for d in CORPUS if ...]   # 路由过滤candidates = hybrid_retrieve(q2, filtered)  # 混合检索reranked = rerank(q2, candidates)       # 重排序return reranked

总结

通过混合检索、查询构建、查询翻译、查询路由和重排序五种手段,可以显著提升 RAG 的检索效果。本文的示例代码展示了如何用纯 Python 实现这些优化技术,无需依赖第三方库。

完整代码:https://gitee.com/martinyesz/LearningRAG/blob/master/search_optimization/optimized_rag_demo.py

http://www.sczhlp.com/news/133283/

相关文章:

  • 课程学习
  • 代码规范与数学之美
  • asp语言的网站建设wordpress判断使用模版
  • 电子商务网站开发设计案例—易趣网电子商务网站网络营销整合营销
  • php能自己做网站吗wordpress分类目录没有内容
  • 提升了自己的网站wordpress网页登陆
  • 从化网站设计色see琪琪电影院
  • 网站开发下载那个网络商城设计
  • 写作网站云辛集建设局网站
  • 网站推广营销的步骤网站发布时间更改
  • 四川建设厅官方网站查询资料员如何自己做搜索网站
  • 自己在家做网站gzip压缩网站
  • Day3
  • vant
  • 丹东企业网站建设平台企业网站备案意义
  • 网站建设福网站建立费用
  • 关于我的大学的网站建设模板公司建立自己的网站吗
  • 东莞市行业网站制作公司经典小型建筑设计案例
  • 北京企业建站公司微网站怎么做微名片
  • 京东商城网站建设电影网站建设步骤
  • 好的企业型网站模板下载公司网站代做
  • 云服务器小网站制作织梦和wordpress
  • 毕设做桌面软件 网站网站开发制作案例
  • 河北seo网站设计石家庄网页
  • 手机网站js特效网站建设将来有什么发展
  • 方案网站wordpress 本地
  • C_re_10_反汇编代码还原之多媒体指令集
  • Linux中修改主机名并立即生效的完整指南
  • 项目经理最常见的10个管理失误,你中招了吗?
  • 阿里云国际站NAS:阿里云NAS适合我的数据库备份需求吗? - 教程