** Обеслокатель: я не очень хорош в написании документации, не стесняйтесь открывать проблему, если вам нужна дополнительная поддержка о том, как использовать **
Ваш личный помощник. Cyrano - это большая языковая модель, которая имеет доступ к набору инструментов, которые он может использовать, когда они необходимы для ответа на пользователя. Его название происходит от французского театрального персонажа Сирано де Бержерека Эдмонда Ростанда.
Cyrano использует последние модели OpenAI: GPT-3.5-Turbo-0613 (быстрее) или GPT-4-0613 (умнее). У них есть доступ к функциям OpenAI. Репо основан на рамках Лэнгчейна.
TODO: добавьте примеры и/или видео
Cyrano использует Python-chess, чтобы постоянно поддерживать внутреннее шахматное состояние. При услышании шахмат на естественном языке в разговоре он переводит его на соответствующее алгебраическое представление и играет на своем внутреннем доске Python-Cess. Он использует Stockfish в течение 0,1 секунды, чтобы решить, что играть в ответ. Затем доска сохраняется как FEN в файле JSON, чтобы вы могли возобновить свою игру в любое время в будущем.
Cyrano имеет доступ к 3 действиям, связанным с шахматами:
Cyrano хранит последние сообщения до определенного количества токенов (по умолчанию 1500) в окне контекста.
Основываясь на бумажных генеративных агентах: интерактивная симулякра человеческого поведения от парка, et. ал.
Долгосрочная память использует взвешенную векторную магазин. Всякий раз, когда разговор превышает 1500 токенов, самые старые сообщения суммируются, векторизуются (используя модель трансформаторов предложений) и хранятся в базе данных векторного хранилища (Qdrant). Каждый раз, когда Сирано хранит память, он забивает их из 10 из -за того, насколько они запоминаются. Каждая память представляет собой короткий текст, соответствующий вектор, значение attavity_score, объект create_at dateTime и объект Last_Acced_at DateTime.
Во время выполнения Cyrano приносит 5 самых важных воспоминаний и добавляет их к последнему пользовательскому сообщению. При выборе наиболее актуальных воспоминаний он использует семантическое сходство, взвешенное по возрасту памяти, используя формулу: semantic_similarity + (1 - decay_rate) ** hours_passed Для чего Semantic_similality - это косинусное расстояние между векторами, Decay_Rate представляет, как быстро воспоминания теряют актуальность, а часы_ - это дельта между настоящим и последним_акцином_ат.
Вы можете использовать Cyrano в качестве агента только текста, установив звуковую переменную на false в src/main.py. Я выбираю это, входные данные будут Python input() , а выходы будут текстами.
Если вы решите взаимодействовать с ним, используя голос и ухо, вам нужно будет использовать дикобраз для обнаружения Wake Word. Для этого эквивалента «Alexa» или «Hey Google» я просто выбрал «Cyrano». Всякий раз, когда вы хотите взаимодействовать с моделью, вы можете сказать ее имя вслух, дождитесь звукового сигнала и начните говорить.
Примечание. В настоящее время слово Wake Sword установлено с французским акцентом. Просто восстановите его с сайта Porcupine на другом языке, если это необходимо.
Звук записывается с использованием библиотеки признания речи. Услышав молчание, он прекратит запись и отправит звуковой файл в API Openai Whisper, который отправит обратно транскрибированный текст.
Cyrano может использовать 3 варианты TTS:
Pyttsx3, который является бесплатным и имеет роботизированный, но приемлемый голос в Windows.
Google Cloud TTS очень хорошее качество/ вариант цены IMO. Хорошо работает на любой ОС.
Лучшее качество звука Eleven Labs, но бесплатная версия ограничена, и платная версия не предлагает достаточно символов в месяц.
Поскольку мне нужно было, чтобы Сирано работал на малине, хотел хорошего качества и большого объема, так что не слишком дорого, я выбрал Google TTS. Я оставил все функции для 3 параметров в src/sound_utils.py. Не стесняйтесь использовать тот, который подходит вам лучше. Для Google или Eleven Labs вам нужно будет добавить ключ API в файл .env.
клонировать репо, затем создайте файл .env со всеми API_KEY и системой, содержащей следующее:
Пример подсказки системы (идентичность модели):
SYS_PROMPT="You are Cyrano, a personal assistant with the personality of Cyrano de Bergerac. Today's date is {current_date}. You're on {user_name}'s desk. {user_description}. {user_name}'s messages are recorded in sound and then transcribed into text. It may happen that the sound is incorrectly transcribed. You regularly reply in a sarcastic and humorous manner."
OpenAI API -ключ
Google Search API -ключ
Опции: Google Search API -ключ
Установите требуемые библиотеки: pip install -r requirements.txt
Запустите приложение: python src/main.py
При запуске приложения следует воспроизвести несколько заметок. Скажите «Cyrano», когда вы хотите взаимодействовать с ним, звуковой сигнал уведомит, что он слушает, а другой, когда он обнаруживает молчание и прекращает транскрибирование.