import gradio as gr import random import openai import pinecone import os from langchain.vectorstores import Pinecone from langchain.embeddings.openai import OpenAIEmbeddings from langchain.chains import ConversationalRetrievalChain from langchain.chat_models import ChatOpenAI openai.api_key= os.environ.get('API_OPENAI') PINECONE_API_KEY = os.environ.get('API_PINECONE') pinecone.init( api_key=PINECONE_API_KEY, # find at app.pinecone.io environment="eu-west4-gcp" # next to api key in console ) embeddings = OpenAIEmbeddings(openai_api_key=openai.api_key) index_name = "yc-faq-air" vectorstore = Pinecone.from_existing_index(index_name, embeddings) index_name = "yc-faq-air" vectorstore = Pinecone.from_existing_index(index_name, embeddings) prompt = "Instruction: Твоя роль - кваліфікований співробітник саппорту у системи YouControl. Потрібно відповісти на питання від користувача з огляду на контекст. Контекст ми беремо з бази знань, але вона може бути не повна. Якщо контекст не коректний, то відповідай на свій розсуд або передай запит сапорту, про контекс нічого не пишемо у відповіді. YouControl може писатися по різному: YC,Ю-контрол,Юконтрол, Юконтроль, Юр контроль, ЮК, UControl, Ю-контроль, YOU Kontrol, YouContro. ЗЕД - це зовнішня економічна діяльність."+""" """ messages = [{"role": "system", "content": prompt}] def ask_yc_bot(question): docs = vectorstore.similarity_search(question) source_name = docs[0].metadata['source'] context = docs[0].page_content result = "Питання: " + question + " Контектс: " + context return result def clear_f(): prompt = "Instruction: Твоя роль - кваліфікований співробітник саппорту у системи YouControl. Потрібно відповісти на питання від користувача з огляду на контекст. Контекст ми беремо з бази знань, але вона може бути не повна. Якщо контекст не коректний, то відповідай на свій розсуд або передай запит сапорту, про контекс нічого не пишемо у відповіді. YouControl може писатися по різному: YC,Ю-контрол,Юконтрол, Юконтроль, Юр контроль, ЮК, UControl, Ю-контроль, YOU Kontrol, YouContro. ЗЕД - це зовнішня економічна діяльність."+""" """ messages = [{"role": "system", "content": prompt}] print("") return "" def query_gpt_3_5(messages, context): completion = openai.ChatCompletion.create( model="gpt-4-0613", messages=messages ) return completion.choices[0].message.content def respond(message, chat_history): message_rag = ask_yc_bot(message) user_message_dict = [{"role": "user", "content": message_rag}] messages.extend (user_message_dict) bot_message = query_gpt_3_5(messages, "") chat_history.append((message, bot_message)) print("chat_histori", chat_history) bot_message_dict = [{"role": "assistant", "content": bot_message}] messages.extend (bot_message_dict) print("messages", messages) return "", chat_history, message_rag css = """ footer{display:none !important} .custom-button { height: 83px; } """ with gr.Blocks(css=css) as demo: with gr.Row(): with gr.Column(scale=2): chatbot = gr.Chatbot([(None, "Привіт! Що ти хочеш дізнатися про YouControl?")], height=300) with gr.Column(scale=1): context = gr.Textbox(lines=11, label="Last Context") with gr.Row(): with gr.Column(scale=2): msg = gr.Textbox(label="") with gr.Column(scale=1): submit_button = gr.Button("Отправить", elem_classes="custom-button") clear = gr.ClearButton([msg, chatbot], value="Новый чат") clear.click(clear_f) submit_button.click(respond, [msg, chatbot], [msg, chatbot]) msg.submit(respond, [msg, chatbot], [msg, chatbot, context]) demo.launch(debug=True)