/api/v1/content/write 接口用于修改一个已存在的文件,或在 mode="create" 时创建新文件,并自动刷新相关语义与向量。
replace和append要求文件已存在;create仅用于创建新文件,目标路径已存在时返回409 Conflict。目录始终会被拒绝。create只允许以下文本类扩展名:.md、.txt、.json、.yaml、.yml、.toml、.py、.js、.ts。父目录会自动创建。- 不允许直接写入派生语义文件:
.abstract.md、.overview.md、.relations.json。- 文件内容会在 API 返回前完成更新;
wait只控制是否等待语义/向量刷新完成。- 公共 API 已不再接受
regenerate_semantics或revectorize;写入后一定会自动刷新相关语义与向量。
完成 API 鉴权说明 页面的 API Key 获取后,可调用本接口写入内容。
URI | /api/v1/content/write | 统一资源标识符 |
|---|---|---|
请求方法 | POST | 客户端请求类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: Bearer | Bearer Token 鉴权 |
参数 | 类型 | 必选 | 默认值 | 备注 |
|---|---|---|---|---|
uri | string | 是 | -- | 已存在文件的 URI |
content | string | 是 | -- | 要写入的新内容 |
mode | string | 否 |
| 写入模式: |
wait | bool | 否 | false | 是否等待后台语义/向量刷新完成 |
timeout | float | 否 | null | 当 |
字段 | 参数说明 |
|---|---|
status | 请求状态,成功为 |
result | 成功时返回的数据对象 |
result.uri | 写入文件的 Viking URI |
result.root_uri | 资源的根 URI |
result.context_type | 上下文类型 |
result.mode | 写入模式 |
result.written_bytes | 写入字节数 |
result.content_updated | 内容是否已更新 |
result.semantic_status | 语义刷新状态 |
result.vector_status | 向量刷新状态 |
result.queue_status | 队列处理状态(含 Semantic 和 Embedding 子项,每个子项包含 |
error | 失败时返回的错误对象 |
error.code | 错误码字符串,常见值见下表 |
error.message | 可读的错误描述 |
常见错误码:
error.code | HTTP 状态码 | 说明 |
|---|---|---|
UNAUTHENTICATED | 401 | 缺少或无效的 API Key |
INVALID_ARGUMENT | 400 | 无效参数,如 uri 为目录、 |
INVALID_URI | 400 | 无效的 Viking URI 格式 |
CONFLICT | 409 |
|
NOT_FOUND | 404 |
|
curl -X POST "https://xxx/api/v1/content/write" \ -H "Content-Type: application/json" \ -H "X-API-Key: your-key" \ -d '{ "uri": "viking://resources/docs/api.md", "content": "# Updated API\n\nFresh content.", "mode": "replace", "wait": true }'
执行成功返回:
HTTP/1.1 200 OK Content-Type: application/json { "status": "ok", "result": { "uri": "viking://resources/docs/api.md", "root_uri": "viking://resources/docs", "context_type": "resource", "mode": "replace", "written_bytes": 29, "content_updated": true, "semantic_status": "complete", "vector_status": "complete", "queue_status": { "Semantic": { "processed": 1, "requeue_count": 0, "error_count": 0, "errors": [] }, "Embedding": { "processed": 0, "requeue_count": 0, "error_count": 0, "errors": [] } } } }