Skip to content

snflyer/Amadeus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AMDS-RE (Amadeus) 项目说明

项目来源与上游说明

本仓库是基于原开源项目 Kur1oR3iko/AMDS-RE 的个人修改版。由于本仓库不是通过 GitHub Fork 方式发布,因此在这里明确保留上游来源、原作者信息和资源来源说明。

原项目说明:

未来装置研究所最新力作,爱来自Kurio

B站: https://b23.tv/24zTirI

本修改版主要在模型接入、CC Switch 支持、Vocu 音频链路、图片附件、永久记忆、设置界面、日志脱敏、.gitignore 和文档说明等方面做了调整。原项目作者与资源归属不因本仓库的修改而改变。

e7679063-aa0c-4ab3-a959-b3983a75b161

灵感来源

这个项目的灵感来源于《命运石之门》中的 Amadeus 系统 —— 那个可以和牧濑红莉栖的 AI 对话的系统。

原版的 Amadeus 手机软件早就已经不能用了,而且说实话,那个版本根本谈不上智能。而且正如我所说,我不是个计算机领域的专家,网上其他大佬搓出来的手工 Amadeus 效果很好但是太复杂我操作不明白,于是我就自己搓了一个简化版(笑)

上游原项目说明

  • 所有表情和预设音频都是从原版 Amadeus 手机软件中解包提取的(预设音频出现的概率默认是 30%,其余由 AI 现场生成)。
  • 保留了原版的视觉和听觉体验。
  • 核心 AI、双语回复、语音生成、设置和记忆功能由本项目重新实现。

使用方法(简版)

  1. 去火山引擎注册账号,申请一个可用于火山方舟 / 豆包模型的 API Key。
  2. https://www.vocu.studio 注册账号,在 assets/audio/ 文件夹里挑一个时间稍长的语音复刻克里斯蒂娜音色,复制角色 ID,然后申请一个 Vocu API Key。
  3. 启动软件,在设置中填入模型和 Vocu 配置即可。

我复刻的克里斯蒂娜音频还在审核中,审核完后你们应该可以直接套用我的结果。

fcf5478d-3041-4c38-a0fd-24ed0f2eec8b

当前实现功能

角色系统

  • 丰富的表情:克里斯蒂娜有多种预设表情(开心、生气、害羞、惊讶、烦恼、侧身等),AI 回复中的情绪标签会驱动立绘切换。
  • 原版预设语音:保留从原版 Amadeus 手机软件中解包提取的预设音频,并支持按设置概率触发。
  • 嘴部动画:本地预设音频、Vocu 生成音频和纯文本日语字幕都会尽量同步嘴部动画。
  • 启动体验:包含启动画面、启动音效和启动问候;启用永久记忆时会跳过启动问候,避免和历史加载冲突。

对话系统

  • AI 对话:默认支持火山方舟 / 豆包模型,也支持 Ollama、Deepseek 和 CC Switch。
  • 多模型接入
    • 默认:Volcengine / Doubao Chat Completions。
    • Ollama:本地 OpenAI Chat Completions 兼容接口,默认 URL 可填 http://localhost:11434
    • Deepseek:Deepseek OpenAI 兼容 Chat Completions。
    • CC Switch:通过本地中转调用 OpenAI Responses API。
  • 中日双语输出:模型回复期望格式为 [emotion]Japanese|Chinese,左下角显示日语字幕,右侧聊天框显示中文。
  • 流式文本显示:文本模式下会流式展示中文回复,同时提前更新日语字幕。
  • 图片附件:输入框左侧可上传图片(png/jpg/jpeg/bmp/gif),图片只随当前请求发送;历史记录会保存为文本占位,避免把 base64 写入本地记忆。
  • 永久记忆:可在设置中启用。启用后会从本地加载并保存聊天历史;关闭时会清理保存的历史。未启用永久记忆时,内存对话会限制在约 200 条消息内。

音频系统

  • Vocu TTS:支持通过 Vocu 生成日语语音,可配置 API Key、声音 ID、异步生成和 Flash 低延迟模式。
  • 生成链路:启用异步模式时会优先尝试 simple-generate 低延迟实时接口;未拿到可用音频时回退到异步任务创建与轮询;任务生成成功后可播放普通音频 URL 或流式 URL。
  • 网络播放回退:远程流优先使用 miniaudio 的低延迟网络流播放器;失败时会尝试缓存到本地并回退到 Qt / pygame 路径播放。
  • 本地预设播放:本地预设音频通过 pygame 在线程中播放,并通过信号同步嘴部动画状态。

