Skip to content

API 概览

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

连接模式

OpenViking 支持两种使用模式:嵌入式模式(直接调用 Python API)和 Client-Server 模式(通过 HTTP API 连接)。

本 API 文档主要介绍 Client-Server 模式的 HTTP API 使用方式。嵌入式模式虽然可用,但后续文档将不单独展开介绍。

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

嵌入式模式(简要说明)

嵌入式模式允许在 Python 进程内直接调用 OpenViking API,无需启动独立的服务器进程。

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 是可选的。

完整的配置选项和 provider 特定示例,请参见 配置指南

Client-Server 模式(主要介绍)

Client-Server 模式通过 HTTP API 连接 OpenViking 服务器,支持多租户、远程访问等特性。OpenViking 的服务器启动方式请参见相关部署文档。

Python SDK 客户端

python
import openviking as ov

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

Go SDK 客户端

Go SDK 是 Client-Server 模式下的 HTTP-only 客户端,作为主仓库的 sdk/go 独立 Go module 发布。

bash
go get github.com/volcengine/OpenViking/sdk/go
go
client, err := openviking.NewClient(openviking.Config{
    BaseURL: "http://localhost:1933",
    APIKey:  "your-key",
})
if err != nil {
    return err
}
defer client.CloseIdleConnections()

Go SDK 发送的身份请求头与 Python HTTP client 一致:

Config 字段HTTP Header
APIKeyX-API-Key
AccountX-OpenViking-Account
UserX-OpenViking-User
ActorPeerIDX-OpenViking-Actor-Peer

普通 api_key 部署下只需要设置 APIKey,服务端会从 API key 推导租户身份。只有在 trusted 部署或网关显式透传租户身份时,才需要设置 AccountUser

Go SDK 不支持 Python embedded 模式,也不保留旧 agent_id 兼容路径。更多示例见 sdk/go/README_CN.md

JavaScript/TypeScript SDK 客户端

JavaScript/TypeScript SDK 是面向 Node.js 18+ 的 HTTP-only 客户端,同时发布 ESM、CommonJS 和 TypeScript 类型声明。

bash
npm install @openviking/sdk
ts
import { OpenVikingClient } from "@openviking/sdk";

const client = new OpenVikingClient({
  baseUrl: "http://localhost:1933",
  apiKey: "your-key",
});

const results = await client.search("部署文档", {
  targetUri: "viking://resources",
});

它与 Python、Go HTTP Client 使用相同的身份请求头和响应信封。更多示例见 sdk/typescript/README_CN.md

未显式传入 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"
}

配置字段说明:

字段说明默认值
url服务端地址(必填)
api_keyAPI Keynull(无认证)
account租户级请求的默认账户请求头null
user租户级请求的默认用户请求头null
timeoutHTTP 请求超时时间(秒)600.0
output默认输出格式:"table""json""table"

详细内容请参见 配置指南

完全不依赖配置文件使用 Python SDK 客户端

SyncHTTPClientAsyncHTTPClient 支持完全不依赖 ovcli.conf 配置文件,只需在初始化时显式传入所有参数即可:

python
import openviking as ov

client = ov.SyncHTTPClient(
    url="http://localhost:1933",          # 显式传入
    api_key="your-key",                    # 显式传入(默认情况下 api_key 已经能标识用户身份)
    timeout=30.0,                          # 不要用默认值 600.0
    extra_headers={}                       # 传空 dict 而不是 None,可用于某些场景的网关认证等
)
client.initialize()

⚠️ 注意:只要以下任一条件满足,客户端就会尝试加载配置文件:

  • urlNone
  • api_keyNone
  • timeout 等于 600.0(默认值)
  • extra_headersNone

HTTP 调用示例

  • CLI、SyncHTTPClientAsyncHTTPClient 遇到本地文件或目录时,会先自动上传,再调用服务端 API。
  • Python HTTP client 和 CLI 也可以通过客户端配置启用 shared 临时上传(ovcli.conf 中设置 upload.mode = "shared")。
  • 裸 HTTP 调用没有这层封装。使用 curl 或其他 HTTP 客户端时,需要先调用 POST /api/v1/resources/temp_upload,再把返回的 temp_file_id 传给目标 API。
  • temp_upload 默认使用 upload_mode=local。只有在你显式需要分布式共享临时上传时,才应传 upload_mode=shared
  • 裸 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 模式

OpenViking CLI (可简写为 ov 命令)连接到 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()

Client-Server 模式

python
import openviking as ov

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

