import gradio as gr from langchain_core.vectorstores import InMemoryVectorStore from langchain.chains import RetrievalQA from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_groq import ChatGroq from langchain_core.prompts import ChatPromptTemplate from langchain.chains import create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain """ For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference """ model_name = "llama-3.3-70b-versatile" emb_model_name = "pkshatech/GLuCoSE-base-ja" def load_vector_store(embedding_model_name, vector_store_file, k=4): embeddings = HuggingFaceEmbeddings(model_name = embedding_model_name) vector_store = InMemoryVectorStore.load(vector_store_file, embeddings) retriever = vector_store.as_retriever(search_kwargs={"k": k}) return retriever def fetch_response(groq_api_key, user_input, retriever1, retriever2): chat = ChatGroq( api_key = groq_api_key, model_name = model_name ) system_prompt = ( "あなたは便利なアシスタントです。" "マニュアルの内容から回答してください。" "\n\n" "{context}" ) prompt = ChatPromptTemplate.from_messages( [ ("system", system_prompt), ("human", "{input}"), ] ) # ドキュメントのリストを渡せるchainを作成 question_answer_chain = create_stuff_documents_chain(chat, prompt) # RetrieverとQAチェーンを組み合わせてRAGチェーンを作成 rag_chain = create_retrieval_chain(retriever1, question_answer_chain) rag_chain2 = create_retrieval_chain(retriever2, question_answer_chain) response = rag_chain.invoke({"input": user_input}) response2 = rag_chain.invoke({"input": user_input}) return [response["answer"], response["context"][0], response["context"][1], response2["answer"], response2["context"][0], response2["context"][1]] """ For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface """ retriever = load_vector_store(emb_model_name, "kaihatsu_vector_store", 4) retriever_rechunk = load_vector_store(emb_model_name, "kaihatsu_vector_store_rechunk", 4) with gr.Blocks() as demo: gr.Markdown('''# 「スマート農業技術の開発・供給に関する事業」マスター \n 「スマート農業技術の開発・供給に関する事業」に関して、公募要領や審査要領を参考にRAGを使って回答します。 ''') with gr.Row(): api_key = gr.Textbox(label="Groq API key") with gr.Row(): with gr.Column(): user_input = gr.Textbox(label="User Input") submit = gr.Button("Submit") answer = gr.Textbox(label="Answer") answer2 = gr.Textbox(label="Answer") with gr.Row(): with gr.Column(): source1 = gr.Textbox(label="回答ソース1") source2_1 = gr.Textbox(label="回答ソース1") with gr.Column(): source2 = gr.Textbox(label="回答ソース2") source2_2 = gr.Textbox(label="回答ソース2") submit.click(fetch_response, inputs=[api_key, user_input, retriever, retriever_rechunk], outputs=[answer, source1, source2, answer2, source2_1, source2_2]) if __name__ == "__main__": demo.launch()