我对使用 llama-index 库训练 GPT-3 以及通过标准 API 使用 ChatGPT(两者都在 Python 中)还相当陌生。我注意到标准 ChatGPT API 我可以简单地执行下面的代码,让 ChatGPT 获取消息历史记录作为上下文:
message_history=[]
completion = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=message_history)
现在我正在使用 llama-index 库在更具体的上下文中训练 GPT-3,但是我不知道如何让模型也考虑 message_history,这是我目前正在处理的代码,但我不知道知道如何实现消息历史记录:
def construct_index(directory_path):
# set maximum input size
max_input_size = 4096
# set number of output tokens
num_outputs = 2000
# set maximum chunk overlap
max_chunk_overlap = 20
# set chunk size limit
chunk_size_limit = 600
# define prompt helper
prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
# define LLM
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.5, model_name="text-ada-001", max_tokens=num_outputs))
# define context (dataset)
documents = SimpleDirectoryReader(directory_path).load_data()
# transform context to index format
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper)
index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)
# important: index are are like map, has latitutdes and logntitudes to indicate how each city (texts) are close to each other
index.save_to_disk("index.json")
return index
index = GPTSimpleVectorIndex.load_from_disk("index.json")
dbutils.widgets.text("user_input", "user: ")
response = index.query(dbutils.widgets.get("user_input"),response_mode='compact')
print("Response: ", response.response)
发现这个易于使用的服务,甚至还有知识图。适用于任何模型、框架、SDK。 https://www.unremarkable.ai/llama-chat-history-with-zeps-ai-memory-knowledge-graph/
我在使用 Llama 索引库使用 GPT3.5 Turbo 时遇到了类似的问题。解决我的问题的是 openai 库中的 ChatMessage 内置对象。我使用聊天引擎在 ChatMessage 类型的“消息”列表中发送我的查询以及对话上下文。聊天引擎文档可以在这里找到:
https://gpt-index.readthedocs.io/en/latest/examples/chat_engine/chat_engine_openai.html
我将系统消息、查询和 GPT 的响应存储在消息历史记录中,以维护对话历史记录。
尝试通过以下方式加载“index.json”文件:
storage_context = StorageContext.from_defaults(persist_dir=".")
index = load_index_from_storage(storage_context)
然后像这样存储您的输入:
messages.append(ChatMessage(role="user", content=query))
现在使用 chatengine() 进行查询,如下所示:
chat_engine = index.as_chat_engine()
response = chat_engine.chat(query, messages)
您将在response.response中找到您的回复。