Skip to content

API 概览

本页介绍如何连接 OpenViking 以及所有 API 端点共享的约定。

连接 OpenViking

OpenViking 支持三种连接模式:

模式使用场景说明
嵌入式本地开发,单进程本地运行,数据存储在本地
HTTP连接 OpenViking Server通过 HTTP API 连接远程服务
CLIShell 脚本、Agent 工具调用通过 CLI 命令连接服务端

嵌入式模式

python
import openviking as ov

client = ov.OpenViking(path="./data")
client.initialize()

嵌入式模式通过 ov.conf 配置 embedding、vlm、storage 等模块。默认路径 ~/.openviking/ov.conf,也可通过环境变量指定:

bash
export OPENVIKING_CONFIG_FILE=/path/to/ov.conf

最小配置示例:

json
{
  "embedding": {
    "dense": {
      "api_base": "<api-endpoint>",
      "api_key": "<your-api-key>",
      "provider": "<volcengine|openai|jina|...>",
      "dimension": 1024,
      "model": "<model-name>"
    }
  },
  "vlm": {
    "api_base": "<api-endpoint>",
    "api_key": "<your-api-key>",
    "provider": "<volcengine|openai|openai-codex|kimi|glm>",
    "model": "<model-name>"
  }
}

provider: "openai-codex" 时,只要通过 openviking-server init 完成 Codex OAuth,就可以不填写 vlm.api_key

完整配置选项和各服务商示例见 配置指南

HTTP 模式

python
client = ov.SyncHTTPClient(
    url="http://localhost:1933",
    api_key="your-key",
    agent_id="my-agent",
    timeout=120.0,
)
client.initialize()

未显式传入 url 时,HTTP 客户端会自动从 ovcli.conf 读取连接信息。ovcli.conf 是 HTTP 客户端和 CLI 共享的配置文件,默认路径 ~/.openviking/ovcli.conf,也可通过环境变量指定:

bash
export OPENVIKING_CLI_CONFIG_FILE=/path/to/ovcli.conf
json
{
  "url": "http://localhost:1933",
  "api_key": "your-key",
  "account": "acme",
  "user": "alice",
  "agent_id": "my-agent"
}
字段说明默认值
url服务端地址(必填)
api_keyAPI Keynull(无认证)
account面向租户请求的默认 account 请求头null
user面向租户请求的默认 user 请求头null
agent_idAgent 标识符null
timeoutHTTP 请求超时时间(秒)60.0
output默认输出格式:"table""json""table"

详见 配置指南

HTTP 模式下的本地文件

  • CLI、SyncHTTPClientAsyncHTTPClient 遇到本地文件或目录时,会先自动上传,再调用服务端 API。
  • 裸 HTTP 调用没有这层封装。使用 curl 或其他 HTTP 客户端时,需要先调用 POST /api/v1/resources/temp_upload,再把返回的 temp_file_id 传给目标 API。
  • 裸 HTTP 如果导入本地目录,需要先自行打成 .zip 再上传;服务端不接受直接传宿主机目录路径。
  • POST /api/v1/resources 可以直接接收远端 URL,但不接受 ./doc.md/tmp/doc.md 这类宿主机本地路径。

直接 HTTP(curl)

bash
curl http://localhost:1933/api/v1/fs/ls?uri=viking:// \
  -H "X-API-Key: your-key"

CLI 模式

CLI 连接到 OpenViking 服务端,将所有操作暴露为 Shell 命令。CLI 同样从 ovcli.conf 读取连接信息(与 HTTP 客户端共享)。

基本用法

bash
openviking [全局选项] <command> [参数] [命令选项]

全局选项(必须放在命令名之前)

选项说明
--output, -o输出格式:table(默认)、json
--version显示 CLI 版本

示例:

bash
openviking -o json ls viking://resources/

生命周期

嵌入式模式

python
import openviking as ov

client = ov.OpenViking(path="./data")
client.initialize()

