feat(apps): 新增 http-chat 多租户并发示例并登记进 apps/README
multi_tenant.py:app.py 的并发/多租户版,用 /api/v1/auth/register 并发创建多个租户(各自独立 workspace + Session),同时跑 N 轮链式 对话,校验真并发、多轮上下文按 thread 各自保持、租户隔离 (search 仅见己有线程 + 跨租户 GET 404)。轮数/租户数可配 (DF_TURNS / DF_TENANTS),唯一邮箱可重复跑且不触发限流。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+13
-1
@@ -37,6 +37,18 @@ DF_BASE=http://localhost:8001 ./apps/examples/http-chat/run.sh # 也可手动
|
||||
|
||||
http-chat 的 `run.sh` 优先用 `uv run --no-project --with requests`(临时环境,不污染系统),没有 uv 才回退到本地 `.venv` + pip;可用 `DF_BASE` / `DF_EMAIL` / `DF_PASSWORD` 覆盖。embedded-chat 的 `run.sh` 自动定位 `backend/`、加载 `.env` 后用 `uv run` 启动,依赖 `config.yaml` 里有可用模型。
|
||||
|
||||
### 多租户并发验证(HTTP 模式)
|
||||
|
||||
[`examples/http-chat/multi_tenant.py`](examples/http-chat/multi_tenant.py) 是 `app.py` 的并发 / 多租户版:用 `/api/v1/auth/register` 并发创建多个租户(每个注册用户自带独立 workspace),各自一个 `requests.Session`(独立 cookie)同时跑 N 轮链式对话,并校验:① 真并发(对话时间窗重叠);② 多轮上下文按 `thread_id` 各自保持(第 2 轮起每轮都依赖上一轮结果);③ 租户隔离(`POST /api/threads/search` 仅见己有线程,跨租户 `GET /api/threads/{id}` 返回 404)。
|
||||
|
||||
```bash
|
||||
# 前提:已起 Gateway(dev-gateway 或 dev-full)
|
||||
DF_BASE=http://localhost:8001 DF_TENANTS=4 DF_TURNS=10 \
|
||||
uv run --no-project --with requests python apps/examples/http-chat/multi_tenant.py
|
||||
```
|
||||
|
||||
环境变量:`DF_BASE`(网关地址,默认 :8001)、`DF_TENANTS`(并发租户数,默认 3)、`DF_TURNS`(每租户轮数,默认 10)。每次运行用唯一邮箱新建租户,可重复跑,不撞 email、也不触发登录限流(`/register` 不限流;`setup-status` 全程只调一次以避开 60s/IP 限流)。
|
||||
|
||||
## 前置:先把 DeerFlow 跑起来
|
||||
|
||||
在**仓库根目录**:
|
||||
@@ -79,7 +91,7 @@ Gateway 是 **fail-closed** 的——除少数公开路径外所有请求都要
|
||||
3. 成功后 Session 里有 `access_token`(HttpOnly) + `csrf_token` 两个 cookie
|
||||
4. **所有写请求**(POST/PUT/DELETE/PATCH)必须带 `X-CSRF-Token` 头 = `csrf_token` 值
|
||||
|
||||
> 多租户:当前 `docs/multi-tenant-redesign` 分支的 API Key 鉴权中间件尚未接入,外部系统暂时只能走会话 cookie。等 `Authorization: Bearer dfk_live_...` 落地后再补无人值守接入。
|
||||
> 多租户:当前 `docs/multi-tenant-redesign` 分支的 API Key 鉴权中间件尚未接入,外部系统暂时只能走会话 cookie。等 `Authorization: Bearer dfk_live_...` 落地后再补无人值守接入。每个注册用户即一个独立租户(自带 workspace);并发与隔离行为可用上面的 [`multi_tenant.py`](examples/http-chat/multi_tenant.py) 验证。
|
||||
|
||||
## 新建一个应用
|
||||
|
||||
|
||||
Reference in New Issue
Block a user