橋水基金首次公開其AI研究助手Pat的完整設計思路。Pat已獲數百名投資者每日使用,能自主完成數據檢索、分析代碼編寫和互動式報告生成,將過去需要研究員數天甚至數週完成的工作壓縮至數分鐘。橋水的核心策略是讓AI更可靠而非更聰明,透過兩個分工明確的智能體(聊天智能體處理對話、編碼智能體負責代碼生成)和類似編譯器的確定性機制,使同一問題兩次提問時有95%的情況下生成完全一致的代碼。這一成果離不開橋水過去50年累積的市場數據、交易邏輯和方法論資產。文章作者、來源:AI原生Lab
全球最大的對沖基金橋水,最近首次公開了其內部 AI 研究助手 Pat 的完整設計思路。
Pat 已被數百名投資者每日使用。給它一個真實的研究問題——例如「當前中東衝突會不會重演歷史上石油供應衝擊」——它會自行尋找數據、撰寫分析代碼,並生成互動式研究報告。過去需要研究員數天甚至數週才能完成的工作,現在幾分鐘內即可開始產出結果。
但橋水這次公開最值得企業學習的,並不是 AI 能做研究,而是另一件事:他們沒有把 AI 做得更聰明,而是把 AI 做得更可靠。
為了讓 AI 能參與數十億美元資金的研究決策,橋水並未依賴更強大的大模型,而是圍繞 AI 建立了一整套「確定性」機制:任務先規劃再執行、代碼強制校驗、結果可重複驗證,任何投資人的經驗都可自動沉淀為整個組織的新能力。
而 Pat 背後那條通往 AI 的路,橋水在 AI 還沒出現的時候就鋪好了。
橋水 AI 團隊負責人 Brendan McManus、投資負責人 Michael Rand 和技術負責人 Santi Wait 在最近一場公開技術演講中,首次將 Pat 的完整設計思路搬上臺前。

收集數據——這件事橋水已經做了近50年。Burren 的演講從一張1980年的黃色法律便箋紙開始。

