查询演进

当您首次生成查询时,可以通过多种方式对其进行优化演进。初次生成的查询往往较为简单、不够具体或脱离实际。因此,您可以将查询优化演进为更具体、更符合实际或更优质的版本。

进化方式多种多样,难以全面涵盖。因此,我们强烈建议您自行编写进化提示词。

这里,我们提供了一些使用自定义提示进行查询演化的示例。 之后,我将介绍查询演化功能。

创建自定义演化函数

您只需要编写一个调用LLM的函数,通过特定参数来演化问题。

我们使用row作为参数,这是一个Dict类型的DataFrame行数据。 因此,您可以使用QA数据框中任意行的值。 若要在batch_apply中配合异步调用使用,必须将函数声明为async def形式。

这是一个自定义演化函数的示例。

from typing import Dict
from llama_index.core.base.llms.base import BaseLLM
from llama_index.core.base.llms.types import ChatResponse, ChatMessage, MessageRole
from llama_index.llms.openai import OpenAI

async def evolve_to_rude(row: Dict, llm: BaseLLM) -> Dict:
	original_query = row['query']
	system_prompt = ChatMessage(role=MessageRole.SYSTEM, content="Evolve the query to a rude question. Contain the original query's content, but make it super rude. Curse is okay to use.")
	user_prompt = ChatMessage(role=MessageRole.USER, content=f"Original question: {original_query}")
	response: ChatResponse = await llm.achat([system_prompt, user_prompt])
	row["query"] = response.message.content
	return row

llm = OpenAI()
qa = qa.batch_apply( # qa is a QA instance with "query" column
    evolve_to_rude,
    llm=llm,
)

提供的查询演化功能

您可以将函数替换为提供的函数,并使用预制的演化函数。

1. 推理演进

您可以将查询升级为推理问题。 这类问题较为复杂,需要多重推理,且答案难以猜测。

该方法使用RAGAS提示。

  • OpenAI : from autorag.data.qa.evolve.openai_query_evolve import reasoning_evolve_ragas

  • LlamaIndex : from autorag.data.qa.evolve.llama_index_query_evolve import reasoning_evolve_ragas

2. 条件演化

您可以将查询演变为条件式问题。 它会添加条件并增加问题的复杂度。

该方法使用RAGAS提示。

  • OpenAI : from autorag.data.qa.evolve.openai_query_evolve import conditional_evolve_ragas

  • LlamaIndex : from autorag.data.qa.evolve.llama_index_query_evolve import conditional_evolve_ragas

3. 压缩查询

这与其他演化函数略有不同。通常,演化函数会使问题变得更加复杂。但这个函数将问题压缩成一个更简单的问题。

有时,大语言模型会生成过于复杂或直白的问题,其中包含大量段落细节信息。 这对人类用户来说可能信息过载。因为人们实际上无法掌握关于自身问题的过多信息。 因此,您可以将问题压缩成语义相同但更简洁的表述。这种处理方式能有效提升问题难度。

该方法使用RAGAS提示。

  • OpenAI : from autorag.data.qa.evolve.openai_query_evolve import compress_ragas

  • LlamaIndex : from autorag.data.qa.evolve.llama_index_query_evolve import compress_ragas