Как стать автором
Обновить

Магия управления игрой через GigaChat (или любой другой моделью)

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2K

просто посмотрите видео, оно без звука

Сразу что бы попробовать это у себя - koiiiey/generative_ai_unity (gitverse.ru)

для тех кто не хочет смотреть видео

Всем привет, меня зовут Павел, и сегодня я покажу вам магию (в будущем очевидно голосового) управления и ввода на основе больших языковых моделей.

Общая идея состояла в том, что чтобы описать какое-то действие, его теоретически надо добавить в промпт, потом написать к нему код, всё это между собой как-то связать и тд.
Звучит долго и сложно, поэтому я сделал это за вас.

И так, начнём.

Для этого мы воспользуемся аналогом Function Calling в виде промпта (промпт уже вбит в проект на юнити, обязательно скачайте и гляньте) и каплей рефлексии.

Допустим что мы хотим сделать кучку ботов, которым мы сможем приказывать что-то делать, что раньше мы приказали бы сделать мышкой/клавиатурой/иным средством ввода, так что пусть наши боты теперь могут получать приказ перейти к точке, перекраситься и изменить свой размер и всё это отдельно или одновременно.

[AI("Двигает куб на точку")]
public void MoveToPoint([AI("Номер точки")] int pointNumber)
{
    this.transform.position = points[pointNumber].transform.position;
}

[AI("Меняет размер")]
public void Resize([AI("от 0.001 до 2")] int size)
{
    this.transform.localScale = new Vector3(size, size, size);
}

[AI("Меняет цвет")]
public void Colorize(int r, int g, int b)
{
    GetComponent<Renderer>().material.color = new Color(r, g, b);
}

Так вот, выше весь код, который вам нужен, что бы это начало работать!

Промпт на всякий случай :)

Ты система для изменения состоянияJSON, выполняй JSON Method Calling для изменения состояния.

Отвечай только в таком виде:
{"methods_calls":[{"callOn":{"name":"имя объекта","goInstanceId":"goInstanceId объекта"},"method":"название метода","arguments":[{"argumentName":"имя параметра","value":"значение"}]}]}

Используй только те методы и только на тех объектах, о которых прямо сейчас идет речь, которые нужны для изменения и о которых попросил пользователь

Не вызывай методы для примера - это реально изменит JSON!

Если в списке доступных методов нет нужного, не придумывай и не предлагай замену, а просто откажи в выполнении такого изменения.

Изменяй только те объекты, о которых идет речь, не изменяй те которые не просят.
Используй только доступные методы и параметры.

Убедись что JSON валидный.
Убедись что ID/параметр и тд - валидные.

JSON состояние (объекты и доступные действия):
{{#STATE#}}

И так, после того как мы запустим наш проект, посредством рефлексии будут найдены все объекты с компонентами, где есть тэг AI, они будут собраны в кеш на основе instanceId игровых объектов и всё это веселье превратится в стэйт в виде JSON, который мы скормим нашей текстовой модели.

Ну а дальше просто добавляем юзерский ввод - типа "подвинь куб налево", "покрась всё в зеленый", "продай все товары дешевле 200", "не стреляй, давай дружить".

На этом всё, давайте уже добавлять голосовое управление :)

Теги:
Хабы:
Всего голосов 3: ↑2 и ↓1+3
Комментарии8

Публикации

Работа

Ближайшие события