<НА ГЛАВНУЮ

Создаем быстрый семантический поиск и 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

Switch to English