Создаем быстрый семантический поиск и RAG QA систему с Together AI, FAISS и LangChain
Это руководство показывает, как создать систему семантического поиска и вопросов-ответов с помощью эмбеддингов Together AI, векторного поиска FAISS и LangChain в модульном и эффективном конвейере.
Использование Together AI для семантического поиска и QA
В этом руководстве показано, как превратить неструктурированный текст, полученный с веб-страниц, в систему вопрос-ответ с указанием источников, используя экосистему Together AI. Мы собираем данные с живых веб-страниц, делим их на удобные куски и создаем эмбеддинги с помощью модели togethercomputer/m2-bert-80M-8k-retrieval.
Подготовка окружения и зависимостей
Для корректной работы необходимо установить и обновить несколько библиотек, включая LangChain, интеграцию Together AI, FAISS для векторного поиска, инструменты для работы с токенами и парсеры HTML:
!pip -q install --upgrade langchain-core langchain-community langchain-together
faiss-cpu tiktoken beautifulsoup4 html2textБезопасное управление API ключом
Код проверяет, установлен ли переменная окружения с API ключом Together AI, и при необходимости запрашивает его у пользователя безопасно:
import os, getpass
if "TOGETHER_API_KEY" not in os.environ:
os.environ["TOGETHER_API_KEY"] = getpass.getpass(" Введите ваш Together API ключ: ")Это исключает необходимость хранить ключ в открытом виде в коде.
Загрузка и обработка веб-контента
WebBaseLoader загружает указанные URL, очищает страницы от лишнего и возвращает подготовленные документы с текстом и метаданными:
from langchain_community.document_loaders import WebBaseLoader
URLS = [
"https://python.langchain.com/docs/integrations/text_embedding/together/",
"https://api.together.xyz/",
"https://together.ai/blog"
]
raw_docs = WebBaseLoader(URLS).load()Далее текст разбивается на примерно 800-символьные сегменты с перекрытием в 100 символов для сохранения контекста:
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
docs = splitter.split_documents(raw_docs)
print(f"Загружено {len(raw_docs)} страниц → {len(docs)} кусков после разбиения.")Создание эмбеддингов и векторного индекса
Используя модель Together AI, каждый текстовый фрагмент преобразуется в вектор, который сохраняется в индексе FAISS для быстрого поиска по сходству:
from langchain_together.embeddings import TogetherEmbeddings
embeddings = TogetherEmbeddings(
model="togethercomputer/m2-bert-80M-8k-retrieval"
)
from langchain_community.vectorstores import FAISS
vector_store = FAISS.from_documents(docs, embeddings)Настройка чат-модели
ChatTogether оборачивает чат-оптимизированную модель Mistral-7B-Instruct-v0.3 с низкой температурой для стабильных ответов:
from langchain_together.chat_models import ChatTogether
llm = ChatTogether(
model="mistralai/Mistral-7B-Instruct-v0.3",
temperature=0.2,
max_tokens=512,
)Объединение поиска и генерации ответов
RetrievalQA цепочка берет топ-4 релевантных фрагмента из FAISS и передает их в чат-модель, возвращая также источники для прозрачности:
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector_store.as_retriever(search_kwargs={"k": 4}),
return_source_documents=True,
)Запрос и вывод результатов
Пример вопроса отправляется в систему, которая возвращает развернутый ответ и список использованных источников:
import textwrap
QUESTION = "Как использовать TogetherEmbeddings в LangChain и какое имя модели указать?"
result = qa_chain(QUESTION)
print("\n Ответ:\n", textwrap.fill(result['result'], 100))
print("\n Источники:")
for doc in result['source_documents']:
print(" •", doc.metadata['source'])Гибкая и модульная архитектура
Вся цепочка построена примерно в 50 строках кода и легко адаптируется: можно заменить FAISS на Chroma, использовать другую модель эмбеддингов или добавить ранжировщик без изменений в остальной части. Единый бэкенд Together AI обеспечивает удобство, скорость и экономичность, что подходит для создания внутренних помощников, ботов документации или исследовательских ассистентов.
Посмотрите Colab ноутбук и присоединяйтесь к сообществу для дополнительной поддержки.
Switch Language
Read this article in English