** 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”,哔哔声会通知它正在聆听,而当它检测到沉默并停止转录时,它是在听。