** Disclamer: Saya tidak hebat dalam menulis dokumentasi, jangan ragu untuk membuka masalah jika Anda membutuhkan lebih banyak dukungan tentang cara menggunakan **
Asisten pribadi Anda. Cyrano adalah model bahasa besar yang memiliki akses ke satu set alat yang dapat dipilih untuk digunakan kapan pun mereka dibutuhkan untuk menjawab pengguna. Namanya berasal dari karakter teater Prancis Cyrano de Bergerac oleh Edmond Rostand.
Cyrano menggunakan model OpenAI terakhir: GPT-3.5-turbo-0613 (lebih cepat) atau GPT-4-0613 (lebih pintar). Mereka memiliki akses ke fungsi openai. Repo didasarkan pada kerangka kerja Langchain.
TODO: Tambahkan contoh dan/atau video
Cyrano menggunakan python-chess untuk menjaga keadaan dewan catur internal sepanjang masa. Ketika mendengar langkah catur dalam bahasa alami dalam percakapan, itu menerjemahkannya ke representasi aljabar yang sesuai dan memainkannya di papan python-chess internal. Ini menggunakan stockfish selama 0,1 detik untuk memutuskan apa yang akan dimainkan sebagai tanggapan. Papan kemudian disimpan sebagai Fen dalam file JSON sehingga Anda dapat melanjutkan permainan Anda kapan saja di masa depan.
Cyrano memiliki akses ke 3 tindakan terkait catur:
Cyrano menyimpan pesan terakhir hingga sejumlah token (default 1500) di jendela konteksnya.
Berdasarkan makalah agen generatif: simulacra interaktif perilaku manusia oleh Park, et. al.
Memori jangka panjang menggunakan toko vektor tertimbang waktu. Setiap kali percakapan melebihi 1500 token, pesan tertua dirangkum, divektorisasi (menggunakan model Transformers Kalimat) dan disimpan dalam database Vector Store (Qdrant). Setiap kali Cyrano menyimpan memori, itu mencetak gol dari 10 tentang seberapa mengesankan mereka. Setiap memori adalah teks pendek, vektor yang sesuai, pentingnya_score, objek datetime dibuat, dan objek datetime last_accessed_at.
Saat runtime, Cyrano mengambil 5 kenangan teratas yang paling relevan dan menambahkannya ke pesan pengguna terakhir. Saat memilih ingatan yang paling relevan, ia menggunakan kesamaan semantik, tertimbang berdasarkan usia memori, menggunakan rumus: semantic_similarity + (1 - decay_rate) ** hours_passed . Yang semantik_similarity adalah jarak cosinus antara vektor, Decay_rate mewakili seberapa cepat ingatan kehilangan relevansi, dan jam_passed adalah delta antara masa kini dan last_accessed_at.
Anda dapat menggunakan cyrano sebagai agen hanya teks dengan mengatur variabel suara menjadi false di src/main.py. Saya memilih untuk melakukannya, input akan menjadi input() dan output akan menjadi teks.
Jika Anda memilih untuk berinteraksi dengan menggunakan suara dan telinga, Anda perlu menggunakan landak untuk deteksi Wake Word. Untuk ini "Alexa" atau "Hei Google" ini setara, saya hanya memilih "Cyrano". Setiap kali Anda ingin berinteraksi dengan model, Anda dapat mengatakan namanya dengan keras, tunggu bip, dan mulailah berbicara.
Catatan: Kata bangun saat ini ditetapkan dengan aksen Prancis. Cukup meregenerasi dari situs web landak dalam bahasa lain jika diperlukan.
Suara direkam menggunakan perpustakaan pidato. Setelah mendengar keheningan, itu akan berhenti merekam dan mengirim file suara ke Openai Whisper API yang akan mengirimkan kembali teks yang ditranskripsikan.
Cyrano dapat menggunakan 3 opsi TTS:
pyttsx3 yang gratis dan memiliki suara robot tetapi dapat diterima di windows.
Google Cloud TTS Opsi Kualitas/ Harga yang Sangat Baik IMO. Bekerja dengan baik di OS apa pun.
Eleven Labs kualitas suara terbaik, tetapi versi gratisnya terbatas dan versi berbayar tidak menawarkan karakter yang cukup per bulan.
Karena saya membutuhkan Cyrano untuk berlari di raspberry, menginginkan kualitas yang baik, dan volume tinggi, jadi tidak terlalu mahal, saya memilih Google TTS. Saya meninggalkan semua fungsi untuk 3 opsi di src/sound_utils.py. Jangan ragu untuk menggunakan yang paling cocok untuk Anda. Untuk Google atau sebelas laboratorium, Anda perlu menambahkan tombol API di file .env.
Kloning repo, lalu buat file .env dengan semua API_Key dan prompt sistem yang berisi berikut ini:
Contoh Prompt Sistem (identitas model):
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."
Kunci API Openai
Kunci API Pencarian Google
OptionNal: Kunci API Pencarian Google
Instal Perpustakaan yang Diperlukan: pip install -r requirements.txt
Luncurkan Aplikasi: python src/main.py
Saat memulai aplikasi harus memainkan beberapa catatan. Katakan "Cyrano" ketika Anda ingin berinteraksi dengannya, bunyi bip akan memberi tahu bahwa itu mendengarkan dan yang lain ketika mendeteksi keheningan dan berhenti menyalin.