Lantide Data
此页已有简体中文译文,但尚待核对最新繁体中文原文的更新。

AI Agent 架構:ReAct、狀态路由与 UICommand

配套②:自行实作 ReAct 串流迴圈,以換取对事件型別、狀态过濾与 IDE 整合的完全控制。操作見 使用者指南 §12


系列位置

完整导读見 系列导读与产品定位

順序 文章 本題
0 系列导读与产品定位 系列导读与产品定位
1–3 Agent 时代的数据分析工作流可治理的 Agent MemoryPrompt 与 Context 工程 工作流、Context
4 本文 Agent runtime
5 統一查詢层 查詢层

一、为何自研 ReAct

ReAct(Reasoning + Acting,推理—行動迴路)让模型在单轮对話中交替「思考 → 呼叫工具 → 读取观察 → 再思考」。通用 Agent 框架擅长编排,但 Lantide Data 需要更細的控制:

  • SSE 事件型別細分:thought、tool_call、tool_result、message、ask_user、error…
  • 狀态依賴的工具白名单与 mid-turn 刷新
  • UICommand 与前端 interceptor 同步开 tab、写 SQL、Source Run 完成
  • IDE 整合執行:工具产出須落在真实 SQL 分页、@@PROTECT0@@、UICommand——而非仅在远端 sandbox 回传图表
  • 探索预算provider fallbacktoken 压缩等产品級策略

因此採用 Python @@PROTECT1@@ + 自有 @@PROTECT2@@,而非套用现成 Agent 抽象——我們要的是与 IDE 狀态、SSE 事件、工具白名单逐行对齊的執行迴路,而不是通用编排上的便利。


二、架構总览

@@PROTECT3@@@@PROTECT4@@@@PROTECT5@@

每次迭代:解析狀态 → 过濾工具 schemas → 组裝 system prompt → LLM 串流 → 執行 tool / 暫停 ask_user / 推送 UICommand;狀态转換工具執行后同轮刷新 prompt 与工具集。


三、工具註冊与 TOOL_AVAILABILITY_MATRIX

每个工具定義 Safety(safe / write)与可用 AgentState。矩陣在每次迭代开始过濾 schemas,例如:

狀态 典型差异
NoProject / Quick 探索工具 + @@PROTECT6@@
ProjectFocused @@PROTECT7@@、@@PROTECT8@@、HTML 條件工具
PlanPlanning 文件与探索;限量 @@PROTECT9@@ 探数允許; SQL Tab 工具群、統計 @@PROTECT10@@(prompt 禁止 @@PROTECT11@@)
PlanExecuting @@PROTECT12@@、@@PROTECT13@@、@@PROTECT14@@…
ProjectFocused / PlanPlanning / PlanExecuting @@PROTECT15@@、@@PROTECT16@@(按需读映射、小修 Reference)

State prompt 不列工具目录 — 名称与参数以当轮 function schemas 为准(見 Prompt 与 Context 工程)。


四、ReAct 迴圈細節

4.1 迭代上限

@@PROTECT17@@ 预设 100,防止异常迴圈耗盡资源;达上限发送 @@PROTECT18@@ 事件。

4.2 探索预算(Exploration Budget)

@@PROTECT19@@、@@PROTECT20@@、@@PROTECT21@@ 計入探索。超过 exploration_soft_cap(预设 7)后,工具呼叫被跳过并回传 @@PROTECT22@@。

續跑協議: 下一个工具呼叫必須为 @@PROTECT23@@,且問題含标記 @@PROTECT24@@,选項含 Continue exploring / Stop for now。使用者选擇繼續则重置本轮探索計数;选擇停止则 Agent 应先整理发现再決策。不应仅靠靜默注入系統字串繞过人類確认。

4.3 Auto-continuation

@@PROTECT25@@ 且仍有空间时,可追加 "Please continue..."(次数上限),避免长報告截断。

4.4 Mid-turn 狀态转換

@@PROTECT26@@、@@PROTECT27@@ 等執行后,从 session 重新解析狀态,更新 @@PROTECT28@@ system prompt 与工具集,使同轮后續迭代落在正確狀态(例如 NoProject → ProjectFocused)。


五、Provider fallback

LLM 呼叫失敗时可依设定 fallback 至备用 profile,并在 SSE 中标示,減少单点模型不可用导致整轮失敗。


