Использование пользовательских данных JSON для контекста в Langchain и ConversationChain() в ChatGPT OpenAI
У меня есть собственный файл JSON, созданный на основе листа Excel, который содержит определенные данные, на которых я хочу, чтобы мои вопросы основывались и на которых мне нужны ответы от OpenAI. Теперь для этого у меня есть следующий фрагмент кода:
s3 = boto3.client('s3') # read from S3
obj = s3.get_object(Bucket='bucketname', Key='sample.xlsx')
data = obj['Body'].read()
df = pd.read_excel(io.BytesIO(data), sheet_name='randomsheetname')
df = df.to_dict("records") # create JSON dataframe from sheetdata
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{
"role": "system", "content": f"{prompt}. \n\nJSON file: {df}. \n\nAnswer:"
}],
temperature=0.5,
max_tokens=500
)
для чего я могу получить ответ на любой вопрос, основанный на моем входном файле JSON, который я предоставляю openai.ChatCompletion.create()
Теперь, если я хочу отслеживать свои предыдущие разговоры и предоставлять openai контекст для ответа на вопросы, основанные на предыдущих вопросах в той же ветке разговора, мне придется использовать langchain. У меня возникли проблемы с предоставлением набора данных JSON для моих ChatOpenAI() и ConversationChain(), поскольку я работаю с чем-то вроде этого. (НАПИСАНО С ИСПОЛЬЗОВАНИЕМ PYTHON)
llm = ChatOpenAI(temperature=0.5, openai_api_key=api_key, model="gpt-4")
conversation = ConversationChain(
llm=llm,
prompt=prompt_template,
verbose=True,
memory=memory,
chain_type_kwargs=chain_type_kwargs
)
response = conversation.predict(input=prompt)
пожалуйста помогите.
1 ответ
Я использую следующий подход в langchain.
Простой вариант использования ChatOpenAI в langchain.
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
llm = ChatOpenAI(temperature=0.9,model_name="gpt-3.5-turbo", max_tokens = 2048)
system_text = "You are helpfull assistant that tells jokes"
human_prompt = "Tell a joke"
output_answer = llm.predict_messages([SystemMessage(content = system_text), HumanMessage(content=human_prompt)])
print(output_answer.content)
Поскольку вам необходимо предоставить документы, вы, вероятно, также можете посмотреть ConversationalRetrievalChain или другие параметры поиска, поскольку они позволяют хранить контекст документа в векторном хранилище, что полезно для оптимизации количества токенов.
qa = ConversationalRetrievalChain.from_llm(
ChatOpenAI(temperature=0, model="gpt-4"),
vectorstore.as_retriever()
)
chat_history = []
query = "What did the president say about Ketanji Brown Jackson"
result = qa({"question": query, "chat_history": chat_history})