с Streamlit, Langchain, HuggingFace и VertexAI Palm API
Налог на товары и услуги (GST) представляет собой сложную налоговую систему, и может быть трудно найти ответы на конкретные вопросы. Эта статья на Medium покажет вам, как создать простое приложение с ответами на часто задаваемые вопросы с помощью Streamlit, Langchain, HuggingFace и VertexAI Palm API.
Демо
Вот краткий обзор моего бота GST Query Bot, разработанного для того, чтобы без особых усилий решать все ваши вопросы, связанные с GST.
Код для приложения доступен по адресу
Объяснение кода
Приложение использует streamlit,
инфраструктуру Python, используемую для создания интерактивных веб-приложений с минимальным кодом. Это позволяет разработчикам создавать пользовательские интерфейсы и легко обрабатывать пользовательский ввод. В этом коде Streamlit используется для создания внешнего интерфейса веб-приложения GST FAQs, включая форму для вопросов и отображения ответов.
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
Определяет шаблон, который используется для создания ответов на вопросы. Шаблон включает подсказку, сообщающую языковой модели, что ответ должен быть о налоге на товары и услуги.
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: """
Устанавливает заголовок приложения на «Часто задаваемые вопросы о налоге на товары и услуги».
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-файл содержит часто задаваемые вопросы (FAQ), связанные с налогом на товары и услуги. - Загрузка данных из HTML-файла. Затем функция использует класс
UnstructuredHTMLLoader
из LangChain для загрузки дополнительных часто задаваемых вопросов, связанных с налогом на товары и услуги, из 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 FAQs. Он загружает часто задаваемые вопросы из разных источников, генерирует вложения и строит модель поиска, чтобы обеспечить точные и актуальные ответы на вопросы.
Как только цепочка построена, мы можем использовать ее несколько раз без повторного заполнения. Таким образом, следующая функция принимает вопрос в качестве входных данных и возвращает ответ из базы данных часто задаваемых вопросов. Ответ генерируется путем запуска вопроса через цепочку RetrievalQA.
def generate_response_from_db(question): chain = st.session_state["chain"] response = chain.run(question) st.info(response)
Форма my_form
позволяет пользователям ввести вопрос о налоге на товары и услуги. Когда пользователь отправляет форму, вызывается функция 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
После этого приложение откроется в вашем браузере. Затем вы можете задавать вопросы о налоге на товары и услуги, и приложение будет генерировать ответы из базы данных часто задаваемых вопросов.