Salve raga, sto lavorando a diverse soluzioni per costruire bot con conoscenze specifiche fornitegli SOLO da documenti da me forniti.
Ho notato che se un argomento non è presente nel PDF che gli passo, lui comunque risponde prendendo l'info da chi sa dove. Attualmente l'unica soluzione a disposizione che risolve questo problema è
from langchain.indexes import VectorstoreIndexCreator
index = VectorstoreIndexCreator().from_loaders([loader, loader2, loader3])
Dove i vari loader sono ovviamente dei file pdf. Sapete già se c'è un modo migliore? Soprattutto per renderlo il più sveglio possibile, es. che gli passo un manuale sul fai da te con le caratteristiche di carico di diversi chiodi e alla domanda "quale e quanti chiodi è meglio usare per fissare una mensola che a pieno carico deve sorreggere 15kg?"
Ciao!🤗
L'approccio che hai menzionato utilizza la libreria Langchain e il modulo VectorstoreIndexCreator per creare un indice basato su diversi file PDF. Questo approccio può funzionare, ma ci potrebbero essere alternative che potresti considerare per rendere il tuo bot più intelligente e controllato.
Puoi creare agente che utilizzi un approccio zero-shot, dove gli fornisci un prompt e gli chiedi di generare una risposta basata sulle informazioni fornite nei documenti. Puoi configurare il prompt in modo che richieda al modello di fornire una risposta solo se l'informazione è presente nell'indice dei documenti forniti.
Puoi anche impostare la temperatura a 0 per rendere le risposte del modello più deterministiche e limitare l'inclusione di informazioni esterne non desiderate.
Inoltre, puoi personalizzare ulteriormente il comportamento del tuo bot scrivendo delle regole aggiuntive. Ad esempio, puoi aggiungere una regola che verifichi se l'informazione richiesta è presente nell'indice dei documenti e, in caso contrario, il bot può restituire un messaggio di avviso o richiedere ulteriori informazioni.
Ricorda che, nonostante i tuoi sforzi per limitare le risposte del bot alle sole informazioni fornite, l'utilizzo di modelli di linguaggio basati su trasformatori come GPT-3.5 implica una certa capacità di generazione di contenuti basati sulle conoscenze acquisite dal modello durante l'addestramento su Internet. Pertanto, è possibile che il bot fornisca risposte che vanno oltre i documenti forniti, anche se hai impostato restrizioni come la temperatura a 0.
Ecco un esempio di come potresti configurare un agente utilizzando Langchain, lo Zero Shot Agent e il Vectorstore come toolkit, basato sulla documentazione che mi hai fornito:
from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import CharacterTextSplitter from langchain import OpenAI, VectorDB from langchain.document_loaders import TextLoader from langchain.agents.agent_toolkits import ( create_vectorstore_agent, VectorStoreToolkit, VectorStoreInfo, ) # Carica il tuo documento loader = TextLoader("path_to_your_pdf_file.pdf") documents = loader.load() # Suddividi il testo in parti più piccole text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) texts = text_splitter.split_documents(documents) # Crea gli embeddings embeddings = OpenAIEmbeddings() store = Chroma.from_documents(texts, embeddings, collection_name="your_collection_name") # Crea l'agente llm = OpenAI(temperature=0) # Imposta la temperatura a 0 per limitare la generazione di contenuti non pertinenti vectorstore_info = VectorStoreInfo( name="your_vectorstore_name", description="your_vectorstore_description", vectorstore=store, ) toolkit = VectorStoreToolkit(vectorstore_info=vectorstore_info) agent = create_vectorstore_agent(llm=llm, toolkit=toolkit, verbose=True)
In questo esempio, l'agente è configurato per utilizzare solo le informazioni nel tuo documento PDF. Se l'agente non trova le informazioni nel tuo documento, non dovrebbe generare una risposta. Tuttavia, potrebbe essere necessario personalizzare ulteriormente l'agente per gestire specificamente i casi in cui non trova le informazioni richieste.
Facci sapere se ti è stato utile 🤗