## trace 格式约定 Q1: 当前时间:8月7日15:39,balbal111 A1: xxx Q2: 当前时间:8月7日15:40,balbal111, xxx, blabal222 A2: yy Q3: 当前时间:8月7日15:40, blabal222, yy, blabla333 -> 当前时间:8月7日15:40,balbal111, xxx, blabal222, yy, blabla333 | 字段名 | 类型【feather】 | 说明 | | ------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------- | | request_id | str | 当前请求的唯一标识 | | chat_id | str【int】 | 从 0 开始递增的唯一标识 | | session_id【当前不支持】 | str | 一个 session 的唯一标识 | | parent_chat_id | str【int】 | session 中上一轮对话请求的 chat_id,若不存在上一轮对话,则为 -1 | | uid【当前不支持】 | str | 请求来自用户的 uid | | time | str | 请求到达时间,形如 `"2025-02-18 23:52:48.827000"` | | end_time | str【datetime】 | 请求结束时间,形如 `"2025-02-18 23:53:00.854000"` | | timestamp | float【datetime】 | 请求到达时间的时间戳(单位 s) | | first_latency | int | 首包延迟,TTFT (单位 ms) | | duration | int | 请求总耗时,E2E latency (单位 ms) | | input_token_length | int | 输入 token 总数 | | output_token_length | int | 输出 token 总数 | | usage | dict | 该请求的资源用量,形如 `{'input_tokens': 1195, 'output_tokens': 246, 'plugins': {'wanx': {'count': 1}}, 'total_tokens': 1441}` | | token_ids | list | 输入的 token list,使用 qwen vocab range 的 token id | | input_text | str | 输入的 prompt | | messages | list | 该请求的 context,形如 `[("system", "You are an assistant"), ("user", "hi"), ("assistant", "hello"), ("user", "world")]` | | turn | int | 该请求在所处 session 的对话轮数 | | type | str | workload tag | | no_sp_messages | list | 移除 system prompt 中时间对 prefix cache 影响后的 messages | | no_sp_input_text | str | 移除 system prompt 中时间对 prefix cache 影响后的 input_text | | no_sp_sw_messages | list | 在 no_sp 的基础上,进一步移除了 sliding window 影响后的 messages | | no_sp_sw_input_text | str | 在 no_sp 的基础上,进一步移除了 sliding window 影响后的 input_text | | no_sp_token_ids | list | 移除 system prompt 中时间对 prefix cache 影响后的 token_ids | | no_sp_sw_token_ids | list | 在 no_sp 的基础上,进一步移除了 sliding window 影响后的 token_ids | | no_sp_sw_output_token_ids | list | 若有下一轮对话,从下一轮对话的 answer 获取 token_ids,若没有则随机生成一段长度为 output_token_length 的 token_ids | ## 处理流程 - pass 1: 将能够从 raw trace 中直接获得的字段获取,还剩下 parent_chat_id, session_id, type, uid (in traceA) 无法获取,获取时删除所有 illegal 的 record,按照 timestamp 排序 - pass2: streaming 的获取 session,设置 parent_chat_id,设置 session_id,更新 turn 字段(因为存在 sliding window,直接 count user 的 message 次数存在 bias) - pass3: 通过 plugins 设置 type - traceA zhiwen_doc_search, pdf_extracter: file tongyi_nlp_web_search, tongyi_nlp_deep_search, search: search wanx: image other: text - traceB same system prompt qps > 0.5: api other: file - pass4: 移除 system prompt 中的时间和 sliding window 导致的 prefix unmatch,添加上 no_sp, no_sp_sw 相关 field - pass5: 添加 output_token_ids,如果有下一轮对话,则为下一轮对话的 answer,否则为 random gen 的长度为 output_token_length 的 list ## 现存问题 - 新 traceA 中 uid 无法获取 - fig6: KV cache reuse by same uid - fig7: hit by uid count - fig8: reqs count by uid - fig10: number of turns by uid ## TBD - [ ] 确认处理一个 session 内前后 chat turn(即设置 parent_chat_id 的过程)是否正确