Запрос новостных статей через приложение Streamlit с использованием OpenAI, Langchain и Qdrant DB
4 января 2024 г.Чат-боты, интегрированные в запросы новостей, служат различным важным целям. Они предлагают пользователям удобный и диалоговый подход к доступу к новостям, устраняя необходимость навигации по веб-сайтам или приложениям. Пользователи могут просто запросить у чат-бота новости по определенной теме или событию, что делает информацию более доступной, особенно для тех, кому традиционные методы кажутся сложными.
Персонализация — ключевая особенность чат-ботов в новостной индустрии. Изучая прошлые запросы и взаимодействия пользователей, чат-боты могут представлять более актуальные и персонализированные новостные статьи, улучшая общий пользовательский опыт. Такая адаптация контента гарантирует, что пользователи получат информацию, соответствующую их предпочтениям.
Экономия времени – еще одно существенное преимущество. Чат-боты быстро анализируют огромные объемы информации, предоставляя пользователям самые актуальные новостные статьи. Этот аспект экономии времени особенно полезен для пользователей, которым в противном случае пришлось бы вручную искать и фильтровать многочисленные источники.
Более того, чат-боты способствуют интерактивному потреблению новостей. Они вовлекают пользователей в разговор, отвечая на дополнительные вопросы и предоставляя дополнительный контекст или соответствующую информацию. Этот интерактивный подход делает чтение новостей более глубоким, превосходя пассивный характер традиционных методов.
Информационная перегрузка — распространенная проблема в эпоху цифровых технологий, и чат-боты помогают смягчить ее, фильтруя шум. Они предоставляют новости, наиболее соответствующие интересам и потребностям пользователя, оптимизируя процесс потребления и повышая удовлетворенность пользователей.
Пользователи с нарушениями зрения получают значительную выгоду от чат-ботов, особенно при интеграции с голосовыми технологиями. Эта комбинация обеспечивает бесценный аудио-метод доступа к новостям, способствуя инклюзивности в потреблении новостей.
Интеграция с широко используемыми платформами, такими как приложения для обмена сообщениями, повышает удобство пользователя. Пользователи могут получать обновления новостей в той же среде, где они общаются с другими, что упрощает работу с цифровыми технологиями.
Автоматические обновления и оповещения — это проактивная функция чат-ботов. Чат-боты, запрограммированные на своевременную отправку обновлений новостей или оповещений о последних новостях, гарантируют, что пользователи будут получать информацию в режиме реального времени, способствуя созданию более подключенной и осведомленной пользовательской базы.
Языковая и региональная настройка еще больше расширяют доступность новостей. Чат-боты могут быть предназначены для доставки новостей на нескольких языках и адаптации контента к региональным или местным интересам с учетом различных демографических групп и предпочтений.
Подводя итог, можно сказать, что чат-боты в новостной индустрии повышают качество обслуживания пользователей благодаря удобному, персонализированному и интерактивному доступу к новостям. Они решают различные проблемы традиционных методов потребления новостей, одновременно удовлетворяя широкий спектр потребностей и предпочтений пользователей.
В этой статье мы спроектируем конвейер RAG с использованием OpenAI, Langchain и Qdrant DB и включим его в пользовательский интерфейс через Streamlit.
Что такое RAG
RAG означает «генерация с расширенным поиском». Это метод, используемый в обработке естественного языка и машинном обучении, особенно при разработке продвинутых языковых моделей, таких как чат-боты. В настройке RAG, когда вводится запрос (например, вопрос или подсказка), поисковая система сначала выполняет поиск в своей базе данных. найти соответствующую информацию или документы. Затем эта информация передается генеративной модели, которая синтезирует ее для создания последовательного и контекстуально соответствующего ответа.
Визуализация конвейера RAG
Краткое описание компонентов
Langchain: LangChain — это платформа с открытым исходным кодом, предназначенная для упрощения создания приложений с использованием больших языковых моделей (LLM). Варианты использования LangChain во многом совпадают с вариантами использования языковых моделей в целом, включая анализ и обобщение документов, чат-ботов и анализ кода. LangChain позволяет разработчикам подключать LLM к другим источникам данных, взаимодействовать со своей средой и создавать сложные приложения. Он написан на Python и JavaScript и поддерживает множество языковых моделей, включая GPT-3, LLAMA, Hugging Face Jurassic-1 Jumbo и другие.
Qdrant: Qdrant — это система поиска сходства векторов с открытым исходным кодом и база данных векторов, написанная на Rust. Он предоставляет готовый к использованию сервис с удобным API для хранения, поиска и управления точками — векторами с дополнительной полезной нагрузкой. Qdrant адаптирован для расширенной поддержки фильтрации, что делает его полезным для различных нейронных сетей или семантического сопоставления, фасетного поиска и других приложений.
Настройка среды и усиление; Код
Сначала в своем каталоге создайте файл require.txt со следующим содержимым:
langchain
streamlit
requests
opeanai
qdrant-client
tiktoken
Затем запустите команду для установки этих зависимостей:
pip install -r requirements.txt
Теперь создайте файл с именем app.py и вставьте в него следующий код, комментарии объясняют его функциональность:
#importing the needed libraries
import streamlit as st
import requests
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Qdrant
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
import os
#function to fetch text data from the links of news websites
def fetch_article_content(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.text
except requests.RequestException as e:
st.error(f"Error fetching {url}: {e}")
return ""
#function to collate all the text from the news website into a single string
def process_links(links):
all_contents = ""
for link in enumerate(links):
content = fetch_article_content(link.strip())
all_contents += content + "nn"
return all_contents
#function to chunk the articles beofore creating vector embeddings
def get_text_chunks_langchain(text):
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
texts = text_splitter.split_text(text)
return texts
#creating the streamlit app
def main():
st.title('News Article Fetcher')
# Initialize state variables
if 'articles_fetched' not in st.session_state:
st.session_state.articles_fetched = False
if 'chat_history' not in st.session_state:
st.session_state.chat_history = ""
# Model selection
model_choice = st.radio("Choose your model", ["GPT 3.5", "GPT 4"], key= "model_choice")
model = "gpt-3.5-turbo-1106" if st.session_state.model_choice == "GPT 3.5" else "gpt-4-1106-preview"
#API_KEY
API_KEY = st.text_input("Enter your OpenAI API key", type="password", key= "API_KEY")
# Ensure API_KEY is set before proceeding
if not API_KEY:
st.warning("Please enter your OpenAI API key.")
st.stop()
#asking user to upload a text file with links to news articles (1 link per line)
uploaded_file = st.file_uploader("Upload a file with links", type="txt")
# Read the file into a list of links
if uploaded_file:
stringio = uploaded_file.getvalue().decode("utf-8")
links = stringio.splitlines()
# Fetch the articles' content
if st.button("Fetch Articles") and uploaded_file:
progress_bar = st.progress(0)
with st.spinner('Fetching articles...'):
article_contents = process_links(links)
progress_bar.progress(0.25) # Update progress to 25%
#Process the article contents
texts = get_text_chunks_langchain(article_contents)
progress_bar.progress(0.5) # Update progress to 50%
#storing the chunked articles as embeddings in Qdrant
os.environ["OPENAI_API_KEY"] = st.session_state.API_KEY
embeddings = OpenAIEmbeddings()
vector_store = Qdrant.from_texts(texts, embeddings, location=":memory:",)
retriever = vector_store.as_retriever()
progress_bar.progress(0.75) # Update progress to 75%
#Creating a QA chain against the vectorstore
llm = ChatOpenAI(model_name= model)
if 'qa' not in st.session_state:
st.session_state.qa = RetrievalQA.from_llm(llm= llm, retriever= retriever)
progress_bar.progress(1)
st.success('Articles fetched successfully!')
st.session_state.articles_fetched = True
#once articles are fetched, take input for user query
if 'articles_fetched' in st.session_state and st.session_state.articles_fetched:
query = st.text_input("Enter your query here:", key="query")
if query:
# Process the query using your QA model (assuming it's already set up)
with st.spinner('Analyzing query...'):
qa = st.session_state.qa
response = qa.run(st.session_state.query)
# Update chat history
st.session_state.chat_history += f"> {st.session_state.query}n{response}nn"
# Display conversation history
st.text_area("Conversation:", st.session_state.chat_history, height=1000, key="conversation_area")
# JavaScript to scroll to the bottom of the text area
st.markdown(
f"<script>document.getElementById('conversation_area').scrollTop = document.getElementById('conversation_area').scrollHeight;</script>",
unsafe_allow_html=True
)
if name == "main":
main()
Затем сохраните app.py и выполните в терминале следующую команду:
streamlit run app.py
Это запустит ваше приложение на локальном хосте с номером порта 8051.
Заключение
В заключение отметим, что интеграция чат-ботов в систему запросов новостей не только решает проблемы традиционного потребления новостей, но и значительно повышает удобство работы пользователей, предоставляя удобный, персонализированный и интерактивный доступ к информации. Обсуждаемый конвейер RAG, включающий OpenAI, Langchain и Qdrant DB в сочетании с пользовательским интерфейсом на основе Streamlit, иллюстрирует передовые технологические достижения в области обработки естественного языка и машинного обучения. Это комплексное решение не только оптимизирует процесс получения и анализа новостных статей, но также демонстрирует потенциал систем на базе искусственного интеллекта в предоставлении адаптированного контента, уменьшении информационной перегрузки и обеспечении инклюзивности для пользователей с нарушениями зрения. Описанная реализация кода служит практическим руководством для разработчиков, заинтересованных в создании продвинутых приложений чат-ботов для поиска новостей, демонстрируя сочетание языковых моделей, поисковых систем по сходству векторов и эффективного дизайна пользовательского интерфейса. В конечном счете, этот инновационный подход представляет собой сдвиг парадигмы потребления новостей, предлагая заглянуть в будущее ориентированного на пользователя и технологического доступа к информации.
Ссылки
- https://api.python.langchain.com/en/latest/api_reference.html
- https://python.langchain.com/docs/integrations/vectorstores/qdrant
Оригинал