Rethinking Search as Code Generation
原始來源與檔名:2026-06-09T093904+0800-Rethinking Search as Code Generation.md
NAPKIN | 餐巾纸
餐巾纸公式
Search as Code (SaC) = LLM (Control Plane) + Agentic Search SDK (Primitives) + Compute Sandbox (Execution) 將傳統單體的搜尋引擎解構成底層 API 原語,讓 LLM 透過生成 Python 代碼,針對每個任務動態編排專屬的檢索與處理管線。
一句话
Perplexity 提出的 Search as Code 架構,打破傳統搜尋 API 的僵化,讓 AI 代理透過寫程式直接控制底層的檢索、排序與聚合原語,大幅提升複雜任務效能。
餐巾纸草图
[Traditional Search] [Search as Code (SaC)]
LLM -> Query -> [Monolith] LLM -> (Generates Python Code)
|
v
[Compute Sandbox]
- sdk.search.web_many()
- dedupe()
- summarize()
|
v
(Targeted, dense context back to LLM)
ROUND 1: SKELETON | 骨架掃描
“这本书在说什么”
- 核心问题: 傳統搜尋引擎架構 (包含供 AI 呼叫的 API) 是為人類或單次問答設計的「巨石架構 (Monolith)」,對於需要大量併發、非線性檢索且需要過濾雜訊的 AI Agent 來說過於僵化。
- 核心答案: 提出 Search as Code (SaC) 架構。不提供單一的 end-to-end API,而是提供包含底層檢索原語的 SDK,讓 LLM 根據任務當場生成程式碼來編排專屬的檢索管線。
- 论证结构: 分析傳統架構的瓶頸 (上下文污染、無法控制檢索細節) -> 介紹 SaC 的三層架構 (Models, Sandboxes, SDK) -> 透過 CVE 漏洞查找的真實案例分析 -> 提出基準測試 (Benchmarks) 的數據證明其優勢。
章节骨架
- The Rigidity of Traditional Search: 傳統搜尋管線的剛性導致三大失敗模式:粗糙的上下文污染、無法利用領域知識引導搜尋、缺乏效率的控制流 (只能線性呼叫)。
- Designing a Programmable Search Architecture: 介紹 SaC 三層架構。
- Agentic Search SDK: 將搜尋打碎為可組合的基元 (Python)。
- Sandboxes: 執行環境,利用檔案系統 (Filesystem + Serde) 傳遞跨回合的狀態,而非使用 REPL 避免命名空間混亂。
- Models: 控制層,結合特定訓練的 Agent Skills 來教導模型使用 SDK。
- Case Study: CVE Vendor Advisories: 展示三段生成的程式碼,如何過濾網址格式、分析稀疏數據並驗證版本綁定。
- Evaluation Results: 在 BrowseComp, WideSearch, WANDR 等基準測試中,SaC 在效能與成本邊界 (Cost-Performance Frontier) 上大幅超越 OpenAI, Anthropic 等對手。
- Toward a New Architecture of Computing: 總結這是一種結合「Token-space 推理」與「確定性執行 (Deterministic runtime)」的混合計算架構。
ROUND 2: DISSECTION | 血肉解剖
“凭什么这么说”
论证链
[複雜任務需要非線性、去蕪存菁的檢索] --> [傳統 API 強制回傳完整結果,污染 LLM Context] --> [提供 SDK 讓 LLM 生成代碼在 Sandbox 內執行] --> [代碼執行過濾、聚合後,只回傳最高密度的資訊] --> [效能與成本雙贏]
关键证据
- 案例分析: 查詢 200 個 CVE。SaC 只用 42.9K Tokens 達到 100% 準確率;傳統基準線用了 288.7K Tokens 且其它非 Perplexity 系統得分低於 25%。
- 生成的代碼範例:
seed_hits = sdk.search.web_many(queries, limit_per_query=8, concurrency=12)
pages = [{"vendor": q["vendor"], "url": h.url, "text": join_result_fields(h)} ...]
# Agent 甚至能用 LLM 作為中間的判定函數來過濾
verified = sdk.llm.extract_many(items, instruction="...", schema={...})
- 基準測試結果 (WANDR): 處理複雜研究任務的 WANDR 測試中,SaC 取得 0.386 的分數,遙遙領先次佳系統 (Anthropic) 的 0.152,領先幅度達 2.5倍。
隐形假设与边界
- 隐形假设: LLM 具備足夠強大的 Code Generation 能力,且能理解 Agentic Search SDK 的用法(透過 SKILL.md 注入知識)。
- 边界条件: SaC 架構對基礎設施要求極高,需要極低延遲的 Sandbox 與高併發支援的 Search API。對於單純的日常知識問答,SaC 可能會有不必要的 Overhead。
ROUND 3: SOUL | 靈魂提取
“还能怎么用”
- 作者盲点: 雖然提及 Sandbox 使用 Filesystem 傳遞狀態,但沒有深入探討當 Agent 寫出死胡同代碼 (Infinite Loop) 或耗盡記憶體時的資源隔離與防禦機制。
- 知识连接: 資料工程的 ETL (Extract, Transform, Load) 管線架構,以及 Serverless / FaaS (Function as a Service)。
- 行动触发: 在設計自己的 Agent 系統時,不要只給 Agent 一個
search(query)工具,嘗試提供更原子的工具如fetch_url(),filter_by_domain(),summarize_list()讓其自行組合。
跨域映射
- 在 樂高玩具,這叫 從買組裝好的模型 (傳統 API) 變成買散裝積木 (SDK 基元),讓你根據需求搭建任何形狀。
Rethinking Search as Code Generation (Architectural Deep Dive)
前言/背景
隨著 AI Agent 被要求執行持續數小時的複雜任務,傳統的搜尋 API 暴露出僵化與上下文污染的問題。Perplexity 發布了名為 Search as Code (SaC) 的新架構,賦予 AI 直接透過撰寫程式碼來編排檢索底層原語的能力。
章節詳細總結
傳統搜尋架構的瓶頸
傳統搜尋為人類設計,API 強制綁定檢索、排序與內容萃取,導致 AI 使用時遇到三大問題:
- 粗糙的上下文:為了獲取單一精準資訊被迫載入大量無關內容。
- 無法利用領域知識:模型無法在檢索中途加入特定的業務邏輯 (如特定過濾條件)。
- 控制流效率低下:需要多次與 LLM 來回交互 (Roundtrips) 才能完成平行搜尋或合併結果。
Search as Code (SaC) 三層架構
- Agentic Search SDK:將搜尋基礎設施解構為 Python 基元函數。提供從底層的網路檢索到高階的語意解析積木。
- Compute Sandboxes:安全的程式碼執行環境。為了解決跨回合 (Across turns) 的狀態保留問題,Perplexity 測試後選擇了「持續性檔案系統 + 顯式序列化 (Serde)」而非 REPL 模式,以保持 Agent 對狀態管理的清晰度。
- Models (控制層):LLM 充當大腦。為彌補預訓練資料中沒有自家 SDK 的缺陷,使用經過高度優化的 Agent Skills (少於 2000 tokens 的 SKILL.md) 進行 In-context learning,教導模型如何組合基元。
實際案例與基準測試效能
- CVE 抓取案例:模型自主寫出代碼,不僅展開平行檢索,還在程式中實作了嚴格的網域白名單過濾,並利用
sdk.llm.extract_many在 Sandbox 中呼叫小型 LLM 過濾雜訊。這使 Token 消耗下降了 85%。 - 基準測試:在 BrowseComp、WideSearch 及新推出的 WANDR 複雜研究基準測試中,SaC 在準確度與性價比邊界上皆擊敗了現有的 OpenAI Responses 與 Anthropic Managed Agents 方案。
總結與結論
- AI 運算正在從純粹的「Token 生成推理」走向「推理與確定性執行 (Code Runtime) 混合」的新範式。
- Search as Code 徹底顛覆了「工具呼叫 (Function Calling)」的概念,將搜尋系統降維成了程式語言的標準函式庫,解放了 LLM 處理複雜資料管道的能力。
- 開發 Agent 工具時,提供「組合基元」遠比提供「萬能的一鍵端點」更能激發 Frontier Models 的潛力。