配置系统

  • 设置窗口:统一配置模型类型、模型名称、API Key、最大 tokens、音频模式、预设音频概率、永久记忆、Vocu 选项和点数查询。
  • 本地配置:使用 QSettings 写入应用配置目录下的 settings.ini,API Key 和历史也保存在本地配置目录。
  • 私有状态不入库settings.iniconfig.jsonconversation_history.jsonvocu_cache/、运行日志和 logs/ 都属于本地私有状态,不应该提交到 GitHub。

工作原理

整体流程

flowchart TD
    A[用户输入 / 图片附件] --> B[ChatWidget 处理]
    B --> C[ChatWorker 后台线程]
    C --> D{模型类型}
    D -->|默认| E[火山方舟 / 豆包 Chat Completions]
    D -->|Ollama| F[本地 OpenAI 兼容 Chat Completions]
    D -->|Deepseek| G[Deepseek Chat Completions]
    D -->|CC Switch| H[OpenAI Responses API]
    E --> I[解析 emotion + 日语 + 中文]
    F --> I
    G --> I
    H --> I
    I --> J[更新立绘 / 日语字幕 / 中文聊天框]
    J --> K{音频模式?}
    K -->|否| L[文本嘴部动画]
    K -->|是| M[Vocu simple-generate / 异步任务]
    M --> N{拿到流式或普通音频?}
    N -->|是| O[miniaudio 网络流 / 缓存 / Qt或pygame回退]
    N -->|否| P[仅显示文本并恢复输入]
    O --> Q[播放并同步嘴部动画]
Loading

关键模块

1. AI 与提示词

src/services/ai_manager.py 是模型适配和对话历史管理中心;角色/persona 提示词从 assets/prompts/kurisu_amadeus_skill.md 加载,由 src/core/character_skill.py 派生系统提示词、双语生成、翻译、预设选择和情绪选择提示词。

2. 回复解析

src/core/reply_parser.py 负责解析 [emotion]Japanese|Chinese 格式,并提供图片历史清洗逻辑,避免把临时图片 payload 保存进长期历史。

3. UI 与后台线程

src/ui/main_window.py 管理主窗口、设置保存和 AI 管理器重建;src/ui/chat_widget.py 协调输入、附件、流式回复、字幕、音频和播放状态;src/services/workers.py 负责把模型和音频生成放到 Qt 后台线程中执行。

4. 音频播放

src/services/audiogenerate.py 对接 Vocu 的实时生成、任务生成、轮询和音频缓存;src/services/audio_player.py 提供本地预设播放和低延迟网络流播放;ChatWidget 中还有 Qt / pygame 的播放回退逻辑。

技术栈

  • 语言:Python 3.13
  • 桌面 UI:PyQt6
  • 模型 SDK / HTTP:openai、requests
  • 默认模型服务:火山方舟 / 豆包
  • 可选模型服务:Ollama、Deepseek、CC Switch(OpenAI Responses API)
  • 语音生成:Vocu.studio
  • 音频播放:pygame(本地预设)、miniaudio(可选网络流低延迟)、PyQt6 QtMultimedia / QMediaPlayer 回退
  • 图像处理:Pillow
  • 打包工具:PyInstaller

项目结构

AMDS-RE/
├── src/
│   ├── main.py                  # 程序入口,启动日志、SplashScreen、MainWindow
│   ├── core/                    # 核心配置、资源路径、提示词和回复解析
│   │   ├── app_config.py        # 默认模型、Deepseek/CC Switch/Vocu 默认配置
│   │   ├── character_skill.py   # 角色 skill 加载和提示词生成
│   │   ├── reply_parser.py      # 双语回复解析、情绪规范化、历史清洗
│   │   └── resources.py         # 资源目录、配置目录、PyInstaller 路径兼容
│   ├── services/                # AI、音频和后台服务
│   │   ├── ai_manager.py        # 模型适配、聊天历史、翻译和预设选择
│   │   ├── audiogenerate.py     # Vocu TTS 生成、轮询、缓存
│   │   ├── audio_player.py      # pygame 本地播放、miniaudio 网络流播放
│   │   ├── voice_dialog.py      # 预设语音匹配、显示文本和表情映射
│   │   └── workers.py           # Qt 后台线程与信号
│   ├── ui/                      # PyQt 界面组件
│   │   ├── main_window.py       # 主窗口、设置生命周期、配置保存
│   │   ├── chat_widget.py       # 聊天界面、图片附件、流式回复、音频协调
│   │   ├── character.py         # 角色立绘、字幕和嘴部动画
│   │   ├── settings_dialog.py   # 设置窗口
│   │   ├── splash_screen.py     # 启动画面
│   │   └── debug_window.py      # 调试日志窗口
│   └── utils/                   # 通用工具
│       ├── debug_log.py         # 运行日志缓冲与脱敏辅助
│       ├── image_utils.py       # 图片压缩、编码和 data URL
│       └── thread_pool.py       # 共享 IO 线程池
├── assets/
│   ├── audio/                   # 原版解包提取的预设音频和启动音
│   ├── images/                  # 原版解包提取的角色表情、背景、图标等
│   └── prompts/                 # Kurisu/Amadeus 角色 skill 与提示词
├── vocu音频文档/                # Vocu 接口参考文档
├── build.py                     # PyInstaller one-dir 打包脚本
├── README.md                    # 项目说明
└── 修改说明.md                  # 当前修改概览

