505 字
约 1 分钟
1
从真实 main() 到第一轮采样
无标签

CHAPTER 12 · CALL PATH 从真实 main() 到第一轮采样 实际入口位于 xai-grok-pager-bin/src/main.rs 。同一个组合入口解析命令与交互模式,再把工作交给 TUI 或 Shell Agent 宿主。 一句话速览 追踪入口、会话创建、提示词渲染、模型采样与流式返回的完整调用链 课程目标 能准确说出四种运行分支,并沿 connect_or_spawn 、 MvpAgent 、 spawn_session_on_thread 、 SessionActor 、 SamplerActor 定位第一轮对话。

核心视觉 · 教学化调用图

main() PagerArgs

run_headless agent headless run_stdio_agent ACP stdio run_leader leader 宿主 xai_grok_pager::app::run 交互 TUI

connect_or_spawn 连接或启动 leader ACP channels

MvpAgent 会话宿主

SessionActor turn loop ChatStateActor history SamplerActor streaming

run_headless Agent 无头模式 grok agent headless 进入 Shell 提供的无头宿主。 run_stdio_agent Stdio Agent 通过 ACP stdio 收发请求,适合外部客户端驱动。 run_leader Leader 进程 承载长生命周期 Agent,并通过连接通道服务客户端。 app::run 交互 TUI 默认交互分支进入 pager 应用,TUI 可经 leader 建立连接。

主轴交接

connect_or_spawn 建立 leader 连接或按需启动进程。 MvpAgent 响应 ACP 请求并管理会话句柄。 spawn_session_on_thread 为 Session 创建 OS 线程。 SessionActor 推进 turn loop,协调状态和工具。 SamplerActor 为请求创建流式采样任务。

真实源码证据

crates/codegen/xai-grok-pager-bin/src/main.rs use xai_grok_shell::agent::app::{ run_headless, run_leader, run_stdio_agent }; let runtime = tokio::runtime::Builder ::new_multi_thread() .enable_all() .build()?;

crates/codegen/xai-grok-shell/src/session/acp_session_impl/spawn.rs /// Spawn a session actor on a dedicated thread /// with its own tokio runtime and LocalSet. pub(crate) async fn spawn_session_on_thread (...) { let rt = tokio::runtime::Builder ::new_current_thread() .enable_all().build()?; let local = tokio::task::LocalSet::new(); }

源码快照说明 :本页依据本地同步副本核对。该副本没有 .git 元数据,因此不声称对应某个 commit 版本。

课堂练习 画出一次交互请求的边界 标注哪些节点属于 xai-grok-pager-bin 、 xai-grok-pager 、 xai-grok-shell 、 xai-grok-sampler 。说明 TUI 和 Agent 宿主为何是两个 crate。

Takeaway :真实入口是 xai-grok-pager-bin/src/main.rs 。它负责分发模式,随后由 pager 承担界面、Shell 承担 Agent 与 Session 宿主、Sampler 承担模型请求。

从真实 main() 到第一轮采样
http://www.clxhxhhr.top/posts/3992/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。