Библиотека для разработки LangChain-style приложений на русском языке с поддержкой GigaChat
Создать issue
·
Документация GigaChain
GigaChain это фреймворк для разработки приложений с использованием больших языковых моделей (LLM), таких, как GigaChat
или YandexGPT
. Он позволяет создавать приложения, которые:
- Учитывают контекст — подключите свою модель к источникам данных.
- Могут рассуждать — положитесь на модель в построении рассуждениях (о том, как ответить, опираясь на контекст, какие действия предпринять и т.д.).
Warning
Версия библиотеки LangChain адаптированная для русского языка с поддержкой нейросетевой модели GigaChat. Библиотека GigaChain обратно совместима с LangChain, что позволяет использовать ее не только для работы с GigaChat, но и при работе с другими LLM в различных комбинациях.
Фреймворк включает:
- Библиотеку GigaChain. Библиотека на Python содержит интерфейсы и интеграции для множества компонентов, базовую среду выполнения для объединения этих компонентов в цепочки и агенты, а также готовые реализации цепочек и агентов.
- Хаб промптов. Набор типовых отлаженных промптов для решения различных задач.
- GigaChain Templates. Коллекция легко развертываемых шаблонных решений для широкого спектра задач.
- GigaServe. Библиотека, позволяющая публиковать цепочки GigaChain в форме REST API.
- GigaGraph. Библиотека, дающая возможность работать с LLM (большими языковыми моделями), для создания приложений, которые используют множество взаимодействующих цепочек (акторов) и сохраняют данные о состоянии. Так как в основе GigaGraph лежит GigaChain, предполагается совместное использование обеих библиотек.
Кроме этого, фреймворк совместим со сторонним сервисом LangSmith — платформой для разработчиков, которая позволяет отлаживать, тестировать, оценивать и отслеживать цепочки, построенные на любой платформе LLM, и легко интегрируется с LangChain и GigaChain.
Репозиторий содержит следующие компоненты:
gigachain
;gigachain-core
;gigachain-community
;gigachain-experimental
;gigachain-cli
;GigaChain Templates
и пакеты Python.
Warning
GigaChain находится в состоянии альфа-версии: мы заняты переводом библиотеки и ее адаптацией для работы с GigaChat. Будьте осторожны при использовании GigaChain в своих проектах, так как далеко не все компоненты оригинальной библиотеки проверены на совместимость с GigaChat.
Будем рады вашим PR и issues.
Библиотека упростит интеграцию вашего приложения с нейросетевой моделью GigaChat и поможет в следующих задачах:
-
Работа с промптами и LLM.
Включая управление промптами и их оптимизацию. GigaChain предоставляет универсальный интерфейс для всех LLM, а также стандартные инструменты для работы с ними.
Пример — Работа с хабом промптов на примере задачи суммаризации книг
-
Создание цепочек (Chains).
Цепочки представляют собой последовательность вызовов к LLM и/или другим инструментам. GigaChain предоставляет стандартный интерфейс для создания цепочек, различные интеграции с другими инструментами и готовые цепочки для популярных приложений.
-
Дополнение данных (Data Augmented Generation).
Генерация с дополнением данными включает в себя специфические типы цепочек, которые сначала получают данные от внешнего источника, а затем используют их в генерации. Примеры включают в себя суммирование больших текстов и ответы на вопросы по заданным источникам данных.
Пример — Ответы на вопросы по документу на примере "разговор с книгой" (RAG)
-
Работа с агентами (Agents).
Агент представляет собой программу, которая принимает решение о дальнейшем действии, отслеживает его результат, и, с учетом результата, принимает следующее решение. Процесс повторяется до завершения. GigaChain предоставляет стандартный интерфейс для работы с агентами, выбор агентов и примеры готовых агентов.
-
Создание памяти.
Память сохраняет состояние между вызовами цепочки или агента. GigaChain предоставляет стандартный интерфейс для создания памяти, коллекцию реализаций памяти и примеры цепочек и агентов, которые используют память.
-
Самооценка (Evaluation).
BETA Генеративные модели традиционно сложно оценивать с помощью стандартных метрик. Один из новых способов оценки — использование самих языковых моделей. GigaChain предоставляет некоторые запросы и цепочки для решения таких задач
Библиотеку можно установить с помощью pip:
pip install gigachain-community
Самый надежный способ избежать проблем при миграции с LangChain — использовать новое виртуальное окружение Python (Python virtual environment), в котором никогда не устанавливались пакеты LangChain.
Чтобы создать новое виртуальное окружение venv, используйте команды:
# Создает чистое виртуальное окружение Python
python -m venv .venv
# Активирует созданное окружение
source .venv/bin/activate
# Устанавливает gigachain
pip install gigachain-community
Основной особенностью библиотеки является наличие модуля gigachat
, который позволяет отправлять запросы к нейросетевой модели GigaChat.
Для авторизации запросов к GigaChat вам понадобится получить авторизационные данные для работы с GigaChat API.
Note
О том как получить авторизационные данные для доступа к GigaChat читайте в официальной документации.
Для работы с сервисом GigaChat передайте полученные авторизационные данные в параметре credentials
объекта GigaChat
.
chat = GigaChat(credentials=<авторизационные_данные>)
Для обращения к GigaChat в вашем приложении или в вашей ОС должны быть установлены сертификаты НУЦ Минцифры. О том как настроить сертификаты НУЦ Минцифры для обращения к GigaChat читайте в официальной документации.
Вы можете установить сертификаты с помощью утилиты gigachain-cli
.
Для этого:
- Установите утилиту с помощью менеджера пакетов pip:
pip install gigachain-cli
- Установите сертификаты с помощью команды:
gigachain install-rus-certs
Если вы не используете сертификат НУЦ Минцифры, то при создании объекта GigaChat
вам нужно передать параметр verify_ssl_certs=False
.
chat = GigaChat(credentials=<авторизационные_данные>, verify_ssl_certs=False)
Note
Для передачи аторизационных данных и других параметров GigaChat вы также можете настроить переменные окружения, например, GIGACHAT_CREDENTIALS
, GIGACHAT_GIGACHAT_
и другие.
Вот простой пример работы с чатом с помощью модуля:
"""Пример работы с чатом через gigachain"""
from langchain.schema import HumanMessage, SystemMessage
from langchain_community.chat_models.gigachat import GigaChat
# Авторизация в сервисе GigaChat
chat = GigaChat(credentials=<авторизационные_данные>, verify_ssl_certs=False)
messages = [
SystemMessage(
content="Ты эмпатичный бот-психолог, который помогает пользователю решить его проблемы."
)
]
while(True):
user_input = input("User: ")
messages.append(HumanMessage(content=user_input))
res = chat.invoke(messages)
messages.append(res)
print("Bot: ", res.content)
Развернутую версию примера смотрите в блокноте Работа с GigaChat. Этот блокнот также содержит пример работы с потоковой передачей токенов.
Больше примеров в коллекции.
С помощью GigaChain вы можете обращаться к различным моделям, которые предоставляет GigaChat
Для этого передайте название модели в параметре model
:
chat = GigaChat(model="GigaChat-Pro", credentials=<авторизационные_данные>, verify_ssl_certs=False)
Полный список доступных моделей можно получить с помощью метода get_models()
.
chat = GigaChat(credentials=<авторизационные_данные>, verify_ssl_certs=False)
chat.get_models()
Метод выполняет запрос GET /models
к GigaChat API и возвращает список с описанием доступных моделей.
Warning
Стоимость запросов к разным моделям отличается. Подробную информацию о тарификации запросов к той или иной модели вы ищите в официальной документации.
Для подсчета количества токенов в запросе используйте метод get_num_tokens(str)
:
chat = GigaChat(credentials=<авторизационные_данные>, verify_ssl_certs=False)
chat.get_num_tokens("Сколько токенов в этой строке")
Метод выполняет запрос POST /tokens/count
к GigaChat API и возвращает информацию о количестве токенов в строке.
Модуль gigachat
позволяет авторизовать запросы от вашего приложения в GigaChat с помощью GigaChat API. Модуль поддерживает работу как в синхронном, так и в асинхронном режиме. Кроме этого модуль поддерживает обработку потоковой передачи токенов1.
Note
Как подключить GigaChat API читайте в официальной документации.
Модуль поддерживает не только GigaChat. Поэтому, если ваше приложение уже использует другие нейросетевые модели, интеграция с GigaChat не составит труда.
Эмбеддинг — это векторное представление слова, которое можно использовать для определения смысловой близости разных текстов. Векторное представление создается с помощью модели Embeddings.
Note
Работа с моделью Embeddings оплачивается отдельно. Подробнее — в разделе Тарифы и оплата.
Для создания эмбеддингов с помощью GigaChain используйте модуль GigaChatEmbeddings
:
from langchain_community.embeddings.gigachat import GigaChatEmbeddings
embeddings = GigaChatEmbeddings(
credentials="<авторизационные_данные>", verify_ssl_certs=False
)
Для работы с GigaChatEmbeddings
используются те же авторизационные данные, что и при работе с модулем GigaChat.
Подробнее о работе с эмбеддингами и использовании их при реализации RAG-методики — в соответствующем обучающем материале.
Если у вас возникли проблемы при работе с GigaChain убедитесь, что:
- у вас установлена последняя версия библиотеки;
- вместо модулей GigaChain не установлены модули LangChain.
Одновременное использование библиотек LangChain и GigaChain вызывает конфликты, которые могут проявиться даже после полного удаления одной из библиотек. Для предотвращения конфликтов рекомендуется создать чистое виртуальное окружение Python и установить только пакеты, которые входят в состав GigaChain. Подробнее — в разделе Миграция с LangChain.
Для вывода полного списка установленных модулей используйте команду:
pip list
В выводе команды не должно быть модулей, которые содержат в названии слово langchain
.
Note
Исключение составляют модули langchain_hub
и langsmith
. Они не требуют удаления и переустановки.
Обработка больших текстов может занимать у модели продолжительное время — 10 минут и более. Это может привести к возникновению проблем, связанных с превышением времени ожидания.
Чтобы избежать таких проблем, используйте потоковую передачу токенов (параметр streaming=True
):
chat = GigaChat(credentials='<авторизационные_данные>', verify_ssl_certs=False, streaming=True)
Ниже представлен список примеров использования GigaChain.sdf
- Ответы на вопросы по документу на примере "разговор с книгой" (RAG)
- Суммаризация по алгоритму MapReduce (см. раздел map/reduce)
- Работа с хабом промптов, цепочками и парсером JSON
- Работа с хабом промптов на примере задачи суммаризации книг
- Парсинг списков, содержащихся в ответе
- Асинхронная работа с LLM
- Использование Elastic для поиска ответов по документам
- Использование разных эмбеддингов для Retrieval механизма
- Генерация и выполнение кода с помощью PythonREPL
- Работа с кэшем в GigaChain
- CAMEL агент для разработки программ
- Автономный агент AutoGPT с использованием GigaChat
- Генерация плейлистов с помощью GigaChain и Spotify
- Работа с LlamaIndex с помощью тула и Conversational агента
- Агент-риелтор на GigaChat functions
- Агент выполняющий код
- Получение сгенерированных изображений/видео
- Площадка для споров между GigaChat и YandexGPT с судьей GPT-4
- Игра Blade Runner: GPT-4 и GigaChat выясняют, кто из них бот
- Игра в стиле DnD с GPT-3.5 и GigaChat
GigaChain — это проект с открытым исходным кодом в быстроразвивающейся области. Мы приветствуем любое участие в разработке, развитии инфраструктуры или улучшении документации. [BETA] Генеративные модели, как известно, трудно оценить с помощью традиционных показателей. Одним из новых способов их оценки является использование для оценки самих языковых моделей. LangChain предоставляет несколько подсказок/цепочек для помощи в этом.
Подробнее о том, как внести свой вклад.
Note
Полная документация GigaChain находится в процессе перевода. Вы можете также пользоваться документацией LangChain, поскольку GigaChain совместим с LangChain:
- Introduction: Overview of the framework and the structure of the docs.
- Tutorials: If you're looking to build something specific or are more of a hands-on learner, check out our tutorials. This is the best place to get started.
- How-to guides: Answers to “How do I….?” type questions. These guides are goal-oriented and concrete; they're meant to help you complete a specific task.
- Conceptual guide: Conceptual explanations of the key parts of the framework.
- API Reference: Thorough documentation of every class and method.
Проект распространяется по лицензии MIT, доступной в файле LICENSE
.
Footnotes
-
В настоящий момент эта функциональность доступна в бета-режиме. ↩