# ... 使用 client ...

client.close()

HTTP 模式

python
import openviking as ov

client = ov.SyncHTTPClient(url="http://localhost:1933")
client.initialize()

# ... 使用 client ...

client.close()

认证

详见 认证指南

  • X-API-Key 请求头:X-API-Key: your-key
  • Bearer 请求头:Authorization: Bearer your-key
  • 如果服务端未配置 API Key,则跳过认证。
  • /health 端点始终不需要认证。

响应格式

所有 HTTP API 响应遵循统一格式:

成功

json
{
  "status": "ok",
  "result": { ... },
  "time": 0.123
}

顶层 status 表示本次 HTTP API 请求是否成功。某些成功响应会在 result 中返回业务状态, 例如 "status": "success""status": "accepted" 或任务状态。这些字段不是 API 传输层错误。

错误

json
{
  "status": "error",
  "error": {
    "code": "NOT_FOUND",
    "message": "Resource not found: viking://resources/nonexistent/"
  },
  "time": 0.01
}

HTTP 错误始终使用顶层错误 envelope。资源解析、同步 reindex 等同步处理失败会返回非 2xx 响应,顶层为 status="error",并包含 error 对象。客户端不应通过 result.status="error" 判断请求失败。

请求校验失败,包括 JSON 格式错误、缺少必填字段和参数值非法,统一返回 HTTP 400, 并使用 error.code="INVALID_ARGUMENT"。响应不会使用 FastAPI 原生的 {"detail": ...} 错误格式;当存在字段级校验信息时,会通过 error.details.validation_errors 返回。

Python HTTP SDK(SyncHTTPClientAsyncHTTPClient)会把该 envelope 映射为对应的 OpenVikingError 子类。例如 PROCESSING_ERROR 会抛出 ProcessingError

CLI 输出格式

Table 模式(默认)

列表数据渲染为表格,非列表数据 fallback 到格式化 JSON:

bash
openviking ls viking://resources/
# name          size  mode  isDir  uri
# .abstract.md  100   420   False  viking://resources/.abstract.md

JSON 模式(--output json

所有命令输出格式化 JSON,与 API 响应的 result 结构一致:

bash
openviking -o json ls viking://resources/
# [{ "name": "...", "size": 100, ... }, ...]

可在 ovcli.conf 中设置默认输出格式:

json
{
  "url": "http://localhost:1933",
  "output": "json"
}

紧凑模式(--compact, -c

  • --output=json 时:紧凑 JSON 格式 + {ok, result} 包装,适用于脚本
  • --output=table 时:对表格输出采取精简表示(如去除空列等)

JSON 输出 - 成功

json
{"ok": true, "result": ...}

JSON 输出 - 错误

json
{"ok": false, "error": {"code": "NOT_FOUND", "message": "Resource not found", "details": {}}}

特殊情况

  • 字符串结果readabstractoverview):直接打印原文
  • None 结果mkdirrmmv):无输出

退出码

退出码含义
0成功
1一般错误
2配置错误
3连接错误

错误码

错误码HTTP 状态码说明
OK200成功
INVALID_ARGUMENT400无效参数
INVALID_URI400无效的 Viking URI 格式
NOT_FOUND404资源未找到
ALREADY_EXISTS409资源已存在
UNAUTHENTICATED401缺少或无效的 API Key
PERMISSION_DENIED403权限不足
RESOURCE_EXHAUSTED429超出速率限制
FAILED_PRECONDITION412前置条件不满足
CONFLICT409操作与正在进行的任务或已有状态冲突
DEADLINE_EXCEEDED504操作超时
UNAVAILABLE503服务不可用
PROCESSING_ERROR500资源或语义处理失败
INTERNAL500内部服务器错误
UNIMPLEMENTED501功能未实现
EMBEDDING_FAILED500Embedding 生成失败
VLM_FAILED500VLM 调用失败
SESSION_EXPIRED410会话已过期