# ... 使用 client ...

client.close()

CLI 则直接通过命令行调用,需要先配置 ovcli.conf 文件,无需额外初始化客户端:

openviking -o json ls viking://resources/

认证

详见 认证指南

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

响应格式

所有 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": "...", "details": {}}}

特殊情况

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

退出码

注:退出码是 CLI(命令行工具)的返回码,不是 HTTP API 的状态码。

退出码说明触发场景
0成功命令执行成功
1一般错误命令执行失败(如 API 调用失败、网络错误、找不到二进制文件等)
2配置错误无法加载 ovcli.conf 配置文件、--sudo 需要 root_api_key 但未配置、--sudo 用于非管理员命令
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会话已过期
NOT_INITIALIZED-服务或组件未初始化(需要先调用 initialize())

API 端点总览

以下目录以服务端实际挂载路由为准。每组标题会跳转到详细文档;详细页只为真实存在的 HTTP、Python SDK、TypeScript SDK、Go SDK 或 CLI 能力显示对应 Tab,不会用等价的裸 HTTP 调用冒充 SDK。

系统状态

方法路径说明
GET/health基础健康检查(无需认证)
GET/readyAGFS、VectorDB 和 API Key 管理器就绪检查(无需认证)
GET/api/v1/system/status系统状态
POST/api/v1/system/wait等待后台处理完成
POST/api/v1/system/consistency文件系统与向量索引一致性检查
POST/api/v1/system/backend/sync-status查询后端同步状态
POST/api/v1/system/backend/sync-retry重试后端同步
GET/api/v1/system/sync/{sync_path}路径形式的同步状态兼容接口
POST/api/v1/system/sync/{sync_path}/retry路径形式的同步重试兼容接口

资源文件系统

方法路径说明
POST/api/v1/resources/temp_upload上传后续导入所需的临时文件
POST/api/v1/resources从 URL 或临时文件添加资源
GET/api/v1/fs/ls列出目录
GET/api/v1/fs/tree获取目录树
GET/api/v1/fs/stat获取资源状态
GET/api/v1/fs/attrs获取逻辑扩展属性
POST/api/v1/fs/attrs/set_tags设置检索标签(兼容别名)
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/batch-write执行带前置条件的多文件写入
POST/api/v1/content/set_tags设置检索标签
POST/api/v1/content/reindex重建语义或向量索引

技能

方法路径说明
GET/api/v1/skills列出技能
POST/api/v1/skills添加技能
POST/api/v1/skills/find搜索技能
POST/api/v1/skills/validate校验技能数据
GET/api/v1/skills/{skill_name}获取技能
PUT/api/v1/skills/{skill_name}更新技能
DELETE/api/v1/skills/{skill_name}删除技能

会话记忆

方法路径说明
POST/api/v1/sessions创建会话
GET/api/v1/sessions列出会话
GET/api/v1/sessions/{session_id}获取会话
GET/api/v1/sessions/{session_id}/tool-results列出工具结果
GET/api/v1/sessions/{session_id}/tool-results/{tool_result_id}读取工具结果
GET/api/v1/sessions/{session_id}/tool-results/{tool_result_id}/search在工具结果内搜索
GET/api/v1/sessions/{session_id}/context获取组装后的上下文
GET/api/v1/sessions/{session_id}/archives/{archive_id}获取会话归档
DELETE/api/v1/sessions/{session_id}删除会话
POST/api/v1/sessions/{session_id}/commit归档会话并提取记忆
POST/api/v1/sessions/{session_id}/extract提取记忆
POST/api/v1/sessions/{session_id}/messages添加单条消息
POST/api/v1/sessions/{session_id}/messages/batch批量添加消息
POST/api/v1/sessions/{session_id}/used记录实际使用的上下文或技能
POST/api/v1/search/recall召回记忆并返回可直接注入的上下文

检索代码检索关系

方法路径说明
POST/api/v1/search/find语义搜索
POST/api/v1/search/search上下文感知搜索
POST/api/v1/search/grep内容模式搜索
POST/api/v1/search/glob文件模式匹配
POST/api/v1/code/outline提取代码结构
POST/api/v1/code/search代码搜索
POST/api/v1/code/expand展开代码上下文
GET/api/v1/relations获取资源关系
POST/api/v1/relations/link创建资源链接
DELETE/api/v1/relations/link删除资源链接
POST/api/v1/relations/build_graph构建关系图

Watch快照OVPack

