с 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. Вот пошаговое объяснение его работы:

  1. Загрузка данных из CSV-файла. Функция запускается с использованием класса CSVLoader из библиотеки LangChain для загрузки данных из CSV-файла. Путь к файлу указан как ./data/nlp_faq_engine_faqs.csv. Этот CSV-файл содержит часто задаваемые вопросы (FAQ), связанные с налогом на товары и услуги.
  2. Загрузка данных из HTML-файла. Затем функция использует класс UnstructuredHTMLLoader из LangChain для загрузки дополнительных часто задаваемых вопросов, связанных с налогом на товары и услуги, из HTML-файла. Путь к файлу HTML указан как "data/cbic-gst_gov_in_fgaq.html".
  3. Создание вложений: после загрузки данных функция использует класс HuggingFaceHubEmbeddings из LangChain для создания вложений для загруженных документов. Эти вложения фиксируют семантическое значение текста и используются для поиска сходства в модели поиска.
  4. Построение модели поиска. Затем функция использует класс FAISS из LangChain для построения модели поиска. Модель поиска создается с использованием вложений, созданных на предыдущем шаге. FAISS обеспечивает эффективный поиск по сходству и возможности кластеризации, необходимые для поиска наиболее релевантных ответов на вопросы пользователей.
  5. Создание модели RetrievalQA. Наконец, функция создает экземпляр класса RetrievalQA из LangChain. Модель RetrievalQA объединяет языковую модель с моделью поиска, построенной с использованием FAISS. В данном случае языковая модель предоставляется классом VertexAI из LangChain. Модель RetrievalQA отвечает за выполнение процесса ответа на вопрос путем поиска наиболее подходящего ответа в базе данных QnA на основе введенного пользователем вопроса.
  6. Возврат цепочки 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

После этого приложение откроется в вашем браузере. Затем вы можете задавать вопросы о налоге на товары и услуги, и приложение будет генерировать ответы из базы данных часто задаваемых вопросов.

Рекомендации