第 18 期 - RAG 效果提升方法综述
logoFRONTALK AI/11月10日 16:32/阅读原文

摘要

大模型落地存在缺少垂直领域知识、有幻觉和应用门槛、重复建设等问题,RAG 是一种解决方案。本文介绍了多篇 RAG 优化论文及工程实践经验,包括 RAPTOR、Self - RAG、CRAG、Dense X Retrieval 等论文中的方法,以及 Chunking 优化、Query 重写、Hybrid Retrieval 等工程实践经验

一、大模型落地的问题

大模型落地存在诸多问题:

二、RAG 简介

RAG(Retrieval - Augmented Generation)即检索增强生成,它结合检索系统和生成模型提高语言生成的准确性和相关性。其优势在于生成响应时能引入外部知识,对处理需要专业知识或大量背景信息的问题有效。随着大型语言模型(LLMs)发展,RAG 技术不断进化。目前大部分公司倾向于使用 RAG 进行信息检索,一些公司会使用微调的 Embedding Model 增强检索能力,也有公司会选择知识图谱或者 ES 等非向量数据库的 RAG 方法,而第三方开发者会使用集成好的 RAG 框架或 LLMOps 里内建的 RAG 工具。

三、相关优化论文

(一)RAPTOR

# 这里可能是实现 RAPTOR 相关功能的代码示例,比如文本分块等操作
text = "原始文本内容"
text_blocks = split_text(text)  # 假设这是自定义的文本分块函数
embedded_blocks = embed_text_blocks(text_blocks)  # 嵌入文本块的函数
clustered_blocks = cluster_blocks(embedded_blocks)  # 聚类函数
# 后续的摘要生成等操作类似

(二)Self - RAG

# 以下是 Self - RAG 可能的伪代码示例
def self_rag(input_prompt, previous_text):
    if should_retrieve(input_prompt, previous_text):
        retrieved_paragraphs = retrieve_paragraphs(input_prompt, previous_text)
        relevance_scores = predict_relevance(retrieved_paragraphs, input_prompt, previous_text)
        supportiveness_scores = predict_supportiveness(retrieved_paragraphs, input_prompt, previous_text)
        usefulness_scores = predict_usefulness(retrieved_paragraphs, input_prompt, previous_text)
        sorted_paragraphs = sort_paragraphs(relevance_scores, supportiveness_scores, usefulness_scores)
    else:
        new_paragraph = generate_paragraph(input_prompt)
        usefulness_score = predict_usefulness(new_paragraph, input_prompt)
    return result

(三)CRAG

# 假设的 CRAG 部分实现代码
def crag(input_question):
    retrieved_docs = retrieve_docs(input_question)
    scores = calculate_scores(input_question, retrieved_docs)
    confidence = calculate_confidence(scores)
    if confidence == "CORRECT":
        knowledge = extract_internal_knowledge()
    elif confidence == "INCORRECT":
        knowledge = obtain_external_knowledge()
    else:
        knowledge = combine_internal_external_knowledge()
    response = generate_response(input_question, knowledge)
    return response

(四)Dense X Retrieval

# 可能的段落命题分割代码示例
def split_to_propositions(paragraph):
    propositions = []
    # 按照定义中的规则进行分割
    # 如先拆分复合句等操作
    return propositions

四、其他优化方法

(一)Chunking 优化

(二)Query 重写

(三)Hybrid Retrieval(混合检索)

(四)Small to Big 检索策略

(五)Embeding & Rerank 模型优化效果评估

RAG 评估系统在模型开发、优化和应用过程中很重要,通过统一评估标准可比较不同 RAG 模型或优化方法的差异,识别最佳实践。

五、结语

RAG 系统实际应用需要工程和算法等多方面参与努力,理论上有很多方法,但实践中需要大量实验对比、验证和优化,还会遇到如异构数据源加载和处理、知识展示形态等细节问题,建立自动化评估机制、模型持续迭代和大小模型训练支持也很重要,过程充满挑战和机遇。

 

扩展阅读

Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有