> For the complete documentation index, see [llms.txt](https://docs.suvvy.ai/ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.suvvy.ai/ru/osnovnye-nastroiki/prompts/prompts-2.md).

# Функции

Функции - это очень полезный и важный инструмент при настройке Савви, которая позволяет выполнять Савви конкретные действия (вызвать файл базы знаний, таблицу, веб-хук и т.д.).

## Как работают функции?

В основе каждого механизма Савви, где требуется какое-то действие (помимо ответа), будь то база знаний, таблицы, веб-хуки или что-то лежит "функция", которая отвечает за его работу. Внутри функции есть два параметра:

* название функции
* описание функции

Название описывает общий смысл, а описание более подробный.

> Например, для таблицы, которая является прайсом, и который Савви должен прочитывать для ответов клиенту название функции и описание могут звучать так:
>
> * Название: `price_table`
> * Описание: Используется для предоставлении стоимости товаров

<figure><img src="/files/WOZAkt8Vwrk8aSpXTYQl" alt=""><figcaption></figcaption></figure>

Эта информация дает Савви представление о том, где хранится информация о стоимости, и когда клиент спросит: "Сколько стоит?" Савви поймет, что эта информация хранится в данной таблице.

{% hint style="warning" %}
**Обратите внимание**

Бывают более сложные ситуации, когда расчет происходит **в несколько шагов** или при использовании **информации из разных источников.**

Например, когда сначала нужно получить данные из первой таблицы, а потом передать эту информацию во вторую таблицу и получить оттуда информацию в соответствии с этой комбинацией.
{% endhint %}

В этом случае, для каждой таблицы формируется **свое название** и **описание**.

> Например, в первой таблице мы получаем категорию товара и ее идентификатор (ID), а далее по ID категории рассчитываем стоимость в другой таблице, где уже указан объем товара и стоимость. В этом случае для первой таблицы будут такие параметры:
>
> * Название: `categories_table`
> * Описание: Используется для получения ID категорий товаров
>
> Для второй таблицы:
>
> * Название: `price_table`
> * Описание: Используется для получения стоимости товаров по ID.

Тут может возникнуть вопрос, почему сразу не указать все в одной таблице? Тут это разделено просто в качестве примера.

В этом случае, при такой схеме в инструкции мы можем указать такой промпт:

{% tabs %}
{% tab title="Пример промта с двумя таблицами" %}
\#РАСЧЕТ СТОИМОСТИ

В случае, если клиент запросил стоимость товаров выполни по порядку следующие действия:

1. Получи ID товара вызвав функцию `categories_table` передав в нее нужный товар
2. Получи стоимость товара вызвав функцию `price_table` передав туда ID товара полученный на предыдущем шаге.
   {% endtab %}
   {% endtabs %}

В английском варианте вызов функции звучит как call function <название функции>.

**Почему мы тут вызываем две функции? Разве бот не понимает это по описанию?**

Понимает, но тут вопрос точности. Если мы хотим ее повысить, то лучше в инструкции прямо прописать последовательность шагов.

## Вызов функций в инструкции

Для вызова функций в системной инструкции Савви используется конструкция:

<mark style="color:blue;">**call function <Название функции>**</mark>, где <Название функции> - это конкретная функция.

Ниже виды функций и примеры их использования.

## Предустановленные функции

К предустановленным функциям относятся функция работы с базой знаний. В случае, когда нужно принудительно вызвать какой-то файл в базе знаний используется функция:

<mark style="color:blue;">**get\_file\_text("<Название файла для поиска>")**</mark>, где <Название файла для поиска> - это название файла для поиска из раздела База знаний.

<figure><img src="/files/LI4ZpOrYua4Xz4ogFaH7" alt=""><figcaption></figcaption></figure>

Например, если клиент прямо не пишет, что хочет соединить с оператором, но мы хотим в ряде случаев уменьшить вероятность, что Савви не вызовет нужный файл, мы можем использовать следующий способ:

{% tabs %}
{% tab title="Пример get\_file\_text (русский)" %}
{% code overflow="wrap" %}

```
Если клиент злится, у него есть претензия или повышенный тон, по которому мы можем понять его негативный настрой вызови функцию get_file_text("Переключить на менеджера").
```

{% endcode %}
{% endtab %}

{% tab title="Пример get\_file\_text (английский)" %}
{% code overflow="wrap" %}

```
If the client is angry, he has a complaint or a raised tone, by which we can understand his negative attitude, call function get_file_text("Switch to manager").
```

{% endcode %}
{% endtab %}
{% endtabs %}

В этом случае, Савви вызовет данный файл, хотя клиент и не просил переключить на менеджера.

## Пользовательские функции

К пользовательским функциям на текущий момент относятся функции разделов [Таблицы ](/ru/rabota-s-tablicami/tablicy-csv-xls-google.md)и [Действия](/ru/deistviya/multiagentnost.md).

У каждой таблицы или действия имеется свое название и описание функции. Оно задается персонально для каждой отдельной таблицы или действия.

{% hint style="info" %}
Сами по себе функции имеют описание и Савви **сам понимает**, когда их нужно вызвать.

Указывать функции в инструкции само по себе не обязательно, но мы рассматриваем случаи, когда вызов функции может быть **не очевиден** для бота, или последовательность действий имеет свои ответвления, которые необходимо описать.
{% endhint %}

По аналогии с предыдущим пунктом, мы можем вызывать необходимые функции используя конструкцию:

<mark style="color:blue;">**call function <Название функции>**</mark>, где <Название функции> - это конкретная функция.

При этом у таблиц одним из обязательных моментов будет наличие в названии слова table (добавляется автоматически).

При вызове таблицы или действия мы должны указать, что мы туда передаем, дабы Савви не передавал туда не нужную информацию.\
\
Например, если мы хотим вызывать веб-хук, который обратится в CRM и получит информацию о товаре, с учетом доставки в конкретный город, мы можем сформировать инструкцию таким образом:

{% tabs %}
{% tab title="Пример вызова веб-хука (русский)" %}
{% code overflow="wrap" %}

```
Если клиент запрашивает информацию о товаре вызови функцию item_information и передай туда название товара и город доставки.
```

{% endcode %}
{% endtab %}

{% tab title="Пример вызова веб-хука (английский)" %}
{% code overflow="wrap" fullWidth="false" %}

```
If the customer requests information about the product, call the item_information function and pass the product name and the delivery city there.
```

{% endcode %}
{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.suvvy.ai/ru/osnovnye-nastroiki/prompts/prompts-2.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
