Skip to content

3.2 看懂工具调用树 ​

本节目标

搞懂对话里那些工具行是什么:agent 是怎么思考、怎么调工具、怎么一步步干完活的。

什么是工具调用树 ​

普通聊天里,AI 给你一段文字就结束了。但 dsh 的 agent 不一样,它要真正动手:读文件、搜代码、跑命令。它每做一步,界面上就会多一行记录,这些记录串起来,就是工具调用树。

一句话:工具调用树 = agent 干活的每一步的流水账。

看一棵真实的工具调用树 ​

下面是我发了一条"列出工作区文件并介绍项目"的指令后,agent 实际产生的工具调用树:

工具调用树

从下往上看,它是这样的一个流程:

工具行干了什么
上下文注入 · 系统提示词给 agent 装上"怎么干活"的出厂设定
上下文注入 · 技能目录加载可用的技能清单,让它知道手里有什么牌
Think先想一步:用户要什么,第一步该做什么
Pwsh执行命令,列出工作区目录里的文件
Glob按模式搜索文件,比如找 README 文件
Think看结果,想下一步:每个项目都要了解一下
Pwsh再执行命令,读取每个项目的关键信息
Think信息齐了,开始组织最终回答

看到规律了吗?agent 的干活节奏是:想一下,动一下,看结果,再想,再动。每一行工具调用,都是它真实执行过的一步,不是摆样子。

点开工具行看细节 ​

每一行工具都可以点击展开,看这一步的完整内容。比如点开一个 Think 行,能看到 agent 当时的思考过程:

展开的思考过程

点开 Pwsh 行,能看到它实际执行的命令和命令的输出。点开上下文注入行,能看到注入的提示词内容。想确认 agent 到底对你的项目做了什么,就逐行点开看,一切透明。

0.1.7 起过程按组折叠,整轮一键收起 ​

0.1.7-alpha.1 起,消息流的过程展示整体重做了一遍,长任务的对话区终于不会一眼望不到头了。

相邻的步骤会自动分组。agent 连续读几个文件、连跑几条命令,这些步骤不会一行一行平铺,而是收进一个过程组里,组头用类别摘要概括这组干了什么:

组里做的事组头摘要(已结束)组头(运行中)
读文件已读取文件正在读取文件
搜代码已搜索代码正在搜索代码
改文件修改了文件正在编辑文件
跑命令执行了命令正在运行命令
跑代码运行了代码正在运行代码
只有思考已完成分析正在分析请求

比如一轮里 agent 先读了 5 个文件、又跑了 2 条命令,你会看到两个组:已读取文件、执行了命令。组头是摘要,想看细节点开组就行,单个思考或工具行照样能继续展开。

整轮折叠管更大的范围。一轮结束后,这一整轮的过程(所有组、阶段回复)默认整体收起,只留最终答案,上面悬浮一个整轮控件可以随时展开回看;正在运行的轮次保持展开,方便你盯着进度。几个相关细节:

  • 运行时钟从一开始就显示:轮次一启动,运行时长就以整秒跳动,不再是结束后才看到耗时
  • 运行状态行(0.2.0-rc.1 起完整形态):运行中的轮次下方有一条细分隔线,跟着一头摆尾的小鲸鱼轮廓动画和一行微光文字「深度求索中,用时 xx」,用时实时跳动;轮次一结束它就消失。它就是个运行指示灯,不会打扰你回看上面的内容
  • 已完成轮次页脚:每轮结束后,页脚会有一个收尾条目交代这轮的收场
  • 非人工触发的轮次(比如定时提醒、后台任务汇报触发的)会有独立的提示行,和你的输入区分开
  • 历史分页更稳:往前翻旧消息时,已展开的内容位置不会跳,加载更早内容会锚在你正在看的位置上方

四档展示:想看多少细节自己定 ​

组内默认显示多少,由设置 → 通用设置 → 工作步骤展示控制,0.1.7-rc.1 起有四档:

档位行为
简洁组头只显示类别摘要,正文一律手动展开
标准组头带实时任务详情,正文手动展开
详细(Web 默认)组头带详情,已结算的思考预览显示首行
完全展开不显示组头,组正文直接摊开,不设组级限高

0.2.0-rc.1 起,网页端新会话的默认档从标准改成了详细(桌面端保持标准),没存过偏好的用户一上来就能看到思考预览。升级前存过旧偏好的会自动映射:旧的单档值和"完全展开"旧值都读成详细,不用重新设置。切档不会打散分组,也不会丢你手动展开过的行。

几种常见工具行 ​

不同任务会用到不同工具,认识几个常见的:

工具行作用常见场景
Think模型内部思考几乎每次行动前都有
Pwsh / Bash执行命令列目录、跑测试、装依赖
Glob按文件名模式搜索找 README、找配置文件
Read读取文件内容看代码、看文档
Write / Edit写入、修改文件改代码、写文档
上下文注入注入系统提示、技能每次会话开始

工具越多,agent 能干的事越多。前面列的都是内置能力,后面章节会看到更多(子代理、工作流、网页搜索等)。

消息流底部的统计信息 ​

一次任务完成后,工具调用树的下方会出现两个图标药丸,按"想得多深"和"花得多省"两条线呈现不同维度:

药丸点击展开的内容
计数字符会话统计:轮次、步数、模型耗时(LLM)、工具耗时(TPS)、缓存命中率
数据库字符Token 用量:Uncached input / Cached input / Output / Total,以及输入输出拆分

