Refactor OpenViking Memory API and User Management

- Updated API authentication headers to use `X-API-Key` for both admin and user APIs.
- Modified the account creation process to directly create user-specific accounts without requiring an admin workspace.
- Enhanced user creation to return account-specific details, including `admin_user_id`.
- Introduced new endpoints for retrieving task status and user profiles, allowing for more flexible user data management.
- Updated search functionality to include additional parameters such as `level` and `score_threshold`.
- Improved the handling of user keys in the storage layer to associate them with specific accounts.
- Added tests to validate the new user account creation process and search functionalities, ensuring proper integration with the OpenViking service.
- Included new documentation to reflect changes in API usage and expected request/response formats.
This commit is contained in:
2026-05-27 16:09:28 +08:00
parent a89807b174
commit 70cda923b2
13 changed files with 543 additions and 165 deletions

View File

@ -20,22 +20,22 @@ OpenViking 的常见鉴权方式:
| 场景 | Header |
|---|---|
| Admin API例如创建 account/user | `X-API-Key: $ROOT_KEY` |
| 普通用户 API例如 session/message/search | `Authorization: Bearer $USER_A_KEY` |
| Admin API例如创建 account | `X-API-Key: $ROOT_KEY` |
| 普通用户 API例如 session/message/search | `X-API-Key: $USER_A_KEY` |
---
## 1. 创建 admin 工作区 / account
## 1. 创建用户隔离工作区 / account
Admin API 用于多租户管理,包含 workspace/account 创建、用户注册、角色变更、key 生成等能力。创建 account 需要 root 权限
Admin API 用于多租户管理。Memory Gateway 为每个业务用户直接创建一个 admin account不再调用 `/api/v1/admin/accounts/admin/users`
```bash
curl -X POST "$OV_HOST/api/v1/admin/accounts" \
-H "X-API-Key: $ROOT_KEY" \
-H "Content-Type: application/json" \
-d '{
"account_id": "admin",
"admin_user_id": "admin"
"account_id": "userA_account",
"admin_user_id": "userA"
}'
```
@ -45,9 +45,9 @@ curl -X POST "$OV_HOST/api/v1/admin/accounts" \
{
"status": "ok",
"result": {
"account_id": "admin",
"admin_user_id": "admin",
"user_key": "<admin-user-key>"
"account_id": "userA_account",
"admin_user_id": "userA",
"user_key": "<userA-user-key>"
},
"error": null,
"telemetry": null
@ -56,17 +56,17 @@ curl -X POST "$OV_HOST/api/v1/admin/accounts" \
---
## 2. 创建用户
## 2. 创建更多用户
### 2.1 创建 userA
```bash
curl -X POST "$OV_HOST/api/v1/admin/accounts/admin/users" \
curl -X POST "$OV_HOST/api/v1/admin/accounts" \
-H "X-API-Key: $ROOT_KEY" \
-H "Content-Type: application/json" \
-d '{
"user_id": "userA",
"role": "user"
"account_id": "userA_account",
"admin_user_id": "userA"
}'
```
@ -79,12 +79,12 @@ export USER_A_KEY="<userA-user-key>"
### 2.2 创建 userB
```bash
curl -X POST "$OV_HOST/api/v1/admin/accounts/admin/users" \
curl -X POST "$OV_HOST/api/v1/admin/accounts" \
-H "X-API-Key: $ROOT_KEY" \
-H "Content-Type: application/json" \
-d '{
"user_id": "userB",
"role": "user"
"account_id": "userB_account",
"admin_user_id": "userB"
}'
```
@ -106,7 +106,7 @@ Session 是会话容器用于保存消息、跟踪上下文使用、commit
```bash
curl -X POST "$OV_HOST/api/v1/sessions" \
-H "Authorization: Bearer $USER_A_KEY" \
-H "X-API-Key: $USER_A_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "sessionA1"
@ -121,7 +121,7 @@ curl -X POST "$OV_HOST/api/v1/sessions" \
"result": {
"session_id": "sessionA1",
"user": {
"account_id": "admin",
"account_id": "userA_account",
"user_id": "userA",
"agent_id": "default"
}
@ -135,7 +135,7 @@ curl -X POST "$OV_HOST/api/v1/sessions" \
```bash
curl -X POST "$OV_HOST/api/v1/sessions" \
-H "Authorization: Bearer $USER_B_KEY" \
-H "X-API-Key: $USER_B_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "sessionB1"
@ -152,7 +152,7 @@ HTTP API 支持简单文本模式:`role + content`。`role` 通常为 `user`
```bash
curl -X POST "$OV_HOST/api/v1/sessions/sessionA1/messages" \
-H "Authorization: Bearer $USER_A_KEY" \
-H "X-API-Key: $USER_A_KEY" \
-H "Content-Type: application/json" \
-d '{
"role": "user",
@ -162,7 +162,7 @@ curl -X POST "$OV_HOST/api/v1/sessions/sessionA1/messages" \
```bash
curl -X POST "$OV_HOST/api/v1/sessions/sessionA1/messages" \
-H "Authorization: Bearer $USER_A_KEY" \
-H "X-API-Key: $USER_A_KEY" \
-H "Content-Type: application/json" \
-d '{
"role": "assistant",
@ -174,7 +174,7 @@ curl -X POST "$OV_HOST/api/v1/sessions/sessionA1/messages" \
```bash
curl -X POST "$OV_HOST/api/v1/sessions/sessionB1/messages" \
-H "Authorization: Bearer $USER_B_KEY" \
-H "X-API-Key: $USER_B_KEY" \
-H "Content-Type: application/json" \
-d '{
"role": "user",
@ -184,7 +184,7 @@ curl -X POST "$OV_HOST/api/v1/sessions/sessionB1/messages" \
```bash
curl -X POST "$OV_HOST/api/v1/sessions/sessionB1/messages" \
-H "Authorization: Bearer $USER_B_KEY" \
-H "X-API-Key: $USER_B_KEY" \
-H "Content-Type: application/json" \
-d '{
"role": "assistant",
@ -207,7 +207,7 @@ curl -X POST "$OV_HOST/api/v1/sessions/sessionB1/messages" \
```bash
curl -X POST "$OV_HOST/api/v1/sessions/sessionA1/commit" \
-H "Authorization: Bearer $USER_A_KEY" \
-H "X-API-Key: $USER_A_KEY" \
-H "Content-Type: application/json" \
-d '{
"keep_recent_count": 0
@ -233,7 +233,7 @@ curl -X POST "$OV_HOST/api/v1/sessions/sessionA1/commit" \
```bash
curl -X POST "$OV_HOST/api/v1/sessions/sessionB1/commit" \
-H "Authorization: Bearer $USER_B_KEY" \
-H "X-API-Key: $USER_B_KEY" \
-H "Content-Type: application/json" \
-d '{
"keep_recent_count": 0
@ -246,7 +246,7 @@ curl -X POST "$OV_HOST/api/v1/sessions/sessionB1/commit" \
```bash
curl -s "$OV_HOST/api/v1/tasks/<task_id>" \
-H "Authorization: Bearer $USER_A_KEY" | jq .
-H "X-API-Key: $USER_A_KEY" | jq .
```
成功完成后类似:
@ -302,7 +302,7 @@ curl -s "$OV_HOST/api/v1/tasks/<task_id>" \
```bash
curl -s -X POST "$OV_HOST/api/v1/search/find" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $USER_A_KEY" \
-H "X-API-Key: $USER_A_KEY" \
-d '{
"query": "我之前说了什么",
"target_uri": "viking://user/userA/memories/",
@ -341,7 +341,7 @@ curl -s -X POST "$OV_HOST/api/v1/search/find" \
```bash
curl -s -X POST "$OV_HOST/api/v1/search/search" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $USER_A_KEY" \
-H "X-API-Key: $USER_A_KEY" \
-d '{
"query": "我正在做什么",
"target_uri": "viking://user/userA/sessionA1", #
@ -388,4 +388,3 @@ curl -s -X POST "$OV_HOST/api/v1/search/search" \
1. **验证 memory 是否已经写入**:先用 `tasks/{task_id}` 确认 `completed`
2. **确认 user 长期 memory 是否可召回**:用 `/api/v1/search/find`query 写得贴近 memory 内容。
3. **需要结合当前会话上下文**:再用 `/api/v1/search/search``session_id`