Kevin aac484463d feat(api): 拆分章节物化与 Story 后处理,并加固 Redis 锁与腾讯 ASR
回忆录 Story 流水线(同步)
- 同步路径仅写入 Story 与章节关联,改为 mark_chapter_dirty_sync,不再内联 compose
- 物化由 Celery recompose_chapter 异步完成;compose 不变量与异常时保留 dirty 的语义在 repo 中补充说明
- Evidence:大批次时降低 top_k;路由候选 story 携带 char_count/version_count;append 超长/版本过多时强制新开 story
- 叙事 prompt:relevant_chunks 去重,减少重复证据噪声
- 叙事回退与忠实度 gate:返回 fallback 类型并记录结构化日志(含耗时、JSON 有效性等)

Post-commit 与任务编排
- 新增 post_commit.enqueue_story_post_commit_effects:统一派发 generate_story_image(Redis 去重)、延迟 recompose_chapter、可选 memory compaction
- memoir_tasks / story_service / story_image_tasks 改为调用 post-commit 入口;主图回填后按关联章节重算并调度物化与 compacs(锁委托、Redis 单例、ASR to_thread)
- 更新 test_narrative_pipeline 以适配 _apply_narrative_fallbacks 返回值
2026-03-30 11:53:04 +08:00
2026-03-19 14:36:40 +08:00
2026-02-13 10:05:20 +08:00
2026-03-25 17:40:04 +08:00

岁月时书 (Life Echo)

一个基于实时 WebSocket 长连接的智能语音对话回忆录生成系统

📖 项目简介

岁月时书 (Life Echo) 是一个创新的回忆录生成平台,通过 AI 智能对话引导用户回顾人生历程,并将口语对话自动整理为结构化的回忆录章节,最终生成精美的 PDF 电子书。

后端侧:会话轮次以 DB conversation_messages 为真源、Redis 为缓存;实时对话编排统一走 ChatOrchestrator;图像任务为 generate_story_image(正文)与 generate_chapter_cover(章节封面)。详见 api/README.md

核心功能

  • 🎙️ 实时语音对话 - 基于 WebSocket 的实时双向语音交互
  • 🤖 智能访谈引导 - AI Agent 根据传记结构动态引导用户讲述人生故事
  • 📝 自动内容整理 - 将口语对话自动整理为优雅的书面语章节
  • 📚 结构化回忆录 - 基于传记结构自动组织章节内容
  • 📄 PDF 导出 - 生成精美的回忆录 PDF 文档
  • 💾 本地数据存储 - Android 端使用 Room 数据库实现离线数据管理

🏗️ 项目结构

life-echo/
├── api/                          # 后端服务FastAPI
│   ├── agents/                  # LangChain Agent对话引导、记忆整理
│   ├── database/                # 数据库模型和连接PostgreSQL
│   ├── routers/                 # API 路由REST + WebSocket
│   ├── services/                # 业务服务ASR、TTS、PDF、LLM
│   ├── tasks/                   # Celery 后台任务
│   ├── docs/                    # API 详细文档
│   ├── main.py                  # FastAPI 应用入口
│   └── README.md                # API 服务文档
│
└── docs/                        # 项目文档

🚀 快速开始

前置要求

  • 后端开发
    • Python 3.10+
    • Docker & Docker Compose用于 PostgreSQL、Redis
    • LLM API KeyDeepSeek 或兼容 OpenAI 的服务)

后端服务启动

详细步骤请参考 api/README.md

# 1. 进入 API 目录
cd api

# 2. 安装依赖
uv sync --dev

# 3. 配置环境变量(创建 .env 文件)
# 参考 api/README.md 中的环境变量配置说明

# 4. 启动 PostgreSQL 和 Redis
docker compose -f docker-compose.dev.yml up -d

# 5. 数据库迁移
# uv run alembic upgrade head

# 6. 启动 FastAPI 服务
uv run uvicorn main:app --reload --host 0.0.0.0 --port 8000

# 7. 启动 Celery Worker另一个终端
uv run celery -A tasks.celery_app worker --loglevel=info --pool=solo

数据库 schema 迁移的正式标准是 Alembic当前仓库已引入脚手架api/migrations/*.sql 保留为历史/一次性 SQL 脚本,详情见 api/README.md

后端开发工具链

后端开发环境通过 uv sync --dev 安装开发工具,当前约定如下:

  • ruff:负责 lint + format
  • pytest:统一测试入口
  • pytest-asyncio:负责 async def 测试和异步 fixture
  • pytest-cov:负责覆盖率统计
  • pyright:负责类型检查,但不替代测试和 lint

常用命令详见 api/README.md

🛠️ 技术栈

后端技术栈

技术 版本 用途
FastAPI 0.115.0 Web 框架REST API 和 WebSocket
LangChain 0.3.7 AI Agent 框架(对话引导、内容整理)
PostgreSQL 17 关系型数据库
SQLAlchemy + Alembic 2.0.36 / 1.18+ ORM 与数据库 schema migration
Redis 7 缓存和会话存储
Celery 5.3 异步任务队列
OpenAI API - ASR语音识别、TTS语音合成
DeepSeek API - LLM大语言模型
ReportLab + WeasyPrint - PDF 生成

📚 文档导航

🔐 认证系统

系统使用 JWTJSON Web Token进行认证采用访问令牌Access Token+ 刷新令牌Refresh Token机制

  • 访问令牌:有效期 2 小时,用于 API 请求认证
  • 刷新令牌:有效期 30 天,用于刷新访问令牌

详细认证流程请参考 api/README.md#认证系统

🌟 功能特性

已实现功能

  • 用户注册与登录(手机号 + 密码)
  • JWT 认证系统(访问令牌 + 刷新令牌)
  • 实时 WebSocket 语音对话
  • AI 智能对话引导(基于传记结构)
  • 语音识别ASR和语音合成TTS
  • 对话内容自动整理为章节
  • 回忆录章节管理
  • PDF 导出功能
  • Android 本地数据存储Room
  • 离线数据同步
  • 用户套餐与订单管理
  • 常见问题FAQ和反馈系统

开发中功能

  • 🔄 更多传记结构模板
  • 🔄 图片上传与管理
  • 🔄 章节编辑功能
  • 🔄 多语言支持

🔒 安全注意事项

  1. 环境变量安全:确保 .env 文件不被提交到版本控制
  2. SECRET_KEY 安全:生产环境必须使用强随机字符串
  3. CORS 配置:生产环境应限制为特定域名
  4. API Key 安全:妥善保管 LLM API Key
  5. 密码安全:密码使用 bcrypt 哈希存储

🤝 贡献指南

  1. Fork 本项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

MIT License

📮 联系方式

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送反馈(应用内反馈功能)

岁月时书 - 让每一段人生故事都被温柔记录

Description
No description provided
Readme 14 MiB
Languages
Python 67.9%
TypeScript 25.4%
HTML 3.4%
CSS 1.4%
Shell 1.3%
Other 0.5%