Skip to content

Commit

Permalink
Merge pull request #63 from ai-forever/ivlytkin-promts-corrections
Browse files Browse the repository at this point in the history
Добавил новые шаблоны промптов и поправил несколько ссылок
  • Loading branch information
Rai220 authored Feb 2, 2024
2 parents 57800dc + 24f9383 commit a588739
Show file tree
Hide file tree
Showing 9 changed files with 315 additions and 69 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
</div>


![Product Name Screen Shot](docs/static/img/logo-with-backgroung.png)
![Product Name Screen Shot](/docs/static/img/logo-with-backgroung.png)

## 🤔 Что такое GigaChain?

Expand Down Expand Up @@ -75,6 +75,7 @@
Генерация с дополнением данными включает в себя специфические типы цепочек, которые сначала получают данные от внешнего источника, а затем используют их в генерации. Примеры включают в себя суммирование больших текстов и ответы на вопросы по заданным источникам данных.

Пример - [Ответы на вопросы по документу на примере "разговор с книгой" (RAG)](docs/docs/use_cases/question_answering/gigachat_qa.ipynb)

Пример — [Ответы на вопросы по статьям из Wikipedia](docs/docs/integrations/retrievers/wikipedia.ipynb)

- Работа с агентами (*Agents*).
Expand Down
18 changes: 3 additions & 15 deletions docs/extras/integrations/chat/README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,16 @@
# Получение доступа к GigaChat

Для получения доступа к `GigaChat` пожалуйста следуйте [следующей инструкции](https://developers.sber.ru/docs/ru/gigachat/api/integration)
Для получения доступа к `GigaChat` пожалуйста следуйте [следующей инструкции](https://developers.sber.ru/docs/ru/gigachat/api/integration).

> [!NOTE]
> Обратите внимание, что способы получения доступа отличаются для физических и юридических лиц.
Способы получения доступа отличаются для физических и юридических лиц.

> [!NOTE]
> Обратите внимание, что для корректной работы с GigaChat необходимо установить сертификат минцифры или использовать параметр `verify_ssl_certs=False` при создании объекта `GigaChat`.
> Подробнее о том, как установить сертификат в свою ОС можно прочитать [здесь](https://developers.sber.ru/docs/ru/gigachat/certificates).
## Получение доступа для физических лиц

- Зарегистрируйтесь или авторизуйтесь в [личном кабинете](https://developers.sber.ru/studio/login), используя свой аккаунт Сбер ID или СберБизнес ID.
- Нажмите кнопку Создать проект в левом меню.
- Выберите GigaChat API в разделе AI-модели.
- Ознакомьтесь и примите условия пользовательского соглашения.
- В открывшемся окне введите название проекта.
- Нажмите кнопку "Сгенерировать новый `Client Secret`".
![Создание нового Client Secret](giga_reg_cs.png?raw=true)
- Сохраните `Client Secret` и `Авторизационные данные` в надежном месте.
![Сохранение ключей](giga_reg_cs_2.png?raw=true)

> [!NOTE]
> Обратите внимание на поле Scope. GigaChat по-умолчанию использует значение `GIGACHAT_API_PERS`. Если вам нужно использовать другое значение, то его нужно задать явно с помощью параметра
О том как создать проект GigaChat API и получить авторизационные данные для работы с GigaChat, читайте в [официальной документации](https://developers.sber.ru/docs/ru/gigachat/api/integration-individuals).

## Использование ключей для подключения к GigaChat

Expand Down
2 changes: 1 addition & 1 deletion docs/extras/use_cases/summarization.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
"* 16k token OpenAI `gpt-3.5-turbo-16k` \n",
"* 100k token Anthropic [Claude-2](https://www.anthropic.com/index/claude-2)\n",
"\n",
"Также можно использовать другие типы суммаризации `chain_type=\"map_reduce\"` или `chain_type=\"refine\"` (подробнее см. [здесь](/docs/modules/chains/document/refine))."
"Также можно использовать другие типы суммаризации `chain_type=\"map_reduce\"` или `chain_type=\"refine\"` (подробнее смомтрите раздел [Option 3. Refine](/docs/docs/use_cases/summarization.ipynb))."
]
},
{
Expand Down
235 changes: 183 additions & 52 deletions hub/prompts/content/content_examples.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,50 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Использование хаба промптов для работы с контентом\n",
"## Инициализация GigaChat"
"# Шаблоны промптов для работы с контентом\n",
"\n",
"Раздел содержит примеры по работе с контентом с помощью шаблонов промптов GigaChain.\n",
"\n",
"Перед работой с шаблонами инициализируйте GigaChat:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from langchain.prompts import load_prompt\n",
"from langchain.chains import LLMChain\n",
"from langchain.chat_models import GigaChat\n",
"from langchain.chat_models.gigachat import GigaChat\n",
"\n",
"giga = GigaChat(credentials=...)"
"giga = GigaChat(credentials=\"<авторизационные_данные>\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"О том что такое авторизационные данные и как их получить читайте в разделе [Подключение API и получение авторизационных данных](https://developers.sber.ru/docs/ru/gigachat/api/integration)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Исправление текста"
"## Исправление текста\n",
"\n",
"Для исправления текста используйте шаблон `spell_correction.yaml`.\n",
"\n",
"Шаблон содержит обязательную переменную `text` — текст, который нужно исправить.\n",
"\n",
"Подключение и вызов шаблона:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Искусственный интеллект может исправить все ошибки в данном тексте вне зависимости от длины.'"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"prompt = load_prompt(\"lc://prompts/content/spell_correction.yaml\")\n",
"chain = prompt | giga\n",
Expand All @@ -58,34 +62,45 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Перевод на русский язык"
"## Перевод на русский язык\n",
"\n",
"Для перевода текста на русский язык используйте шаблон `translation_v2.yaml`.\n",
"\n",
"Для работы шаблона используется библиотека gigachat_core версии 0.1.9.1. и выше.\n",
"Для установки библиотеки вручную используйте команду:\n",
"\n",
"```sh\n",
"pip install -U gigachain_core\n",
"```\n",
"\n",
"Шаблон содержит обязательную переменную `text` — текст, который нужно перевести.\n",
"\n",
"Подключение шаблона:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"prompt = load_prompt(\"lc://prompts/content/translation_v2.yaml\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"GigaChat поддерживает перевод с разных языков.\n",
"\n",
"Пример перевода с англиского языка:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Привет! Я понимаю английский и многие другие языки!'"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"chain = prompt | giga\n",
"chain.invoke(\n",
Expand All @@ -95,29 +110,145 @@
").content"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пример перевода с белорусского языка:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Добрый день! Я умею переводить с разных языков, например с белорусского.'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"chain.invoke(\n",
" {\n",
" \"text\": \"Добры дзень! Я ўмею перакладаць з розных моў, напрыклад з беларускай.\"\n",
" }\n",
").content"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Стилизация текста\n",
"\n",
"Для переписывания текста с учетом заданного стиля используйте шаблон `text_rewrite.yaml`.\n",
"\n",
"Для работы шаблона используется библиотека gigachat_core версии 0.1.9.1. и выше.\n",
"Для установки библиотеки вручную используйте команду:\n",
"\n",
"```sh\n",
"pip install -U gigachain_core\n",
"```\n",
"\n",
"Шаблон содержит переменные:\n",
"\n",
"* `text` — текст, который нужно переписать и стилизовать. Обязательная переменная;\n",
"* `style` — стиль, в котором нужно переписать текст. Обязательная переменная.\n",
"\n",
"Подключение и вызов шаблона:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"prompt = load_prompt(\"lc://prompts/content/text_rewrite.yaml\")\n",
"chain = prompt | giga\n",
"chain.invoke(\n",
" {\n",
" \"text\": \"Благодаря новой LLM GigaChat лучше следует инструкциям и может выполнять более сложные задания: улучшилось качество суммаризации, рерайтинга и редактирования текстов, а ответы на вопросы стали точнее.\\nПо результатам тестов новый GigaChat уже превзошел схожие по количеству параметров иностранные аналоги в бенчмарке MMLU.\\nДостичь таких результатов получилось за счет множества экспериментов по улучшению модели и повышению эффективности ее обучения. В частности, команда использовала фреймворк для обучения больших языковых моделей с возможностью шардирования весов нейросети по видеокартам, что позволило сократить потребление памяти на них.\\nВ числе первых доступ к API новинки получат бизнес-клиенты Сбера и участники академического сообщества.\",\n",
" \"style\": \"Научная статья\"\n",
" }\n",
").content"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Генерация описания товара\n",
"\n",
"Для генерации рекламного описания товара, для размещения в интернет-магазине используйте шаблон `product_description.yaml`.\n",
"\n",
"Для работы шаблона используется библиотека gigachat_core версии 0.1.9.1. и выше.\n",
"Для установки библиотеки вручную используйте команду:\n",
"\n",
"```sh\n",
"pip install -U gigachain_core\n",
"```\n",
"\n",
"Шаблон содержит переменные:\n",
"\n",
"* `product_name` — название товара. Обязательная переменная;\n",
"* `category` — категория, к которой относится товар. Обязательная переменная;\n",
"* `key_words` — от одного до пяти ключевых слов, связанных с товаром. Необязательное поле.\n",
"\n",
"Подключение и вызов шаблона:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"prompt = load_prompt(\"lc://prompts/content/product_description.yaml\")\n",
"chain = prompt | giga\n",
"chain.invoke(\n",
" {\n",
" \"product_name\": \"SberBoom\",\n",
" \"category\": \"умные колонки\",\n",
" \"key_words\": \"умная колонка, салют, умный дом\"\n",
" }\n",
").content"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Генерация таблиц\n",
"\n",
"Для генерации таблиц используйте шаблон `table_generation.yaml`.\n",
"\n",
"Для работы шаблона используется библиотека gigachat_core версии 0.1.9.1. и выше.\n",
"Для установки библиотеки вручную используйте команду:\n",
"\n",
"```sh\n",
"pip install -U gigachain_core\n",
"```\n",
"\n",
"Шаблон содержит обязательную переменную `text` — описание таблицы, которую надо сгенерировать.\n",
"\n",
"Подключение и вызов шаблона:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from langchain.prompts import load_prompt\n",
"from langchain.chat_models.gigachat import GigaChat\n",
"\n",
"giga = GigaChat(credentials=\"<авторизационные_данные>\", model=\"GigaChat-Pro\")\n",
"\n",
"prompt = load_prompt(\"lc://prompts/content/table_generation.yaml\")\n",
"chain = prompt | giga\n",
"chain.invoke(\n",
" {\n",
" \"text\": \"Столбцы: Предмет мебели, Краткое описание. В обычной квартире могут быть представлены самые разные предметы мебели. Например столы, стулья или кресла. Стол — предмет мебели, имеющий приподнятую горизонтальную или наклонную поверхность и предназначенный для размещения предметов, выполнения работ, принятия пищи, игр, рисования, обучения и другой деятельности. Стул — редмет мебели для сидения одного человека, с опорой для спины с подлокотниками или без них. Кресло — предмет мебели для комфортного продолжительного сидения, со спинкой, c подлокотниками или без них.\"\n",
" }\n",
").content"
]
}
],
"metadata": {
Expand All @@ -136,7 +267,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.13"
"version": "3.0.0"
}
},
"nbformat": 4,
Expand Down
13 changes: 13 additions & 0 deletions hub/prompts/content/product_description.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
input_variables: [product_name, category, key_words]
output_parser: null
messages:
- role: system
prompt:
template: 'Ты — профессиональный маркетолог с опытом написания высококонверсионной рекламы.
Для генерации описания товара ты изучаешь потенциальную целевую аудиторию и оптимизируешь рекламный текст так, чтобы он обращался именно к этой целевой аудитории.
Создай текст объявления с привлекающим внимание заголовком и убедительным призывом к действию, который побуждает пользователей к целевому действию.'
- role: user
prompt:
template: 'Название товара: {product_name}. Категория: {category}. Ключевые слова: {key_words}.'
template_format: f-string
_type: chat
11 changes: 11 additions & 0 deletions hub/prompts/content/table_generation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
input_variables: [text]
output_parser: null
messages:
- role: system
prompt:
template: 'Создай таблицу в формате markdown с указанными названиями столбцов и строк на основе текста сообщения пользователя. Количество строк и столбцов должно !строго соответствовать заданному в сообщении. Оформление таблицы должно быть консистентным.'
- role: user
prompt:
template: '{text}'
template_format: f-string
_type: chat
11 changes: 11 additions & 0 deletions hub/prompts/content/text_rewrite.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
input_variables: [text, style]
output_parser: null
messages:
- role: system
prompt:
template: 'Ты — опытный копирайтер. Перепиши маркетинговый текст с учётом вида текста и выбранной тональности.'
- role: user
prompt:
template: 'Текст: {text}. Стиль: {style}.'
template_format: f-string
_type: chat
Loading

0 comments on commit a588739

Please sign in to comment.