六、System prompt 组裝与 mid-turn 刷新

@@PROTECT29@@ 合併 core、state、知识、catalog 提示、HTML 條件段。狀态转換或 @@PROTECT30@@ 翻转后同轮重建,与工具 schema 对齊。

6.1 Query Step Ledger 注入(Layer 3.5)

多步分析时,模型需要記住「上一步物化了哪張表、SQL 长什麼樣」。每个对話在 workspace 内维护 Query Step Ledger:@@PROTECT31@@ / @@PROTECT32@@ 成功或失敗后写入步驟索引;system prompt 附加精簡摘要(快取名 + SQL 预览,≤1500 字元),使多轮后模型仍知近期步驟。完整 SQL 靠 @@PROTECT33@@、@@PROTECT34@@ 或 registry 查閱。

与 Plan Progress 分工: Plan 執行期的 Steps UI 与 @@PROTECT35@@ 的 @@PROTECT36@@ 來自 @@PROTECT37@@ 的 @@PROTECT38@@(report 后 @@PROTECT39@@);Ledger 仍服务对話連續性。@@PROTECT40@@ 会将來源 conv 的 ledger 全量复製到新 conv,使 fork 后 @@PROTECT41@@ 与摘要不断裂。

6.2 Ledger 相关工具

工具 / API 何时用 用途
@@PROTECT42@@ 需審閱某快取表的原始 SQL 等同 UI「查看 SQL」,与 @@PROTECT43@@ 同源
@@PROTECT44@@ 多步链失序或需核对 step_id 列出本对話步驟;可选附截断 SQL
@@PROTECT45@@ 读取某次 run 的结果与 SQL 記憶体或 spill 后的 meta sidecar
@@PROTECT46@@ 協議 每次 run 成功后(assistant 正文) 一行摘要;runner 解析后回填 @@PROTECT47@@ / @@PROTECT48@@

@@PROTECT49@@ 由 runner 注入,LLM 不可自传;无 conversation 时跳过 ledger,物化策略仍依 workspace 启发式运作。

批註不走 Query Step Ledger——狀态在 @@PROTECT50@@ sidecar 与正文 mark,由 @@PROTECT51@@ / @@PROTECT52@@ / @@PROTECT53@@ 處理(見 Prompt 与 Context 工程 §十一)。

6.3 專案文件与批註工具

工具 Safety 典型狀态 用途
@@PROTECT54@@ / @@PROTECT55@@ safe Plan/Report 相关 磁碟正文 + sidecar + @@PROTECT56@@
@@PROTECT57@@ write Planning(非 Executing/Executed 正文锁) 依 open 批註原子 patch 正文与 sidecar
@@PROTECT58@@ safe ProjectFocused、PlanPlanning、PlanExecuting 依 @@PROTECT59@@ When to read 載入 Reference 全文
@@PROTECT60@@ write 同上 小範圍 find-replace;不建立新 Reference 檔

七、HTML 工具与契約(正文摘要)

产品動機見 Agent 时代的数据分析工作流 §五。操作見 §10

7.1 條件註冊 @@PROTECT61@@

为真时(@@PROTECT62@@ 或 Report tab 且磁碟已有契約 HTML):

  • 常駐 @@PROTECT63@@(Generate / Re-generate)
  • 追加 read_html_textget/patch_html_chunk_by_idget/patch_html_styles
  • 注入 Editing HTML Reports state 段

同轮 @@PROTECT64@@ 成功后,下一 iteration 重算 flag 与 schemas,无需換 tab。

7.2 @@PROTECT65@@

当使用者不在 Report tab 卻要改 HTML 时,Agent 先呼叫此工具解锁 chunk/樣式工具,再 read → get → patch。多份 report 皆有 HTML 且未指定檔名时应追問或回 @@PROTECT66@@。无 @@PROTECT67@@ 的旧檔应 Re-generate。每轮对話需重新 activate 或回到 Report tab。

7.3 契約要点(内化敘述)

  • 根元素:@@PROTECT68@@
  • @@PROTECT69@@ 内恰一个 @@PROTECT70@@ 承載全域 CSS
  • @@PROTECT71@@ 直下可 patch 区块:@@PROTECT72@@(regex @@PROTECT73@@)+ @@PROTECT74@@;禁止巢狀可 patch 容器
  • create_html_report 做 full 驗證;chunk 工具仅驗證 body
  • standard-chartjs:head 含 Chart.js CDN + @@PROTECT75@@;图表用 @@PROTECT76@@ JSON;patch 后需重新 Open Report 才重繪