两个药丸各自弹出对应的明细对话框,原来压成一行的小字被消化到弹窗里,对话区看起来更干净。

1 轮 · 4 步 | LLM 14.9s · 工具调用 45.5s | 缓存命中 71% | 输入 76K tok · 输出 1.6K tok

看到这些概念不熟也没关系:

  • 1 轮:这次任务跑了几轮(一轮 = 一次完整的思考加行动)
  • 4 步:总共进行了几次模型调用(每一步里可能连着调用多个工具)
  • LLM 14.9s:模型思考花了多久
  • 工具调用 45.5s:执行命令、读文件这些实际动作花了多久
  • 缓存命中:多少内容命中了上下文模型一次请求中可见的信息范围,包括对话历史、注入的提示和工具结果。Context/ˈkɒntekst/缓存,命中越高越省钱
  • 输入 / 输出 tok:这次任务消耗的 Token模型处理文本的基本单位,一段文字会被切分成若干 token。/ˈtoʊkən/ 量

另外,每个 assistant 回复的尾部也可能出现一个 Turn usage 折叠项,显示该轮次由哪个 Provider/model 服务、Uncached input、Cached input、Output、Total 等用量明细,点击即可展开查看。它把整轮的 Token 开销拆得更细,方便你判断哪一轮最"烧钱"。

任务变长时,这些数字会帮你判断时间花在了"想"还是"干"上。

0.1.6-alpha.2 起,上下文占用也搬进了这一排:输入卡片下方、两个统计药丸的右侧,直接显示一个圆环和百分比,点开可以在小面板里看 token 构成明细。不用再另找入口,一发消息扫一眼就知道上下文吃了多少。

0.1.7-alpha.1 起,这排信息显示多细也归你管:设置 → 通用设置 → 性能与用量,简洁和详细两档。嫌数字多就选简洁,想盯着缓存命中率和用量拆分就选详细。

统计随版本更新

0.1.5-alpha.1 起,底部那一行统计被拆成两个图标药丸而不是一长串文字。每个药丸点击弹出对应的明细对话框,文字体积变小后可读性更高。会话统计的语义与 Turn usage 的拆解都没有变,只是换了一种更可点的呈现。

运行中轮次的小时档

0.1.5-rc.2 起,运行中轮次的状态栏、轮次底部 "Ran-for" 摘要,以及点击会话统计弹窗里的 turn-时长详情条目,都会显示小时档:不足一小时维持 0分23秒 / 0m 23s,到一小时会切到 1小时05分03秒 / 1h 05m 03s 这种格式。三个地方共用 formatRunDuration,小时档在单位边界自动进位,不会卡在「60分00秒」。

轮次结束看「改动文件」卡片 ​

agent 说"改完了",到底改了哪些文件?0.1.6-alpha.2 起,一个回合结束时,消息流里会出现一张改动文件卡片,取代原来逐个 write / edit 调用行拼出来的修改记录:

  • 覆盖全:卡片由 Host 侧用 git 对工作树在轮次开始和结束时各拍一次快照、对比差异得出,shell 命令改的文件也逃不掉,不只是 write / edit 工具改的
  • 有行数:标题显示改了几个文件、总共增删多少行;折叠时先露三行,展开后可收起
  • 能对比:点卡片里的某个文件,在右侧边栏打开本轮的 review 标签页,看这个文件改前改后的逐行 diff,Host 有桌面时还能用默认应用直接打开
  • 悬停即预览:0.1.7-alpha.1 起,鼠标悬停在卡片里的文件行上,会就地浮出该文件的 diff 预览,不点开也能扫一眼改动量
  • 不动你的仓库:快照走 Session 自己的临时对象目录,仓库的提交、暂存、对象一概不碰,你未提交的既有改动也不会被算进本轮

两个边界要知道:工作目录不在 git 仓库里(或本机没有 git)时,卡片只列文件工具改的文件,shell 的改动看不到;卡片内容不跨 Host 重启保留,重启后重新打开的对话里,先前轮次没有这张卡。

回答里的图片链接也能直接看 ​

0.1.7-rc.1 起,agent 回答里贴出的图片链接不用再点出去看了:把鼠标悬停在链接上就浮出图片预览,也可以直接内联展开在回答里,本地图片和网络图片都吃这一套。配合上一节改动的文件链接,agent 回答里出现的东西基本都能就地看。

小结 ​

  • 工具调用树是 agent 每一步动作的流水账,一切透明
  • 典型节奏是思考 → 行动 → 看结果 → 再思考,对应 Think 和各类工具行
  • 点开任意工具行能看到完整细节,包括命令、输出、思考过程
  • 0.1.7 起过程按组折叠:相邻同类步骤收进过程组,组头是「已读取文件」「执行了命令」这类摘要,整轮结束后一键收起
  • 工作步骤展示四档(简洁/标准/详细/完全展开)决定组内默认显示多少,0.2.0-rc.1 起网页端默认详细
  • 底部统计行告诉你轮数、步骤、耗时和 token 消耗,显示多细由性能与用量偏好控制,上下文占用圆环就在统计药丸旁边
  • 轮次结束出现改动文件卡片:git 快照对比得出,shell 改动也算数,点文件看逐行 diff,悬停可预览
  • 回答里的图片链接悬停可预览、可内联展开

现在你已经看懂 agent 怎么干活了,下一章进入会话进阶,逐个点亮会话里的高级功能。

发现错误?提交反馈 · 欢迎 提 PR 改进本书