VPetLLM 是一个为 VPet-Simulator 设计的插件,它允许你使用各种大型语言模型(LLM)、语音识别(ASR)和文本转语音(TTS)技术与你的虚拟宠物进行深度互动。
- Windows 10/11
- .NET Framework 4.6.2 或更高版本
- VPet-Simulator 主程序
- MPV 播放器(用于 TTS 音频播放)
- 多样的 LLM 提供商支持:
- Ollama: 与在本地运行的 Ollama 模型进行交互。
- OpenAI: 集成 OpenAI 的 GPT 模型。
- Gemini: 连接 Google 的 Gemini 模型。
- Free: 通过免费的公共 API 访问 LLM 服务。
- 丰富的语音交互:
- 文本转语音 (TTS): 让你的宠物用生动的声音说话。支持
OpenAI,GPT-SoVITS,DIY和URL等多种 TTS 服务。 - 语音识别 (ASR): 通过语音与你的宠物交谈。支持
OpenAI,Soniox和Free等 ASR 服务,并可通过快捷键激活。
- 文本转语音 (TTS): 让你的宠物用生动的声音说话。支持
- LLM 驱动的智能行为:
- 动作执行: LLM 可以根据对话内容,驱动宠物做出各种动作,如移动、触摸反馈等。
- 状态感知: LLM 能够感知宠物的当前状态(如饱食度、心情等),并作出相应的回应。
- 购买反馈: 当你为宠物购买物品时,它会给出智能的反馈。
- 灵活的上下文管理:
- 保持聊天上下文: 在整个会话中保持对话的连续性。
- 保存聊天记录: 自动保存你的对话,以便下次启动时可以恢复。
- 按提供商分离聊天记录: 为每个 LLM 提供商维护独立的聊天历史。
- 高级模型设置:
- 温度控制: 调整模型响应的随机性。
- 最大 Token: 设置模型单次响应的最大长度。
- 优化的用户界面:
- 选项卡式布局: 清晰地组织不同 LLM 提供商的设置。
- 可调整的角色设定窗口: 通过拖拽轻松地调整角色设定文本框的大小。
- “未保存”提示: 当有未保存的更改时,提供清晰的视觉提示。
- 强大的插件系统:
- 添加自定义工具: 通过“工具列表”选项卡,添加、删除和配置外部工具。
- 扩展核心功能: 开发者可以创建自己的插件来连接外部 API、执行自定义动作,或为宠物赋予全新的技能。
- 打开 VPet-Simulator 的设置,并进入“MOD Config”选项卡。
- 点击“VPetLLM”以打开插件设置。
- 选择 LLM 提供商: 从下拉菜单中选择你想要使用的 LLM 提供商(Ollama、OpenAI、Gemini 或 Free)。
- 填写提供商设置:
- Ollama: 输入你的 Ollama 服务的 URL(默认为
http://localhost:11434)并选择一个模型。 - OpenAI: 输入你的 API 密钥、API 地址和模型名称。
- Gemini: 输入你的 API 密钥、API 地址和模型名称。
- Free: 无需额外配置。
- Ollama: 输入你的 Ollama 服务的 URL(默认为
- 语音服务 (TTS/ASR):
- 进入 TTS 选项卡,启用并选择你喜欢的 TTS 提供商,并填写相关配置(如 API Key, URL 等)。
- 进入 ASR 选项卡,启用并选择你的 ASR 提供商,配置快捷键和相关 API 信息。
- 角色设定: 在可调整大小的文本框中定义你的虚拟宠物的角色和个性。
- 上下文控制: 根据你的偏好,配置聊天上下文和历史记录的保存选项。
- 高级设置: 如果需要,可以为每个提供商启用并调整高级设置,如温度和最大 Token。
- 工具列表:
- 点击“工具列表”选项卡。
- 点击“添加”按钮以添加一个新的工具。
- 在表格中填写工具的“名称”、“URL”和“API Key”(如果需要)。
- 勾选“启用”复选框以启用该工具。
- 点击“删除”按钮以删除选定的工具。
- 保存: 点击“保存”按钮以应用你的设置。如果有未保存的更改,“未保存”的红色提示将会出现。
- 在 VPet-Simulator 中打开聊天窗口。
- 输入你的消息并按 Enter,或者使用你配置的快捷键进行语音输入。
- 你的虚拟宠物将会使用你配置的 LLM、TTS 和 ASR 服务来与你互动。如果启用了任何工具,它也可能会使用这些工具来提供更丰富、更有用的响应。
VPetLLM 拥有一个强大的插件系统,允许开发者扩展其功能。通过创建自己的插件,你可以:
- 连接外部 API: 获取天气、新闻、股票等实时数据。
- 执行自定义动作: 控制智能家居、发送邮件、或者任何你能想到的事情。
- 增强 AI 的能力: 为你的桌宠赋予全新的、独一无二的技能。
我们为插件开发者提供了一套完整的接口和文档。
插件和外部应用可以通过 LLMEntry 接口直接调用 LLM 服务:
插件调用:
var response = await _vpetLLM.LLMEntry.CallAsync("你的消息");外部应用调用:
var response = await VPetLLM.VPetLLM.Instance.LLMEntry.CallAsync("你的消息");日志示例:
插件调用:
[LLM Call] Plugin:AppLauncher calling LLM
[LLM Call] Message: 启动 notepad...
[LLM Call] Plugin:AppLauncher - Response in 2.34s
外部应用调用:
[LLM Call] ExternalProgram:MyApp.Services.AIService calling LLM
[LLM Call] Message: 分析这段文本...
[LLM Call] ExternalProgram:MyApp.Services.AIService - Response in 1.56s
详细文档请参考 插件开发指南
VPetLLM/
├── Configuration/ # 配置管理模块
│ ├── ISettings.cs # 设置接口
│ ├── SettingsManager.cs # 设置管理器
│ ├── ASRSettings.cs # ASR 配置
│ ├── LLMSettings.cs # LLM 配置
│ ├── TTSSettings.cs # TTS 配置
│ ├── ProxySettings.cs # 代理配置
│ ├── ScreenshotSettings.cs # 截图配置
│ ├── FloatingSidebarSettings.cs # 悬浮侧边栏配置
│ └── TTSCoordinationSettings.cs # TTS 协调配置
├── Core/ # 核心业务逻辑
│ ├── Abstractions/ # 抽象层
│ │ ├── Base/ # 基类(ChatCoreBase/ASRCoreBase/TTSCoreBase)
│ │ └── Interfaces/ # 接口定义(IChatCore/IOCREngine)
│ ├── Cache/ # 缓存管理
│ ├── Data/ # 数据层
│ │ ├── Database/ # 数据库(聊天历史/重要记录)
│ │ ├── Managers/ # 数据管理器
│ │ └── Models/ # 数据模型
│ ├── Engine/ # 引擎(OCR)
│ ├── Integration/ # 集成层
│ │ ├── UnifiedTTS/ # 统一 TTS 系统
│ │ ├── TTSIntegrationLayer.cs # TTS 集成层
│ │ └── UnifiedBubbleFacade.cs # 统一气泡外观
│ ├── Plugin/ # 插件相关
│ ├── Providers/ # 服务提供商实现
│ │ ├── ASR/ # ASR 提供商(OpenAI/Soniox/Free)
│ │ ├── Chat/ # Chat 提供商(OpenAI/Ollama/Gemini/Free)
│ │ └── TTS/ # TTS 提供商(OpenAI/GPT-SoVITS/DIY/URL/Free)
│ ├── Services/ # 核心服务
│ │ ├── ServiceContainer.cs # 服务容器
│ │ ├── SystemMessageProvider.cs # 系统消息提供者
│ │ └── VPetAPIWrapper.cs # VPet API 包装器
│ ├── LLMEntryPoint.cs # **LLM 调用入口点(供插件和外部应用使用)**
│ └── PluginAdapter.cs # 插件适配器
├── Handlers/ # 动作处理器
│ ├── Actions/ # 动作处理器(移动/触摸/购买等)
│ ├── Animation/ # 动画处理器
│ ├── Core/ # 核心处理器(命令解析/结果聚合)
│ ├── Infrastructure/ # 基础设施(处理器注册/限流)
│ ├── State/ # 状态处理器
│ ├── TTS/ # TTS 处理器
│ └── UI/ # UI 处理器
├── Infrastructure/ # 基础设施层
│ ├── Configuration/ # 配置基础设施
│ ├── DependencyInjection/ # 依赖注入
│ ├── Events/ # 事件总线
│ ├── Exceptions/ # 异常处理
│ ├── Logging/ # 日志系统
│ ├── Performance/ # 性能监控
│ ├── Services/ # 基础设施服务
│ └── Validation/ # 验证框架
├── Interfaces/ # 接口定义
│ └── IVPetAPI.cs # VPet API 接口
├── Models/ # 数据模型
│ ├── UnifiedTTS/ # 统一 TTS 模型
│ ├── BubbleDisplayRequest.cs # 气泡显示请求
│ ├── TTSOptions.cs # TTS 选项
│ ├── TTSState.cs # TTS 状态
│ └── ValidationResult.cs # 验证结果
├── Services/ # 应用服务层
│ ├── IASRService.cs # ASR 服务接口
│ ├── IMediaPlaybackService.cs # 媒体播放服务接口
│ ├── IPreprocessingMultimodal.cs # 预处理多模态接口
│ ├── IPurchaseService.cs # 购买服务接口
│ ├── IScreenshotService.cs # 截图服务接口
│ ├── ITTSService.cs # TTS 服务接口
│ ├── IVoiceInputService.cs # 语音输入服务接口
│ ├── MediaPlaybackService.cs # 媒体播放服务实现
│ ├── PreprocessingMultimodal.cs # 预处理多模态实现
│ ├── PurchaseService.cs # 购买服务实现
│ ├── ScreenshotService.cs # 截图服务实现
│ └── VoiceInputService.cs # 语音输入服务实现
├── UI/ # 用户界面
│ ├── Controls/ # 自定义控件
│ ├── Styles/ # 样式资源
│ └── Windows/ # 窗口(设置/调试/截图编辑器等)
├── Utils/ # 工具类
│ ├── Audio/ # 音频工具(MpvPlayer/TTSService)
│ ├── Common/ # 通用工具
│ ├── Configuration/ # 配置工具
│ ├── Data/ # 数据工具
│ ├── Localization/ # 本地化工具
│ ├── Plugin/ # 插件工具
│ ├── System/ # 系统工具
│ └── UI/ # UI 工具
├── Validation/ # 验证层
│ └── ParameterValidator.cs # 参数验证器
├── VPetLLM.cs # **插件主入口**
├── Setting.cs # 设置类
└── GlobalUsings.cs # 全局 using 声明
# 克隆仓库
git clone https://github.com/ycxom/VPetLLM.git
# 使用 Visual Studio 打开 VPetLLM.sln
# 或使用命令行构建
dotnet build VPetLLM.sln项目采用模块化架构设计:
- 依赖注入: 使用
ServiceContainer管理服务依赖 - 处理器模式: 通过
HandlerRegistry统一管理动作处理器 - 接口抽象: 核心功能通过接口定义,便于扩展和测试
- 分层设计: Configuration → Core → Services → Handlers → UI
欢迎通过 Pull Request 为项目做出贡献。
该项目在开发过程中得到了 AI 的辅助。