gpt4 book ai didi

python - 如何在 Python 中使用 ChatGPT 和 langchain 将上下文/聊天历史合并到 OpenAI ChatBot 中?

转载 作者:行者123 更新时间:2023-12-02 22:46:41 28 4
gpt4 key购买 nike

请耐心等待,因为这确实是我编写的第一个主要代码,并且是针对 OpenAI 的 ChatGPT API。

我打算用这段代码做的是加载一个pdf文档或一组pdf文档。然后把它们分开,以免用完我的代币。然后,用户会提出与所述文档相关的问题,机器人会做出回应。我遇到的问题是,我希望机器人在我提出新问题时能够理解上下文。例如:Q1:什么是瓢虫?A1:瓢虫是甲虫的一种等等等等......Q2: 它们是什么颜色的?A2:它们可以有各种颜色等等等等......Q3:在哪里可以找到它们?A3:瓢虫遍布世界各地......

但我似乎无法启动并运行我的代码。相反,这是我得到的输出: What I get when I ask a follow up question that requires the bot to know context

**这是代码:**

import os
import platform

import openai
import gradio as gr
import chromadb
import langchain

from langchain.chat_models import ChatOpenAI
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import TokenTextSplitter

from langchain.document_loaders import PyPDFLoader
from langchain.prompts.prompt import PromptTemplate
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory

#OpenAI API Key goes here
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxx'

#load the data here.
def get_document():
loader = PyPDFLoader('docs/ladybug.pdf')
data = loader.load()
return data

my_data = get_document()

#converting the Documents to Embedding using Chroma
text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=50)
my_doc = text_splitter.split_documents(my_data)

embeddings = OpenAIEmbeddings()
vectordb = Chroma.from_documents(my_doc, embeddings)
retriever=vectordb.as_retriever(search_type="similarity")
#Use System Messages for Chat Completions - this is the prompt template

template = """{question}"""

QA_PROMPT = PromptTemplate(template=template, input_variables=["question"])
#QA_PROMPT = PromptTemplate(template=template, input_variables=["question"])


# Call OpenAI API via LangChain
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
#input_key="question",
def generate_response(query,chat_history):
if query:
llm = ChatOpenAI(temperature=0.5, model_name="gpt-3.5-turbo")
my_qa = ConversationalRetrievalChain.from_llm(llm, retriever, QA_PROMPT, verbose=True, memory=memory)
result = my_qa({"question": query, "chat_history": chat_history})

return result["answer"]




# Create a user interface
def my_chatbot(input, history):
history = history or []
my_history = list(sum(history, ()))
my_history.append(input)
my_input = ' '.join(my_history)
output = generate_response(input,history)
history.append((input, output))
return history, history

with gr.Blocks() as demo:
gr.Markdown("""<h1><center>GPT - ABC Project (LSTK)</center></h1>""")
chatbot = gr.Chatbot()
state = gr.State()
text = gr.Textbox(placeholder="Ask me a question about the contract.")
submit = gr.Button("SEND")
submit.click(my_chatbot, inputs=[text, state], outputs=[chatbot, state])

demo.launch(share = True)

我不知道我可以尝试什么,每次我尝试某件事时,我都会让事情变得更糟。所以我保留了原样,希望有人能提供帮助。

提前非常感谢。

最佳答案

我在LangChain Memory上也遇到了很多麻烦。我最终能够通过简单地将提示/响应附加到正在运行的字符串(或字符串数​​组)中来实现您想要做的事情,然后将其附加到每个提示中。虽然很粗糙,但很有效。

类似于:[当前提示]“好吧,它们是什么颜色?”[附录]“作为上下文,这里是迄今为止的聊天历史记录:[聊天历史记录]

这样做效果很好,但显然更长的对话可能需要具有更大上下文窗口的模型,例如gpt-4-32k

关于python - 如何在 Python 中使用 ChatGPT 和 langchain 将上下文/聊天历史合并到 OpenAI ChatBot 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76301928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com