八、Agent Memory 工具

工具 方向 說明
@@PROTECT77@@ catalog 模式下以父标籤批次載入 Rules/Info 完整條目
@@PROTECT78@@ 写佇列 主動提案可重用知识进 Queued Knowledge;須使用者 Apply 后才注入

@@PROTECT79@@ 与被動萃取共用 @@PROTECT80@@;runner 注入 @@PROTECT81@@ 供校驗。頻控:每则使用者讯息(整次 Agent stream)最多 2 條提案;每 conversation 最多 5 條 pending(Apply/Dismiss 后釋放)。@@PROTECT82@@ 須为近期 user/tool 讯息的可驗證子串;禁止 SQL、快取表名等執行态内容。詳見 可治理的 Agent Memory §4.3


九、UICommand 与前端 interceptor

部分工具不直接回传字串结束,而发送 UICommand SSE:前端 @@PROTECT83@@ 執行 @@PROTECT84@@、@@PROTECT85@@、@@PROTECT86@@、@@PROTECT87@@、@@PROTECT88@@ 等,并以 @@PROTECT89@@ 去重。使用者看見 tab 与结果变化,形成「副駕駛」体驗。見 §12.6


十、ask_user:暫停/恢復

  1. Agent 呼叫 @@PROTECT90@@
  2. SSE @@PROTECT91@@ → 前端互動区
  3. 使用者回覆 → @@PROTECT92@@
  4. 结果餵回 ReAct,繼續迭代

逾时約 5 分钟。探索配額、執行模式、Execute 確认等皆走此協議(Agent 时代的数据分析工作流)。


十一、Token 压缩策略

三種策略在不同时间尺度互補,可同次 ReAct 轮次内先后觸发

  • 历史截断(跨轮):长对話保留分析语境,丟棄較早无关讯息(Prompt 与 Context 工程 §十二)。
  • Mid-turn compaction(单轮内):一轮多次 tool 后 token 逼近上限,压缩本轮 tool 结果,保留 @@PROTECT93@@、快取名等关鍵欄位(同篇 §十三)。
  • Auto-continuation:模型输出因 @@PROTECT94@@ 截断时,在仍有餘量下追加續写请求(§4.3);与 context window discovery 聯動。

十二、前端串流(可选)

@@PROTECT95@@ 将 SSE 分派为 thought / tool_call / tool_result / message 等 Segment,以 mutable draft + @@PROTECT96@@ 節流 flush,避免每 token 觸发 React re-render;结束/錯誤/abort 路徑 forceFlush。


十三、SQL 執行工具(与統一查詢层对齊)

工具 作用
@@PROTECT97@@ 執行持久分页,物化快取
@@PROTECT98@@ Source Run DAG
@@PROTECT99@@ 读取分页快取结果(支援以分页标題解析)
@@PROTECT100@@ 探索:仅驗證
@@PROTECT101@@ 预览列(≤200);條件物化为 agent 快取(見 統一查詢层 §8.1

工具回传的品質讯号也会进入 runner 判定:@@PROTECT102@@ 代表需要拆小步驟;@@PROTECT103@@ 只是建議可考慮 cache,不阻擋分析。Release smoke 的 hard gate 聚焦在 plan → todo → report、无明显錯誤迴圈与報告品質讯号;DAG / Source Run 则是 soft signal,用來观察可追溯能力是否被模型自然使用。


十四、工程決策总览

決策 原因
自研 ReAct SSE + 狀态 + UICommand
探索 ask_user 續跑 人類確认而非硬停
條件 HTML 工具 降预设 schema 噪音
max_iterations 100 长链分析可完成
UICommand 真实 IDE 副作用
Release gate 重分析品質 不让快取形狀取代可信報告

十五、结语

Agent 架構是工作流与 Context 的執行引擎:ReAct 迴路把分层 prompt 变成 SSE 事件、工具呼叫与 IDE 副作用(UICommand),Harness 与聊天沙箱的差异在于執行綁定真实工作区。

若模型「一直 validate 卻不 run_query」,请同时檢查 Prompt 与 Context 工程 的 QEM 說明与本文探索预算;查詢物化与血緣语意見 統一查詢层