** Disclamer:我不太擅長編寫文檔,如果您需要更多關於如何使用的支持,請隨時開放問題**
您的私人助理。 Cyrano是一種大型語言模型,它可以訪問一組工具,可以在需要時選擇使用以回答用戶。它的名字來自Edmond Rostand的法國劇院角色Cyrano de Bergerac。
Cyrano使用了最後的OpenAI型號:GPT-3.5-Turbo-0613(更快)或GPT-4-0613(更智能)。他們可以訪問OpenAI功能。存儲庫基於Langchain框架。
TODO:添加示例和/或視頻
Cyrano使用Python-Chess一直保持內部國際象棋板狀態。在對話中聽到自然語言的象棋動作時,它將其轉化為相應的代數表示,並在其內部Python-Chess板上播放。它使用Stockfish持續0.1秒來決定要播放什麼。然後將板保存為JSON文件中的FEN,以便您將來可以隨時恢復遊戲。
Cyrano可以訪問3個與國際象棋相關的行動:
Cyrano將最後一條消息存儲在其上下文窗口中,將最後一條消息存儲到一定量的令牌(默認1500)。
基於論文生成劑:Park等人的人類行為的交互式模擬。 al。
長期內存使用時間加權的矢量存儲。每當對話超過1500個令牌時,總結了最古老的消息,矢量化(使用句子變形金剛模型)並存儲在矢量存儲數據庫(QDRANT)中。每當Cyrano存儲一個記憶時,它就會在10分中為他們的記憶而得分。每個內存都是一個簡短的文本,相應的向量,Quienctance_score,一個創建的dateTime對象和last_accessed_at dateTime對象。
在運行時,Cyrano獲取了前5個最相關的回憶,並將其添加到最後一個用戶消息中。當選擇最相關的記憶時,它使用語義相似性(按內存的年齡加權),使用公式: semantic_similarity + (1 - decay_rate) ** hours_passed 。對於向量之間的餘弦距離,decay_rate代表記憶失去相關性的速度,而在當前和last_accessed_at之間的三角洲。
您可以通過將聲音變量設置為src/main.py中的false,將Cyrano用作僅文本代理。我選擇這樣做,輸入將是python input() ,輸出將是文本。
如果您選擇使用語音和耳朵與它進行交互,則需要使用豪豬進行喚醒單詞檢測。對於此“ Alexa”或“ Hey Google”同等學歷,我只是選擇了“ Cyrano”。每當您想與模型互動時,您都可以大聲說出它的名字,等待嗶嗶聲,然後開始說話。
注意:喚醒詞當前設置為法國口音。如果需要,只需用另一種語言將其從豪豬網站重新生成。
使用語音識別庫錄製聲音。聽到沉默後,它將停止錄製並將聲音文件發送到Openai Whisper API,該文件將寄迴轉錄的文本。
Cyrano可以使用3個TTS選項:
Pyttsx3是免費的,並且在窗戶上具有機器人但可以接受的聲音。
Google Cloud TTS非常好/價格選項IMO。在任何操作系統上都可以正常工作。
11個實驗室的聲音質量最佳,但免費版本有限,付費版本每月沒有足夠的角色。
由於我需要Cyrano在覆盆子上跑步,想要高質量和高量,所以不太昂貴,所以我選擇了Google TTS。我在src/sound_utils.py中留下了3個選項的所有功能。隨意使用最適合您的一種。對於Google或11個實驗室,您需要在.env文件中添加API鍵。
克隆回購,然後使用所有api_key創建一個.env文件,並包含以下內容的系統提示:
系統提示的示例(模型的身份):
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搜索API密鑰
選項:Google搜索API密鑰
安裝所需的庫: pip install -r requirements.txt
啟動應用程序: python src/main.py
啟動應用程序時,應該彈奏一些音符。當您想與之互動時,說“ Cyrano”,嗶嗶聲會通知它正在聆聽,而當它檢測到沉默並停止轉錄時,它是在聽。