我的个人网站 AI 助手。基于自研 ReAct 引擎驱动,集成 RAG 知识库、Few-shot Prompt 工程、AI 图像生成和自动换肤。面试官打开可以直接和菲比对话。agent_003 和 Z-Agent 共享同一套 `agent.py` + `brain.py`。区别仅在于工具集:
- Z-Agent:11 个工具(代码/Excel/文件/搜索)
- agent_003:5 个工具(时间/项目统计/生图/换肤/搜索)
#### 3.3.2 RAG 知识库
**为什么做 RAG?** 最早把 zzm.json 全量塞 system prompt,浪费 token 且检索无针对性。
**实现方案**:
- TF-IDF 向量化 9 个文档片段(项目简介、技能列表、详细项目描述)
- 用户 query 同样向量化 → 余弦相似度找 top-3 最相关片段
- 检索结果注入 system prompt,LLM 基于真实文档回答
- 比全量注入省 ~60% token,检索更有针对性
**为什么 TF-IDF 而不是 embedding?**
- 9 个文档片段规模下,TF-IDF 和 embedding 检索效果差距不大
- 不需要下载模型,不需要 GPU,冷启动秒级
- 工程上"先跑通再优化":如果知识库扩展到千条以上,再迁到文本 embedding浏览器 (单文件 HTML + 原生 JS)
│
├── GET / → widget.html(个人主页)
├── POST /api/chat/stream → SSE 流式 ReAct 对话
├── POST /api/guestbook → 留言板 API
└── GET /assets/gifs/* → 菲比动画素材
后端 FastAPI
├── chat_api.py → ReAct 流式端点 + 会话记忆 + 兜底降级
├── guestbook_api → JSON 文件存储留言
├── main.py → 静态文件挂载 + 路由注册
└── agent_core/ → 复用 Z-Agent 引擎
├── agent.py → ReAct 循环(同一套代码)
├── brain.py → LLM 客户端
└── tools/ → 6 个工具函