с API на Streamlit, Langchain, HuggingFace и VertexAI Palm
Данъкът върху стоките и услугите (GST) е сложна данъчна система и може да е трудно да се намерят отговори на конкретни въпроси. Тази средна история ще ви покаже как да създадете просто приложение с често задавани въпроси с API на Streamlit, Langchain, HuggingFace и VertexAI Palm.
Демонстрация
Ето един кратък връх на моя GST Query Bot, предназначен да се справи с всички ваши въпроси, свързани с GST, без усилие.
Кодът за приложението е достъпен на
Обяснение на кода
Приложението използва streamlit,
a рамка на Python, използвана за изграждане на интерактивни уеб приложения с минимален код. Позволява на разработчиците да създават потребителски интерфейси и да обработват лесно въвеждането от потребителя. В този код Streamlit се използва за създаване на интерфейса на уеб приложението с често задавани въпроси за GST, включително формата за задаване на въпроси и показване на отговорите.
import streamlit as st
Импортира класовете VertexAI
, PromptTemplate
и LLMChain
от библиотеката langchain
. Тези класове се използват за изграждане на системи за отговори на въпроси.
VertexAI е библиотека в LangChain, която предоставя услуги за езикови модели. В този код той се използва за създаване на екземпляр на езиковия модел VertexAI, който се използва в модела RetrievalQA за отговаряне на въпроси.
LLMChain е клас в LangChain, който представлява верига от езикови модели. Използва се за създаване на екземпляр на модела RetrievalQA, който комбинира езиков модел с модел за извличане за отговаряне на въпроси.
FAISS е библиотека в рамките на LangChain, която осигурява ефективно търсене по сходство и групиране на вграждания. В този код той се използва за изграждане на модел за извличане, като се използват вгражданията, генерирани от заредените документи.
HuggingFaceHubEmbeddings е клас в рамките на LangChain, който се използва за генериране на вграждания с помощта на предварително обучени модели от центъра за модели на Hugging Face. В този код той се използва за генериране на вграждания за заредените документи.
RetrievalQA е клас в LangChain, който представлява базиран на извличане модел за отговаряне на въпроси. Той комбинира езиков модел с модел за извличане, за да намери най-подходящия отговор на даден въпрос. В този код той се използва за създаване на екземпляр на модела RetrievalQA, използвайки езиковия модел от VertexAI и модела за извличане, изграден с FAISS.
Също така импортира класовете CSVLoader
, UnstructuredHTMLLoader
и PyPDFLoader
от библиотеката langchain
. Тези класове се използват за зареждане на данни от CSV файлове, HTML файлове и PDF файлове.
from langchain.llms import VertexAI from langchain import PromptTemplate, LLMChain from langchain.document_loaders.csv_loader import CSVLoader from langchain.document_loaders import UnstructuredHTMLLoader from langchain.document_loaders import PyPDFLoader
Дефинира шаблон, който се използва за генериране на отговори на въпроси. Шаблонът включва подкана, която казва на езиковия модел, че отговорът трябва да бъде относно GST.
template = """ You are a Goods and Services Tax (GST) Expert. Give accurate answer to the following question. Under no circumstances do you give any answer outside of GST. ### QUESTION {question} ### END OF QUESTION Answer: """
Задава заглавието на приложението на „Често задавани въпроси за GST“.
st.title('GST FAQs')
Следната функция зарежда данните за често задаваните въпроси за GST от CSV файл, PDF файл и HTML файл. След това данните се индексират с помощта на FAISS и се създава верига RetrievalQA.
def build_QnA_db(): loader = CSVLoader(file_path='./data/nlp_faq_engine_faqs.csv') docs = loader.load() # loader = PyPDFLoader("./data/Final-GST-FAQ-edition.pdf") # docs = loader.load_and_split() loader = UnstructuredHTMLLoader("data/cbic-gst_gov_in_fgaq.html") docs += loader.load() embeddings = HuggingFaceHubEmbeddings() db = FAISS.from_documents(docs, embeddings) retriver = db.as_retriever() llm = VertexAI() chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriver, verbose=False, chain_type="stuff") return chain
Функцията build_QnA_db()
отговаря за изграждането на базата данни с въпроси и отговори (QnA), използвана в уеб приложението GST FAQs. Ето стъпка по стъпка обяснение на функционирането му:
- Зареждане на данни от CSV файл: Функцията започва с използване на класа
CSVLoader
от библиотеката LangChain за зареждане на данни от CSV файл. Пътят на файла е посочен като./data/nlp_faq_engine_faqs.csv
. Този CSV файл съдържа често задавани въпроси (ЧЗВ), свързани с GST. - Зареждане на данни от HTML файл: След това функцията използва класа
UnstructuredHTMLLoader
от LangChain, за да зареди допълнителни ЧЗВ, свързани с GST от HTML файл. Пътят на HTML файла е посочен като"data/cbic-gst_gov_in_fgaq.html"
. - Генериране на вграждания: След зареждане на данните, функцията използва класа
HuggingFaceHubEmbeddings
от LangChain, за да генерира вграждания за заредените документи. Тези вграждания улавят семантичното значение на текста и се използват за търсене по сходство в модела за извличане. - Изграждане на модела за извличане: След това функцията използва класа
FAISS
от LangChain, за да изгради модел за извличане. Моделът за извличане се създава с помощта на вгражданията, генерирани в предишната стъпка. FAISS осигурява ефикасно търсене по сходство и възможности за групиране, които са от съществено значение за извличане на най-подходящите отговори на потребителски въпроси. - Създаване на модела RetrievalQA: И накрая, функцията създава екземпляр на класа
RetrievalQA
от LangChain. МоделътRetrievalQA
комбинира езиков модел с модела за извличане, изграден с помощта на FAISS. В този случай езиковият модел се предоставя от класаVertexAI
от LangChain. МоделътRetrievalQA
е отговорен за изпълнението на процеса на отговаряне на въпроси чрез намиране на най-подходящия отговор от базата данни QnA въз основа на въпроса, въведен от потребителя. - Връщане на QnA веригата: Функцията връща създадения
RetrievalQA
модел, който представлява QnA веригата. След това тази верига се съхранява в състояние на сесия Streamlit за бъдеща употреба.
Функцията build_QnA_db()
играе решаваща роля при настройването на базата данни QnA и модела за извличане, използван в уеб приложението с често задавани въпроси за GST. Той зарежда ЧЗВ от различни източници, генерира вграждания и изгражда модела за извличане, за да даде възможност за точен и уместен отговор на въпроси.
След като веригата е изградена, можем да я използваме многократно, без да я заселваме отново. Така следващата функция приема въпрос като вход и връща отговор от базата данни с ЧЗВ. Отговорът се генерира чрез пускане на въпроса през веригата RetrievalQA.
def generate_response_from_db(question): chain = st.session_state["chain"] response = chain.run(question) st.info(response)
Формулярът my_form
позволява на потребителите да въведат въпрос относно GST. Когато потребителят изпрати формуляра, функцията generate_response_from_db()
се извиква, за да генерира отговор.
with st.form('my_form'): text = st.text_area('Ask Question:', '... about GST') submitted = st.form_submit_button('Submit') if submitted: generate_response_from_db(text)
За да стартирате приложението, можете да запишете горния код като Python файл и след това да го стартирате от командния ред. Например, ако сте запазили кода като gst_faqs.py
, ще го стартирате по следния начин:
python gst_faqs.py
След това приложението ще се отвори във вашия браузър. След това можете да задавате въпроси относно GST и приложението ще генерира отговори от базата данни с често задавани въпроси.