- Python 端负责语音输入、通用对话 API、Edge TTS 播报。
- C# 端负责桌面悬浮宠物的表情、气泡、拖拽、关闭按钮和右键菜单。
- Python 端通过桥接服务把“正在思考 / 正在回复 / 情绪 / 气泡文本”推给 C# 端。
& 'D:\anaconda3\shell\condabin\conda-hook.ps1'
conda activate petpip install -r requirements.txt在 config.py 中配置 OpenAI-compatible chat completions 接口:
CHAT_BASE_URL = "https://your-api-host/v1/chat/completions"
CHAT_MODEL = "your-chat-model"API Key 可以写入CHAT_API_KEY。
在 config.py 中修改:
PET_NAME = "小鲸"
WAKE_TIMEOUT = 15语音服务默认只响应唤醒词。说出“小鲸”后,会进入 15 秒连续对话窗口;如果这段时间内没有新对话,会自动休眠并重新等待唤醒词。
python src/pet_bridge.py这个服务监听 http://localhost:9101,给 C# 桌宠提供状态接口。
python voice_pet.py先编译,再运行生成的程序:
& 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe' /target:winexe /out:DesktopPet.exe /reference:System.Drawing.dll /reference:System.Windows.Forms.dll /reference:System.Net.Http.dll src\DesktopPet.cs
.\DesktopPet.exe桌宠右上角有一个可点击的关闭按钮;也可以右键桌宠选择“退出桌宠”。
- 用户说出唤醒词。
voice_pet.py进入短暂唤醒状态,并把用户语音文本发给 chat_api.py。chat_api.py调用CHAT_BASE_URL指向的通用对话 API。voice_pet.py把状态写入桥接服务:/think、/bubble、/reply、/emotion。- src/DesktopPet.cs 轮询
/status,实时切换表情和气泡。 - 右键点击 C# 桌宠可以手动开启/关闭语音交互。
- voice_pet.py - 语音服务主入口,负责语音输入、对话、TTS,以及把状态推给桥接服务。
- chat_api.py - 通用 OpenAI-compatible 对话 API 封装。
- edge_tts_handler.py - 微软 Edge TTS 播报封装。
- voice_handler_local.py - 本地离线语音识别处理器。
- search_api.py - 搜索查询识别与 DuckDuckGo 搜索封装。
- config.py - 全局配置:API、桌宠名称、唤醒时间、桥接地址。
- src/DesktopPet.cs - C# 桌宠主程序,负责窗口绘制、皮肤、表情和气泡展示。
- src/pet_bridge.py - 桥接服务,接收 Python 端推送并向 C# 桌宠输出状态。
- skin_generator/user_defined_skin.cs - 用户自定义图片缩放工具。
用户把想自定义的表情原图放在 skin_src/ 下,按情绪命名:
normal.pnghappy.pngsurprised.pngsleepy.pngthinking.pngshy.pngsad.pngangry.pngcontempt.png
图片建议使用透明背景 PNG,角色主体居中。运行 skin_generator/user_defined_skin.cs 编译出的工具后,会把用户原图统一缩放到 skin_src/skin_src_resized/。
用户可以只提供部分表情;没提供的表情会回退到桌宠代码绘制的默认形象。桌宠本体会给静态图片自动加轻微漂浮、呼吸、思考抖动等动态效果。