在 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
獲取演示