Перейти к основному содержимому

Быстрый старт: 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.