那是橋水的第一套債券交易系統。創始人 Ray Dalio 訂了一條規則:每做一次交易,都要把這樣做的因果邏輯一條一條寫清楚。寫下來,別人才能看、才能挑毛病、才能幫你改進。每次學到新東西,就劃掉一條舊規則,寫下一條新的。
這件事橋水已經做了近 50 年。每一次交易決策背後的邏輯、每一個市場判斷的方法論、每一次失敗的教訓——全部都被編碼成了一套既為人類可讀、又為機器可讀的專家系統。Burren 的原話是:「我們不需要為了上 AI 而臨時回去補寫知識庫。這些數據早就在那裡了。」
這個差距,可能是所有企業使用 AI 最根本的分水嶺。不是誰的模型更好,而是誰的數據在 AI 出現之前就已經被整理好了。
橋水的 AI 戰略分兩條線。
第一條線是作為投資者理解 AI 本身——研究 AI 的供需結構、建設週期、對宏觀和市場的影響,就像他們過去研究疫情和石油供給衝擊一樣。第二條線是作為實踐者用 AI 改造自己的研究流程——最終目標是打造一個「人工投資者」,把人類投資人每天做的事全部複製一遍。Pat 負責的是其中一個環節:調查分析。
橋水內部是怎麼把這件事推動起來的?在講技術之前,Burren 先講了一個容易被忽略的維度:組織。
他們沒有將這個項目交給 IT 部門,而是組建了一個「內部創業團隊」——投資者、工程師和科學家跨職能協作,小團隊敏捷迭代,同時調用橋水的大型機構資源。
投資者的角色是定義目標——研究什麼才有價值。工程師的角色是架構實現——系統怎麼搭才能穩定。科學家的角色是嚴格評估——怎麼確定 Pat 的分析質量真的在變好,而不僅僅是「看起來不錯」。
數百位投資者每天都在使用,持續提供真實的反饋訊號。一旦這個飛輪開始運轉,產品的進化方向就不再是靠產品經理猜測,而是由數百位專家用戶的行為推動。
兩個 Agent,各管一攤。Pat 的系統架構並非由一個萬能大模型運作,而是由兩個獨立的智能體分工合作。
一個叫聊天智能體(Chat Agent)。它只與投資人對話,只談投資內容——「這個數據夠不夠」「要不要再看一個角度」「當前版本下哪些因素是主導」。投資人不是程式設計師,不應該被迫關心程式碼。因此,這個聊天智能體從頭到尾不暴露任何技術細節——從對話中,用戶看不出後面有程式碼在運行。
另一個稱為編碼智能體(Coding Agent)。它不會與用戶對話,其工作只有一件:將聊天智能體產生的計劃「編譯」成 Python 和 Pandas 代碼。
Santi 說,分開之後產生了三個意外的收益。
第一,投資者體驗更自然——使用起來就像一位懂行的研究助手,而不是在使用編程工具。第二,兩個智能體各自專精、上下文互不污染——談投資的不用管代碼,寫代碼的不用理解投資的語義。第三,可以將對話流程產品化為一套可靠的固定工作流,而不是一堆散裝知識。
編譯器式的確定性:同一個問題問兩次,95% 的情況下代碼一模一樣,這是 Pat 整個架構裡最硬核的部分。
Santi 表示,在這個對正確性要求極高的場景——數十億美元的倉位——不能依賴 vibe coding。vibe coding 的問題在於,每次執行的結果都不一樣,這次對了不代表下次也會對。對於對沖基金來說,無法承擔這種不確定性。
於是他將 agentic coding 當作編譯器問題來解決。
第一步,計劃不是待辦清單,而是「自然語言版的 Python 專案」。在計劃中,提前寫好本次分析需要產生的所有資料表(dataframe)、每張表的欄位與結構,以及表與表之間的依賴關係。每個子任務就像一個 Python 函數——具有明確的輸入依賴和輸出規範。目標是讓同一份計劃在不同大模型實例上執行時,生成的程式碼在語義上完全等價、輸出完全一致。
第二步,程式碼是並行生成的。由於有清晰的依賴關係圖,系統先進行靜態分析,得到一張 DAG(有向無環圖),然後按層級並行生成程式碼。一個分析中有 3 張資料表和 30 張資料表,程式碼生成的時間幾乎相同。
第三步,校驗並非由智能體自行決定是否檢查。Santi 特別強調,他們的 harness 是常規的 Python 代碼——校驗是強制性的,內建於架構中。「一個智能體可能會『忘記』執行檢查,但一條固定的代碼流水線不會。」在這個約束下,他們在測試套件上獲得的結果是:同一個計劃兩次生成的代碼,在 95% 的情況下完全一致。
第四步,在執行時並非讓大模型運行代碼,而是走傳統的靜態分析流程,自動注入緩存標註——哪些數據已加載、哪些計算已執行過,第二次無需重複。結果是,如果用戶僅修改了一個圖表的標題,傳統工具可能需要重跑整個分析流程,而 Pat 幾乎能瞬時得出結果,越改越快。
數據檢索多了一步——在正式分析前,Pat 需要先搜尋數據,像人類一樣審視。
橋水有兩個資料庫。一個是非結構化的——數百萬份券商研報、財報電話會紀要、內部郵件和備忘錄,近實時更新,每天新增幾千份。另一個是結構化的——數十億條時間序列資料,既有外部資料(油價、股指),也有內部建模的概念(例如「我們預測 12 個月後的通脹率」)。
搜索本身使用了 RAG 和重排序等常規手段。但 Santi 的團隊發現,加入一步「人類式審視」後,命中準確率從大約 50% 跳升至接近 90%。
「人類式審視」的意思是,搜到一個數據序列後,不只靠名稱匹配——要像人類研究員一樣去檢查:它的頻率對嗎?幣種對嗎?數值和你已有的判斷一致嗎?這一步把模糊的關鍵詞搜索變成了帶判斷的數據校驗。
自我進化機制 Pat 擁有兩套自我進化機制。
隱式的:後台智能體會自動掃描已完成的對話,找出失敗的模式,生成驗證基準,確認問題可重現,然後自動迭代 Pat 的知識庫和系統指令,直到此基準通過。
更直接明瞭。用戶在分析過程中,若認為 Pat 應該做得更好——例如應該多出一組圖表、應該提前想到一個角度——可點擊「教它」按鈕。
系統會自動回溯整個對話,識別是行為錯誤、上下文缺失,還是用戶的引導本可被預判。然後自動生成一個「應當失敗」的驗證用例,確認問題可重現,自動修改知識庫直至該用例通過,再重新運行所有現有驗證以確保未引入新問題。最後一條 Pull Request 會發送到 Slack,經人工審核後合併。
下次任何人再問類似問題,預設提供的就是改進過的版本。
以下為演講文稿,由AI輔助翻譯:
橋水基金 AI 團隊負責人 Brendan McManus大家好,我叫 Brendan McManus,是橋水基金(Bridgewater Associates)應用 AI 團隊的負責人。橋水是一家系統化宏觀對沖基金。我在橋水已工作近十年,最初是一名軟體工程師,之後成為一名系統化投資者與研究員。過去幾年裡,我主要專注於彌合投資與技術之間的鴻溝。今天,我和我的同事 Michael Rand 以及 Santi Wait 一起来到這裡。兩位分別是該項目的投資負責人和技術負責人。我們將向大家介紹一款由我們內部開發的優秀工具,叫作 Pat——“口袋分析師”(Pocket Analyst)。到本次演講結束時,大家將會看到:我們如何構建出一名 AI 分析師,它能夠在幾分鐘內完成專家通常需要數小時才能完成的研究工作。這款工具目前已在公司內部部署,供數百名投資人員使用;並且,它能從每一次互動中持續學習。此外,我們還會向大家展示,我們究竟是如何設計並構建這樣一個系統的。在正式展示我們構建的產品之前,我想先簡要介紹橋水看待 AI 的方式。橋水已經花了數十年——準確來說是 50 年——思考如何將市場和經濟規律編碼為能夠持續複利增長的系統。而這一切,真正始於你們螢幕上所看到的內容:我們在 1980 年寫在黃色便利貼上的債券系統。核心理念非常簡單:每當你想要進行一筆交易時,都要準確寫下你認為這筆交易成立的規則;寫下其中確切的因果邏輯。因為一旦這麼做,其他投資者就能查看你寫下的內容,幫助你找出哪裡出錯了,並協助你改進整個過程。每當你學到新東西,就劃掉一條舊規則,再寫下一條新規則。這樣就形成了一個非常強大的學習過程,而這也正是過去 50 年來橋水一切工作的基礎。數十年來,我們大幅累積並強化了這一過程。我們將有關所進行交易、交易方式及其原因的每一項經驗、每一種方法論、每一條規則,全部編碼進一個既可供機器讀取、也可供人類理解的專家系統之中。如今,我們擁有極其豐富的數據資產。而正是這些數據,讓我們能夠很好地迎接 AI 時代。我們不需要回過頭去為智能體重新記錄所有內容——這些內容本來就已經存在,供我們調用。在進一步介紹這款工具之前,我想談談橋水在更廣泛層面上如何應用和理解 AI。我們從兩個角度推進這件事。第一個角度是:作為投資者,我們必須深入理解每一個正在塑造全球市場和經濟的重要趨勢和動力。正如我們必須理解新冠疫情,或近期石油供應衝擊一樣,我們同樣必須理解 AI。AI 領域的供需失衡呈現出怎樣的形態?推動基礎設施建設和擴張的因素是什麼?這些因素最終又會如何影響市場?對我們這些投資者來說,理解這些問題只是基本門檻。第二個角度是作為實踐者來使用 AI,這也是我們今天主要討論的內容。作為實踐者,我們正在將 AI 應用於研究流程的各個環節,最終目標是構建一名「人工投資者」——它能夠執行我們的人類投資者每天所做的全部活動。那麼,人類投資者實際上都在做什麼?我們將其視為一個「研究循環」。投資者持續感知外部世界正在發生的事,提出關於什麼是真實的、自己可能忽略了什麼的問題;然後進行分析調查,試圖回答這些問題;接著整合研究發現;最終,將所有學到的內容重新納入我們持續累積的知識體系與專家系統之中。這最後一步尤為關鍵。透過此流程獲得的所有知識,都會被存入一個共享記憶體系中,供人類繼續調用。因此,你可以想像:如果要建構一名人工投資者,它就必須能夠完成研究流程中的每一個不同步驟。你可以設想建立一系列離散的子智能體,每一個專注於研究循環的某一個環節。這正是我們使用 AI 的方式。我們為人類投資者必須完成的各項任務分別構建專門的子智能體,並讓它們調用我們過去 50 年累積的同一套知識與理解。不過,今天我們只會討論其中一個智能體:它專注於研究流程中的「調查」環節,即那些需要人類分析師花費數天乃至數週才能完成的深度分析工作。我們將這項工具命名為 Pat,即「口袋分析師工具」(Pocket Analyst Tool)。這裡也要先明確一下預期:Pat 並不直接涉及我們如何交易。它的真正用途是進行深度探索式研究,讓投資者能夠研究那些過去因時間和精力限制而根本無暇研究的問題。那麼,我們具體構建了什麼?我們打造了這款名為 Pat 的口袋分析師工具。從第一天起,它的產品規格就十分簡單:必須讓 Pat 能夠完成我們人類投資者在調查與分析工作中所做的一切。而這首先意味著數據能力。Pat 必須能夠搜尋並閱讀我們內部的所有不同類型數據,包括:結構化時間序列數據,例如跨越數十年的股票價格;非結構化數據,例如我們訂閱的經紀商/交易商研究報告;我們內部撰寫的研究備忘錄。Pat 必須能夠搜尋並閱讀所有這些內容。Pat 還必須能夠使用人類分析師可用的各種工具,包括我們自主開發的可視化工具、診斷工具,以及用於評估指標創意質量的工具。此外,我認為對於技術聽眾而言,這一點尤其有趣:Pat 所執行的許多分析,單次就需要人類分析師花費數小時完成。這意味著分析本身相當複雜。因此,Pat 的分析必須完全可診斷——不僅要讓人類能夠診斷,也要讓後台運行的智能體能夠讀取執行軌跡、理解過程,並確認每一項計算都是正確的。除此之外,我認為過去 50 年持續記錄和累積的知識,在此開始真正發揮價值:Pat 知道我們的全部上下文。它能存取我們的投資流程與框架;由於過去 50 年我們一直將這些內容記錄下來,因此它準確知道我們的分析師應如何開展工作。最後,Pat 必須能夠學習。它不僅要為某一位投資者累積學習成果,還必須能夠為公司裡的每一位投資者累積和複利這些學習成果。Pat 今天並不是一個原型產品。它實際上已在數月前完成內部部署,目前已有數百名投資人員每天都在使用它。這帶來了一個相當強大的改進飛輪:當投資者使用 Pat 進行真實研究時,後台會持續運行智能體,掃描這些互動過程,識別 Pat 出錯的地方,構建經過人工審核的基準測試;隨後,這些發現會推動我們修改上下文內容以及為 Pat 構建的運行框架。因此,Pat 的改進不僅服務於一個人,而是服務於所有人。最後,在介紹產品之前,我想回答一個經常被問到的問題:一家已有 50 年歷史的對沖基金,究竟是如何打造出你們馬上將看到的這種產品的?一切首先始於:你必須有能力,也有意願去重塑自己。構建 Pat 的團隊,本質上是一個在公司內部孵化的應用 AI 創業團隊。我們既能非常靈活、快速地行動,也能調用整個公司的資源。此外,我們建立了由投資者、技術人員和科學家共同協作的團隊,攜手打造產品。我認為,如果你要為專家用戶構建這樣的產品,這一點至關重要。投資者帶來業務背景和領域專業知識;技術人員帶來系統架構能力;科學家帶來嚴謹性。為專家用戶構建 AI 系統時,正是這種多角色團隊不可或缺。至於專家用戶,我們內部有數百人正在使用各類 AI 工具,不僅僅是你們馬上會看到的 Pat。他們每天都在提供訊號,幫助我們判斷這些工具應如何持續演進與改進。最後,我們還有一個極為出色、可持續複利的生態系統可供接入:50 年累積的數據、工具和方法論。這些資源不僅供人類分析師使用,同樣也供智能體使用,服務於我們構建「全人工投資者」的長期旅程——讓它最終能夠完成今天人類所能完成的一切工作。接下來,我把時間交給我們的投資負責人 Michael Rand。他將為大家演示我們構建的產品,並介紹其產品架構。橋水口袋分析師項目投資負責人 Michael Rand好的,謝謝 Brendan。我叫 Michael Ryan,是口袋分析師項目的投資負責人。簡單介紹一下我自己:我在橋水已工作五年,最初以技術人員身份加入,但之後大部分時間都擔任投資相關崗位。目前,我最主要關注的問題是:如何將 AI 融入我們的投資流程。接下來,我想直接示範一下口袋分析師,展示它的能力,以及橋水的投資人員如何使用它。您身後的螢幕上可以看到 Pat 的主頁,其中包含我們今天示範所使用的提示詞。我們要求 Pat 研究市場對近期中東衝突的反應,並將當前事件與類似的歷史事件進行比較。最後,我們要求 Pat 製作一系列可視化圖表,以突顯當前情況與過往石油供應衝擊之間的相似性與差異性。這是橋水過去幾個月一直在研究的真實問題,而 Pat 一直被投資者用來加速我們的研究過程。不過,在提交這個請求之前,我想先花一點時間講講我們在設計 Pat 運行框架時遇到的一個有意思的安全問題。我們的出發點是:如果 Pat 要真正發揮作用,它就必须能夠訪問投資者在開展研究時有權訪問的全部資訊。但問題在於,在橋水,不同投資者能夠訪問的資訊不同。例如,某位投資者可能有權查看我們目前在所有市場上的倉位情況。對於這個人而言,他所使用的 Pat 也必須能夠存取此類資訊。但與此同時,也有一些分析師並未接觸這些資訊。因此,同樣至關重要的是:我們絕不能意外將這些受保護的知識產權或敏感資訊洩露給這些分析師。因此,與 Claude Code 這種所有人都使用相同系統提示詞和相同工具的運行框架不同,橋水中的每個人皆擁有一個獨特版本的 Pat,該版本會根據該用戶可見與不可見的信息進行定制。從實踐角度說,這種差異本質上取決於每個人的 Pat 所擁有的上下文和工具。現在,我們提交這個提示詞。分析開始後,Pat 做的第一件事就是搜索網絡,以及我們內部的非結構化數據倉庫,從而更好地理解當今世界正在發生什麼,並將其置於歷史背景中進行解讀。對於現代聊天應用來說,網路搜尋本身只是基礎能力。但這裡真正的差異化優勢在於:Pat 能夠搜索的非結構化內容範圍非常廣泛,這來自我們訂閱的各種資訊資源。我們有一個包含數百萬份文件的資料庫,涵蓋世界各地的資訊,其中包括:經紀商研究報告;財報電話會議記錄;內部郵件;以及更多內容。這個數據庫近乎實時更新,每天會新增數千份內容。這也呼應了我剛才所說的觀點:如果 Pat 要真正提供槓桿效應,它就必須能夠存取其用戶所能存取的一切資訊,從而盡可能模擬用戶實際的工作方式。當收集完這些上下文後,Pat 接下來會搜尋我們的時間序列資料庫,尋找完成分析所需的資料。這個資料庫包含數千萬條時間序列,是我們過去 50 年來持續在內部建模和累積的成果。其中既包括來自外部世界的数据,例如石油價格;也包括我們內部推導出的概念,例如我們預測未來 12 個月的通脹水平。搜索智能體會使用一些傳統的搜索技術,比如 RAG(檢索增強生成)、重排序等。但我們發現,真正帶來巨大改進的因素,是在其中加入類似人類研究員的「檢查」環節。我的意思是,當人類研究員尋找數據時,他們並不只是盯著時間序列的名稱。他們還會查看很多東西,例如:該序列的頻率;該序列所使用的貨幣;最重要的是,該序列的取值是否與他們原有的判斷和先驗認知相一致。將這類推理機制嵌入我們的搜索智能體,使我們的準確率從大約 50% 提升到了 90%。在 Pat 獲得了所需的上下文和數據之後,它會向用戶提出澄清問題,並可能提出在分析過程中值得進一步探索的其他角度。在 Pat 的開發過程中,我們逐漸形成了一個觀點:計劃本身就是分析。如果我們能夠制定出高質量、足夠詳細的計劃,我們就有信心能夠持續地、智能地執行這一計劃,並產出我們希望得到的結果。Santi 將在稍後更深入地介紹這一點。如今,智能體在聊天機器人中提問已很常見。但我們真正關注的是這些問題的實質內容。我們投入了大量時間和精力,開發上下文和基準測試,以塑造這種能力。我們教會 Pat 什麼是好的研究問題,什麼是不好的研究問題。這種來回互動能幫助通常在規劃環節投入不足的人類用戶,逐步形成我們認為高質量的研究計劃。當所有模糊點都得到解決後,Pat 就進入規劃階段。在規劃階段,它主要做三件事:明確分析過程中將要生成哪些數據框(DataFrame);確定每一個數據框的模式(schema);最重要的是,明確這些數據框之間如何相互連接。From a time perspective, this planning phase carries a relatively high cost throughout the analysis process.但這是我們有意承擔的成本,因為它讓我們能在執行階段實現更高效的能力。現在,計劃已經確定。計劃執行的第一步是生成代碼。由於我們的計劃極其詳細,因此我們可以利用子智能體,並行地為分析中的每一個數據框生成代碼。之所以能夠這樣做,是因為每一個子智能體都知道:它依賴哪些資料框;這些數據框的模式是什麼;它自己所要生成的資料框應當具有怎樣的模式。因此,無論一項分析僅包含 3 個數據框,還是一項較為複雜的分析包含大約 30 個數據框,生成代碼所需的時間大致相同。當完成程式碼生成後,我們會執行這些 Python 函數,同時由一個智能體監督執行過程。當它發現運行時錯誤、無意義的數值等問題時,便會介入處理。在繼續講執行過程之前,我想特別指出:這些分析生成的時間序列輸出,會落入與輸入數據相同的資料庫中。我認為這很重要,原因有兩點。第一,它表明 Pat 分析的任何輸出,與我們多年來由人類上傳和生成的任何時間序列,在系統中是沒有區別的。第二,也是更重要的一點,Pat 分析的任何輸出都可以作為下一次分析的輸入。這樣一來,就形成了一個環境:人類和智能體能夠非常輕鬆地複用彼此的成果,並在彼此成果之上持續累積。執行完成後,就像你希望初級分析師在向你匯報前先複核自己的工作一樣,我們也希望 Pat 做同樣的事情。因此,在這個分析階段,Pat 會檢查它計算出的數據和生成的可視化圖表,確認數字是否合理、圖表是否整潔清晰。如果它發現看起來有些不對勁的地方,Pat 會後退一步,診斷問題,然後改進分析過程;在確認自己對結果滿意之後,才會把結果交給用戶。最終交付物是一份互動式報告。在這份報告中,圖表的外觀與橋水投資者平時製作的圖表完全一致。Pat 使用的是相同的內部圖表庫,也利用了我們數十年來在內部持續開發的同一套文本和圖表體系。您可以看到,用戶可以放大或縮小這些圖表;還可以將此互動式報告中的數據發送到我們的內部圖表工具中,以便即時進行進一步調整。在把時間交給 Santi 之前,我想再談談:Pat 如何隨著使用而不斷變得更好。主要有兩種方式。第一種是 Brendan 之前提到的自主式學習:我們讓智能體審查已完成的對話,尋找能夠讓 Pat 變得更聰明的方式。第二種,也是我們這裏要展示的,是更顯式的方式:如果用戶認為自己與 Pat 的互動中存在值得學習的內容,那麼他可以在分析的上下文中直接啟動這個學習流程。這裡,用戶只是要求生成一組不同的可視化圖表。請注意,用戶並未指出之前內容有誤。他只是希望從另一個角度來看待這個問題,並認為這個角度對回答當前問題至關重要。如果用戶認為 Pat 從一開始就應該生成或建議這組圖表,那麼他可以點擊「教學」(Teach)按鈕。這會啟動一個智能體,審查整個對話,尋找例如以下問題:行為失誤;上下文缺口;本可提前預判並滿足的用戶引導或偏好。隨後,用戶可以修改這些內容,也可以原樣提交。提交後,首先,後台智能體會建立一個預期會失敗的基準測試。這證明我們能夠重現之前這種較差的行為。接著,它會持續迭代我們的上下文知識庫或運行框架本身,直到這個基準測試通過。然後,我們會確認:讓這個基準測試通過,並沒有導致測試套件中的其他測試失敗。完成後,我們會收到一條 Slack 消息,其中附有一個拉取請求(Pull Request),包含該智能體希望對 Pat 作出的修改。這樣做的效果是:下次當有人帶著類似問題來使用 Pat 時,他們從一開始就可以獲得改進後的版本。現在,我將把時間交給 Santi,由他來介紹技術架構。口袋分析師項目技術負責人 Santi Wait:大家好,感謝 Michael。我是 Santi,是口袋分析師的技術負責人。I believe many of you here are building similar programming agent products, just like we are.而構建這類產品確實非常困難。編程智能體非常反覆無常,也難以預測;它們經常會出錯;而當你特別倒楣時,它們甚至可能完全失控,試圖毀掉你的資料,以及諸如此類的問題。因此,打造一個受人喜愛的優質產品已屬不易;而要打造一個用戶願意真正融入日常工作的產品,則更為困難。在一家對沖基金中,我們試圖交易數十億美元的資金。因此,我們不能讓所謂「憑感覺寫代碼」(vibe coding)成為這些分析背後的基礎。我的背景是編譯器理論和程式語言設計。而編譯器也具有一組非常相似的要求:必須完全確定性、完全正確且可靠。例如,在駕駛飛機時,你不能出現 "off-by-one error"。這裡的結構也非常相似:編譯器接收用戶代碼,並將其編譯為例如 JavaScript 之類的目標代碼;而程式設計智能體接收用戶提示詞或計劃,並將其「編譯」為 Python。我們非常喜歡這種思路。今天時間不多,因此我們將重點討論這一點,希望它能成為一種經驗,讓大家帶回自己的工作中。不過,我們還是從聊天環節開始。聊天智能體的目標,是與用戶建立共同理解:用戶希望完成什麼任務。聊天智能體是使用 LangGraph 實現的。我們主要使用它來支援持久化功能。它原生支援取消和續接功能;以前我們自行管理這些問題,效果差得多。聊天智能體可以調用工具。Michael 剛才提到了一些,例如:時間序列數據搜索;非結構化數據搜索。這些工具各自會完成對應的工作。隨後,一旦聊天智能體了解完成分析所需的全部資料,它就會制定一個計劃,並調用一個子智能體——也就是我們的程式設計智能體。這個編程智能體將生成一份基於 Python Pandas 的分析。為什麼要將兩個智能體分開?在早期,我們就決定:我們的投資者並不是職業程式設計師,他們關心的是投資。因此,我們決定讓聊天內容純粹圍繞投資主題。這樣做的結果是,我們獲得了一個產品:程式設計僅是純粹的實現細節。在聊天界面中,你甚至無法感覺到後台有代碼在運行。還有一些意外收穫:上下文不會被程式碼細節污染;每個智能體都能專注於自己的任務,並自然地不斷改進;我們可以對聊天體驗進行大量定製。接下來,我們想講的是:我們的投資領域上下文質量非常高。我們教聊天智能體如何像一名橋水投資者那樣說話。這裡有許多專業術語需要教給它。因此,用戶與智能體之間的交流方式,就像橋水內部的同事之間在交流一樣。在橋水,我們也允許投資者作出貢獻。Michael 剛才展示的,就是他們像開發者參與代碼庫一樣,為系統貢獻內容。這其實是一個非常好的觀點:大多數情況下,你的用戶比你更擅長編寫業務上下文。因此,不要過於自我意識,允許他們直接參與貢獻,是成功的一個好方法。關於聊天智能體,最後一點是:我們不僅僅向它教授上下文。如果只給它上下文,最終得到的往往是某種模糊的、資訊量很高但不太像工作流程的東西。因此,我們會為智能體提供關於如何處理特定類型分析的逐步指南。This makes it more like a real product—a reliable and dependable workflow.接下來,我要談的是我個人最喜歡的部分:程式設計智能體。這是一張編程智能體的高層架構圖。你們在這裡看到的所有東西,實際上都只是 Python 代碼。它是用 LangGraph 實現的,但並不存在所謂「智能體式編排」(agentic orchestration)。很多人在拍照,很好。我們從最左邊開始講,也就是由聊天智能體生成的分析計劃。分析計劃將被拆分為若干任務。每個任務大致對應一個 Python 函數,該函數將計算並生成一個數據框。這裡是一個模式示例。每項任務都會包括:一個名稱;對需要計算內容的描述;關於輸出數據框的結構性和語義性資訊。我們期望每個任務都能夠透過大語言模型,以確定性的方式被編譯成一段程式碼。In other words, the code generated by two large language models for the same task should be semantically equivalent and produce identical output values when executed.因此,我們的分析計劃並不只是像 Claude Code 中可能出現的待辦事項列表。我們將其視為一個「用自然語言寫成的 Python 專案」。而由於其中包含如此豐富的細節,我們現在就可以進入代碼生成階段,並應用一些更進階的技術。首先,我們將計劃拆分為任務,然後並行進行大語言模型代碼生成。由於計劃足夠詳細,計劃末尾的一個可視化任務,實際上已經知道自己需要消費和使用的全部內容——即便用於加載數據的代碼生成尚未完成。當我們將此方法與 Claude Code 在我們的基準測試套件中進行比較時,可以看到:在相同的上下文和相同的計畫下,我們平均生成程式碼的速度大約快 4 倍。此外,我們還具備一種「超擴展」能力:一個包含 20 個任務的計劃,與一個只有 3 個任務的計劃,所需時間基本相同。好了,現在我們有了代碼,接下來要執行它。你可能會想,只需要直接、樸素地執行代碼就可以了。但遺憾的是,今天的大型語言模型在我們的任務上還不夠完美。它們通常無法一次就生成完全正確的結果。因此,我們的做法是:我們取得計劃中的任務,也取得由該任務生成的代碼;然後運行這段代碼,將執行結果與任務要求進行比較,檢查其是否正確。如果錯誤,我們就會編輯代碼並持續迭代,直到完成為止。我們對代碼所做的第一件事,是進行靜態分析,然後構建 DAG(有向無環圖),並並行應用驗證智能體。在這裡,有兩個任務會同時接受驗證。因此,一個包含 5 個任務的計劃,會被拆分為 3 層驗證;而一個包含大約 20 個任務的計劃,可能會形成 4 或 5 層驗證。我希望大家從這部分簡報中真正記住的核心觀點是:我們在架構層面強制保障正確性。再次強調,沒有智能體式編排。這只是普通的 Python 代碼。因此,整個執行框架非常快速,而且智能體不可能「忘記」進行驗證——它們被強制要求進行驗證。結果是,當我們運行測試套件時,對於測試套件中的任何計劃,在 95% 的情況下,兩個不同智能體生成的代碼結果完全一致。因此,我們的理念是:構建一個具有確定性特徵的文本編程智能體。而且由於這個智能體具有很強的可重現性,因此在我們進行擴展、逐步優化和評估時,所依據的基礎比那些依賴直覺或「大模型當裁判」(LLM-as-a-judge)的評估方式可靠得多。好的,還有另一個話題我想談一下,那就是我們的執行層。通常,編程智能體會自行調用和執行它們生成的代碼。In other words, they first generate the code, then call and run it via the terminal.這種方式有一些權衡。一方面,工具調用會帶來較高延遲;另一方面,我相信大家都經歷過,智能體有時候會在過程中迷失方向。因此,我們選擇為大語言模型執行代碼。我們採用傳統的靜態分析流水線:向 Python 代碼中注入快取註解,以避免重複執行;然後再透過一個自訂框架運行它。這是一個基準測試範例,比較 Claude 自行調用程式碼執行與口袋分析師的執行方式。你們可以看到,我們再次更快了,因為我們不會重複載入資料,也不會重複執行中間過程。但真正的優勢不在第一次執行代碼時,而在第二次執行時。好了,這裡展示的是一個基準測試:我們取一個計劃中的最後一張圖表,然後僅僅修改它的名稱。Claude Code 會重新執行所有程式碼,因此總耗時基本相同,儘管編輯程式碼這一步確實會更快一些。但口袋分析師在第二輪中,幾乎能夠實現瞬時的代碼執行。這意味著,投資者在使用此產品時,可以對投資分析進行一些細微調整,而無需承擔常規迭代流程中反覆加載和執行所帶來的額外開銷。好的,我們時間到了。我們有很多經驗和收穫,但遺憾的是,今天只能講這些。第一個核心結論是:我們非常相信讓智能體專門化。我們並不太相信通用且強大的智能體。它們確實能夠做出非常酷的演示,我相信很多人都展示過這類演示;但要把它們變成可以每天依賴的工作流程,真的非常困難。相反,我們通常從非常狹窄的工作流程入手,對其進行大量基準測試;然後不斷對這些基準進行爬坡式優化。之後,你可以將多個智能體的能力組合起來;但相反地,從一個通用智能體再回歸到可靠且狹窄的工作流程,往往很困難。最後一點更像是一個思想實驗,希望大家會覺得有所啟發:應將智能體編程視為一個編譯器問題,而不是一個智能體問題。編譯器已經生成代碼數十年,並累積了大量技術,告訴我們如何更可靠、更正確、更具確定性地生成代碼。因此,我們非常樂意繼續與大家交流這些問題。最後,我想感謝我們的直屬團隊成員。當然,還有許多其他人參與其中,但這是核心團隊。謝謝大家。我們會在外部的 AMA(問答交流)環節,真誠希望與大家聊天、討論,看看你們是否也對這些問題感到興奮。也期待今晚在其他場合見到大家。非常感謝。