This commit is contained in:
2026-04-12 01:02:14 +08:00
parent 509487f155
commit 9b053e302b
14085 changed files with 2680009 additions and 12 deletions

229
docs/art-agent/MVP-PLAN.md Normal file
View File

@@ -0,0 +1,229 @@
# MVP 最小流程 — 端到端跑通计划
> 目标:用最小代码量跑通一条完整闭环,快速暴露集成问题。
---
## 范围
**包含:**
- 用户通过对话描述需求LLM 理解意图并调用图像生成
- 用户可上传参考图引导生成风格
- 多轮对话迭代修改
- 生成 1-4 张候选图,用户可下载保存到本地
- SSE 流式推送(实时看到 AI 回复和生成进度)
**刻意砍掉(后续再加):**
- 数据库 / 持久化(用内存存对话历史)
- Skill / Rules 扩展机制
- 风格模板 / 风格库
- 用户认证
- 云端部署(先本地跑通)
---
## 数据流
```
用户输入文字 + 可选参考图
→ 前端 POST /api/chat消息 + 图片)
→ 后端 Agent Loop
→ 调用 OpenAI GPT带 tools 定义)
→ GPT 返回 tool_call: generate_image
→ 调用 Replicate APIFlux 模型)
→ 图片下载到本地 generated/ 目录
→ 工具结果回传 GPT
→ GPT 生成最终文字回复
→ SSE 流式推送给前端
→ 前端展示文字 + 图片网格(带下载按钮)
```
---
## 准备工作API Key
### OpenAI API Key
1. 访问 https://platform.openai.com/signup 注册
2. https://platform.openai.com/api-keys 创建 Key
3. 需预充值(最低 $5模型用 GPT-4o-mini便宜够用
### Replicate API Token
1. 访问 https://replicate.com/signin 用 GitHub 登录
2. https://replicate.com/account/api-tokens 创建 Token
3. 新用户有免费额度
---
## 实施步骤与完成状态
### Step 1项目脚手架 — 已完成
- [x] 后端:`art-agent/backend/`Python + FastAPI
- [x] 前端:`art-agent/frontend/`Next.js + TypeScript + Tailwind CSS v4
- [x] 配置:`.env.example` 放 API Key 模板
- [x] Python 虚拟环境已创建并安装依赖
- [x] Node.js v24.14.1 已安装(通过 winget
- [x] 前端 npm 依赖已安装46 个包)
### Step 2后端核心 API — 已完成
- [x] `POST /api/chat` — 接收消息 + 可选图片,调用 Agent LoopSSE 流式返回
- [x] `/uploads/{filename}` — 通过 StaticFiles 提供上传的参考图
- [x] `/generated/{filename}` — 通过 StaticFiles 提供生成的图片
- [x] `/health` — 健康检查端点
- [x] CORS 中间件已配置(允许所有来源)
- [x] 后端启动验证通过(健康检查返回 `{"status": "ok"}`
### Step 3Agent Loop — 已完成
- [x] 硬编码 system prompt美术助手角色中文交流英文 prompt 生成)
- [x] 定义 `generate_image` 工具prompt、num_images
- [x] Agent 循环LLM 调用 → tool_call → 执行 → 结果回传 → 继续(最多 5 轮)
- [x] 流式输出text_delta / tool_start / image_result / done / error 事件
- [x] 参考图通过 GPT-4o-mini vision 能力理解(附加为 image_url
- [x] OpenAI 客户端延迟初始化(避免无 Key 时导入失败)
### Step 4Replicate 图像生成 — 已完成
- [x] 封装 Replicate API 调用
- [x] 模型:`black-forest-labs/flux-schnell`(快速版)
- [x] 生成图片异步下载到本地 `generated/` 目录
- [x] 返回本地可访问 URL
### Step 5前端 Chat UI — 已完成
- [x] 主页面 `page.tsx`:对话消息区域 + 底部输入框
- [x] `ChatMessages` 组件:渲染历史消息 + 流式生成中的消息
- [x] `ChatInput` 组件:文字输入 + 参考图上传 + 预览 + 发送按钮
- [x] `ImageGrid` 组件:候选图网格展示 + 悬停显示"保存"按钮
- [x] 欢迎页面3 个快捷提示按钮
- [x] 暗色主题 UI
- [x] 加载状态:跳动圆点 + 脉冲状态指示
### Step 6SSE 对接 — 已完成
- [x] `lib/api.ts`SSE 流式读取封装为 AsyncGenerator
- [x] 事件解析text_delta / tool_start / image_result / done / error
- [x] 图片 URL 相对路径转换(`getImageUrl` 工具函数)
- [x] 消息通过 FormData 发送(支持同时上传文本和图片)
### Step 7端到端验证 — 进行中
- [x] 后端启动验证通过
- [ ] 前端启动验证(需配置好 API Key 后完整测试)
- [ ] 完整对话流程验证
- [ ] 参考图上传流程验证
- [ ] 图片下载功能验证
---
## 环境搭建记录
### 已安装的环境
| 工具 | 版本 | 安装方式 |
|---|---|---|
| Python | 3.12.5 | 系统已有 |
| Node.js | 24.14.1 (LTS) | winget 安装 |
| npm | 11.11.0 | 随 Node.js |
### 遇到的问题及解决
1. **OpenAI 客户端模块加载时初始化失败** — 无 API Key 时 `AsyncOpenAI()` 会抛异常。
解决:改为延迟初始化,在 `run_agent_loop` 函数内部创建客户端。
2. **PowerShell 不支持 `&&` 操作符** — 旧版 PowerShell 的语法限制。
解决:使用分号 `;` 或分两条命令执行。
3. **PowerShell 脚本执行策略限制** — 默认禁止运行 `.ps1` 脚本,导致 `npm` 无法执行。
解决:`Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned`
---
## 验证标准
1. 输入"画一个赛博朋克风格的游戏退出按钮" → AI 回复 + 生成图片
2. 点击下载按钮 → 图片保存到本地
3. 输入"颜色再暗一些,加点霓虹光效" → 迭代后新图片
4. 上传参考图 + "参考这张图的风格" → 受参考图引导的图片
---
## 启动命令
### 后端
```powershell
cd d:\GIT_HOME\EPEEAIKit\art-agent\backend
.\venv\Scripts\activate
uvicorn app.main:app --reload --port 8000
```
### 前端
```powershell
cd d:\GIT_HOME\EPEEAIKit\art-agent\frontend
npm run dev
```
访问 http://localhost:3000
---
## 文件清单
```
art-agent/
README.md # 项目说明和启动指南
backend/
.env.example # API Key 模板
.env # 实际 API Key已配置不入 Git
requirements.txt # Python 依赖9 个包)
venv/ # Python 虚拟环境(不入 Git
uploads/ # 用户上传的参考图
generated/ # AI 生成的图片缓存
app/
__init__.py
main.py # FastAPI 入口 + CORS + 静态文件
api/
__init__.py
chat.py # POST /api/chat 端点
agent/
__init__.py
loop.py # Agent Loop 主循环SSE 流式)
tools.py # 工具定义generate_image
services/
__init__.py
image_gen.py # Replicate API 封装
frontend/
.env.local # 后端 API 地址配置
package.json # npm 依赖
tsconfig.json # TypeScript 配置
next.config.ts # Next.js 配置
postcss.config.mjs # PostCSS / Tailwind 配置
node_modules/ # npm 依赖(不入 Git
src/
app/
page.tsx # 主页面(含 SSE 对接逻辑)
layout.tsx # 根布局
globals.css # 全局样式(暗色主题)
components/
chat/
chat-messages.tsx # 对话消息列表
chat-input.tsx # 输入框 + 参考图上传
image-grid.tsx # 图片网格 + 下载按钮
lib/
api.ts # 后端 API 调用 + SSE 解析
docs/
art-agent/
DECISIONS.md # 产品决策文档5 个核心问题)
TECH-STACK.md # 技术选型文档8 个维度)
MVP-PLAN.md # 本文件MVP 实施计划与记录
```
## 技术栈
详见 [TECH-STACK.md](TECH-STACK.md)