Обложка

__/\\\\\\\\\\\\\\\__/\\\\\\\\\\\\\____/\\\_____________
 _\/\\\///////////__\/\\\/////////\\\_\/\\\_____________
  _\/\\\_____________\/\\\_______\/\\\_\/\\\_____________
   _\/\\\\\\\\\\\_____\/\\\\\\\\\\\\\/__\/\\\_____________
    _\/\\\///////______\/\\\/////////____\/\\\_____________
     _\/\\\_____________\/\\\_____________\/\\\_____________
      _\/\\\_____________\/\\\_____________\/\\\_____________
       _\/\\\_____________\/\\\_____________\/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///////////////__

---

Аннотация

Этот документ представляет собой подробный анализ Formal-Prompt Language (FPL) — языка, разработанного для устранения двусмысленностей в общении с ИИ-моделями. В нем рассматриваются ключевые принципы, структура и компоненты FPL, а также продвинутые шаблоны его использования для создания надежных и воспроизводимых ИИ-приложений.

---

Основные тезисы

---

От естественного языка к формальной спецификации

Formal-Prompt Language (FPL) представляет собой сдвиг в парадигме взаимодействия с ИИ. Язык разработан для преобразования взаимодействия на естественном языке, которое является недетерминированным, в детерминированные, структурированные программы.

Проблемы, связанные с естественным языком

+------------------------+------------------------+------------------------+
| Критерий               | Естественный язык      | Formal-Prompt Language |
+------------------------+------------------------+------------------------+
| Детерминированность    | Низкая (стохастический)| Высокая (детерминир.)  |
+------------------------+------------------------+------------------------+
| Двусмысленность        | Высокая                | Нулевая                |
+------------------------+------------------------+------------------------+
| Самодостаточность      | Низкая                 | Высокая                |
+------------------------+------------------------+------------------------+
| Управление состоянием  | Неявное                | Явное                  |
+------------------------+------------------------+------------------------+
| Воспроизводимость      | Низкая                 | Высокая                |
+------------------------+------------------------+------------------------+

Естественный язык, обладая гибкостью, является источником двусмысленностей при машинной обработке, что снижает надежность ИИ-систем.

Ограничения Prompt Engineering и переход к FPL

Prompt engineering — это подход, направленный на минимизацию рисков двусмысленности. Однако он обладает следующими ограничениями:

FPL решает эти проблемы, применяя принципы языков программирования. Цель FPL — формально и однозначно описать задачу, а не найти оптимальную формулировку.

Ключевые принципы FPL

FPL основан на четырех принципах, которые обеспечивают его характеристики.

Принцип нулевой двусмысленности (Zero Ambiguity)

Это основополагающий принцип FPL, который утверждает, что каждое утверждение имеет только одну интерпретацию. Это достигается с помощью:

Принцип самодостаточности (Self-Containment)

Каждая FPL-программа является автономной и не требует внешних файлов или зависимостей. Этот принцип реализуется в формате единого файла _FPL_CONSOLE.md, который содержит:

Передача этого файла ИИ-модели обеспечивает получение всей необходимой информации для точной интерпретации и выполнения в рамках одного запроса. Это делает FPL-программы портативными и воспроизводимыми.

Принцип явного намерения (Explicit Intent)

FPL — это декларативный язык. Пользователь должен явно указать, что он хочет получить. Этот принцип реализован через блок ACTION, где вызывается действие из стандартной библиотеки. Каждое действие имеет четко определенные параметры и ожидаемый возвращаемый тип. Это устраняет необходимость в предположениях ИИ-модели относительно намерения пользователя.

Принцип явного управления состоянием (Explicit State Management)

Генеративные ИИ-модели безстатусны, то есть каждое взаимодействие рассматривается как независимое. FPL решает эту проблему с помощью шаблона управления состоянием, который предоставляет пользователю контроль над сохранением и восстановлением контекста.

┌───────────────┐     ┌───────────────────┐     ┌───────────────────┐
│               │     │                   │     │                   │
│  Запрос       │────▶│  ИИ возвращает    │────▶│  Восстановление   │
│  снимка       │     │  CONTEXT & DATA   │     │  состояния        │
│  @CONTEXT_    │     │                   │     │                   │
│  SNAPSHOT     │     │                   │     │                   │
└───────────────┘     └───────────────────┘     └───────────────────┘
       │                       │                         │
       ▼                       ▼                         ▼
┌───────────────┐     ┌───────────────────┐     ┌───────────────────┐
│               │     │                   │     │                   │
│  Пользователь │     │  ИИ формирует     │     │  Пользователь     │
│  вызывает     │     │  и возвращает     │     │  использует       │
│  @CONTEXT_    │     │  актуальные       │     │  полученный код   │
│  SNAPSHOT     │     │  CONTEXT и DATA   │     │  как основу для   │
│               │     │                   │     │  следующего запрос│
└───────────────┘     └───────────────────┘     └───────────────────┘
  1. Запрос снимка: Пользователь вызывает @CONTEXT_SNAPSHOT.

  2. Ответ ИИ: Модель возвращает только CONTEXT и DATA.

  3. Восстановление состояния: Пользователь использует возвращенный FPL-код как основу для следующего запроса, явно восстанавливая состояние сессии.

