<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>LLM on niuzj</title>
    <link>https://niuzj.org/tags/llm/</link>
    <description>Recent content in LLM on niuzj</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 10 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://niuzj.org/tags/llm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>给 AI Agent 加状态机，踩了个 instruction 注入的坑</title>
      <link>https://niuzj.org/posts/agent-sop-instruction-injection/</link>
      <pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://niuzj.org/posts/agent-sop-instruction-injection/</guid>
      <description>&lt;p&gt;做 Agent 做到一定复杂度，一定会遇到这个问题：多步骤流程怎么编排。&lt;/p&gt;&#xA;&lt;p&gt;我们的场景是 UGC 视频制作——用户说&amp;quot;帮我做一条唇釉的带货视频&amp;quot;，Agent 需要走完意图分析、搜索对标、制定策略、仿写脚本、达人选角、生成素材这一整套流程。每一步都有不同的指令，需要调不同的工具，用户还可能在任何一步说&amp;quot;不满意，重来&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;靠 system prompt 里写一大段流程说明让 LLM 自己记住做到哪了？试过，对话一长就乱。跳步、重复、忘记之前收集的信息，各种问题。&lt;/p&gt;&#xA;&lt;p&gt;所以我们给 Agent 装了一个状态机。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么是状态机&#34;&gt;为什么是状态机&lt;/h2&gt;&#xA;&lt;p&gt;状态机的核心价值是把&amp;quot;Agent 应该做什么&amp;quot;从 LLM 的记忆里抽出来，变成一个确定性的外部数据结构。&lt;/p&gt;&#xA;&lt;p&gt;不用状态机的时候，Agent 的行为完全依赖 LLM 对上下文的理解。LLM 需要从几十轮对话历史里推断出&amp;quot;我现在在第几步、下一步该做什么、之前收集了哪些信息&amp;quot;。这在 3-5 轮对话里还行，到了 10+ 轮就不可靠了。&lt;/p&gt;&#xA;&lt;p&gt;用了状态机之后，每一轮对话开始时，系统从外部状态里读出&amp;quot;当前在哪一步&amp;quot;，把这一步的 instruction 注入到 LLM 的上下文里。LLM 不需要记忆，它只需要执行当前步骤的指令。&lt;/p&gt;&#xA;&lt;p&gt;这个思路不是我们发明的。研究了 30 多个开源 Agent 框架后发现，所有做多步骤编排的框架本质上都是这个模式：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;                    ┌─────────────────────┐&#xA;                    │    状态机 / 工作流    │&#xA;                    │  （确定性，外部维护）  │&#xA;                    │                     │&#xA;                    │  当前步骤 → instruction&#xA;                    │  转移条件 → 下一步    │&#xA;                    │  共享数据 → state.data │&#xA;                    └──────────┬──────────┘&#xA;                               │ 注入 instruction&#xA;                               ▼&#xA;                    ┌─────────────────────┐&#xA;                    │     LLM Agent       │&#xA;                    │  （概率性，执行层）   │&#xA;                    │                     │&#xA;                    │  看到 instruction    │&#xA;                    │  → 调用工具          │&#xA;                    │  → 回复用户          │&#xA;                    │  → 推进状态机        │&#xA;                    └─────────────────────┘&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;确定性的编排层告诉 Agent &amp;ldquo;该做什么&amp;rdquo;，概率性的 Agent 层决定&amp;quot;怎么做&amp;quot;。两层各管各的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>让 LLM 同时返回文字和结构化数据：用假 Tool Call 做 Side Channel</title>
      <link>https://niuzj.org/posts/llm-structured-output-via-fake-tool/</link>
      <pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://niuzj.org/posts/llm-structured-output-via-fake-tool/</guid>
      <description>&lt;p&gt;最近在做 AI Agent 的时候碰到一个很实际的问题：LLM 回复用户的时候，除了正常的文字，还需要同时返回一份结构化的 JSON 给前端渲染 UI 组件。&lt;/p&gt;&#xA;&lt;p&gt;比如用户问&amp;quot;帮我分析一下这几个模板，推荐最适合的&amp;quot;，Agent 需要：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;用文字解释推荐理由（给用户看）&lt;/li&gt;&#xA;&lt;li&gt;同时返回一个结构化的推荐列表（给前端渲染可点选的卡片）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这两个东西必须在同一轮对话里出来。&lt;/p&gt;&#xA;&lt;h2 id=&#34;直觉方案让-llm-在文本里嵌-json&#34;&gt;直觉方案：让 LLM 在文本里嵌 JSON&lt;/h2&gt;&#xA;&lt;p&gt;最容易想到的办法是在 system prompt 里约束 LLM，让它在回复末尾加一段 JSON：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;你的回复格式：&#xA;先用自然语言回答用户，然后在末尾用 ```json 代码块输出推荐数据...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个方案能跑，但很脆弱：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;你得写正则或者找分隔符从文本里提取 JSON&lt;/li&gt;&#xA;&lt;li&gt;LLM 有时候会把 JSON 格式搞乱，多个反引号、漏个逗号&lt;/li&gt;&#xA;&lt;li&gt;流式输出的时候更麻烦，你不知道 JSON 什么时候开始什么时候结束&lt;/li&gt;&#xA;&lt;li&gt;prompt 越复杂，LLM 越容易忘记遵守格式&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;正经方案三家-api-的-structured-output&#34;&gt;正经方案：三家 API 的 Structured Output&lt;/h2&gt;&#xA;&lt;p&gt;先看看三大 LLM 厂商怎么解决&amp;quot;让模型输出结构化数据&amp;quot;这个问题。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;OpenAI&lt;/strong&gt; 有原生的 &lt;code&gt;response_format&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl https://api.openai.com/v1/chat/completions &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;model&amp;#34;: &amp;#34;gpt-4o&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;response_format&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;#34;type&amp;#34;: &amp;#34;json_schema&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;#34;json_schema&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        &amp;#34;name&amp;#34;: &amp;#34;recommendations&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        &amp;#34;strict&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        &amp;#34;schema&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          &amp;#34;type&amp;#34;: &amp;#34;object&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          &amp;#34;properties&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;            &amp;#34;items&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;              &amp;#34;type&amp;#34;: &amp;#34;array&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;              &amp;#34;items&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                &amp;#34;type&amp;#34;: &amp;#34;object&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                &amp;#34;properties&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                  &amp;#34;title&amp;#34;: {&amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                  &amp;#34;reason&amp;#34;: {&amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                &amp;#34;required&amp;#34;: [&amp;#34;title&amp;#34;, &amp;#34;reason&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;              }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          &amp;#34;required&amp;#34;: [&amp;#34;items&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;messages&amp;#34;: [{&amp;#34;role&amp;#34;: &amp;#34;user&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;推荐3个适合电商的工作流模板&amp;#34;}]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  }&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;strict: true&lt;/code&gt; 保证输出 100% 符合 schema。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 PostHog 监控你的 AI Agent：从调用追踪到成本核算</title>
      <link>https://niuzj.org/posts/posthog-agent-monitoring/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://niuzj.org/posts/posthog-agent-monitoring/</guid>
      <description>&lt;p&gt;最近在公司做一个 Agent 项目，跑通了基本流程之后，遇到一个很现实的问题：线上用户反馈&amp;quot;回答不对&amp;quot;或者&amp;quot;响应太慢&amp;quot;，我根本没法排查。日志里只有零散的 print，完全看不出一次对话里到底调了几次模型、每次花了多久、tool call 有没有报错。&lt;/p&gt;&#xA;&lt;p&gt;我需要一个能看清 Agent 每一步在干什么的监控工具。&lt;/p&gt;&#xA;&lt;h2 id=&#34;posthog-的-llm-analytics&#34;&gt;PostHog 的 LLM Analytics&lt;/h2&gt;&#xA;&lt;p&gt;偶然看到 PostHog 出了 LLM observability 的功能，抱着试试的心态接了一下，发现这东西是真的好用。&lt;/p&gt;&#xA;&lt;p&gt;PostHog 把 AI Agent 的监控拆成了三层：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Trace&lt;/strong&gt; — 一次完整的用户对话&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Generation&lt;/strong&gt; — 每一次 LLM API 调用&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Span&lt;/strong&gt; — 每一次 tool 执行&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这个层级结构跟 Agent 的实际运行方式完全对应。一个用户提问进来，Agent 可能调 3 次模型、执行 5 个 tool，这些全部串在一个 trace 下面，一目了然。&lt;/p&gt;&#xA;&lt;h2 id=&#34;接入过程&#34;&gt;接入过程&lt;/h2&gt;&#xA;&lt;p&gt;接入非常简单，核心就是在几个关键节点上报事件。&lt;/p&gt;&#xA;&lt;p&gt;初始化一个 client：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; posthog &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Posthog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;client &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Posthog(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    api_key&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;phc_xxx&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    host&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://us.i.posthog.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每次 LLM 调用完成后，上报一个 &lt;code&gt;$ai_generation&lt;/code&gt; 事件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;capture(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    distinct_id&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;user_id,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    event&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_generation&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    properties&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_model&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_provider&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_input&amp;#34;&lt;/span&gt;: messages,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_output_choices&amp;#34;&lt;/span&gt;: response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;choices,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_input_tokens&amp;#34;&lt;/span&gt;: usage&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;prompt_tokens,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_output_tokens&amp;#34;&lt;/span&gt;: usage&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;completion_tokens,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_cache_read_input_tokens&amp;#34;&lt;/span&gt;: cached_tokens,  &lt;span style=&#34;color:#75715e&#34;&gt;# 别漏了这个，后面会讲&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_latency&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1.23&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_trace_id&amp;#34;&lt;/span&gt;: trace_id,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$ai_tools&amp;#34;&lt;/span&gt;: tools,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;tool 执行完上报一个 &lt;code&gt;$ai_span&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