方法路径说明
GET/api/v1/watches列出 watch,或按 to_uri 查询
GET/api/v1/watches/{task_id}按任务 ID 获取 watch
PATCH/api/v1/watchesto_uri 更新 watch
PATCH/api/v1/watches/{task_id}按任务 ID 更新 watch
DELETE/api/v1/watchesto_uri 删除 watch
DELETE/api/v1/watches/{task_id}按任务 ID 删除 watch
POST/api/v1/watches/triggerto_uri 触发 watch
POST/api/v1/watches/{task_id}/trigger按任务 ID 触发 watch
POST/api/v1/snapshot/commit创建快照
GET/api/v1/snapshot/log查看快照历史
POST/api/v1/snapshot/restore恢复历史快照
GET/api/v1/snapshot/show查看快照或其中的文件
GET/api/v1/snapshot/diff对比快照
GET/api/v1/snapshot/ignore读取快照忽略规则
PUT/api/v1/snapshot/ignore替换快照忽略规则
DELETE/api/v1/snapshot/ignore清空快照忽略规则
POST/api/v1/pack/export导出 .ovpack
POST/api/v1/pack/import导入 .ovpack
POST/api/v1/pack/backup备份公开作用域
POST/api/v1/pack/restore恢复备份包

后台任务运行观测Metrics

方法路径说明
GET/api/v1/tasks/{task_id}获取后台任务
GET/api/v1/tasks列出后台任务
GET/api/v1/observer/queue队列状态
GET/api/v1/observer/vikingdbVikingDB 状态
GET/api/v1/observer/models模型状态
GET/api/v1/observer/lock锁状态
GET/api/v1/observer/retrieval检索状态
GET/api/v1/observer/filesystem文件系统状态
GET/api/v1/observer/system聚合运行状态
GET/metricsPrometheus 指标

管理员隐私配置

方法路径说明
POST/api/v1/admin/accounts创建账号及首个管理员
GET/api/v1/admin/accounts列出账号
POST/api/v1/admin/migrate迁移旧版身份数据
DELETE/api/v1/admin/accounts/{account_id}删除账号
POST/api/v1/admin/accounts/{account_id}/users注册用户
GET/api/v1/admin/accounts/{account_id}/users列出用户
DELETE/api/v1/admin/accounts/{account_id}/users/{user_id}移除用户
PUT/api/v1/admin/accounts/{account_id}/users/{user_id}/role修改用户角色
POST/api/v1/admin/accounts/{account_id}/users/{user_id}/key重新生成用户 Key
GET/api/v1/privacy-configs列出隐私配置分类
GET/api/v1/privacy-configs/{category}列出分类目标
GET/api/v1/privacy-configs/{category}/{target_key}获取生效配置
GET/api/v1/privacy-configs/{category}/{target_key}/versions列出配置版本
GET/api/v1/privacy-configs/{category}/{target_key}/versions/{version}获取指定版本
POST/api/v1/privacy-configs/{category}/{target_key}写入并激活新版本
POST/api/v1/privacy-configs/{category}/{target_key}/activate激活指定版本

WebDAVVikingBot API

方法路径说明
OPTIONS/webdav/resources/webdav/resources/{resource_path}查询 WebDAV 能力
PROPFIND/webdav/resources/webdav/resources/{resource_path}查询资源属性
GET / HEAD/webdav/resources/webdav/resources/{resource_path}读取文件或目录
PUT/webdav/resources/webdav/resources/{resource_path}写入 UTF-8 文本文件
DELETE/webdav/resources/webdav/resources/{resource_path}删除文件或目录
MKCOL/webdav/resources/webdav/resources/{resource_path}创建目录
MOVE/webdav/resources/webdav/resources/{resource_path}移动或重命名资源
GET/bot/v1/healthVikingBot 健康检查
POST/bot/v1/chatVikingBot 非流式对话
POST/bot/v1/chat/streamVikingBot 流式对话
POST/bot/v1/feedback提交 VikingBot 回答反馈
POST/bot/v1/compile启动 Skill 驱动的 Compile 任务
GET/bot/v1/compile/{task_id}获取 Compile 任务状态

文档阅读计划

左侧导航按职责而不是按历史文件体积组织:

分组适合查找的内容
核心数据资源、内容、文件系统、技能、会话、记忆
检索与关系语义检索、代码检索、资源关系
数据生命周期Watch、快照、OVPack
运维与观测系统、任务、Observer、Metrics
身份与治理管理员、隐私配置
协议与扩展WebDAV、VikingBot API

Released under the Apache-2.0 License.