Компоненты FPL

Структура программы: Три блока

+--------+---------------------+---------------------------------+
| Блок   | Формат              | Описание                        |
+--------+---------------------+---------------------------------+
| CONTEXT| CONTEXT:            | Определяет правила и ограничения|
|        |   - rule1           | выполнения                      |
|        |   - rule2           |                                 |
+--------+---------------------+---------------------------------+
| DATA   | DATA:               | Предоставляет типизированные    |
|        |   variable: Type    | входные данные                  |
|        |   example: String   |                                 |
+--------+---------------------+---------------------------------+
| ACTION | ACTION:             | Определяет последовательность   |
|        |   - action1(params) | действий для выполнения         |
|        |   - action2(params) |                                 |
+--------+---------------------+---------------------------------+

Каждая FPL-программа состоит из трех обязательных блоков, расположенных в строгом порядке.

Система типов: Целостность данных

+----------------+----------------+---------------------------------+
| Категория      | Тип            | Описание                        |
+----------------+----------------+---------------------------------+
| Примитивные    | String         | Текстовые данные                |
|                | Number         | Числовые данные                 |
|                | Boolean        | Логические значения (true/false)|
+----------------+----------------+---------------------------------+
| Сложные        | Entity         | Структурированный объект с      |
|                |                | определенными полями            |
|                | List     | Однородная коллекция элементов  |
|                |                | одного типа                     |
+----------------+----------------+---------------------------------+

Сильная типизация — ключевой аспект FPL.

* Entity: Структура данных, аналогичная объекту. Используется для группировки связанных данных.

* List<Type>: Гомогенная коллекция. Все элементы в списке должны быть одного типа.

Стандартная библиотека действий: Набор операций

FPL предоставляет набор стандартных действий, охватывающих распространенные задачи. Каждое действие имеет контракт, определяющий его функцию, параметры и возвращаемый тип.

Продвинутые шаблоны использования

FPL поддерживает сложные рабочие процессы, объединяя базовые принципы.

┌───────────────────────────────────────────────────────────────────┐
│                                                                   │
│  ┌─────────────────────┐     ┌─────────────────────────────────┐  │
│  │ Синтез FPL из       │     │ Комбинированный рабочий процесс │  │
│  │ естественного языка │     │                                 │  │
│  └──────────┬──────────┘     └───────────────────┬─────────────┘  │
│             │                                    │                │
│  ┌──────────▼──────────┐               ┌─────────▼─────────┐      │
│  │ 1. Естественный     │               │ 1. Синтез FPL-    │      │
│  │ язык в блоке DATA   │               │ кода              │      │
│  └──────────┬──────────┘               └─────────┬─────────┘      │
│             │                                    │                │
│  ┌──────────▼──────────┐               ┌─────────▼─────────────┐  │
│  │ 2. GENERATE с       │               │ 2. @CONTEXT_          │  │
│  │ возвратом String    │               │ SNAPSHOT для          │  │
│  └──────────┬──────────┘               │ сохранения состояния  │  │
│             │                          └─────────┬─────────────┘  │
│  ┌──────────▼──────────┐               ┌─────────▼─────────┐      │
│  │ 3. Получение FPL-   │               │ 3. Редактирование │      │
│  │ кода в виде строки  │               │ кода              │      │
│  └──────────┬──────────┘               └─────────┬─────────┘      │
│             │                                    │                │
│  ┌──────────▼──────────┐               ┌─────────▼─────────┐      │
│  │ 4. Проверка и       │               │ 4. Выполнение     │      │
│  │ редактирование      │               │ финальной версии  │      │
│  └─────────────────────┘               └───────────────────┘      │
│                                                                   │
└───────────────────────────────────────────────────────────────────┘

Синтез FPL из естественного языка

Этот шаблон позволяет ИИ-модели генерировать FPL-код на основе естественного языка без его выполнения.

1. Описание задачи на естественном языке предоставляется в блоке DATA.

2. В блоке ACTION вызывается GENERATE с возвращаемым типом String.

3. ИИ создает FPL-код в виде строки для последующей проверки и редактирования.

Комбинированный рабочий процесс

Совмещение шаблона управления состоянием и шаблона синтеза позволяет итеративно разрабатывать FPL-программы. Разработчик может:

1. Сгенерировать черновик FPL-программы с помощью синтеза.

2. Создать "снимок" (@CONTEXT_SNAPSHOT) для сохранения прогресса.

3. Отредактировать код.

4. Выполнить финальную версию кода.

Заключение

FPL представляет собой развитие в области взаимодействия с ИИ. Он применяет принципы программирования — детерминизм, типизацию и модульность — к генеративным моделям. В результате, FPL делает ИИ-коммуникацию воспроизводимой, проверяемой и прозрачной. Это позволяет создавать надежные и масштабируемые ИИ-приложения, где FPL выступает в качестве интерфейса между намерением пользователя и точностью исполнения.

Спасибо за прочтение.