Быстрый старт: Python SDK (Langchain)
В этом руководстве мы покажем, как быстро начать работу с четырьмя ключевыми компонентами нашей платформы:
CompressaChunking (для нарезки документов на чанки) CompressaEmbeddings (для создания векторов из чанков) ChatCompressa (LLM чат-модель) CompressaRerank (для улучшения результатов поиска)
Используя эти инструменты в связке с Langchain, вы сможете создавать кастомных LLM и RAG ассистентов.
Установка
Для начала установите библиотеку langchain-compressa
:
pip install langchain-compressa
Импорт моделей Compressa
from langchain_compressa import CompressaEmbeddings
from langchain_compressa import ChatCompressa
from langchain_compressa.reranks import CompressaRerank
Получение API ключа
Для использования Compressa вам потребуется API ключ. Получить его можно после регистрации.
Настройка окружения
После получения ключа, установите его как переменную окружения:
import os
os.environ["COMPRESSA_API_KEY"] = "your_key_here"
Замените "your_key_here"
на ваш настоящий API ключ.
CompressaChunking
Инструмент CompressaChunking позволяет выделять текст из документов и нарезать его на небольшие куски (чанки). В дальнейшем мы будем искать самые релевантные куски под конкретный запрос пользователя, чтобы дать точный ответ.
# pip install requests, если у вас нет этой библиотеки
import requests
# Скачиваем для примера PDF файл для сотрудников маркетплейса:
pdf_url = "https://docs.ozon.ru/company/attachments/6828150/6828198.pdf"
pdf_response = requests.get(pdf_url)
# Сохраняем файл
with open("ozon_guide.pdf", "wb") as file:
file.write(pdf_response.content)
# Отправляем файл для нарезки на чанки
compressa_url = "https://compressa-api.mil-team.ru/v1/layout"
headers = {
"Authorization": f"Bearer {os.environ['COMPRESSA_API_KEY']}",
"accept": "application/json",
}
# указываем путь к нашему файлу
files = {"files": open("ozon_guide.pdf", "rb")}
# задаем параметры создания чанков
data = {
"output_format": "application/json",
"coordinates": "false",
"strategy": "auto",
"languages": ["rus", "eng"]
}
response = requests.post(
compressa_url,
headers=headers,
files=files,
data=data
)
# Выводим чанки документа в JSON формате
print(response.json())
Чтобы узнать больше о CompressaChunking на практическом примере — посмотрите наш гайд.
CompressaEmbeddings
Модель CompressaEmbeddings
позволяет создавать векторные представления (embeddings) для текстов. Это полезно для семантического поиска и других задач обработки естественного языка (например, классификации).
from langchain_compressa.embeddings import CompressaEmbeddings
embeddings = CompressaEmbeddings()
# Создание embedding для одного запроса
query_embedding = embeddings.embed_query("Как приготовить борщ?")
# Создание embeddings для нескольких документов
docs_embeddings = embeddings.embed_documents([
"Борщ - это традиционный славянский суп",
"Для приготовления борща нужна свекла",
"Борщ обычно подают со сметаной",
"В борщ часто добавляют мясо",
"Борщ имеет характерный красный цвет"
])
# Асинхронное создание embeddings
await embeddings.aembed_query("Как приготовить борщ?")
await = embeddings.aembed_documents([
"Борщ - это традиционный славянский суп",
"Для приготовления борща нужна свекла",
"Борщ обычно подают со сметаной",
"В борщ часто добавляют мясо",
"Борщ имеет характерный красный цвет"
])
Если вы хотите глубже погрузиться в Embeddings и понять, как технически устроен семантический поиск - посмотрите наше практическое руководство.
ChatCompressa
ChatCompressa
- это быстрая и выгодная LLM с поддержкой русского языка
from langchain_compressa import ChatCompressa
llm = ChatCompressa(temperature=0.5)
Вы можете вызвать LLM простым способом
messages = [
("system", "Ты полезный помощник, который переводит с русского на английский. Переведи предложение пользователя."),
("human", "Я люблю программирование.")
]
ai_msg = llm.invoke(messages)
print(f"Ответ модели: {ai_msg.content}")
Или использовать LLM в цепочке с шаблоном запроса
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Ты полезный помощник, который переводит с {input_language} на {output_language}.",
),
("human", "{input}"),
]
)
chain = prompt | llm
result = chain.invoke(
{
"input_language": "русский",
"output_language": "английский",
"input": "Я люблю программирование.",
}
)
print(f"Результат цепочки: {result.content}")
CompressaRerank
CompressaRerank
позволяет переранжировать документы на основе их релевантности заданному запросу.
from langchain_core.documents import Document
from langchain_compressa.reranks import CompressaRerank
#Создаем список из документов в формате Langchain, добавляем metadata
documents = [
Document(
page_content="""Карсон-Сити — столица американского штата Невада.
По данным переписи населения США 2010 года, население Карсон-Сити составляло 55 274 человека.""",
metadata={"source": "https://пример.ru/1"}
),
Document(
page_content="""Содружество Северных Марианских островов — группа островов в Тихом океане,
которые являются политическим разделением, контролируемым Соединенными Штатами.
Столица — Сайпан.""",
metadata={"source": "https://пример.ru/2"}
),
Document(
page_content="""Шарлотта-Амалия — столица и крупнейший город Виргинских островов США.
В нем проживает около 20 000 человек. Город находится на острове Сент-Томас.""",
metadata={"source": "https://пример.ru/3"}
),
Document(
page_content="""Вашингтон, округ Колумбия (также известный как просто Вашингтон или
округ Колумбия, и официально как округ Колумбия) — столица Соединенных Штатов.
Это федеральный округ. На территории находятся резиденция президента США и многие
крупные государственные правительственные учреждения. Это делает его политическим центром
Соединенных Штатов Америки.""",
metadata={"source": "https://пример.ru/4"}
),
Document(
page_content="""Смертная казнь существовала в Соединенных Штатах еще до того,
как Соединенные Штаты стали страной. По состоянию на 2017 год смертная казнь разрешена
в 30 из 50 штатов. Федерал ьное правительство (включая вооруженные силы США) также
применяет смертную казнь.""",
metadata={"source": "https://пример.ru/5"}
)
]
query = "Какая столица у Соединенных Штатов Америки?"
#Определяем нашу модель реранжирования
reranker = CompressaRerank()
#Применяем CompressaRerank, чтобы переранжировать документы под запрос пользователя
compress_res = reranker.compress_documents(query=query, documents=documents)
Пользу реранжирования проще понять при работе с большим массивом документов. Мы подготовили специальный гайд, в котором улучшаем точность поиска по ключевым словам при помощи CompressaRerank.