API 端点

系统

方法路径说明
GET/health健康检查(无需认证)
GET/ready就绪探针(无需认证)
GET/metricsPrometheus 指标导出
GET/api/v1/system/status系统状态
POST/api/v1/system/wait等待处理完成

资源

方法路径说明
POST/api/v1/resources/temp_upload裸 HTTP 导入资源 / pack 时上传本地文件
POST/api/v1/resources添加资源
POST/api/v1/skills添加技能
POST/api/v1/pack/export导出 .ovpack
POST/api/v1/pack/import导入 .ovpack

文件系统

方法路径说明
GET/api/v1/fs/ls列出目录
GET/api/v1/fs/tree目录树
GET/api/v1/fs/stat资源状态
POST/api/v1/fs/mkdir创建目录
DELETE/api/v1/fs删除资源
POST/api/v1/fs/mv移动资源

内容

方法路径说明
GET/api/v1/content/read读取完整内容(L2)
GET/api/v1/content/abstract读取摘要(L0)
GET/api/v1/content/overview读取概览(L1)
GET/api/v1/content/download下载原始文件字节流
POST/api/v1/content/write修改已有文件并自动刷新语义与向量
POST/api/v1/content/reindex重新构建已有内容的语义/向量索引

搜索

方法路径说明
POST/api/v1/search/find语义搜索
POST/api/v1/search/search上下文感知搜索
POST/api/v1/search/grep模式搜索
POST/api/v1/search/glob文件模式匹配

关联

方法路径说明
GET/api/v1/relations获取关联
POST/api/v1/relations/link创建链接
DELETE/api/v1/relations/link删除链接

会话

方法路径说明
POST/api/v1/sessions创建会话
GET/api/v1/sessions列出会话
GET/api/v1/sessions/{id}获取会话
GET/api/v1/sessions/{id}/context获取组装后的会话上下文
DELETE/api/v1/sessions/{id}删除会话
POST/api/v1/sessions/{id}/commit提交会话
POST/api/v1/sessions/{id}/extract从会话提取记忆
POST/api/v1/sessions/{id}/messages添加消息
POST/api/v1/sessions/{id}/used记录实际使用的上下文 / 技能
GET/api/v1/sessions/{id}/archives/{archive_id}获取特定会话归档

任务

方法路径说明
GET/api/v1/tasks/{task_id}获取后台任务状态
GET/api/v1/tasks列出后台任务

Observer

方法路径说明
GET/api/v1/observer/queue队列状态
GET/api/v1/observer/vikingdbVikingDB 状态
GET/api/v1/observer/models模型状态(VLM / embedding / rerank)
GET/api/v1/observer/lock锁子系统状态
GET/api/v1/observer/retrieval检索子系统状态
GET/api/v1/observer/system系统状态

调试

方法路径说明
GET/api/v1/debug/health快速健康检查
GET/api/v1/debug/vector/scroll分页查看向量记录
GET/api/v1/debug/vector/count统计向量记录数量

管理员(多租户)

方法路径说明
POST/api/v1/admin/accounts创建工作区 + 首个 admin(ROOT)
GET/api/v1/admin/accounts列出工作区(ROOT)
DELETE/api/v1/admin/accounts/{account_id}删除工作区(ROOT)
POST/api/v1/admin/accounts/{account_id}/users注册用户(ROOT, ADMIN)
GET/api/v1/admin/accounts/{account_id}/users列出用户(ROOT, ADMIN)
DELETE/api/v1/admin/accounts/{account_id}/users/{user_id}移除用户(ROOT, ADMIN)
PUT/api/v1/admin/accounts/{account_id}/users/{user_id}/role修改用户角色(ROOT)
POST/api/v1/admin/accounts/{account_id}/users/{user_id}/key重新生成 User Key(ROOT, ADMIN)

相关文档

Released under the Apache-2.0 License.