Dans cet article, j'expliquerai comment j'ai construit un chatbot en utilisant le modèle Llama2 pour interroger intelligemment les données Excel.
Python (≥ 3.8)
Bibliothèques : langchain, pandas, non structurées, Chroma
%pip install -q unstructured langchain %pip install -q "unstructured[all-docs]"
import pandas as pd excel_path = "Book2.xlsx" if excel_path: df = pd.read_excel(excel_path) data = df.to_string(index=False) else: print("Upload an Excel file")
Les données texte volumineuses sont divisées en morceaux plus petits et se chevauchant pour une intégration et une interrogation efficaces. Ces morceaux sont stockés dans une base de données vectorielles Chroma.
from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.embeddings import OllamaEmbeddings from langchain_community.vectorstores import Chroma text_splitter = RecursiveCharacterTextSplitter(chunk_size=7500, chunk_overlap=100) chunks = text_splitter.split_text(data) embedding_model = OllamaEmbeddings(model="nomic-embed-text", show_progress=False) vector_db = Chroma.from_texts( texts=chunks, embedding=embedding_model, collection_name="local-rag" )
Nous utilisons ChatOllama pour charger le modèle Llama2 localement.
from langchain_community.chat_models import ChatOllama local_model = "llama2" llm = ChatOllama(model=local_model)
Le chatbot répondra en fonction des noms de colonnes spécifiques du fichier Excel. Nous créons un modèle d'invite pour guider le modèle
from langchain.prompts import PromptTemplate QUERY_PROMPT = PromptTemplate( input_variables=["question"], template="""You are an AI assistant. Answer the user's questions based on the column names: Id, order_id, name, sales, refund, and status. Original question: {question}""" )
Nous configurons un récupérateur pour récupérer les morceaux pertinents de la base de données vectorielles, qui seront utilisés par le modèle Llama2 pour répondre aux questions.
from langchain.retrievers.multi_query import MultiQueryRetriever retriever = MultiQueryRetriever.from_llm( vector_db.as_retriever(), llm, prompt=QUERY_PROMPT )
La chaîne de réponse intègre :
from langchain.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser template = """Answer the question based ONLY on the following context: {context} Question: {question} """ prompt = ChatPromptTemplate.from_template(template) chain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() )
Nous sommes maintenant prêts à poser une question ! Voici comment nous invoquons la chaîne pour obtenir une réponse :
raw_result = chain.invoke("How many rows are there?") final_result = f"{raw_result}\n\nIf you have more questions, feel free to ask!" print(final_result)
Lorsque j'ai exécuté le code ci-dessus sur un exemple de fichier Excel, voici ce que j'ai obtenu :
Based on the provided context, there are 10 rows in the table. If you have more questions, feel free to ask!
Cette approche exploite la puissance des intégrations et du modèle Llama2 pour créer un chatbot intelligent et interactif pour les données Excel. Avec quelques ajustements, vous pouvez étendre cela pour fonctionner avec d'autres types de documents ou l'intégrer dans une application à part entière !
Présentation de BChat Excel : un outil conversationnel basé sur l'IA pour les interactions avec des fichiers Excel
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!