在这篇文章中,我们将展示一些先进的自我纠错查询引擎。这些引擎利用最新的大型语言模型 (LLM) 的能力来评估其输出,然后进行自我纠错以提供更好的响应。
首先,如果你在Colab上打开这个Notebook,你可能需要安装LlamaIndex。
安装LlamaIndex:
!pip install llama-index
然后,我们将需要添加环境变量以使用中转API地址进行OpenAI API调用:
# import os
# os.environ['OPENAI_API_KEY'] = "INSERT OPENAI KEY"
接下来,我们进行一些日志记录设置以便于调试:
# import logging
# import sys
# logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
# logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
数据准备与加载
我们先下载需要的文档数据:
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
然后我们加载数据:
from llama_index.core import VectorStoreIndex
from llama_index.core import SimpleDirectoryReader
# Needed for running async functions in Jupyter Notebook
import nest_asyncio
nest_asyncio.apply()
documents = SimpleDirectoryReader("./data/paul_graham/").load_data()
index = VectorStoreIndex.from_documents(documents)
query = "What did the author do growing up?"
我们首先查看基础查询引擎的响应:
base_query_engine = index.as_query_engine()
response = base_query_engine.query(query)
print(response)
# 返回结果将在下方打印
接下来,我们将使用不同类型的自我纠错查询引擎来改进响应。
重试查询引擎
from llama_index.core.query_engine import RetryQueryEngine
from llama_index.core.evaluation import RelevancyEvaluator
query_response_evaluator = RelevancyEvaluator()
retry_query_engine = RetryQueryEngine(
base_query_engine, query_response_evaluator
)
retry_response = retry_query_engine.query(query)
print(retry_response)
# 返回结果将在下方打印
重试源查询引擎
from llama_index.core.query_engine import RetrySourceQueryEngine
retry_source_query_engine = RetrySourceQueryEngine(
base_query_engine, query_response_evaluator
)
retry_source_response = retry_source_query_engine.query(query)
print(retry_source_response)
# 返回结果将在下方打印
重试指南查询引擎
from llama_index.core.evaluation import GuidelineEvaluator
from llama_index.core.evaluation.guideline import DEFAULT_GUIDELINES
from llama_index.core import Response
from llama_index.core.indices.query.query_transform.feedback_transform import (
FeedbackQueryTransformation,
)
from llama_index.core.query_engine import RetryGuidelineQueryEngine
# Guideline eval
guideline_eval = GuidelineEvaluator(
guidelines=DEFAULT_GUIDELINES
+ "\nThe response should not be overly long.\n"
"The response should try to summarize where possible.\n"
) # just for example
typed_response = (
response if isinstance(response, Response) else response.get_response()
)
eval = guideline_eval.evaluate_response(query, typed_response)
print(f"Guideline eval evaluation result: {eval.feedback}")
feedback_query_transform = FeedbackQueryTransformation(resynthesize_query=True)
transformed_query = feedback_query_transform.run(query, {"evaluation": eval})
print(f"Transformed query: {transformed_query.query_str}")
retry_guideline_query_engine = RetryGuidelineQueryEngine(
base_query_engine, guideline_eval, resynthesize_query=True
)
retry_guideline_response = retry_guideline_query_engine.query(query)
print(retry_guideline_response)
# 返回结果将在下方打印
可能遇到的错误
- 网络问题:在下载数据或者通过API进行请求时,网络连接问题可能会导致失败。
- 环境变量设置错误:如果没有正确设置API密钥,可能会导致授权错误。
- 数据文件缺失或路径错误:确保数据文件已经成功下载并且路径正确。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: