优化: token分项显示(in/cache/out/reasoning)+ 详情面板 + base前置
token分项(各计费不同,不显 total):df-ai 解析 provider cache/reasoning(openai_compat prompt_cache_hit/miss/reasoning_tokens + anthropic cache_read/creation)+ TokenUsage 加字段(全构造点)+ AiMessage/AiCompleted/DB V39(ai_messages 加 cache_hit/miss/reasoning 列)+ message_repo 映射(持久化)+ 前端 MessageList 显 in·cache·out·reason(in=cache_miss 全价,reasoning 有才显)+ 点击 token 弹详情面板(完整 usage+缓存命中率+model)+ df-miniapp 同步 base前置(提升 prompt cache 命中率):chat.rs aug 拼 base 后(4处)+ knowledge_inject 知识拼 base 后(固定 base 前缀,cache 命中) 附修:replace_conversation 原 13 列 INSERT 丢消息级 token → 改 18 列
This commit is contained in:
+28
-2
@@ -393,7 +393,14 @@ export type AiChatEvent = ({
|
||||
} | {
|
||||
// UX-2025-04 / CR-30-2 / 决策 F-260616-07 a1: incomplete 标记流中途失败保文(网络中断),
|
||||
// 前端据此差异化展示(如系统提示「⚠ 响应因网络中断不完整」)。正常完成/停止均为 undefined。
|
||||
type: 'AiCompleted'; total_tokens: number; prompt_tokens: number; completion_tokens: number; incomplete?: boolean; pinned_goals?: GoalEntry[]
|
||||
type: 'AiCompleted'; total_tokens: number; prompt_tokens: number; completion_tokens: number
|
||||
/** token 分项显示(2026-08-02):cache 命中(低价,deepseek prompt_cache_hit/anthropic cache_read) */
|
||||
prompt_cache_hit_tokens: number
|
||||
/** 未命中(全价真实输入,deepseek prompt_cache_miss/anthropic cache_creation)。前端 in 显示用此 */
|
||||
prompt_cache_miss_tokens: number
|
||||
/** 思考(deepseek-reasoner/o1 reasoning_tokens,隐藏输出)。0=非 reasoning 模型 */
|
||||
reasoning_tokens: number
|
||||
incomplete?: boolean; pinned_goals?: GoalEntry[]
|
||||
} | {
|
||||
type: 'AiError'; error: string; error_type?: AiErrorType
|
||||
} | {
|
||||
@@ -512,8 +519,21 @@ export interface AiMessage {
|
||||
/**
|
||||
* 这一轮对话的 token 用量(仅 assistant 消息,每轮 AiCompleted 时回填)。
|
||||
* undefined=未记录(历史消息/未启用 token 显示)。
|
||||
*
|
||||
* token 分项显示(2026-08-02):tokenUsage 扩展 cache_hit/cache_miss/reasoning。
|
||||
* in 显示用 cache_miss(全价真实),非 prompt(总,含 cache_hit 掩盖命中比例)。
|
||||
* 老消息(无 cache 字段)cache_hit/cache_miss/reasoning undefined,前端 fallback prompt_tokens。
|
||||
*/
|
||||
tokenUsage?: { prompt: number; completion: number }
|
||||
tokenUsage?: {
|
||||
prompt: number
|
||||
completion: number
|
||||
/** 缓存命中(低价) */
|
||||
cache_hit?: number
|
||||
/** 未命中(全价真实输入,前端 in 显示用此) */
|
||||
cache_miss?: number
|
||||
/** 思考 token(隐藏输出) */
|
||||
reasoning?: number
|
||||
}
|
||||
/**
|
||||
* 本轮输入 token(消息级持久化,后端 ChatMessage.prompt_tokens 镜像)。
|
||||
* reload 时由 switchConversation 映射回 tokenUsage(历史 assistant 消息 token 回显)。
|
||||
@@ -522,6 +542,12 @@ export interface AiMessage {
|
||||
prompt_tokens?: number
|
||||
/** 本轮输出 token(语义同 prompt_tokens)。 */
|
||||
completion_tokens?: number
|
||||
/** 缓存命中 token(低价)。老消息 undefined(向前兼容)。 */
|
||||
prompt_cache_hit_tokens?: number
|
||||
/** 未命中 token(全价真实输入,前端 in 显示用此)。老消息 undefined。 */
|
||||
prompt_cache_miss_tokens?: number
|
||||
/** 思考 token(deepseek-reasoner/o1 reasoning_tokens)。老消息 undefined。 */
|
||||
reasoning_tokens?: number
|
||||
timestamp: number
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user