просто посмотрите видео, оно без звука
Сразу что бы попробовать это у себя — 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», «не стреляй, давай дружить».
На этом всё, давайте уже добавлять голосовое управление 🙂
ссылка на оригинал статьи https://habr.com/ru/articles/804091/
Добавить комментарий