Replies: 1 comment 1 reply
-
|
需要简单改下 code block format。 看起来 http API 透出 token usage 需要等 trace 支持? |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
OpenViking 请求级 Trace 详细设计文档
摘要
本设计为 OpenViking 增加请求粒度 trace 能力,覆盖 find / search / add_resource / add_skill / session.commit。
设计重点是把“采集、聚合、输出”解耦成统一框架,业务只上报事件,不拼装响应。
默认关闭,开启后返回稳定的 result.trace(summary + events),并内置版本化与扩展点。
———
1. 设计原则
———
2. API 变更与用法
请求参数
所有目标接口新增:
接口列表:
使用示例(HTTP)
curl -X POST http://localhost:8080/api/v1/search/find
-H 'Content-Type: application/json'
-d '{
"query": "memory dedup strategy",
"limit": 5,
"trace": true
}'
curl -X POST http://localhost:8080/api/v1/resources
-H 'Content-Type: application/json'
-d '{
"path": "/tmp/a.md",
"wait": true,
"trace": true
}'
Python 用法(建议)
res = await client.find(query="semantic node", trace=True)
print(res.trace["summary"]["total_duration_ms"])
———
3. 输出协议(Trace Schema v1)
顶层结构
result.trace 固定为:
summary 字段(核心指标)
events 字段(时间线)
每条事件包含:
———
4. 输出示例
示例 A:find(trace=true)
{
"status": "ok",
"result": {
"resources": [],
"memories": [],
"skills": [],
"total": 0,
"trace": {
"schema_version": "v1",
"summary": {
"trace_id": "tr_4f2d...",
"operation": "search.find",
"status": "ok",
"total_duration_ms": 42.8,
"token_usage": {
"input_tokens": 0,
"output_tokens": 0,
"total_tokens": 0
},
"vector": {
"search_calls": 3,
"candidates_scored": 28,
"candidates_after_threshold": 7,
"returned": 5,
"vectors_scanned": null,
"scan_unavailable_reason": "backend_not_exposed"
},
"semantic_nodes": {
"total_nodes": null,
"done_nodes": null,
"pending_nodes": null,
"in_progress_nodes": null
},
"memory": {
"memories_extracted": null
},
"errors": {
"error_stage": "",
"error_code": "",
"message": ""
}
},
"events": [
{
"stage": "retriever.global_search",
"name": "global_search_done",
"ts_ms": 8.4,
"status": "ok",
"attrs": {
"hits": 3
}
}
]
}
}
}
示例 B:add_resource(wait=true, trace=true)
{
"status": "ok",
"result": {
"status": "success",
"root_uri": "viking://resources/doc",
"trace": {
"schema_version": "v1",
"summary": {
"trace_id": "tr_78b1...",
"operation": "resources.add_resource",
"status": "ok",
"total_duration_ms": 631.2,
"token_usage": {
"input_tokens": 412,
"output_tokens": 166,
"total_tokens": 578
},
"vector": {
"search_calls": 0,
"candidates_scored": 0,
"candidates_after_threshold": 0,
"returned": 0,
"vectors_scanned": null,
"scan_unavailable_reason": ""
},
"semantic_nodes": {
"total_nodes": 31,
"done_nodes": 31,
"pending_nodes": 0,
"in_progress_nodes": 0
},
"memory": {
"memories_extracted": null
},
"errors": {
"error_stage": "",
"error_code": "",
"message": ""
}
},
"events": [
{
"stage": "resource.parse",
"name": "parse_done",
"ts_ms": 121.6,
"status": "ok",
"attrs": {
"warnings_count": 1
}
},
{
"stage": "resource.wait",
"name": "queue_complete",
"ts_ms": 629.9,
"status": "ok",
"attrs": {
"semantic_done_nodes": 31
}
}
]
}
}
}
示例 C:session.commit(trace=true)
{
"status": "ok",
"result": {
"memories_extracted": 4,
"trace": {
"schema_version": "v1",
"summary": {
"operation": "session.commit",
"memory": {
"memories_extracted": 4
}
},
"events": []
}
}
}
———
5. 类设计(核心)
类一:TraceCollector
职责:
关键方法:
类二:TraceSummaryBuilder
职责:
关键方法:
类三:TraceSerializer
职责:
关键方法:
类四:TraceContext
职责:
关键方法:
类五:TraceProvider(抽象)
职责:
关键方法:
实现类:
———
6. 关键流程设计
Router 层
Service/Storage 层
add_resource(wait=true) 语义结点
———
7. 扩展机制
———
8. 测试与验收
———
9. 默认行为与约束
代码实现:
https://github.com/volcengine/OpenViking/tree/feat/request-trace-metrics
Beta Was this translation helpful? Give feedback.
All reactions