ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Warp 编排信用聚合指南:让 agent-mode 使用摘要 footer 显示完整的 orchestration 成本

Warp 编排信用聚合指南:让 agent-mode 使用摘要 footer 显示完整的 orchestration 成本 桌面应用开发者工具人工智能AI 应用AI Agent代码智能体【免费下载链接】warpWarp is an agentic development environment, born out of the terminal.项目地址https://gitcode.com/GitHub_Trending/wa/warp点击查看免费下载当 Warp 的 Agent 以「编排者Orchestrator」身份派生子代理child agent并行工作时父会话原有的信用消耗统计只反映编排者自身子代理产生的信用消耗被完全隐藏。本篇技术指南围绕仓库中的 specs/QUALITY-671/TECH.md 及其配套产品规格 specs/QUALITY-671/PRODUCT.md深入剖析 Warp 如何通过compute_orchestration_rollup聚合编排者与全部本地已知后代的信用消耗在折叠 footer 药丸与展开的使用摘要USAGE SUMMARY中呈现「编排总成本」并支持按代理展开明细。读完本文你将理解 rollup 纯函数的聚合与排序规则、children_by_parent拓扑索引的遍历方式、展开/折叠 footer 的本地 UI 状态管理以及这套自门控self-gating机制如何在不引入新 feature flag 的前提下保持旧 UI 完全兼容。背景orchestration 场景下被隐藏的真实成本Warp 的 agent-mode footer 在两种层级渲染折叠 footercredits 折叠箭头的小药丸由 app/src/ai/blocklist/block/view_impl/output.rs 中的render_usage_button构建读取conversation.credits_spent()、credits_spent_for_last_block()、token_usage()与tool_usage_metadata().total_tool_calls()。当这些数据全部为空时按钮被完全抑制。展开 footer完整使用摘要由 app/src/ai/blocklist/usage/conversation_usage_view.rs 中的ConversationUsageView持有输出 USAGE SUMMARY、TOOL CALL SUMMARY 与 LAST RESPONSE TIME 三个区块。当某个会话是编排者时它派生的子代理children、孙代理grandchildren在远端或本地持续消费信用但这些消耗从未出现在父会话的 footer 上——父会话展示的永远只是自己的「自我消耗」。这让用户无法直观判断一次 orchestration run 的端到端真实成本尤其是当编排者本身只做了少量「调度」工作而把大部分 token 消耗分发给子代理时。QUALITY-671 的目标正是修复这一信息缺口在父会话的展开 footer 中将 Credits spent (total) 行替换为编排总成本编排者 所有本地已知后代传递性地求和并在其下方提供一个可点击展开的按代理per-agent信用明细列表。同时折叠 footer 的药丸 headline 数字也切换到编排总数让用户无需展开即可一眼看到真实成本。产品行为总览PRODUCT invariantsspecs/QUALITY-671/PRODUCT.md 以 17 条行为不变量invariants锁定 v1 范围核心几条如下invariant 1凡是没有本地加载后代会话、或加载的后代全部零消耗的会话footer 渲染与今天完全一致不新增任何 UI。invariant 2当 footer 所属会话是编排者且至少有一个本地加载、已消耗信用的后代时2aCredits spent (total) 数值变为编排总数orchestrator 所有本地已知后代传递求和2b数值行右侧同一行出现带下箭头图标的 View details 链接2c点击后链接变为 Hide details 上箭头图标并在该行下方展示 per-agent 明细列表2d再次点击折叠恢复 View details。invariant 3Credits spent (last response) 行永远只反映编排者自身最近一个 block 的信用绝不参与 rollup。invariant 4v1 只做信用credits的 rollupTool calls、Models、Context window、TOOL CALL SUMMARY 与 LAST RESPONSE TIME 全部保持自我self-only。invariant 5per-agent 列表按信用降序排列平局按 spawn 顺序先 spawn 在前每行展示头像圆盘、显示名与format_credits格式化的信用值只包含消耗 0 的代理≤5 行全展示5 行展示前 5 行加 Show N more 链接点击后全部展示且链接消失不会变成 Show fewerv1 中列表行不可点击。invariant 6折叠 footer 再展开时View details 与 Show N more 的本地 UI 状态自动重置。invariant 7footer 打开期间rollup 总数、列表内容与 Show N more 计数随子代理流式消耗实时更新。invariant 10本地未加载的后代会话不参与 rollup、不进入列表且 v1 不做任何警告提示best-effort 求和。invariant 11折叠药丸显示编排总数(N)增量注解仍使用编排者自身最近 block 的信用「无使用数据则隐藏按钮」的判定基于 rollup 总数。invariant 17设置页Settings-mode的 usage 视图完全不变rollup 仅作用于DisplayMode::Footer。聚合核心rollup.rs的纯函数实现新增模块 app/src/ai/blocklist/usage/rollup.rs 暴露了 rollup 的全部数据模型与计算入口。TECH.md 中定义的核心结构实现后略有扩充如下pub enum AgentAvatar { /// 编排者本身渲染 Oz 字形于 ansi_fg_cyan。 Orchestrator, /// 后代代理复用 orchestration pill bar 的确定性颜色 大写首字母。 Child, } pub struct PerAgentCreditEntry { pub conversation_id: AIConversationId, pub display_name: String, pub avatar: AgentAvatar, pub credits_spent: f32, } pub struct OrchestrationCreditRollup { pub total_credits: f32, pub total_cost_in_cents: Optionf32, pub total_tokens: Optionu32, pub per_agent: VecPerAgentCreditEntry, } pub fn compute_orchestration_rollup( parent_id: AIConversationId, history: BlocklistAIHistoryModel, ) - OptionOrchestrationCreditRollup;返回None的两个条件对照 rollup.rs 的实现compute_orchestration_rollup在以下情况返回None编排者没有任何本地加载的后代先调用descendant_conversation_ids_in_spawn_order(history, parent_id)获取后代 ID 列表为空则直接返回None对应 invariant 1。所有候选代理编排者 后代信用均为零entries列表为空时返回None对应 invariant 7。值得注意的是一个微妙点编排者自身即使有大量消耗只要没有后代就不会触发 rollup——rollup 的存在意义就是聚合整个编排树而不是单独替编排者改变显示。逐会话累加与零信用跳过对编排者本身以及每个加载的后代代码执行let credits orchestrator.credits_spent(); total_credits credits; // 零信用贡献者跳过 cost/token 累加它尚未上报任何使用量 // 其 None 计费元数据不得污染已产生贡献的累加总和。 if credits 0.0 { let usage_totals orchestrator.usage_totals(); accumulate_cost(mut total_cost_in_cents, usage_totals.total_cost_in_cents()); accumulate_tokens(mut total_tokens, usage_totals.charged_usage.map(|u| u.total_tokens())); entries.push(PerAgentCreditEntry { /* ... */ }); }这条「零信用跳过」逻辑非常关键新 spawn 的子代理在首次上报使用量之前其charges元数据是None如果把它当作未知基线参与累加会通过accumulate_cost/accumulate_tokens的(Some, None) None传播逻辑把整个美元成本或 token 总数永久置为None。而「尚未消费任何东西」的代理不应该拥有这种否决权——它什么都没贡献自然也不应破坏已贡献者的汇总。这正是 rollup_tests 中zero_credit_descendant_does_not_poison_cost_or_token_totals用例要锁定的行为。total_cost_in_cents与total_tokens的全有或全无语义与total_credits不同美元成本与 token 总数是Option类型遵循全有或全无语义当每个有信用贡献的会话都有已知的计费基线charged usage时返回完整求和如Some(66.0)只要任意一个贡献者缺失基线例如遗留会话、PricingTransparencyflag 关闭的源累加器就永久传播None——与其展示一个不完整的部分和不如整体省略美元/ token 数字避免误导。在折叠药丸的 headline 区域render_usage_button同样遵循这条拆分规则rollup 存在时美元成本与 token 取自rollup.total_cost_in_cents/rollup.total_tokensrollup 为None的非编排会话则回退到会话自身的usage_totals()见 output.rs 中headline_cost_in_cents/headline_tokens的unwrap_or_else分支。排序规则信用降序 spawn 顺序平局entries以(spawn_idx, PerAgentCreditEntry)元组收集编排者固定以spawn_idx 0插入因此信用相同时编排者永远排在后代之前后代按遍历顺序从 1 开始编号。最终排序entries.sort_by(|a, b| { b.1.credits_spent.partial_cmp(a.1.credits_spent) .unwrap_or(Ordering::Equal) .then(a.0.cmp(b.0)) });即信用降序平局时早 spawn 者在前。这精确实现了 invariant 5b。显示名回退编排者行优先agent_name()为空则回退为Orchestrator子代理行优先agent_name()为空则回退为Agent——这与 orchestration pill bar 的标签回退保持一致见 orchestration_pill_bar.rs 中的同名回退保证 footer 明细与 pill bar 的命名观感统一。拓扑遍历children_by_parent索引与 spawn-order walkerrollup 依赖的遍历能力来自共享模块 app/src/ai/blocklist/orchestration_topology.rs这正是 TECH.md 强调的「从 pill bar 提取、禁止重复实现」的落地成果BlocklistAIHistoryModel维护一个children_by_parent父子索引由start_new_child_conversation与set_parent_for_conversation维护见 history_model.rs 中child_conversation_ids_of等 API。descendant_conversation_ids_in_spawn_order通过递归的collect_descendant_conversation_ids_in_spawn_order以**先序pre-order**遍历整棵子树每一层保持父节点的子注册顺序返回扁平化列表pub fn collect_descendant_conversation_ids_in_spawn_order( history: BlocklistAIHistoryModel, parent_id: AIConversationId, descendants: mut VecAIConversationId, ) { for child_id in history.child_conversation_ids_of(parent_id) { descendants.push(*child_id); collect_descendant_conversation_ids_in_spawn_order(history, *child_id, descendants); } }两个实现要点walker 只读children_by_parent索引因此即使子会话尚未加载进conversations_by_id其 ID 也会被返回rollup 侧再通过history.conversation(id)过滤——查不到AIConversation的「未加载后代」被静默跳过invariant 10。遍历顺序天然构成 spawn-order 平局依据rollup 无需再引入时间戳比较。该模块还沉淀了其他编排拓扑工具如orchestration_root_conversation_id、aggregated_orchestrator_status、loaded_subtree_rollup说明这套 walker 已成为键盘导航、pill bar 状态汇总与信用 rollup 共享的基础设施。展开 footerConversationUsageView的 rollup 接线两种构造路径与rollup()短路conversation_usage_view.rs 中ConversationUsageView扩展出两类构造new(...)Settings 模式与旧 footer 路径使用parent_conversation_id置为Nonenew_footer_with_rollup(...)footer 构造方始终使用持有父会话 ID并在渲染期调用compute_orchestration_rollup。内部rollup()方法先做两道短路检查fn rollup(self, app: AppContext) - OptionOrchestrationCreditRollup { if self.display_mode ! DisplayMode::Footer { return None; // Settings 模式直接短路 } let parent_id self.parent_conversation_id?; // 非 rollup 构造路径 let history BlocklistAIHistoryModel::as_ref(app); compute_orchestration_rollup(parent_id, history) }因此 Settings 模式即使误传了 rollup 数据也不会渲染任何 rollup UIinvariant 17 的防御性行为。渲染管线总数行、toggle 与 per-agent 列表render_unified_layout中Credits spent (total) 的数值来源被替换let total_credits_value rollup .as_ref() .map(|r| r.total_credits) .unwrap_or(self.usage_info.credits_spent self.usage_info.platform_credits_spent);当rollup.is_some()时render_total_usage_value_row在数值右侧追加render_toggle_linkView details Icon::ChevronDown/ Hide details Icon::ChevronUp采用ansi_fg_blue超链接色、Cursor::PointingHand可键盘聚焦、Enter/Space 激活——满足 invariant 14。append_per_agent_rows在details_expanded true时把每行代理压入 label/value 双列布局头像圆盘AgentAvatar::Orchestrator用render_orchestrator_avatar_discOz 字形 ansi_fg_cyanChild用render_agent_avatar_disc按名字的确定性颜色 大写首字母圆盘直径 16px名称列使用text_disabled色与 USAGE SUMMARY 区块标题同色让明细行读起来是区块的子列表而非竞争主标签并钳制在PER_AGENT_LABEL_MAX_WIDTH 110.0内、超长省略号截断——与 pill bar 的PILL_LABEL_MAX_WIDTH镜像防止长代理名把信用值列挤出屏幕数值列format_credits(entry.credits_spent)并使用text_sub色视觉上与 Credits spent 标签呼应。5 行截断与 Show N morePER_AGENT_BREAKDOWN_TRUNCATION_CAP 5常量实现 invariant 5e/5flet shown_entries if total_entries PER_AGENT_BREAKDOWN_TRUNCATION_CAP !self.show_all_clicked { PER_AGENT_BREAKDOWN_TRUNCATION_CAP } else { total_entries };隐藏行数N total_entries - shown_entries时左侧渲染 Show N more 超链接dispatchShowAllAgentRows动作右侧渲染一个单空格Text占位符——这里有个值得注意的细节Empty元素高度为零会让右列少一行导致后续 Tool calls 与 Show N more 错位配对单空格Text强制产生与链接等高的行高保证双列 flex 布局行对齐见render_value_text_placeholder的注释。本地 UI 状态与动作管线ConversationUsageViewAction提供类型化动作面ToggleDetailsExpanded翻转details_expanded折叠时同时把show_all_clicked复位为false使用户下次展开时回到截断列表ShowAllAgentRows置show_all_clicked trueToggleContextWindowExpanded控制既有 context-window 分段明细与本特性无关的既有能力。关键设计展开 footer 的视图实例在is_usage_footer_expanded每次翻转为 true 时由render_usage_footer全新构建折叠期间并不持有实例。因此details_expanded/show_all_clicked在折叠再展开时天然复位invariant 6无需显式清理。TECH.md 同时提醒若未来实现将视图实例跨折叠缓存则必须在打开过渡时显式复位或把布尔量提升为父级重建的 props。折叠药丸render_usage_button的 rollup 消费output.rs 中的render_usage_button无条件调用let rollup compute_orchestration_rollup(conversation.id(), BlocklistAIHistoryModel::as_ref(app));随后三处决策切换为 rollup 语义headline 数字invariant 11headline_credits rollup.map(|r| r.total_credits).unwrap_or_else(|| conversation.credits_spent())美元/ token headline分别取rollup.total_cost_in_cents/rollup.total_tokens回退到会话自身usage_totals()「无使用数据则隐藏按钮」判定invariant 11bhas_any_usage中的headline_credits 0.0检查用的是 rollup 总数——只要任意贡献代理消费了一个信用药丸就会出现即使编排者自身还没花任何钱。而(N)增量注解完全不变output.rs 中credits_spent_for_last_block 0.0 total_credits_spent ! credits_spent_for_last_block 无错误的既有条件它继续读取编排者自身的credits_spent_for_last_block()语义变为「编排者最近一次响应为编排总数新增的信用」。rollup 激活时 headline ≫ last block因此只要编排者最近有响应注解就会出现——这正是 invariant 11a 期望的行为。自门控在这里同样成立会话没有后代时 helper 返回None药丸与今天逐像素一致。实时更新事件订阅驱动的 footer 重渲染invariant 7/8/9 要求 footer 打开期间 rollup 随子代理消耗实时变化。new_footer_with_rollup通过ctx.subscribe_to_model(history_model, ...)订阅BlocklistAIHistoryModel事件过滤逻辑值得细读let touched_id match event { BlocklistAIHistoryEvent::ConversationUsageMetadataUpdated { conversation_id } | BlocklistAIHistoryEvent::RemoveConversation { conversation_id, .. } | BlocklistAIHistoryEvent::DeletedConversation { conversation_id, .. } *conversation_id, _ return, }; if touched_id parent_conversation_id { ctx.notify(); return; } if descendant_conversation_ids_in_spawn_order(history, parent_conversation_id).contains(touched_id) { ctx.notify(); }三个设计决策窄化事件过滤只对ConversationUsageMetadataUpdated与两类删除事件唤醒避免「终端输入风暴」扇出到所有 rollup 订阅者导致昂贵的全量重渲染StartedNewConversation刻意排除新 spawn 的子代理信用必为零rollup 结果不变直到它首次ConversationUsageMetadataUpdatedinvariant 8 由信用更新路径满足而非 spawn 事件本身删除事件的特殊时序RemoveConversation/DeletedConversation在会话从conversations_by_id移除之后才触发但children_by_parent索引在移除时并不清理因此被剪枝的后代仍能被contains(touched_id)命中——这允许父 footer 在剪枝时正确重渲染渲染期 rollup 再通过「已加载过滤」跳过缺失会话行随之消失invariant 9。此外订阅还涵盖了AISettingsChangedEvent::UsageDisplayUnit切换信用显示单位时同步重渲染。ConversationUsageMetadataUpdated事件本身由 history_model.rs 在会话使用元数据变更StreamFinished处理路径时ctx.emit(...)产生。自门控为什么不需要独立 feature flagTECH.md 明确没有专门的OrchestrationCreditRollupflag。rollup 的激活完全由数据驱动无本地加载后代 →None所有加载后代零信用 →NoneSettings 模式 →rollup()短路None。而「创建子代理」的能力本就受FeatureFlag::OrchestrationV2门控「展开 footer 表面」受FeatureFlag::AgentView门控——rollup 只可能在两个 flag 均已开启、用户本来就具备创建与查看编排能力时触达。再加第三个 flag 只会提供 kill-switch而数据自检已经提供了同样的安全网rollup 无内容可加时保留今天 UI且免除了 flag 清理负担。测试与验证体系单元测试rollup_tests.rs通过#[cfg(test)] #[path rollup_tests.rs] mod tests;内联进模块覆盖测试用例锁定 invariantreturns_none_when_orchestrator_has_no_descendants编排者自身有信用但无后代 →Noneinvariant 1sums_orchestrator_and_loaded_descendants编排者 3 子代理 30 → total 33per_agent 2 行降序2a, 5a, 5bexcludes_zero_credit_descendants_from_breakdown混合信用含零信用子代 → 排除后 3 行降序5b, 5drolls_up_grandchildren_transitively父→子→孙三代传递求和2areturns_six_contributors_for_show_n_more_caller6 贡献者 → per_agent.len()65e/5f 的 caller 侧returns_none_when_only_orchestrator_has_zero_credits_with_loaded_children全部零信用 →Noneinvariant 7ties_break_by_spawn_order_earlier_first等信用平局 → 先 spawn 在前5bunloaded_descendant_id_is_silently_skipped拓扑索引中有 ID 但conversations_by_id缺失 → 静默跳过invariant 10sums_cost_in_cents_when_all_contributors_have_a_baseline/omits_cost_in_cents_...美元成本全有/全无语义zero_credit_descendant_does_not_poison_cost_or_token_totals零信用后代不污染 cost/token 汇总测试通过set_credits_spent_for_test/set_cost_in_cents_for_test/set_charged_usage_for_test等测试辅助方法注入数据并借助start_new_child_conversation构建编排树。渲染器测试conversation_usage_view_tests.rsDisplayMode::FooterSome(rollup)总数行显示 rollup 总数与 View details ▼点击后展开为 Hide details ▲invariant 2a–2d5 行列表全展示、无 Show N more6 行列表展示 5 行 Show 1 more点击后第 6 行出现且链接消失invariant 5e/5f折叠再展开重建视图 →details_expanded false且show_all_clicked falseinvariant 6DisplayMode::Settings即使传入 rollup 也不渲染 toggle 与列表防御性invariant 17无后代会话rollup() None总数行与今天完全一致invariant 13Credits spent (last response) 无论 rollup 状态都不变invariant 3。折叠药丸测试output_tests.rs区域非空 rollupheadline 等于rollup.total_creditsinvariant 11rollupNone无后代或仅零信用后代headline 等于conversation.credits_spent()invariants 11, 13(N)注解始终基于credits_spent_for_last_blockinvariant 11a隐藏按钮判定在适用时基于 rollup 总数invariant 11b。手动验证清单TECH.md 给出完整手测路径启动带三个子代理的本地编排oz-local或应用内编排器观察折叠药丸显示编排总数、展开 footer 总数一致、View details 按信用降序展示编排者与子代理在视图打开时让子代理完成一次响应确认药丸数字与展开 rollup 无需重新展开即更新spawn 7 子代理验证 5 Show N more 交互折叠再展开确认列表回到截断态在非编排会话上打开同一 footer 确认与今天渲染一致、无 View details 入口。提交前运行./script/presubmit格式化、clippy 与测试必须通过。方案取舍与备选设计TECH.md 记录了 v1 决策过程客户端聚合选定每个已加载后代的元数据本就在客户端遍历求和为 O(n)n 受限于本地加载的编排树实践中很小。限制是远端独占后代静默不可见invariant 10 接受——实践中该缺口很小因为服务端使用更新会流式到达客户端。服务端 rollupv1 拒绝在 GraphQL 增加conversationUsageRollup(parentId)字段在服务端遍历 run 树。优点是可覆盖远端后代缺点是新查询生命周期、与 per-conversation 元数据可能漂移的第二真相源、服务端工作量。若真实场景的偏差造成困惑作为后续推荐方案。独立 ORCHESTRATION TOTAL 区块拒绝先前的 strawman在 USAGE SUMMARY 下新增区块会重复信用数字并视觉割裂 footerFigma 设计将 rollup 融入既有 Credits spent (total) 行更干净。其他指标一并 rollup推迟v1 只做信用helper 未来可拓宽到 tool_calls、files_changed 等。折叠药丸取编排总数 vs 自我总数取编排总数invariant 11让真实成本无需展开即见(N)增量保持编排者自身 last-block 信用因为这是无需追踪代理间时序即可获得的唯一有意义的每响应增量。风险与缓解每次渲染的树遍历成本实践中编排树很小≪100 节点O(n) 常数可忽略折叠药丸每帧渲染若 profiling 表明必要可在BlocklistAIHistoryModel上记忆化 rollup或缓存于父视图并在驱动实时更新的同一事件上失效。子代理 spawn 时药丸数字跳变只盯药丸的用户可能对子代理开始消耗后的突然增长感到意外这是「一眼见真实成本」的合理代价——既有(N)增量仍显示编排者自身最近响应用户可据此归因跳变。显示名回退部分子代理agent_name None如 v1 编排或命名前 spawn回退到 Agent 短标签与 pill bar 一致需要时记录于DECISIONS.md。rollup 前元数据陈旧fork 或恢复的会话在下次StreamFinished或 GraphQL hydrate 完成前可能短暂携带陈旧conversation_usage_metadata下次渲染即纠正可接受。后续方向TECH.md 列出的 follow-ups将 rollup 拓宽到其他指标tool calls、代码编辑次数——v1 仅限信用服务端 rollup 查询使远端独占后代始终计入invariant 10 的收尾per-agent 行可点击打开对应代理会话——invariant 5g 当前禁止留待 v1 之后在 orchestration pill bar 的编排者药丸上展示 rollup 信用 chiporchestration_pill_bar.rs 的 hover 卡片在1044-1314行附近留有空间。关键源码路径速查关注点文件技术规格本文主体specs/QUALITY-671/TECH.md产品行为不变量specs/QUALITY-671/PRODUCT.mdrollup 纯函数实现app/src/ai/blocklist/usage/rollup.rsrollup 单元测试app/src/ai/blocklist/usage/rollup_tests.rs展开 footer 视图app/src/ai/blocklist/usage/conversation_usage_view.rs折叠药丸渲染app/src/ai/blocklist/block/view_impl/output.rs编排拓扑 walkerapp/src/ai/blocklist/orchestration_topology.rs父子索引与使用元数据事件app/src/ai/blocklist/history_model.rs头像/显示名辅助来源app/src/ai/blocklist/agent_view/orchestration_pill_bar.rs会话使用元数据 GraphQL 填充crates/graphql/src/api/queries/get_conversation_usage.rs赞分享桌面应用开发者工具人工智能AI 应用AI Agent代码智能体【免费下载链接】warpWarp is an agentic development environment, born out of the terminal.项目地址https://gitcode.com/GitHub_Trending/wa/warp点击查看免费下载相关推荐Warp TUI 的 Token/成本透明度footer 用量入口与响应摘要行的设计与实现CODE-1828Warp TUI 的 Token/成本透明度footer 用量入口与响应摘要行的设计与实现CODE 1828 导读 本指南围绕 Warp 开源仓库中 sp桌面应用开发者工具人工智能AI 应用AI Agent代码智能体OpenRig Orchestration Team 技能实战构建自运行 Agent 编排 Pod 的完整指南OpenRig Orchestration Team 技能实战构建自运行 Agent 编排 Pod 的完整指南 导读 本指南以 OpenRig 仓库中编排 P人工智能AI Agent多智能体Agent 编排代码智能体CLIBilibiliSummary智能视频摘要生成工具完整使用指南BilibiliSummary是一款专为B站视频设计的Chrome扩展插件能够快速分析视频内容并生成精炼摘要。通过智能字幕解析技术用户可在5秒内获取视频的核人工智能AI 应用大模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表