跳到主要內容
AI News HubLIVE
站內改寫3 分鐘閱讀

構建“公司級 harness”的五大要素

文章摘要

LangChain 分享了其在市場、銷售和工程團隊中部署內部 AI 智慧體的經驗,並將落地經驗總結為五項核心基礎能力:嵌入員工已有的工作工具(Slack)、區分身份與授權邊界、分層記憶、沙箱內程式碼執行,以及大量由計劃任務或事件在後臺觸發的執行。

構建“公司級 harness”的五大要素
回報錯誤

更正管道尚未開通,可先複製下方文章資訊留存。

查看更正說明
直接讀正文

在 LangChain,我們已經在市場、銷售和工程團隊內部構建了內部智慧體(agents),它們徹底改變了這些團隊的工作方式。但要把它們做對並不容易。我們花了大量時間解決“多人協作 harness”帶來的問題,最終每個團隊都收斂到了同樣的幾個核心原語(primitives):

  • 它存在於人們已經在工作的地方(對我們來說就是 Slack)
  • 它知道是誰在提問,並針對某些服務以“代表該使用者”(on-behalf-of,OBO)的方式行動,而對另一些服務則使用自己的身份
  • 它擁有記憶,可以作用域設在全域性和/或使用者級別
  • 程式碼在沙箱中執行,並且可以向需要鑑權的服務發起請求
  • 它很大比例的執行是定時排程而非由某人顯式觸發(也就是“環境智慧體”,ambient agents)

(感謝 @caspar_br 對本文的幫助。)

LangChain 內部智慧體

為了給討論提供具體背景,先簡要介紹我們在 LangChain 的三個主要智慧體:

  • GTM Agent:一個主動的、常駐執行的智慧體,協助 GTM(go-to-market)相關工作。它會監控並回復郵件、處理新的合格線索、傳送每日簡報、回答關於客戶賬戶的問題,並能執行外呼動作。
  • OpenSWE:我們的工程智慧體,可以處理並起草 PR,同時也會對所有 PR 執行程式碼審查。
  • Content Studio:我們的市場智慧體,可以按照我們的風格、並基於對我們定位的瞭解來起草素材(部落格、圖片、PowerPoint、影片)。

這三個智慧體都以相同的方式構建。我們認為這是一套構建“公司 harness”的通用配方。

問題:使用者體驗

我們的所有智慧體都存在於人們已經在工作的地方,也就是 Slack。每個智慧體都有自己的 Slack 應用,可以被私信(DM),也可以在頻道中被 @ 提及。在頻道里與這些智慧體協作的一個好處是,其他人可以看到別人是怎麼使用它們的。

我們增加的一個不錯的功能是,在 Slack 中“拆分”(breaking out)對話的概念。常常會出現這樣的情況:一場很好的對話正在進行,你想把智慧體拉進來徵求它的意見,或者讓它做點事情。但如果它直接在那個執行緒裡執行,就會汙染人類的對話並造成干擾。因此我們增加了一種簡單的方式,讓智慧體可以“拆分”到該頻道中自己獨立的執行緒裡。

有些使用者體驗最好不要在 Slack 裡完成。例如,當 GTM Agent 想讓我審閱待傳送的郵件時,在 Slack 裡一次性處理是沒問題的;但如果積壓了很多,從 Slack 訊息裡逐一跟進就完全不是愉快的體驗。對於這類體驗,我們最終確實構建了自定義 UI。

問題:身份

我們處理過的最棘手、最微妙的問題是身份,具體來說:當這些智慧體採取行動時,它們代表誰行動?

業界主要有兩種處理方式:

  • 代表使用者(on-behalf-of):智慧體代表呼叫它的使用者行動
  • 固定憑據(fixed credentials):無論誰呼叫,智慧體都使用一組固定憑據(例如某個服務賬號)

以下是我們為每個智慧體處理身份的方式(相關文件:為託管 Deep Agents 新增身份、管理連線):

OpenSWE:

  • 當你給它發訊息時,它代表你行動(例如用你的 GitHub 賬號開啟 PR)
  • 當它在後臺執行(例如作為程式碼審查智慧體)時,它以自己的身份(GitHub app)行動

GTM Agent:

  • 它有一些工具(例如 Salesforce 訪問)使用固定身份,這樣不是每個人都必須登入
  • 它有一些工具(例如郵件)代表呼叫該智慧體的使用者行動。這些工具只在私信(DM)中可用;在共享頻道中不可用

Content Studio:

  • 它有一些工具(例如 Notion)代表呼叫該智慧體的使用者行動
  • 它有一些工具(例如 Twitter)使用一組固定憑據,在這裡是我們公司 Twitter 賬號的憑據。但只有白名單中的使用者才能觸發某些操作。例如不是每個人都能發推文(他們可能只能讀取/起草)

問題:記憶

所有智慧體都有兩層記憶:

  • 全域性記憶:適用於所有使用者的記憶
  • 使用者記憶:只適用於特定使用者的記憶

智慧體自行決定要把哪些事實記到哪一層記憶。這大概是目前探索最少的一個領域——我們在這方面還有很多工作想做!

問題:程式碼執行

我們三個智慧體都能編寫並執行程式碼,而且為了完成任務經常需要這樣做。它們都遵循同樣的模式:在沙箱之外執行,但連線到沙箱並在其中執行程式碼。它們各自的基礎映象略有不同,依賴項也不同。OpenSWE(與編碼關係最密切的智慧體)會智慧地決定啟動哪個基礎映象(根據頻道/使用者而不同)。它們都利用了 LangSmith Sandboxes 上的 secret proxy(另見:為託管 Deep Agents 新增沙箱),讓智慧體能夠在沙箱內部以安全可靠的方式連線到各項服務。

問題:定時執行

很大比例的執行是被排程或由後臺事件觸發的,而不是由使用者直接發起的。

其中一些是由智慧體的開發者設定的。例如:OpenSWE 監聽 PR,當有新 PR 建立時就會對其進行審查。

另一些則是由使用者要求智慧體這樣做的。例如:我讓 GTM agent 每天給我發一份簡報,它就自己建立了一個 cron 任務來做這件事。

全部構建於託管 Deep Agents 之上

所有這些智慧體都構建在託管 Deep Agents(Managed Deep Agents)之上,而它又構建於開源的 Deep Agents harness 之上。它提供瞭解決上述所有問題的基礎設施(頻道、cron 定時任務、沙箱、記憶、身份),同時提供了足夠的靈活性,以便按需定製智慧體的行為。今天就透過快速入門試用吧!

看看你的智慧體到底在做什麼

LangSmith 是我們的智慧體工程平臺,幫助開發者除錯每一個智慧體決策、評估變更,並一鍵部署。

試用 LangSmith

獲取演示

展開要點與分析

文章情報

工程師中級

要點

  • 所有內部智慧體都部署在 Slack 中,員工可私信或在頻道中 @ 呼叫,並支援將對話“拆分”到獨立執行緒以免干擾人類討論。
  • 身份是最棘手的問題:部分工具以呼叫者身份(on-behalf-of)執行,部分使用固定憑據,敏感工具僅在私信中可用或只對白名單使用者開放。
  • 記憶分全域性和使用者兩級,由智慧體自行決定記住哪些事實,該領域仍處於早期探索階段。
  • 大量執行並非使用者直接觸發,而是由開發者或使用者設定的定時任務與後臺事件發起。

技術影響

可能影響 Agent 架構、工具呼叫、工作流自動化和產品整合。

要點與分析由自動化流程生成,可能有誤,請結合原始來源核實。