Оптимизация модуля LLM: Детализация структуры и формата

В данной статье рассматриваются ключевые аспекты структурирования промптов для генерации кода с использованием LLM, с акцентом на PHP-фреймворк Kohana 3.3.

Структура Промпта

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

  • Системная инструкция / Роль: Задает роль LLM
  • Контекст / Описание задачи: Конкретное описание задачи
  • Типы кода для генерации: Четкие инструкции по каждому типу
  • Входные данные: Информация о сущности
  • Формат вывода: Структура ответа для парсинга
  • Примеры: Few-shot learning для улучшения качества

Формат Ответа LLM

JSON является предпочтительным форматом ответа, поскольку он:

  • Упрощает парсинг кода
  • Устойчив к изменениям форматирования
  • Обеспечивает структуру для извлечения компонентов
{ "generated_code": { "sql_migration": "...", "model": "...", "controller": "...", "view_list": "...", "view_view": "..." }, "status": "success", "message": "Entity 'Product' generated successfully." }

Пример Промпта для сущности "Product"

You are an expert PHP developer specializing in the Kohana 3.3 framework. Your task is to generate code for a new entity within a Kohana ERP system. Generate the following components: a SQL migration script, an ORM model, a basic controller with index and view actions, and corresponding view files for listing and viewing a single item.

## Задача: Генерация сущности "Product" для ERP-системы.

## Требования к генерации:
**sql_migration**: SQL-скрипт для создания таблицы. Используйте MySQL синтаксис. Следуйте определенным типам полей, nullable, primary_key, auto_increment и default атрибутам.
**model**: ORM модель Kohana 3.3 для сгенерированной таблицы. Укажите `$_table_name` и, если применимо, `$_primary_key`. Добавьте комментарии для возможных связей.
**controller**: Базовый Kohana 3.3 контроллер с действиями `action_index` (список) и `action_view` (детали). Используйте ORM для получения данных. Обработайте случай, когда запись не найдена (HTTP_Exception_404). Предполагайте использование `Controller_Template`.
**view_list**: Kohana 3.3 представление для отображения списка сущностей. Покажите основные поля (например, name) и ссылку на детальное представление (если есть id).
**view_view**: Kohana 3.3 представление для отображения одной сущности. Покажите все поля, используйте HTML::chars для безопасности.

## Входные данные сущности:
{"entity_name": "Product", "fields": [{"name": "id", "type": "INT", "primary_key": true, "auto_increment": true}, {"name": "name", "type": "VARCHAR(255)", "nullable": false}, {"name": "description", "type": "TEXT", "nullable": true}, {"name": "price", "type": "DECIMAL(10, 2)", "nullable": false, "default": "0.00"}]}

## Формат вывода:
В ответе должен быть строго JSON объект. Объект верхнего уровня должен содержать ключи "generated_code", "status", и "message".
Ключ "generated_code" должен быть объектом, содержащим сгенерированный код для каждого запрошенного типа. Используйте следующие ключи для кода: "sql_migration", "model", "controller", "view_list", "view_view".
Значения для каждого ключа кода должны быть строками, содержащими полный код.
Status должен быть "success" при успешной генерации или "error" при неудаче.
Message должен содержать краткое описание результата.
            

TYPE_MAP

TYPE_MAP сопоставляет внутренние ключи с инструкциями для LLM:

sql_migration: SQL-скрипт для создания таблицы. Используйте MySQL синтаксис.
model: ORM модель Kohana 3.3. Укажите $_table_name.
controller: Kohana 3.3 контроллер с базовыми CRUD действиями.
view_list: Kohana 3.3 представление для отображения списка сущностей.
view_view: Kohana 3.3 представление для отображения одной сущности.

Структура payload

Payload содержит всю необходимую информацию для построения промпта:

entity_name: Название сущности
fields: Массив описаний полей
relationships: Описание связей (для будущих расширений)
generate_types: Список типов для генерации
controller_name: Имя контроллера (опционально)

Итог

Мы определили ключевые компоненты для работы с LLM:

  • Структуру промпта с системной инструкцией, описанием задачи, требованиями к генерации, входными данными и форматом вывода
  • Формат ответа LLM, который будет строго JSON
  • Пример промпта для таблицы products
  • TYPE_MAP для сопоставления типов кода с инструкциями
  • Структуру payload, передаваемого в generate()

Теперь мы готовы к реализации LLM_Service и его методов, а также к разработке парсинга JSON-ответа и безопасного выполнения SQL.