微信扫码
与创始人交个朋友
我要投稿
痛点1:知识缺失
—2—
痛点2:更相关的知识没有检索出来
解决方案一:调整 chunk_size 和 similarity_top_k 超参数
在 RAG 模型中,chunk_size 和 similarity_top_k 是控制数据检索效率和准确性的两个关键参数。对这些参数的调整会影响到计算效率和信息检索质量之间的平衡。
解决方案二:Rerank 重排序
在将检索结果传递给大语言模型(LLM)之前对其进行重新排序,可以显著增强 RAG 系统的性能。LlamaIndex 的笔记揭示了有无重新排序的差别:
未经重新排序直接获取前两个节点的检索结果,导致结果不够精确。
相比之下,检索前 10 个节点并利用 CohereRerank 进行重排序,然后仅返回前两个节点,可以实现更精确的检索。
import os
from llama _ index.postprocessor.cohere _ rerank import CohereRerank
api _ key = os.environ["COHERE _ API _ KEY"]
cohere _ rerank = CohereRerank ( api _ key=api _ key , top _ n=2 ) # return top 2 nodes from reranker
query _ engine = index.as _ query _ engine(
similarity _ top _ k=10 ,# we can set a high top _ k here to ensure maximum relevant retrieval
node _ postprocessors= [ cohere _ rerank ],# pass the reranker to node _ postprocessors
)
response = query _ engine.query(
"What did Sam Altman do in this essay?" ,
)
—3—
痛点3:格式错误
from llama _ index.core import VectorStoreIndex , SimpleDirectoryReader
from llama _ index.core.output _ parsers import LangchainOutputParser
from llama _ index.llms.openai import OpenAI
from langchain.output _ parsers import StructuredOutputParser , ResponseSchema
# load documents , build index
documents = SimpleDirectoryReader(" .. /paul _ graham _ essay/data").load _ data()
index = VectorStoreIndex.from _ documents ( documents )
# define output schema
response _ schemas =[
ResponseSchema(
name="Education" ,
description="Describes the author's educational experience/background." ,
) ,
ResponseSchema(
name="Work" ,
description="Describes the author's work experience/background." ,
) ,
]
# define output parser
lc _ output _ parser = StructuredOutputParser.from _ response _ schemas(
response _ schemas
)
output _ parser = LangchainOutputParser ( lc _ output _ parser )
# Attach output parser to LLM
llm = OpenAI ( output _ parser=output _ parser )
# obtain a structured response
query _ engine = index.as _ query _ engine ( llm=llm )
response = query _ engine.query(
"What are a few things the author did growing up?" ,
)
print ( str ( response ))
Pydantic 程序是一个多功能的框架,它能够将输入的字符串转换成结构化的 Pydantic 对象。LlamaIndex 提供了几种不同类型的 Pydantic 程序:
LLM 文本补全 Pydantic 程序:这类程序负责处理输入的文本,并将其转换成用户自定义的结构化对象,这个过程结合了文本补全 API 和输出解析。
LLM 函数调用 Pydantic 程序:这些程序通过使用 LLM 函数调用 API 来处理输入文本,并将其转换成用户指定的结构化对象。
预制 Pydantic 程序:这些程序设计用于将输入文本转换成预定义的结构化对象。
以下是一个使用 OpenAI 的 Pydantic 程序的示例代码片段:
from pydantic import BaseModel
from typing import List
from llama _ index.program.openai import OpenAIPydanticProgram
# Define output schema ( without docstring )
class Song(BaseModel) :
title : str
length _ seconds : int
class Album(BaseModel) :
name : str
artist : str
songs : List [ Song ]
# Define openai pydantic program
prompt _ template _ str ="""\
Generate an example album , with an artist and a list of songs.\
Using the movie { movie _ name } as inspiration.\
"""
program = OpenAIPydanticProgram.from _ defaults(
output _ cls=Album , prompt _ template _ str=prompt _ template _ str , verbose= True
)
# Run program to get structured output
output = program(
movie _ name="The Shining" , description="Data model for an album."
)
通过OpenAI的 JSON 模式,我们可以将`response_format`设置为`{ "type": "json_object" }`,从而激活响应的 JSON 模式。当启用 JSON 模式后,大模型将被限制仅生成可以解析为有效 JSON 对象的字符串。JSON 模式确保了输出格式的强制性,但它并不支持根据特定模式进行验证。
—4—
痛点4:输出不完整
解决方案一:查询变换
在最初的 RAG 方法中,比较类型的问题表现尤为不佳。提升 RAG 推理能力的一个有效方法是引入查询理解层——在实际将查询向量存入存储之前进行查询变换。以下是四种不同的查询变换方法:
1. 路由:保留原始查询,并识别出与之相关的合适工具子集。随后,将这些工具指定为合适的选项。
2. 查询重写:保留选定的工具,但以不同方式重新构建查询,以便在同一工具集中应用。
3. 子问题分解:将查询拆分为几个更小的问题,每个问题针对不同的工具,由其元数据来决定。
4. ReAct Agent 工具选择:基于原始查询,确定使用的工具,并制定在该工具上运行的特定查询。
请参考以下示例代码片段,了解如何应用 HyDE(假设文档嵌入)这一查询重写技术。给定一个自然语言查询,首先生成一个假设文档/答案。接着,使用这个假设文档进行嵌入搜索,而不是使用原始查询。
# load documents , build index
documents = SimpleDirectoryReader(" .. /paul _ graham _ essay/data").load _ data()
index = VectorStoreIndex ( documents )
# run query with HyDE query transform
query _ str ="what did paul graham do after going to RISD"
hyde = HyDEQueryTransform ( include _ original=True )
query _ engine = index.as _ query _ engine()
query _ engine = TransformQueryEngine ( query _ engine , query _ transform=hyde )
response = query _ engine.query ( query _ str )
print ( response )
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-25
糟糕!LLM输出半截Json的答案,还有救吗!
2024-11-24
解读GraphRAG
2024-11-24
RAGChecker:显著超越RAGAS,一个精细化评估和诊断 RAG 系统的创新框架
2024-11-23
FastRAG半结构化RAG实现思路及OpenAI O1-long COT蒸馏路线思考
2024-11-23
检索增强生成(RAG):解密AI如何融合记忆与搜索
2024-11-23
如何提高RAG系统准确率?12大常见痛点及巧妙解!
2024-11-23
RAG 2.0性能提升:优化索引与召回机制的策略与实践
2024-11-22
RAG技术在实际应用中的挑战与解决方案
2024-07-18
2024-05-05
2024-07-09
2024-05-19
2024-07-09
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21