-
Notifications
You must be signed in to change notification settings - Fork 1
08 ai
FrankWkd-Plus edited this page Jul 25, 2026
·
1 revision
上级:Wiki 首页 · Provider 实现:
web/functions/_shared/aiProvider.ts
- 密钥只在服务端(Pages Functions)
- 演示不断线 — 远程失败必有本地模板
- 人格上下文 — 始终带上 toy 的 role / traits / bio / monologue
- 记忆可注入 — 对话带近期 entries 摘要
ComposePage / 重写
→ analyzeEntry() # web/src/ai/analyzeEntry.ts
→ POST /api/analyze-entry
→ aiProvider (OpenAI chat/completions 或 Anthropic messages)
→ 失败 / 关闭:generateLocalAnalysis()
→ 用户可编辑 title / aiDiary
→ api.createEntry 或 regenerate
多模态:有 imageDataUrl 时一并传入(视上游支持)。
OpenAI 路径请求 response_format: json_object;Anthropic 依赖 system 提示约束 JSON。
ConversationPage
→ chatToyReply() # web/src/ai/chatToyReply.ts
→ POST /api/chat
body: message, toy, history(≤12), memories(≤6), quietMode
→ 失败:localPersonaReply + API 错误气泡 / Toast
→ chatStorage 按 toyId 追加
安静模式(toydairy.quietMode):更短、少追问;并抑制 ToyNudgeHost 主动打扰。
NewToyPage
→ generateToyProfile() # 走对话/分析同类适配或本地
→ 填充 bio + monologue
失败用本地性格模板,不阻塞保存。
AI_PROVIDER |
行为 |
|---|---|
openai |
POST {base}/chat/completions,Bearer |
anthropic |
POST {base}/messages,x-api-key + Bearer + anthropic-version |
auto(默认) |
按 base URL / 模型名(如 claude-*)判断;自定义网关可回退 |
响应解析兼容 choices[] 与 content[{type,text}]。
失败响应带 auth 元数据(provider、endpoint、keyHint)便于排障。
坑: OPENAI_BASE_URL 必须含 /v1,否则中转站常返回 HTML 门户页。
| 能力 | 库 | 说明 |
|---|---|---|
| 抠图 |
@imgly/background-removal + ONNX |
浏览器内;AGPL;动态 import |
| OCR | tesseract.js | 拍照记一笔填描述 |
| 贴纸 | Canvas 512 白边 | createStickerAvatar |
- 禁止把 Key 写进任何
VITE_* - 抠图默认本地,原图不强制上传
- 演示 CORS
*;生产应收紧
ToyDiary 仓库 · Demo · Wiki 源:docs/wiki/