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

Сразу что бы попробовать это у себя - 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", "не стреляй, давай дружить".

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

Комментарии (8)


  1. janvarev
    30.03.2024 12:53

    Голосовое управление можно взять например из опенсорс голосового помощника Ирина.

    Плагином распознавать команду, и отправлять в Unity по какому-нибудь REST.


    1. KoIIIeY Автор
      30.03.2024 12:53

      Да, я пробовал whisper - и считаю что он работает очень хорошо.

      Хотя меня больше интересует реалтайм распознавание, в том числе и для этого тестового проекта, а там всё как то сложнее с опенсорсом


      1. janvarev
        30.03.2024 12:53

        Посмотрите в примере выше - там используется отечественный опенорсный VOSK, он вполне себе риалтаймовый, распознавание идет по мере поступления аудио.


        1. KoIIIeY Автор
          30.03.2024 12:53

          Спасибо, гляну, можно много прикольных штук на таком наборе сделать


  1. Igor_Sib
    30.03.2024 12:53

    Круто, идея интересная. Только лучше поменять Windows-1251 на UTF-8 в тегах и readme, если не сложно, на маке не отображается.


    1. KoIIIeY Автор
      30.03.2024 12:53

      Хм, я от компа уже ушел, но гляну что там с кодировкой как вернусь.

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


    1. maxcat
      30.03.2024 12:53

      Только лучше поменять мак на виндовс, если не сложно)0)

      А вообще разве веббраузеры не умеют разруливать кодировку? На андроиде вот нет проблем


      1. KoIIIeY Автор
        30.03.2024 12:53
        +1

        я все равно уже докинул конфиг для студии с утф-8 и файлы пересохранил, вроде верно