Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

84 righe
4.2 KiB

from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_community.chat_models import ChatOllama
from langchain_community.document_loaders import TextLoader
from langchain.chains import RetrievalQA
from qdrant_client import QdrantClient
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import Qdrant
from langchain_community.chat_models import ChatOllama
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.prompts import PromptTemplate
import json
import datetime
def extractDataFromDoc(collection_name):
client = QdrantClient(path="./vectLlama3")
embeddings = OllamaEmbeddings(model='llama3',base_url="http://10.128.0.3:11434")
# set up the qdrant database
qdrant = Qdrant(
client=client,
collection_name=collection_name,
embeddings=embeddings
)
##### Ollama
# model name can be any model you have installed with Ollama
# complete list of models available @ Ollama: https://ollama.ai/library
#llm = ChatOllama(model_name="llama3", temperature=0,base_url="http://10.128.0.3:11434" )
llm = Ollama(
model="llama3",
base_url="http://10.128.0.3:11434",
temperature=0,
callback_manager=CallbackManager(
[StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
import json
json_schema = {
"authority-identification-code-civil-engineering-office": "restituisci il numero identificativo dell'ente pubblico, deve essere un numerico, ritorna stringa vuota se non presente",
"applicants-0-tax-code":"restituiscimi il codice fiscale del richiedente della concessione",
"applicants-0-vat-number" : "restituiscimi solo se presente, il numero di partita iva del richiedente, stringa vuota se non presente ",
"concession-decree-number" : "restituisci il numero del decreto o della pratica, restituisci solo il numero",
"release-date": "restituiscimi la data di rilascio del provvedimento",
"expiration-date": "restituiscimi la data di scadenza della concessione, eventualmente somma la durata della concessione alla data di rilascio, restituisci solo la data"
}
#question_1 ="restituisci solo con il json utilizzando seguente schema: " + json.dumps(json_schema, indent=2) + "le date sono in formato italiano e vanno convertite in DD-MM-YYYY, lascia vuoti i campi che non trovi"
question_1="restituisci il codice fiscale del richiedente concessione"
question_2="restituisci il numero del decreto o della pratica"
question_3="restituisci la data di inizio della concessione in formato dd/MM/yyyy. Restituisci solo la data"
question_4="restituisci la data di fine dellla concessione di utilizzo, ritorna in formato dd/MM/yyyy. Restituisci solo la data"
question_5="restituisci il numero identificativo dell'ente pubblico"
question_6="restituisci il numero di partita iva del richiedente"
# Build prompt
template = """Give a precise answer to the question based on the context without stating so. Don't be verbose.
{context}
Question:{question}"""
QA_CHAIN_PROMPT = PromptTemplate.from_template(template)# Run chain
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever=qdrant.as_retriever(),
chain_type_kwargs={"prompt": QA_CHAIN_PROMPT}
)
cf = qa_chain.invoke({"query": question_1})
#return result["result"]
dec = qa_chain.invoke({"query": question_2})
datar = qa_chain.invoke({"query": question_3})
datas = qa_chain.invoke({"query": question_4})
iduff=qa_chain.invoke({"query": question_5})
piva=qa_chain.invoke({"query": question_6})
response={}
response['authority-identification-code-civil-engineering-office']=iduff["result"]
response['applicants-0-tax-code']=cf["result"]
response['applicants-0-vat-number']=piva["result"]
response['concession-decree-number']=dec["result"]
response['release-date']= datetime.datetime.strptime(datar["result"].strip(), '%d/%m/%Y').strftime('%Y-%m-%d')
response['expiration-date']=datetime.datetime.strptime(datas["result"].strip(), '%d/%m/%Y').strftime('%Y-%m-%d')
return json.dumps(response)
# Check the result of the query
#print(result["result"])