⚠️ 本页是 v0.1.0 历史变更记录,已作废。最新变更见 CHANGELOG(2026-08-03 V1 重新设计)。本页仅供历史追溯。

alfred-api

个人 AI 助理后端 · 变更日志与交付总结

v0.1.0 2026-08-02 57 tests passing FastAPI · SQLModel · PostgreSQL 16 TDD · vertical slices
12/12
v0.1 需求完成
17
数据表
3
内置技能
8
Action 原语

需求 Cross-Check(ROADMAP v0.1)

#需求状态落地证据
1项目骨架(uv / docker-compose PG16 / .env / Makefile)pyproject.toml, docker-compose.yml, Makefile, .env.example
2配置 + DB session + Alembic 初始化alfred/config.py, alfred/db.py, alembic(4 个 migration)
3实体表 + entity_link + 审计 的 SQLModel 与首迁✓*17 张表已建;软删除 archived_at 替代独立审计表(见偏差)
4Provider 抽象(LLM/Vision/STT)+ OpenAI + Fakealfred/providers/*,FakeProvider 用于测试
5GET /health, GET /v1/llm-pingalfred/main.py, alfred/router/v1.py
68 个 Action 原语alfred/services/executor.py
7技能框架(manifest/registry/render/retry/executor)alfred/skills/_runtime.py, _registry.py
83 个内置技能(extract_job / capture_note / coffee_chat)alfred/skills/{extract_job,capture_note,coffee_chat}
9POST /v1/attachments + STT/visionalfred/router/v1.py, alfred/services/attachments.py
10POST /v1/ingest(4 模态)+ 状态查询/重试alfred/router/v1.py, alfred/ingest.py
11基础 CRUD(companies/positions/people/notes)alfred/router/v1.py
12pytest 体系(service / skill / API contract)9 个测试文件,57 用例全绿

已完成功能(按切片)

基础平台

  • FastAPI + SQLModel + PostgreSQL 16(docker-compose 一键起库)
  • Alembic 迁移(render_as_batch,含 drift 检测测试)
  • Provider 抽象:LLM / Vision / STT,OpenAI 实装 + FakeProvider
  • 软删除 archived_at 贯穿所有表

写入路径(services 唯一写入口)

  • upsert_company / upsert_position / upsert_person
  • create_note / create_event / create_reminder
  • add_tags / link + 关系词表校验
  • 事务提交 + dry-run 预演

技能框架与内置技能

  • 声明式技能:manifest + 模板渲染 + schema 校验重试
  • extract_job:解析招聘信息 → 公司/职位/笔记
  • capture_note:笔记抽取 + fallback
  • coffee_chat:脚本式 + 分块抽取人物/公司/话题并关联

摄入 / 附件 / CRUD 端点

  • ingest:text / url / file / requested_skill + 状态查询/重试
  • attachments:上传去重(sha256)、STT 转写、视觉描述
  • CRUD:companies / positions / people / notes 全套增删改查
  • /v1/graph、/v1/links、/meta/vocab(提前实现)

如何运行与验证

仓库已含 .venv,依赖已装好;无需 API key 即可跑测试(走 FakeProvider)。下面是 PowerShell 命令:

# 1) 跑全部测试(SQLite 内存库 + FakeProvider,无需外部依赖)
.venv\Scripts\python -m pytest -q

# 或用 uv(若已安装)
uv run pytest -q

# 2) 起交互式文档 / 开发服务器(默认 sqlite;接真实 LLM 需 .env 的 OPENAI_API_KEY)
cp .env.example .env          # 编辑 OPENAI_API_KEY
.venv\Scripts\python -m alfred.main
# 或:uv run uvicorn alfred.main:app --reload --port 8000
# 打开 http://localhost:8000/docs 查看 OpenAPI

# 3) 接 PostgreSQL(可选)
docker compose up -d db
uv run alembic upgrade head
uv run uvicorn alfred.main:app --reload --port 8000

验证点:测试全绿(57 passed)即代表 service / skill / API contract 三层都通过; /v1/llm-ping 验证 LLM 连通;/v1/skills/coffee_chat/dry-run 走 dry-run 不落库。

偏差与待办(需你确认)

  • 审计表:需求 v0.1 §3 提到独立审计表,实际改为所有表 archived_at 软删除。如需 append-only 审计日志请告知。
  • docs/SKILLS.mdSkillManifest.match 实为单个 MatchRule(inputs/keywords/url_patterns/priority),并非文档写的 kind/intent/overrides
  • docs/API.mdIngestIn 字段是 text,不是文档写的 content
  • 仓库根目录曾有一份陈旧的 pytest_out.txt(含中途失败快照),已删除以免误导。