Spaces:
Sleeping
Sleeping
import os | |
import json | |
import time | |
from langchain_openai import ChatOpenAI | |
from langchain.chains.conversational_retrieval.base import ConversationalRetrievalChain | |
from langchain.memory.buffer_window import ConversationBufferWindowMemory | |
from langchain_core.prompts import PromptTemplate | |
### Contextualize question ### | |
from upstash_vector import Index | |
from langchain_community.vectorstores.upstash import UpstashVectorStore | |
settings= json.load(open("system.json","r"))[0] | |
from upstash_vector import Index | |
from langchain_community.vectorstores.upstash import UpstashVectorStore | |
index = Index(os.environ["UPSTASH_VECTOR_REST_URL"],os.environ["UPSTASH_VECTOR_REST_TOKEN"]) | |
vectorStore = UpstashVectorStore( | |
embedding=True, index=index, | |
) | |
retriever = vectorStore.as_retriever(search_kwargs={"k": settings["k"]}) | |
#LLM setup | |
LLM= ChatOpenAI(model=settings["model"], temperature=settings["temp"]) | |
#Setup prompt template | |
prompt_temp=""" | |
You are an AI Chatbot from precious Plastic your job is to answer Question about recycling plastic. | |
You can return links to in the answer as well as image if you want | |
Us the following context to help in answering the Question. | |
------ | |
{context} | |
------ | |
Question: {question} | |
Do not: | |
・ Do not make thing up that you do not know, if you dont know, say that you dont know \ | |
""" | |
QUESTION_PROMPT = PromptTemplate( | |
template=prompt_temp, # プロンプトテンプレートをセット | |
input_variables=["context", "question"] # プロンプトに挿入する変数 | |
) | |
# Conversation memory | |
memory = ConversationBufferWindowMemory( | |
memory_key=settings["MEMORY_KEY"], # Memory key メモリーのキー名 | |
output_key="answer", #output key 出力ののキー名 | |
k=8, #saved conversation number 保持する会話の履歴数 | |
return_messages=True, #get chat list チャット履歴をlistで取得する場合はTrue | |
) | |
# RAG conversation chain (RAG用)会話chainの設定 | |
chain = ConversationalRetrievalChain.from_llm( | |
llm=LLM, | |
retriever=retriever, | |
combine_docs_chain_kwargs={'prompt': QUESTION_PROMPT}, # プロンプトをセット | |
chain_type="stuff", # 検索した文章の処理方法 | |
memory=memory # メモリーをセット | |
) | |
def invoke_question_time(chain,question): | |
start_time = time.time() | |
response = chain.invoke({"question": question}) | |
end_time = time.time() | |
print(response["answer"]) | |
print("responce time:", end_time - start_time, "seconds") | |
return response, end_time - start_time | |
#Test main | |
def main(): | |
response,_=invoke_question_time(chain, "Hello what is precious plastic ? ") | |
time.sleep(30) | |
response,_=invoke_question_time(chain, """I live in the UK and want so start an extruder work shop. | |
What is needed ? What should safety issues might this have and where could i buy equipment could i buy in the UK to help me | |
""") | |
time.sleep(30) | |
response,_=invoke_question_time(chain, "Hello what is precious plastic ? ") | |
if __name__ ==" __main__": | |
main() |