运行与打包

从源码运行

python src/main.py

语法检查

python -m compileall src

打包

python build.py

build.py 会检查并安装缺失的运行/构建依赖(PyQt6openaipygamerequestsPillowminiaudiopyinstaller),然后使用 PyInstaller 生成平台对应产物:

Windows: dist/AMDS/        # 包含 AMDS.exe
macOS:   dist/AMDS.app    # 可拖到 Applications 后右键打开
其他:    dist/AMDS/

注意:当前打包入口是 python build.py,不是旧的 build.bat;Windows 输出是 dist/AMDS/ 文件夹,不是单文件 dist/AMDS.exe。macOS 未做签名和公证,首次运行如果提示“无法验证开发者”,请右键应用选择“打开”。

首次使用

  1. 从源码运行 python src/main.py;或打包后在 Windows 运行 dist/AMDS/AMDS.exe,在 macOS 运行 dist/AMDS.app
  2. 打开设置,选择模型类型:默认火山方舟 / 豆包、Ollama、Deepseek 或 CC Switch。
  3. 按所选模型填入 API Key、URL 和模型名。
  4. 如需语音,启用音频模式并填入 Vocu API Key 与声音 ID。
  5. 按需调整最大 tokens、预设音频概率、Vocu 异步 / Flash、永久记忆。
  6. 回到主界面,输入文字或添加图片附件开始对话。

本地文件与 GitHub 注意事项

以下文件属于本地私有状态或构建产物,不应提交到 GitHub:

  • settings.ini
  • config.json
  • conversation_history.json
  • vocu_cache/
  • runtime.log*.loglogs/
  • build/dist/*.spec
  • .claude/ 本地会话文件

日志中涉及 API Key、Authorization、音频 URL 查询参数等内容时,应保持脱敏;项目中相关打印会尽量只输出摘要或隐藏敏感片段。

本修改版变更概览

相对上游项目,本仓库当前主要整理和增强了以下内容:

  • 将主流程按 src/coresrc/servicessrc/uisrc/utils 拆分,便于继续维护。
  • 模型侧从单一豆包配置扩展为默认火山方舟 / 豆包、Ollama、Deepseek 和 CC Switch。
  • 聊天侧补充图片附件和永久记忆;图片只随当前请求发送,历史中保存为文字占位。
  • 音频侧整理 Vocu simple-generate、异步任务、Flash 开关、网络流播放、缓存和 Qt / pygame 回退链路。
  • 打包入口更新为 python build.py,输出目录为 dist/AMDS/
  • .gitignore 覆盖本地配置、API Key、对话历史、运行日志、Vocu 缓存、构建产物和 Claude Code 会话文件。
  • 运行日志中涉及 Vocu 音频 URL 和 API 响应的输出已改为摘要或脱敏形式。

以上是修改版现状说明,不代表对项目做过完整安全审计;公开发布前仍应人工确认没有真实密钥、完整私有日志、个人聊天历史或缓存音频被纳入提交。

未来计划

  • 实现语音输入。
  • 添加更多表情和动作。我不是个绘画领域的专家,所以我会尝试使用 AI 生图。
  • 继续优化 AI 对话质量,目前的提示词我其实没有完全满意。
  • 添加记忆功能,让红莉栖记住上一次软件关闭前的对话。
  • 添加更多语言模型选项。
  • 继续优化 Vocu 音频延迟和稳定性。

结语

这个项目虽然不大,但包含了原作者和本修改版维护者的许多心血。虽然原版的 Amadeus 已经不能用了,但我希望这个复刻版本能给你带来一点快乐。这个修改版尽量保留上游项目的体验和署名,同时补充了一些模型、语音、设置和安全卫生方面的调整。如果你想直接操作代码,可以从 src/main.py 看入口,再按功能去对应模块里改。

如果有任何问题或建议,欢迎告诉我!


El Psy Kongroo

About

Amadeus of Steins;Gate

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages