mirror of
https://github.com/kuaifan/dootask.git
synced 2026-08-01 19:05:55 +00:00
- 删除 CI reindex workflow(ai-kb-reindex.yml):内容入库不再依赖 CI 远程触发,AI 插件容器每次启动按文件 hash 对账(reconcile)自动增量 收敛,免重启即时生效时可手动调 POST /kb/reindex(默认 mode=reconcile) - ai-kb README.md 同步更新贡献流程与内容同步机制说明 - CLAUDE.md 精简 ai-kb 同步规则:去除与 _schema/README 重复的写作规范 与背景说明,保留同步时机、操作指引、改完无需触发索引三条 - 另:auth 接口 locale 检索语种缺省改为由请求语言推导(含 zh 视为 zh, 否则 en),删除 config/ai.php 的 rag_supported_locales 与回退逻辑, 前端改用 getLanguage() 统一映射,同步更新 ai-kb auth.md - appstore 镜像升级 0.4.3 -> 0.5.0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
---
|
||
id: ai-assistant.auth.concept
|
||
title: AI 助手鉴权(stream_key)
|
||
type: concept
|
||
feature: ai-assistant
|
||
scope: end-user
|
||
locale: zh
|
||
aliases:
|
||
- AI 鉴权
|
||
- AI 授权
|
||
- stream_key
|
||
- AI token
|
||
- AI 流凭证
|
||
related_tools: []
|
||
related_pages: []
|
||
prerequisites:
|
||
- 用户已登录
|
||
- 当前用户允许聊天
|
||
negative:
|
||
- stream_key 是一次性凭证,发完一条消息就失效
|
||
- 流式接口 /ai/invoke/stream/* 不在主仓库,由 dootask-ai 容器提供
|
||
- 普通用户不需要关心 stream_key,前端自动获取
|
||
last_verified: v1.7.90
|
||
---
|
||
|
||
# AI 助手鉴权(stream_key)
|
||
|
||
## 定义
|
||
AI 助手发送提问前必须先调用 `POST api/assistant/auth` 生成一次性 `stream_key`,再用它去开 SSE 流(`/ai/invoke/stream/{stream_key}`),既复用登录态又避免把用户 token 暴露给 ai 容器。
|
||
|
||
## 数据流
|
||
1. 用户点发送
|
||
2. 前端 `POST api/assistant/auth`,参数:`model_type`、`model_name`、`context`(JSON)、`locale`(zh/en,缺省取请求语言,语言包含 zh 视为 zh,否则 en)
|
||
3. 后端 `AssistantController::auth` 校验登录 + 聊天权限,写入临时凭证
|
||
4. 返回 `{stream_key: "xxx"}`
|
||
5. 前端开 SSE:`ai/invoke/stream/{stream_key}`
|
||
6. ai 容器消费凭证、转发上游模型,推回 `append/replace/done`
|
||
|
||
## 关键约束
|
||
- **一次性**:一个 stream_key 仅能开一次 SSE 流
|
||
- **绑定用户**:内嵌 `userid`,越权使用被拒
|
||
- **携带 context**:对话历史在 auth 阶段写入;ai 容器不反向查 DooTask 库
|
||
- **插件校验**:`AssistantController` 构造函数先做 `Apps::isInstalledThrow('ai')`;未装直接抛错
|
||
|
||
## 权限校验
|
||
`User::auth()->checkChatInformation()`:未登录 / 被禁止聊天 / 激活异常都会拒绝。
|
||
|
||
## 相关接口
|
||
| 接口 | 用途 |
|
||
|---|---|
|
||
| `POST api/assistant/auth` | 生成 stream_key |
|
||
| `GET api/assistant/models` | 拉可用模型列表 |
|
||
| `POST api/assistant/session/list` | 历史会话 |
|
||
| `POST api/assistant/session/save` | 保存当前会话 |
|
||
| `POST api/assistant/session/delete` | 删除 / 清空 |
|
||
|
||
## 不支持
|
||
- 不支持复用 stream_key
|
||
- 不支持匿名调用
|
||
- 不支持终端用户直接管理 token
|
||
|
||
## 相关
|
||
- [[ai-assistant.privacy.concept]]
|
||
- [[ai-assistant.streaming.concept]]
|