Grok Build 专题 · 30 道灵魂拷问
每题附考察意图、答题框架与加分点:运行时循环 / Compaction / 工具权限 / 记忆检索 / 沙箱安全 / MCP 集成
本页解决的问题
先给结论「Grok Build 专题 · 30 道灵魂拷问」要解决的关键问题是什么?
每题附考察意图、答题框架与加分点:运行时循环 / Compaction / 工具权限 / 记忆检索 / 沙箱安全 / MCP 集成
让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。
写下一个问题:试完这个方法后,你能用什么证据回答它?
结论听起来很完整,却没有检查最关键的假设。
- 从入口讲起:用 Grok Build 举例,真实入口在 main(),按运行分支分发(headless、stdio、leader、交互 TUI),最后都汇到同一个 Agent 宿主。
- 三个 Actor 分工:SessionActor 负责 turn 编排,接收命令、启动待处理 turn、处理完成通知;ChatStateActor 独占对话状态;SamplerActor 负责流式的模型请求。
- 隔离单位:每个 Session 跑在独立 OS 线程上,带自己的 current-thread Tokio runtime 和 LocalSet。会话之间天然隔离,一个卡死拖不垮别人。
- 收尾机制:用户点停止靠 CancellationToken 协作式终止,各 Actor 有序退出,这就是取消边界。
- 先给触发机制:以 Grok Build 为例,默认在上下文使用率达到 85% 时允许自动压缩。判断公式是 used × 100 >= context_window × threshold_percent,纯整数比较。
- 压缩本身要限时:单次压缩有 300 秒的墙钟预算。压缩是为了救会话,自己耗时失控就本末倒置了。
- 讲可选能力:memory flush 和 two-pass 默认都关闭。two-pass 开启后,接近阈值时先在后台投机摘要历史前缀,正式压缩时再把摘要和近期尾部合并总结。
- 拔高一层:这些都收在 CompactionPolicy 一个显式配置对象里,阈值、压缩模型、预算全部可调。生产级系统把策略做成配置,demo 把策略写死在代码里。
- 先给分类学:Grok Build 用 ToolKind 枚举给工具定语义种类。读文件、搜索、网页抓取这类种类默认只读;编辑、删除、执行命令这类默认有副作用。
- 默认值可覆盖:is_read_only() 只是种类层的默认语义,具体工具可以用自己的元数据覆盖,分类和个体解耦。
- 说清关键边界:只读分类推不出「自动执行」。最终放行还要过命令规则、沙箱、Hook 和用户交互批准这几层,分类只是决策的第一个输入。
- 补上注册机制:内置工具走静态注册表,外部 Toolset 走进程级 Preset 注册,MCP 工具运行时动态发现。三类来源统一收口,管理成本才不会爆炸。
- 先纠正前提:生产级记忆是一条检索流水线。以 Grok Build 为例,查询前先同步脏文件:watcher 监听 Markdown 变更,搜索开始时重建对应索引,外部修改才不会丢。
- 双路召回:FTS5 BM25 关键词检索始终可用,向量 KNN(sqlite-vec)在 embedding 可用时叠加。embedding 失败只记 warning,自动降级成 FTS-only,整次搜索照常返回。
- 排序有讲究:双路分数各自归一化后加权合并,再乘时间衰减(session 记忆按半衰期衰减,global 和 workspace 视为长青)、来源权重和访问增益。
- 多样性可选:MMR 重排默认关闭,开启后按相关性与 snippet 差异度做贪心重排,最后截断到 max_results。
- 先给结论:风险可控,核心是内核级沙箱。Grok Build 内置五种 Profile:workspace(默认)、devbox、read-only、strict、off,各自定义文件读写和子进程网络的能力集合。
- 讲机制:约束落在操作系统层,macOS 走 Seatbelt、Linux 走 Landlock。真实边界看解析后的能力集合,Profile 名字只是方向。
- 给推广方案:按人群配 Profile。代码审查用 read-only,高敏感仓库用 strict,还能配 custom profile 额外 deny 掉 ~/.ssh 这类目录。项目配置无法悄悄覆盖全局同名策略,安全底线握在管理员手里。
- 诚实交底:平台不支持或应用失败时,沙箱会记录警告继续运行。所以要叠加权限审批和 Hook 审计做分层防护,没有单点银弹,责任靠制度加机制共担。
- 先对齐角色:Grok Build 是 MCP 客户端,要同时支持 stdio 和 Streamable HTTP 两种传输,外加 OAuth:凭据存本地 JSON 文件,文件锁配合原子写防多进程冲突。
- 命名与冲突:工具注册名是 server__tool,双下划线恰好出现一次。两个 Server 各有一个同名工具时,各自拿到不同 ToolId,模型侧才不会打架。
- 可见性分流:工具多了不能全塞提示词。禁用的、只给 UI 用的、模型可见的分三路处理,快照加 BM25 索引让模型按需搜索工具。
- 断线恢复:状态事件在 50 毫秒窗口内合并,stdio 重启按 1 秒、4 秒、16 秒退避,还要靠 client_id 护栏防止旧连接的断线事件误删新连接。
- 先立规矩:把结论分成「源码事实」和「课程推断」两套标签。源码能证明的:edition 设为 2024、Tokio 1 开启 full feature、名为 xai-grok-pager 的原生 bin target、release-dist 里的 LTO 和 panic 配置。
- 再给推断:原生二进制方便把 CLI 和运行时一起交付,所有权和 Send 边界有助于管理多线程会话,强类型适合复杂协议和状态转换。这些是基于代码形态的解释,要标明是推断。
- 直接说破:选型背后的组织动机没写进源码。「xAI 为了性能选 Rust」这种话拿不出仓库证据,我不会说。
- 拔高一层:本章对照表用四级证据分级:源码、仓库文档、官方公开文档、本地快照观察。证据不够的格子保留空白,不用推测补齐。
- 先认账:编译时间、生命周期约束、学习门槛都是真实代价,源码课也是这么标注的,没必要嘴硬。
- 给可验证收益:每个 Session 跑独立 OS 线程加 current-thread runtime,所有权和 Send 边界让多线程会话状态不靠自觉来管;enum 加 Result 把 Agent、Session、Sampler 的领域边界建在类型上。
- 举个硬例子:ALL_TOOL_KINDS 有编译期断言,长度和 ToolKind 枚举数量对不上直接编译失败。新增工具种类必须重新过一遍权限分流决策,这种约束靠 code review 很难兜住。
- 收口:原生二进制把 CLI 和运行时一起分发,用户不用装依赖。两周糊出来的是 demo,这套是产品。
- 先正名:这是按协议划分的实现族。xai-grok-tools 里平行放着 grok_build 主产品族、grok_build_concise 精简族、grok_build_hashline、codex 和 opencode 兼容族,memory、lsp、skills 按能力单独拆模块,namespace 枚举里还有 MCP 留给运行时外部工具。
- 组装有流水线:ToolRegistryBuilder 负责实现选择和参数重命名,finalize(config, context) 产出 FinalizedToolset,里面装着 definitions、resources 和 dispatch。
- 会话接入一个口:ToolBridge 持有 registry,把工具定义提供给模型,调用结果以 ToolOutput 交回会话。MCP 工具运行时经 register_mcp_tools 注册进同一个 registry,和内置工具共用执行通道。
- 回应质疑:兼容另一套 harness 是换一族实现的配置问题。真要所有协议共用一份代码,兼容逻辑会把每个工具都搅成 if 森林,那才是改一个 bug 要改几遍。
- 先给量级:Grok Build 光 Cargo Workspace 就有 79 个成员,其中 62 个在 codegen 目录。这是 xAI 做到生产级的真实体量,两个月能做出来的只有 demo。
- 拆九个维度:结课工作台列了九维决策:入口、状态并发、模型流、工具合约、上下文记忆、安全、恢复、可观测、扩展生态。每一维都要给出合约、故障路径和验证方式。
- 给判断标准:五条硬约束里挑两条问自己:崩溃后能可解释地恢复吗?敏感数据落点说得清吗?答不上来就不该上线。
- 给建议:先用成熟产品跑半年,沉淀出我们真实的权限、审计和恢复需求,再评估自研哪一层。全栈自研很难划算,自研某一层可能值。
- 给结构化答案:Grok Build 用 PromptContext 结构体保存全部渲染输入,带 Serialize 和 Deserialize derive,能整体序列化下来检查。排查看的是数据,猜的成分就少了。
- 字段分三组:版本与模板(version、prompt_mode、audience、build_timestamp_utc),配置与身份(agents_md_files、persona_summaries、role_instructions、memory_enabled),用户运行环境(os_name、shell_path、working_directory、current_date)。
- 渲染分工:TemplateOverride 决定基础模板,ToolBridge 提供工具状态和描述,TemplateRenderer 合成各个 section,输出最终 system prompt。
- 更新边界:Agent 构建后源码注释称「effectively immutable」,但保留 finalize_prompt 这个显式入口,更新构建时间戳后重新渲染。
- 给枚举:Grok Build 的 TemplateOverride 只有三个变体:None、Codex、Custom(String),默认 None。模板选择被收敛成一个枚举字段。
- None 也有两套:Primary 会话用标准 base template,Subagent 用对应的紧凑模板,给子会话省 token。
- Codex 是兼容位:源码注释定义为 apply-patch profile 模板,配合 codex 实现族里的 apply_patch、read_file、list_dir 这些兼容实现,服务另一套工具协议。
- Custom 是逃生门:调用方直接提供完整模板字符串,覆盖枚举照顾不到的场景。
- 先给结构:注册表是进程级的,OnceLock 加 Mutex 包住一个 HashMap,存「名称到构建函数和可见性」的映射。builder 是 fn() 返回 ToolServerConfig 的函数指针,解析时才调用生成配置。
- 解释时序:已经解析过的配置不会回写。会话配置解析完成之后再注册,这个会话看不到新 preset;之后新解析的配置才查得到。源码注释明确建议在第一次解析前完成注册。
- 检查可见性:register_toolset_preset 注册的是 Public,会进 preset_names 公开枚举;register_internal_toolset_preset 是 Internal,只能按名解析,枚举里看不到。用枚举去验证 Internal preset 会误判成「没注册上」。
- 给结论:这是启动一致性设计。晚注册要是能悄悄改掉已解析的会话配置,那才是真 bug。
- 给方案:Grok Build 把少量稳定语义投影进 x.ai/tool 元数据。canonical fields 只有八个:path、offset、limit、command、description、cwd、directory、pattern。
- 给合约:CanonicalToolMeta 七个字段:version、name、kind、namespace、label、read_only、input,TOOL_META_VERSION 是数字 1。展示、遥测和跨工具分析共用这套词汇。
- 说清边界:input 是投影,可以缺字段甚至整体省略。grep flags、replace_all 这类非共享字段会被丢掉,编辑前后文本这种大字段不进投影,完整数据留在 raw_input。
- 讲取舍:投影层追求稳定轻量,宁可少字段也要保证语义跨工具一致;要全量就回 raw_input 拿。
- 先给三个原语:xai-token-estimation 提供 usage_percentage(total 为 0 返回 0,结果封顶 100)、exceeds_threshold(整数交叉相乘,used × 100 >= window × percent,等号即触发)和 exceeds_threshold_with_headroom。
- headroom 是兜底:在百分比阈值之前预留固定 token 空间。窗口 100,000、阈值 85%、headroom 4,000 时,触发点从 85,000 提前到 81,000,给大输出留缓冲。
- 估算来源分两路:请求前用本地粗估,UTF-8 字节数除以 4,单张低分辨率图片固定按 765 token;请求完成后用服务端 usage 校准。百分比函数不管来源,只算调用方传进来的数。
- 防御性细节:乘法用饱和乘法防溢出,headroom 的减法用 saturating_sub,窗口为 0 一律返回 false。
- 触发讲准确:Grok Build 的 Dream 把近期 session 日志和 MEMORY.md 合并成长期记忆。入口有三个:会话结束、/dream 手动命令、可选的周期检查。check_interval_secs 默认是 None,周期检查默认不开,不能说成「空闲必然自动运行」。
- 三道门控:enabled 默认 true 但子 Agent 会话直接跳过;min_hours 默认 4,用锁文件 mtime 记上次成功时间;min_sessions 默认 3,统计上次整理后修改的 session 文件并排除当前会话。
- 并发与预算:DreamLock 用 .dream-lock 存 PID,是最佳努力锁,源码注释明说它不保证严格互斥,所以整理过程必须容忍重复。输入截 32K,模型调用 30 分钟超时。
- 失败恢复:模型返回空或没有 Markdown 标题就不写不删;写 MEMORY.md 失败调 rollback 恢复旧锁状态;写成功才清理 session,5 分钟内还活跃的文件跳过;索引只移除真删掉的路径。
- 先给结论:能接。子 Agent 支持从已完成的任务恢复,ContextSource::Resumed 会复制原始 transcript 和工具状态,改到一半的 worktree 优先复用;目录被清了也没关系,有 snapshot_ref 能从持久 git ref 重建。
- 讲身份保护:恢复有校验,subagent_type 必须和原来一致,Persona 显式给出时也要一致。模型直接 pin 回原模型,中途换模型的请求会被软忽略,避免上下文错位。
- 交代接不了的情况:原 transcript 超过目标模型上下文窗口的 80% 会拒绝恢复;transcript 复制失败也会失败关闭,系统不会给你一个假装恢复了的会话。
- 管理预期:plan 状态和信号不在复制范围内,接手后计划要重新确认,这是可靠续跑,不是无缝续播。
- 先纠正模型:隔离是四个正交维度,一根「低中高」轴装不下:上下文来源、身份连续性、工作目录、文件改动空间,要分开判断。
- 逐个给枚举:上下文是 ContextSource 的 New 或 Resumed;改动空间是 SubagentIsolationMode 的 None 或 Worktree,枚举里没有「sandbox」这个成员;工作目录按 worktree、override、父目录的优先级解析。
- 举组合反例:Resumed 加 None 完全合法,继承上下文但用父工作区;New 也推不出独立文件空间,新会话默认还在父 cwd 里改文件。
- 补充边界:公开枚举只有 New 和 Resumed,shell 内部另有 Forked 分支用于从父会话镜像上下文,不能把它说成公开枚举成员。
- 给级联顺序:逐字段级联:spawn 显式 override 最高,然后 role 默认值,再到 persona 默认值,都没有就留 None 交给父级继承。
- 强调「逐字段」:这套优先级按字段各自走。model 听 spawn 的同时,reasoning_effort 可以来自 persona。还要先问字段存不存在:persona 就不提供 capability_mode。
- 给结果结构:解析产物是 EffectiveRuntimeConfig,字段有 model、reasoning_effort、capability_mode、persona、persona_instructions、role_prompt、isolation 这些。源码里没有 temperature、max_tokens 和 tools 字段。
- 补 fallback:解析完 shell 还有一层:reasoning_effort 仍为空会读 AgentDefinition.effort。model 的完整顺序是 runtime override、per-agent pin、AgentDefinition.model、父模型继承。
- 先讲清语义:这是设计好的 fail-open。Hook 崩溃、超时、退出码非 0 非 2、stdout 无效,dispatcher 都记警告后放行。源码注释明确要求 Hook 故障不能破坏工具可用性。
- 阻断只有两条路:返回有效 JSON 且 decision 为 deny;或者没有有效 JSON 但退出码是 2。注意 JSON 优先:有效 JSON 写了 allow,就算退出码是 2 也拦不住,只记一条冲突警告。
- 给正确用法:Hook 适合提醒、审计和可恢复的前置检查。要强制保证,规则放权限层(deny > ask > allow),系统边界放沙箱,这两层不走 fail-open。
- 帮他排查:15 个事件里只有 PreToolUse 的 is_blocking 为真;matcher 是正则加兼容别名,配置里写 Bash 能命中内部名 run_terminal_command。先确认 matcher 真的命中了。
- 给事实:请求了 Persona 之后,找不到、内容为空、读文件失败都会写入 persona_error,spawn 侧看到错误直接中止创建,失败关闭。
- 对照 role:role 的 prompt_file 读取失败只产生 role_prompt_warning,model、reasoning、capability、isolation 照常解析,软降级。
- 讲设计理由:Persona 是用户显式点名的行为合同,带 instructions 和输入输出契约,静默丢掉等于换了个人格干活,风险大;role prompt 是类型层的增强指令,缺了它子 Agent 还是那个类型。
- 补合并细节:Persona 的 inline instructions 会合并在文件内容之前,最终作为 persona 块进入 prompt。
- 给组件:Grok Build 有真实的协调组件 SubagentCoordinator。start_subagent_coordinator 只启动一次 drain task,所有协调事件收口到一处。
- 给事件面:SubagentEvent 有 Spawn、Query、Cancel、ListActive、Completions、Outstanding。每个 Spawn 各自进 spawn_local 异步任务调 handle_subagent_request,协调器登记 pending、active、completed 三种状态。
- 结果与取消:Query 可以拿即时快照,也可以注册 block wait slot 等完成;Completions 会 drain 待通知完成项并按 suppress_ids 过滤;Cancel 支持按 subagent ID 或 parent prompt ID,过期的 completed 记录会被淘汰。
- 拔高到组织策略:并行能力来自异步任务。选单 Agent、主会话加 subagents 还是多成员共享任务,看任务图:并行收益、依赖关系、上下文复制成本、文件冲突和汇总责任。
- 正面接招:拦得住。Grok Build 用 tree-sitter-bash 把可安全分解的脚本拆成一个个 plain command,识别 &&、||、分号和管道。每个非 setup 段都要独立通过安全命令、策略或授权检查,ls 放行救不了后面的 rm。
- wrapper 也算过:解析会递归剥离包装层拿到实际命令,危险前缀名单里有 rm、chmod、chown、kill 和 git push。
- 拆不动就保守:命令替换、复杂控制流这类没法可靠分解的脚本,整体进保守 prompt,用户对完整脚本确认一次。
- 补后手:就算批准执行,沙箱的能力集合还在。read-only profile 下 workspace 不可写,rm 到了操作系统那层也写不动。
- 先答问题本身:批准只放行本次请求。授权决策的输入是 AccessKind,工具输入被解析成 Read、Edit、Bash、MCPTool 这类带具体路径和命令的访问意图,比 ToolKind 更细。
- 走一遍链路:plan gate 先拦编辑,PreToolUse hook 可以显式 deny,然后 permission manager 评估合并后的规则。规则优先级是 deny > ask > allow,和配置来源顺序无关。
- 决策快速路径有序:管理策略的 deny 最先短路,随后才轮到 yolo pin、session grants、Auto 判定、sandbox Bash auto、只读安全项,都没结论才弹窗问用户。
- 补第二层:权限层的 Allow 不扩大操作系统能力。沙箱 active 时,进程仍被能力集合和子进程网络策略框着。权限层决定「能否尝试」,沙箱层限制「能做到什么」,叠加才是完整边界。
- 给合并规则:Grok Build 先读全局 ~/.grok/sandbox.toml,再读项目 .grok/sandbox.toml,合并用 entry.or_insert。项目只能新增 profile 名称,声明了和全局同名的 profile,全局定义保持生效,项目改不动。
- 给扩展方式:项目自定义走 custom profile,默认从 workspace 起步,extends 只能选 workspace、devbox、read-only、strict 四个内置基类,read_only、read_write、deny 往基类上追加。
- 给两条禁令:不能 extends off 和 none,也不能 extends 另一个 custom。禁掉链式继承,安全审计才能沿一条线看清最终能力。
- 提醒默认值:custom 要限制子进程网络得显式写 restrict_network 为 true,别指望从基类想当然地继承。
- 给三道门:装了不等于能跑。第一道是来源与路径,MarketplaceRelativePath 拒绝绝对路径和父目录穿越,远程条目能用 git ref 或 SHA 锁定内容;第二道是启用状态,项目和用户范围发现的插件默认进 disabled 列表;第三道是执行信任,按插件根目录逐个授权,记录写进 ~/.grok/trusted-plugins。
- 讲未信任的待遇:skills 和 agents 只能露元数据,hooks 不加载、MCP server 不启动、scripts 不执行。最危险的可执行面全被按住。
- 给失败语义:插件根目录 canonicalize 失败直接按未信任处理,失败关闭,路径出问题也不会误放行。
- 落到流程:高危插件先在 read-only 沙箱里审阅内容再授信,远程安装用 SHA 固定版本,防止上游偷偷换包。
- 给核心思路:工具元数据进 ToolMetadataSnapshot(tools、servers、mcp_initialized 三个字段),配 BM25 索引,不让几百个定义常驻提示词。
- 给两个稳定入口:模型侧只暴露 SearchTool 和 UseTool。SearchTool 按关键词搜,参数是 query 加 limit(默认 5),结果按 server 分组,带描述和 input_schema;UseTool 收 tool_name 和 tool_input,按发现到的 schema 分发执行。
- 讲稳定性收益:模型的工具列表跨轮次不变,几百个工具的增删不冲刷上下文,提示词缓存也友好。
- 补分发细节:UseTool 收到合格工具名后走 InnerDispatch 或 managed gateway 调用 MCP。模型的用法是先搜到 input_schema,照着 schema 构造 tool_input 再调用,发现和执行彻底分开。
- 先给可以的部分:Apache 2.0 许可,阅读、构建、内部改造都有空间,README 也给了源码构建入口。
- 给三个边界:仓库定期从 xAI 内部 monorepo 单向同步,公开树可能落后于内部主干;CONTRIBUTING 明确不收外部 PR,我们改的东西合不回上游;根 Cargo.toml 是生成的只读文件,直接改会被下次同步覆盖,要改就改各 crate 自己的清单。
- 给平台账:受支持的构建主机是 macOS 和 Linux,Windows 属于 best-effort 且当前未从这个源码树测试过。公司要是 Windows 开发机为主,成本得重估。
- 给结论:fork 可行,但要按「长期维护一个分叉」计价,每次上游同步都是一笔合并成本。这和白捡一个产品是两码事。
- 给量表:用结课评审的 100 分权重:边界与 ADR 20 分、合约与状态机 20 分、安全与恢复 25 分、测试与可观测 20 分、演示与证据 15 分。安全与恢复权重最高。
- 给否决项:四条一票否决:敏感数据落点没说明、高风险工具缺权限路径、声称崩溃可恢复但没有测试、引用源码给不出文件路径。分再高踩了也不过。
- 给检查方法:拿九维决策卡过一遍:入口、状态并发、模型流、工具合约、上下文记忆、安全、恢复、可观测、扩展。每个维度要有明确决定、合约、故障路径和验证方式。
- 说明权重理由:功能是平时能看见的,安全与恢复是出事才看见的。评审就该把权重压在「出事才看见」的地方。
- 先给一句话:生产级 Agent 和 demo 的差距不在模型调用,在失败语义。这套源码每一层都明确回答了「这里坏了怎么办」。
- 展开三个例子:Hook 故障 fail-open 保工具可用性,Persona 缺失失败关闭保用户意图,插件路径解析失败按未信任处理保安全。三种失败三种答案,全按风险选的,没有一刀切。
- 第二个收获:策略全部做成显式配置对象。CompactionPolicy 五个字段带默认值,沙箱是可解析的 Profile,阈值、预算、压缩模型都可调。demo 把策略写死在代码里,产品把策略交给配置。
- 落到自己的工作:以后评审任何 Agent 功能,我加两个必答题:这个功能的失败默认值是什么?这条策略改起来要不要发版?
「Grok Build 专题 · 30 道灵魂拷问」为什么能找到相关内容
「每题附考察意图、答题框架与加分点:运行时循环 / Compaction / 工具权限 / 记忆检索 / 沙箱安全 / MCP 集成」把检索问题从“把资料存起来”推进到“怎样找到真正相关的资料”。这一步决定了 RAG、推荐和以图搜图最后交给模型的输入质量。
相似度不是答案,召回之后还要核对
在「每题附考察意图、答题框架与加分点:运行时循环 / Compaction / 工具权限 / 记忆检索 / 沙箱安全 / MCP 集成」对应的流程里,Embedding 负责把对象放到可比较的语义空间,近邻索引负责减少搜索范围,最终的回答仍然依赖召回片段是否覆盖问题、距离指标是否合适,以及内容有没有过期。
- 从入口讲起: 用 Grok Build 举例,真实入口在 main(),按运行分支分发(headless、stdio、leader、交互 TUI),最后都汇到同一个 Agent 宿主
- 三个 Actor 分工: SessionActor 负责 turn 编排,接收命令、启动待处理 turn、处理完成通知;ChatStateActor 独占对话状态;SamplerActor 负责流式的模型请求
- 隔离单位: 每个 Session 跑在独立 OS 线程上,带自己的 current-thread Tokio runtime 和 LocalSet。会话之间天然隔离,一个卡死拖不垮别人
先区分找得到和找得准
把「每题附考察意图、答题框架与加分点:运行时循环 / Compaction / 工具权限 / 记忆检索 / 沙箱安全 / MCP 集成」落成一次小测试:准备几条有明确答案的查询,记录召回的相关性、遗漏和无关结果,再决定是否需要换切分方式、索引或重排。
从这个例子继续往下看
这篇内容先从「从入口讲起: 用 Grok Build 举例,真实入口在 main(),按运行分支分发(headless、stdio、leader、交互 TUI),最后都汇到同一个 Agent 宿主」展开,再把问题推进到「三个 Actor 分工: SessionActor 负责 turn 编排,接收命令、启动待处理 turn、处理完成通知;ChatStateActor 独占对话状态;SamplerActor 负责流式的模型请求」。把这两个片段放在一起看,可以更清楚地分辨:哪些是文章给出的事实,哪些是需要结合条件才能成立的判断。
把这条判断带到下一个场景
检索系统也可以这样看:先确定什么算相关,再观察召回是否覆盖问题,最后检查排序、切分和时效性有没有把真正有用的内容挤出去。
- 「Grok Build 专题 · 30 道灵魂拷问」:从入口讲起: 用 Grok Build 举例,真实入口在 main(),按运行分支分发(headless、stdio、leader、交互 TUI),最后都汇到同一个 Agent 宿主
- 「继续往下看」:三个 Actor 分工: SessionActor 负责 turn 编排,接收命令、启动待处理 turn、处理完成通知;ChatStateActor 独占对话状态;SamplerActor 负责流式的模型请求
- 「最后的要点」:先给触发机制: 以 Grok Build 为例,默认在上下文使用率达到 85% 时允许自动压缩。判断公式是 used × 100 >= context_window × threshold_percent,纯整数比较
最后的「最后的要点」把讨论落到「先给触发机制: 以 Grok Build 为例,默认在上下文使用率达到 85% 时允许自动压缩。判断公式是 used × 100 >= context_window × threshold_percent,纯整数比较」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。
我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。
读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。
如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。
还没有这篇文章的讨论。