Letta Cloud × Custom GPT × Exa AI
2nd Brain 個人知識助理:零基礎完整設置教學(可直接複製使用)🧪🧠(更新︰2025-08-22)
引言
這份教學幫你把 Custom GPT 打造成「有長期記憶、會持續增長」的 2nd Brain 個人知識助理
分工很簡單:Letta Cloud(前身 MemGPT)負責「有狀態代理+長短期記憶」、Exa AI 提供「即時權威網搜/抓取」、Custom GPT Actions 負責把用戶原話原封不動交給 Letta。系統會自動走 多層搜尋(Semantic → Archival → Web/Exa),並在回覆中給出 C|O|D|E 行動(Capture/Organize/Distill/Express),完成 收、理、煉、出

本文提供一份可直接複製的 Instructions 與 Action Schema,並逐步說明 Letta Cloud 與 Custom GPT 的設置方法與常見問題。

by Adam Chan

Loading...
影片中以 Markdown (TXT) 作為 FileSystem 的知識庫只屬方便演示,實際上建議的知識庫為原子化的 .JSON 格式,延伸閱讀︰

ai-kb-json-k7f5xt3.gamma.site

別再用「人類摘要」餵 AI 了!打造高效企業知識庫的黃金準則(附 Prompt 可直接複製使用)

您是否曾感覺,與 AI 詳細解釋完一個專案的背景後,重新開啟新話題後,它就忘得一乾二淨。這正是所有大型語言模型(LLM)的共同限制:「上下文窗口」有限。 Letta(一個基於開創性的 MemGPT 概念所打造的系統)正是為了解決這個核心痛點而生。 您可以將 Letta 想像成一個為 AI 安裝的「外接大腦」。它模仿電腦操作系統管理記憶體的方式,為 AI 提供了兩種記憶體: 工作記憶 (Working Memory): 如同電腦的 RAM,小而快,用於處理當前的對話和任務。 長期記憶 (Long-term Memory): 如同電腦的硬碟,巨大且可供搜尋,用於存儲過去所有的對話、文件和知識。 Letta 的魔法在於,AI 學會了自主管理這兩層記憶。當遇到一個它不記得的問題時,它會自動去「搜尋」自己的長期記憶硬碟,找到最相關的資料,然後調閱到工作記憶中來回答您。 這項技術,讓一個健忘的聊天機器人,蛻變為一個能夠持續學習、真正擁有「記憶」的知識夥伴。

更新紀錄(2025-08-22)
  • 已更新 Instructions v1.8.3Schema v1.1.25。(輸出骨架為:🗂️ PERSONAL → 🌐 WEB → 💬 ANSWER → 🧩 NEXT STEPS → ⚠️ LIMITS → 🔧 TOOL_RUN_SUMMARY。新增 Retry(最多 2 次), Failover fallback 答覆 , 明確區分 Letta 有回應但 GPT callback 失敗的情況.)
  • 真正執行仍由 Letta;ChatGPT 不會直調工具,只下達策略意圖。
  • 全文改為新手友善說明:避免術語、教你看結果與下一步要按哪個黑框指令。
  • 加入禁止回顯內部 JSON固定骨架輸出C-O-D-E 決策與去重Approvals 關閉指引
全文快速歸納(TL;DR)︰
  1. Letta Cloud 建立 Project/Agent,掛上檔案資料夾與常用工具,連上 Exa MCPweb_search_exa 等)。
  • Custom GPT
  • Basic:命名、描述;貼上已備好的 Instructions
  1. Actions:Authentication 用 Authorization: Bearer <YOUR_LETTA_API_KEY>;貼上 Schema(把 <YOUR_AGENT_ID> 改成你的)。
  1. 使用方法(用戶視角):
  • 在 GPT 問個「已在個人庫」的主題 → 回覆會有 🗂️[PERSONAL]
  • 在 GPT 問個「個人庫沒有」的新題 → 系統自動做 🌐[WEB] 並在 🧩[CODE|NEXT STEPS] 給你可複製的黑框指令。
  • 想把 [WEB] 新知存入 → 在 GPT 直接點黑框的 Capture 命令即可;之後會變成長期記憶,下次在 🗂️[PERSONAL] 命中。
  • 最後列出 🔧[TOOL_RUN_SUMMARY]:實際用到的 Letta 工具命中摘要
【使用者小抄:看懂輸出】
  • 🗂️[PERSONAL]:命中的你自己資料(含檔名/時間/路徑)。
  • 🌐[WEB]:2–3 條權威來源(每條 2–4 句摘錄+連結+日期)。
  • 🧩[CODE|NEXT STEPS]:告訴你為什麼選 C/O/D/E,並給對應黑框指令,不用自己寫 JSON。
  • ⚠️[LIMITS]:資料時效、授權、缺口。
  • 🔧[TOOL_RUN_SUMMARY]:實際用過哪些工具,各命中幾條。
【背後邏輯︰實際採用的順序】
  1. Semantic(= INTERNAL-FILES)
  • 目的:先用「語義」命中檔案庫的真實 MoM 原文
  • 工具鏈(你已用 Rules 硬化):
    semantic_search_files → (grep_files) → open_files → send_message
  1. Archival(= INTERNAL-ARCHIVAL)
  • 目的:查已落盤的摘要/索引(標題/關鍵詞式),或在 D/E 後把新知 insert 進來
  • 工具:archival_memory_search(找既有條目)、archival_memory_insert(寫入)
  1. Web
  • 目的:內部沒有或有缺口時,補外部事實
  • 工具:web_search_exa(必要時才啟動)
背景與動機
傳統聊天機器人 (如︰ ChatGPT) 常見問題:
  1. 缺乏長期狀態,跨會話難以延續與積累;
  1. 上下文視窗有限,大量資料無法長期保留與檢索;
  1. 即時外部資訊不足,難以取得最新且可驗證的來源;
  1. 工具協作成本高,需要人手在多個系統之間來回切換。
Letta Cloud(承襲 MemGPT 思想)提供有狀態代理多層記憶模型:核心記憶與對話記憶用於行為與偏好,Archival Memory作為可向量化檢索的長期知識庫,支援將文件與新知寫入、再以語義方式命中。結合 Custom GPT 的 Actions 編排Exa AI 的即時搜尋/抓取(MCP 工具),即可把「用戶原話」原封不動交由代理處理,形成「收(Capture)—理(Organize)—煉(Distill)—出(Express)」的知識閉環,讓個人知識能被長期保存、快速檢索並轉化為可用產物。
何謂「2nd Brain」與 C/O/D/E ?
Building a Second Brain by Tiago Forte and the ‘CODE’-technique (Image from: lo-victoria.com)
2nd Brain」旨在把個人知識長期保存、可檢索、可重用,於需要時即時動員。流程採 C/O/D/E
  • C|Capture(收):將外部 (Web) 或新輸入內容寫入 Archival Memory,建立向量索引以便語義命中。
  • O|Organize(理):調整分類、標籤、關聯,合併重覆資訊,維持知識結構。
  • D|Distill(煉):從長文與多來源提煉重點與引述,並可清洗、去重、格式化。
  • E|Express(出):輸出為可用產物(待辦、計畫、提案大綱、簡報要點)。
為何採用「Custom GPT × Letta Cloud × Exa AI」,它們如何分工 ?
  • Custom GPT(編排層):用 Insturcitons 和 Actions 把原話送入 Letta,降低改寫與工具誤用。
  • Letta(記憶與狀態層):多層記憶+工具決策,完成 Semantic → Archival → Exa 的閉環。
  • Exa(外部事實層):即時搜尋/抓取,保留來源,方便 Capture 與審核。
核心價值
  1. 長期性:資料寫進 Archival,跨會話累積並可語義檢索;
  1. 可驗證:輸出分 [PERSONAL] / [WEB],每條附來源與日期。
  1. 可操作[CODE|NEXT STEPS] 直接給黑框指令,一鍵複製/執行。
  1. 可擴充:用 MCP 擴展資料源與工具,維持低耦合、高延展架構。
方案比較(快速表格)
應用情境︰
情境 A:在 Custom GPT ,問一個個人庫沒有的新主題 (如︰💬「給我關於 AI 學習 的資料」 )
  • 你提問後,系統會進行 Semantic → Archival → Web 多層搜尋閉環,回答問題。
  • 流程上,首先會檢查 Letta 內的 FILESSYSTEM (個人知識庫),沒命中時自動用 Exa 找出可靠來源([WEB] 區)。
  • [NEXT STEPS] 下,「C|Capture」的黑框指令 ,按下「複製」並 「貼上」文字輸入框,再提交即可把 [WEB] 新知存入 Archival,成為長期記憶
僅供參考︰【黑框指令:這些指令貼回對話框即可執行,不用手寫 JSON
(實際鍵名 content/text 由系統偵測,這裡用 <ARCHIVAL_INSERT_KEY> 代稱)
C|Capture(把 [WEB] 新知存進 Archival)
/execute_action action_type=archival_memory_insert payload={ "<ARCHIVAL_INSERT_KEY>":"《<主題>|Capture》\n來源:EXA/FILES/USER\n- 標題:<來源A 標題>\n URL:<來源A URL>\n 日期:<來源A 日期>\n- 標題:<來源B 標題>\n URL:<來源B URL>\n 日期:<來源B 日期>\n- 標題:<來源C 標題>\n URL:<來源C URL>\n 日期:<來源C 日期>" }
O|Organize(為同類內容建索引頁)
/execute_action action_type=archival_memory_search payload={"query":"<主題>","limit":8} /execute_action action_type=archival_memory_insert payload={ "<ARCHIVAL_INSERT_KEY>":"《<主題>|索引》\n相關條目:\n- <條目A>\n- <條目B>\n使用說明:如何瀏覽與維護" }
D|Distill(把 PERSONAL/FILES/WEB 濃縮成新筆記)
/execute_action action_type=archival_memory_insert payload={ "<ARCHIVAL_INSERT_KEY>":"《<主題>|摘要》\n來源:PERSONAL/FILES/WEB\n- <來源1>\n- <來源2>\n摘要要點(3–8):\n1) …\n2) …\n差異/數據/日期:…\n分類(≤3):<AI 自行判斷的高階概念詞>" }
E|Express(輸出可用產物,必要時存檔)
/execute_action action_type=archival_memory_insert payload={ "<ARCHIVAL_INSERT_KEY>":"《<產物名稱>|Deliverable》\n<大綱/步驟/重點清單…>" }
C|Capture」的黑框指令 ,按下「複製」並 「貼上」文字輸入框,再提交即可把 [WEB] 新知存入 Archival
架構與流程(概述)
1)你發問(Custom GPT)
2)原話直送(Actions):用 <<RAW>>...<<END>> 把用戶原話包起來,交到 Letta 的 /messages 端點
3)代理決策(Letta):依序跑 Semantic → Archival → Web/Exa
4)結果輸出(Custom GPT 顯示):五區塊固定骨架
  • 🗂️[PERSONAL]🌐[WEB]🧩[CODE|NEXT STEPS]⚠️[LIMITS]🔧[TOOL_RUN_SUMMARY]
    5)一鍵執行:把 [CODE|NEXT STEPS] 的黑框指令複製貼回對話框即可
何時會觸發 Letta 知識庫? 了解「發問與回答」的背後邏輯 ︰
🧭 兩種模式的切換條件
1. 以 GPT 流程回應
  • GPT 會 直接生成答案(不呼叫 Letta),在以下情境:
  • 用戶明確說 「不要呼叫 Letta」。
  • 用戶的問題是 解釋性 / 通用知識 / 方法建議(例如:「幫我解釋 OODA Loop」、「怎樣寫 OKR」)。
  • 用戶要做 純 GPT 任務(例如:寫文章、生成代碼、數學計算、畫圖)。
  • 用戶需要用到 網路搜尋(web_search / EXA) 才能回答。
2. 以 Letta 知識庫回應
  • GPT 會把用戶的原話包成 <>...<> 傳進 Letta,讓它做多層檢索,通常在以下情境:
  • 任何「一般提問」:沒有特別說「不要呼叫 Letta」,我都會先送去。
  • 你直接用 /execute_action、/collect、/organize、/distill、/express 等指令。
  • 需要檢索 個人知識庫(archival / core / conversation / files)時。
  • 你問的問題可能有 既存的 Capture / 摘要。

準備工作
登記以下帳號︰

www.letta.com

Letta

The platform for stateful agents. Build AI agents with long-term memory, advanced reasoning, and custom tools inside a visual environment using the Agent Development Environment, or with Python and Node.js SDKs.

Exa

Exa

The Exa API retrieves the best, realtime data from the web for your AI

  • OpenAI 帳戶(建立 Custom GPT 並啟用 Actions) (只限於 ChatGPT 付費用戶)https://chatgpt.com/

ChatGPT

ChatGPT

A conversational AI system that listens, learns, and challenges

Letta Cloud 設置步驟
1)建立 Project 與 Agent
完成設置的 Agent 介面大概如下︰
  • 於 Letta ADE 介面建立 Project(名稱示例)my2ndBrain → 選 「Agents」→ 「Create a new agent」→ 建議選 Personal assistant 模版(命名、設置模型、工具、上載知識庫進行 Embedding)。點選 「Open in ADE」可進入 Agent 設定頁。
  • Agent Name(名稱示例)PersonalBrain_RAGAgent
  • Agent ID(樣式示範)agent-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (📌重要︰用於 GPT 的 Action Schema 的 <YOUR_AGENT_ID> 內!)
  • 設置 LLM Model ︰建議選 gpt-4o-mini , GPT-4.1 nano (Standard - 輕量快捷 ,基本測試用) gpt-5 / gemini 2.5 Pro preview (Premium - 推理型) (相對穩定) ,補充︰
  • (GPT-4.1 nano 是 OpenAI 於 2025 年推出的最輕量級 GPT-4.1 變體,專為低延遲與低成本場景設計,仍保有長達 1,047,576 tokens 的上下文窗口。適用於需要大量短平快呼叫的智能代理 (agent) 或自動化工作流程,如客服 chatbot、召回系統等,可大幅降低單次成本並保持高速響應。)
  • Letta 的免費帳號,已包含每月 500 次 Standard models , 50 次 Premium models credits,9 GB of storage 。
  • Letta 的 Pro 帳號,US $20/m ,已包含每月 5,000 次 Standard models , 500 次 Premium models credits,86 GB of storage。
2)工具管理 (Tools)、檔案系統 (FileSystem)
  • Agent 的 ADE 路徑:Tool Manager ,設置工具 ,最終 Core (11) + Custom (3) = 共 14 個. (常用工具數目只是參考,起初選用 Agent : Personal assistant 模版 後,系統已預置了一部份,可按實際使用方法而調節,以下只是我個人使用的習慣。)
  • FILESYSTEM 下,當你將資料夾 (New folder) 掛入 Agent;Letta 也會自動添加相關的文件處理與檢索工具 (semantic_search_files , grep_files , open_files) 。
Letta Agent 常用工具與功能說明 (工具必須是 「Attach tool to Agent」後才能正式運作)
  • semantic_search_files:對已掛載文件做語義/向量檢索(全文層面),用於找出相似度最高的段落或文件。
  • grep_files:以關鍵詞/規則在文件內快速檢索(類似 grep),適合明確關鍵字情況。
  • open_files:開啟並讀取指定文件內容,供後續摘要或擷取。
  • run_code:在受控環境執行代碼(如清洗、去重、解析),配合 D|Distill。
  • archival_memory_search:於 Archival Memory 內做標題/關鍵詞精確匹配與檢索。
  • archival_memory_insert:將新內容寫入 Archival Memory,以便之後能被語義檢索命中(C|Capture 會用到)。
  • conversation_search:在代理的對話記憶中檢索歷次互動內容。
  • core_memory_replace替換核心記憶項(更新既有條目)。
  • core_memory_append追加核心記憶項(增量補充)。
  • send_message:在代理內部進行訊息傳遞(通常由代理流程自調)。
  • web_search ︰備援工具,在 web_search_exa(首選的精準網搜)無法使用時,提供一般搜尋引擎式的查詢能力。
  • Exa MCP 工具(需先連接 MCP Server,見下一節):
  • web_search_exa:即時網絡搜尋,回傳來源與摘錄。
  • crawling_exa:抓取指定 URL 內容並整理結構化資訊。
  • company_research_exa:對公司資訊做彙整(供研究情境)。
3)連接 Exa MCP(建議:Streamable HTTP)
  • Agent 的 ADE 路徑:Tool Manager Add MCP Server → Streamable HTTP
  • Server nameExa(可自定,但建議簡潔一致)
  • Server URLhttps://mcp.exa.ai/mcp
  • AuthenticationAccess Token / API Key(輸入你的 Exa API Key)
  • 完成後,從該 MCP Server 內選擇工具(web_search_exacrawling_exacompany_research_exa )並按 Attach tool to Agent附加到 Agent 。
設置 Letta「Tool Rules」,對 GPT(Instructions)的作用︰把策略“硬化”到 Agent 端 (更新︰ 2025-08-21)
運用 Start→Constrain→Continue→Required→Exit→Max Count 這組規則,強制走
semantic_search_files → (grep_files) → open_files → send_message
具體解決了 Letta / LLM 什麼問題 ?
  1. 「搜了不開檔」Required Before Exit: open_files + Continue Loop
    沒開檔就不允許結束或回覆。
  1. 「隨機跳去 conversation_search / WEB」Start Constraint + Constrain Child Tools
    先 Files,且 semantic_search_files只允許 grep/open,不會亂跳。
  1. 「搜完就提早收工」Continue Loop
    semantic_search_files / grep_files 不准結束。
  1. 「工具瘋狂連續呼叫」Max Count
    每回合 semantic=1 / grep=1 / open=1,穩定且可預期。
  1. 「回答沒真的看檔」 open_files 成為回覆前置,答案確實基於檔案內容。
Rules 設置方法 (New rule) 一覽
  • Run First / Start Constraintsemantic_search_files
  • Constrain Child Tools
  1. semantic_search_files → grep_files, open_files, conversation_search
  1. grep_files → open_files, conversation_search
  1. conversation_search → archival_memory_search
  1. open_files → send_message, archival_memory_insert
  1. archival_memory_insert → send_message
  1. archival_memory_search → send_message, web_search_exa
  • Continue Loop(不許在此結束)semantic_search_files, grep_files, conversation_search, archival_memory_search
    (移除 memory_insert, memory_replace
  • Exit Loopsend_message
  • Max Count Per Stepsemantic_search_files=1, grep_files=1, open_files=1
  • (不再使用)Required Before Exit: open_files(避免無檔時被卡死)
Rules 這樣設置的實際行為︰
  1. 先走 FILES:semantic_search_files → (grep_files)
  • 有檔 ⇒ open_files → (send_message / +archival_memory_insert → send_message)
  • 無檔 ⇒ conversation_search → archival_memory_search → (send_message 或 web_search_exa)
  1. Instructions 說明完全一致:INTERNAL → FILES → Memory → WEB,且「能開檔就一定開檔;無檔才退路」。
  • FILESYSTEM 匯入知識︰先要建立新資料夾 (New Folder) 並輸入資料使用說明(AI 會參考) ,然後再上載上載知識庫檔案進行 Embedding (支援︰ TXT , MD , PDF 格式)
  • Deploy 代理 (成功建立 Agent 後會自動 Deploy) ,準備對外服務。
4)產生 Letta API Key
  • 於 Letta 後台建立 API Key,稍後將在 Custom GPT Actions 的 Authentication 使用(Authorization: Bearer <YOUR_LETTA_API_KEY>)。
在 Custom GPT 建立「2nd Brain 個人知識助理」
Custom GPT 完成設置的 Config 介面如下︰
A. Basic(逐欄位可直接貼上)
Name (建議加入自訂的版本號 (eg: v1.8.3) ,有助辨認 GPT 有否使用當前最新的版本還是 Cache)
2nd Brain 個人知識助理(Letta × Exa)
Description
這是一個專為個人知識管理與檢索設計的 AI 介面。所有回應一律經由 Letta Cloud 的 PersonalBrain_RAGAgent 處理;必要時由該 Agent(非 Actions 層)調用 Letta Cloud 內建工具與你已接上的 Exa AI MCP 工具進行公開網頁搜尋或抓取。 系統按 CODE 模式(Capture / Organize / Distill / Express)給出可執行建議。

Instructions 功能說明︰

Letta Agent 內部執行多層搜尋 🔎 Semantic 層:針對已掛載之文件做全文向量檢索,用於語義與段落級命中。 📜 Archival 層:於 Archival Memory 進行標題/關鍵詞精確匹配,命中長期筆記。 🌏 Web 層(Exa MCP):當內部兩層無命中時,由 web_search_exa/crawling_exa/company_research_exa 執行外部搜尋/抓取。 輸出與可操作性 🧩 來源分離:回覆嚴格分為 [PERSONAL](個人庫)與 [WEB](外部來源),避免混淆。 🧰 C/O/D/E 可執行命令:系統在 [CODE|NEXT STEPS] 自動生成對應動作的指令(含 /execute_action 與等效 alias)。 🧠 Capture(/collect):對於外部或新輸入內容,一鍵寫入 Archival;寫入後立即進向量索引,下次可由 Semantic 直接命中。 與實際 Instructions 的對應‧ sendMessageToPersonalBrainAgent:保證「用戶原話」直送代理。‧ 多層搜尋條款:對應「Semantic → Archival → Web/Exa」的順序與觸發條件。‧ 來源分離與鏈接規則:對應 [PERSONAL] / [WEB] 與 URL 驗證指引。‧ C/O/D/E:對應 /collect、/organize、/distill、/express 與自動產生命令。

(留意︰ Custom GPT 的 instructions 不能多於 8,000 字。 如果要額外更多,要放於 Knowledge 文檔內)
Conversation starters
(即常用的預置提問,按實際使用習慣而自由設置,如︰告訴我當前 Instructions 是什麼版本?)
Knowledge:不用設(由 Letta 管理); Recommended Model:GPT-5 ; Capabilities:全部開啟 (實測對 Letta API 沒影響)
B. Actions(Create new action
Custom GPT 完成設置的 Acttion 介面如下︰
Authentication
Letta Cloud 免費取得 API Key,然後貼到 Custom GPT 的 Action 頁內。
在 Custom GPT 的 Action 頁內 Authentication 打開設置︰
  • Authentication Type:API Key
  • Auth Type:Authorization: Bearer <YOUR_LETTA_API_KEY> (這裡輸入 Letta Cloud 的 API Key 令 GPT 與 Letta 連結)
SchemaGPT Specification (OpenAPI Schema)
這是一份 「告訴 GPT 如何呼叫外部工具 / API」(Letta) 的規格說明文件
簡單來說:
  • 它不是 API 的程式碼,而是讓 GPT 知道「我有什麼工具、它們的功能、需要什麼參數、返回什麼數據」。
  • GPT 會根據這份 Schema,自動決定何時調用這個 Action(即 Letta API 及其工具)。
請把下文 JSON schema 內的 "/v1/agents/<YOUR_AGENT_ID>/messages" 中的 <YOUR_AGENT_ID> 改為你自己的 Agent ID (見圖,可以在 Letta Cloud 的 Agents 頁內,左上方的 Name 下方找到 ID) (例如︰"/v1/agents/agent-4062181e-5xxx-4xxx-axxx-exxxxxxxxxxxx/messages") ;其餘保持不變。 operationId:sendMessageToPersonalBrainAgent必須與 Instructions 一致
Schema(可直接複製使用) (更新︰2025-08-18)
{ "openapi": "3.1.0", "info": { "title": "Personal Brain Assistant Actions", "version": "v1.1.28-DeliveryFix", "description": "Letta-first + Delivery 修復:/messages 設為 consequential;請求建議攜帶 use_assistant_message、include_return_message_types、return_actions 以確保把 Letta 生成結果帶回 GPT。" }, "servers": [{ "url": "https://api.letta.com" }], "security": [{ "LettaBearerAuth": [] }], "paths": { "/v1/agents/<YOUR_AGENT_ID>/messages": { "post": { "summary": "Send a message to the Personal Brain Agent", "operationId": "sendMessageToPersonalBrainAgent", "security": [{ "LettaBearerAuth": [] }], "x-openai-isConsequential": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SendMessageRequest" } } } }, "responses": { "200": { "description": "Successful response from Letta Agent", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AgentResponse" } } } } } } }, "/v1/tools": { "get": { "summary": "List all available tools (Letta Cloud, MCP, Custom)", "operationId": "listTools", "security": [{ "LettaBearerAuth": [] }], "x-openai-isConsequential": false, "responses": { "200": { "description": "Organization-level tools", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ToolListResponse" } } } } } } }, "/v1/agents/<YOUR_AGENT_ID>/tools": { "get": { "summary": "List tools attached to the agent", "operationId": "listAgentTools", "security": [{ "LettaBearerAuth": [] }], "x-openai-isConsequential": false, "responses": { "200": { "description": "Tools currently attached to the agent", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ToolListResponse" } } } } } } }, "/v1/tools/add-base-tools": { "post": { "summary": "Upsert Base Tools (idempotent)", "operationId": "upsertBaseTools", "security": [{ "LettaBearerAuth": [] }], "x-openai-isConsequential": false, "responses": { "200": { "description": "Base tools upserted", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ToolItem" } } } } } } } } }, "components": { "securitySchemes": { "LettaBearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } }, "schemas": { "SendMessageRequest": { "type": "object", "required": ["messages"], "properties": { "messages": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["role", "content"], "properties": { "role": { "type": "string", "enum": ["user"] }, "content": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["type", "text"], "properties": { "type": { "type": "string", "enum": ["text"] }, "text": { "type": "string", "description": "前置 [DIRECTIVE](Semantic→Archival→Web + C/O/D/E 決策與鏡射對照)+ 用戶原話(<<RAW>>…<<END>>)。" } } } } } } }, "use_assistant_message": { "type": "boolean", "description": "要求 Letta 以 assistant_message 形態回傳可視文本(建議 true)。", "default": true }, "max_steps": { "type": "integer", "description": "Agent 最大步數(建議 50)" }, "search_strategy": { "type": "string", "enum": ["default", "multi_layer"] }, "return_actions": { "type": "boolean", "description": "是否同時回傳 action_suggestions(建議 true)。", "default": true }, "include_return_message_types": { "type": "array", "items": { "type": "string" }, "description": "建議包含:assistant_message、tool_call_message、tool_return_message。", "default": ["assistant_message","tool_call_message","tool_return_message"] }, "verbatim_mode": { "type": "boolean", "default": true } }, "additionalProperties": true }, "AgentResponse": { "type": "object", "properties": { "messages": { "type": "array", "items": { "type": "object" } }, "action_suggestions": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string" }, "action_type": { "type": "string" }, "target_id": { "type": "string" }, "api_endpoint": { "type": "string" }, "payload": { "type": "object" }, "command_string": { "type": "string" } } } } }, "additionalProperties": true }, "ToolListResponse": { "type": "array", "items": { "$ref": "#/components/schemas/ToolItem" } }, "ToolItem": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "tool_type": { "type": "string" }, "description": { "type": "string" }, "json_schema": { "type": "object", "additionalProperties": true }, "args_json_schema": { "type": "object", "additionalProperties": true }, "tags": { "type": "array", "items": { "type": "string" } }, "source_type": { "type": "string" }, "source_code": { "type": "string" }, "return_char_limit": { "type": "integer" } }, "additionalProperties": true } } } }
完成正確的 Schema 設置後,便會自動出現相應的 Available actions
  • sendMessageToPersonalBrainAgent
  • listAgentTools (Agent 已綁定工具)
  • upsertBaseTools (把「基礎工具」上載/更新到組織層(Org Catalog),不代表已自動綁到 Agent。)
點選 upsertBaseTools 的 「Test」,如果能回覆圖中內容 (類似) 便表示 GPT 與 Letta 成功連接 🥳
每次在 Custom GPT 提出發問時,由於 Letta 屬於外部工具,所以 GPT 需要獲取權限才能執行,點 Confirm 可以繼續。
建議︰在 GPT Builder 的 Approvals/Privacy 關閉需確認,將 GPT's privacy settingsapi.letta.com 設「Always Allow」,不用每次 「Confirm」授權動作。
解難︰如果 Schema 貼上後出錯 (通常是 OpenAPI 文件規格問題 ),建議使用另一個 ChatGPT ,提供以下「GPT Action Schema 通用規格要求︰經驗總結」 資料作參考,同時將你的 schema 及 錯誤訊息交給 AI ,叫它「檢查問題及修正」,然後將修正後的完整 schema 貼回 Custom GPT 內就可以。

「AI 生成/修改 Actions Schema」的提示前置段落 (將以下內容交給 AI 🤖 會有助加快除錯/優化功能 😉 ) GPT Action Schema 通用規格要求︰(官方對齊+實戰版)

View more

Privacy policy
你可選擇其中一份貼上到 Notion/Google Doc,再把該頁 URL 分享並貼回 Custom GPT。
輸入 Privacy policy 的網址

參考︰最小可用版(簡潔、合規起點) 隱私權政策(適用於「2nd Brain 個人知識助理」) 內容為一般資訊, 不構成法律意見 ;如需遵循 GDPR/UK GDPR/CCPA 等法規,請讓法務審閱後再行使用。 最後更新: 2025-08-11

本頁說明 <你的網站/品牌名稱>(下稱「我們」)如何處理你在使用本 Custom GPT(以下稱「本服務」)時產生的資料。 資料來源與用途 你於本服務輸入的文字(「用戶內容」)會由 OpenAI 處理,並透過已連接的 Letta Cloud(前身 MemGPT)代理進行檢索與回覆;在需要即時資料時,代理可能調用 Exa AI 進行網絡搜尋/抓取。 用戶內容的用途:依你的指示,於個人知識庫進行檢索、組織、摘要、生成可執行清單等。除非你主動要求,我們不會將用戶內容用作行銷。 第三方處理者 OpenAI:提供模型推理與「Custom GPT + Actions」。 Letta Cloud:提供狀態式代理、長短期記憶與語義檢索(可能含檔案系統與 Archival Memory)。 Exa AI:在代理決策需要時提供即時搜尋/抓取。 各第三方之資料使用,受其各自之條款與隱私政策約束。 保存與刪除 我們不另行販售或對外公開你的用戶內容。 保存期間視系統運作需求與第三方供應商之設定而定;你可依第三方機制請求刪除或在我們處提出刪除要求(若技術上可行)。 安全 我們採用 API 金鑰與最低必要權限原則;請避免在對話中輸入敏感個資與機密資訊。 使用者權利與聯絡方式 若你欲查詢、修正或刪除資料,請以電郵聯絡:<你的聯絡電郵>。 如政策修訂,我們將更新本頁「最後更新」日期。 聯絡人/負責單位:<你的公司/個人名稱>

使用與驗收
本 GPT 的內部執行流程︰
0)開場自檢(新對話第一次)
  • 在 Custom GPT(2nd Brain 個人知識助理)首次提問前,自動:
    GET /v1/tools → 如未見 send_messagearchival_memory_searchsemantic_search_files(或 search_files)/grepopen,立刻 POST /v1/tools/add-base-tools,再 GET /v1/tools 確認。
1)PERSONAL 命中測試
  • 提問一個你確定存在於個人庫(檔案或 Archival Memory)的主題,例如:「給我關於 AI 學習 的資料」。
  • 期望在 [PERSONAL] 區塊看到命中結果。
2)WEB(Exa)測試
  • 詢問庫內沒有的新主題,或在原話外加提示:「請用 Exa 搜尋:<關鍵字>,取 2–3 條權威來源,每條 2–4 句摘錄並附連結。」
  • 期望在 [WEB] 區塊看到外部來源摘錄+連結。
3)C/O/D/E 指令測試
  • 輸入 /collect/organize/distill/express 等(或 /execute_action 原生命令),確認系統原封送入 Letta 並執行。
  • 來自 [PERSONAL] 的內容預設不做 Capture,優先建議 Organize/Distill
4)觀察工具呼叫(可選)
  • 在請求中包含 "include_return_message_types": ["tool_call_message","tool_return_message","assistant_message"],回覆中可看到實際工具(例如 semantic_search_files)的調用與回傳節點。
本 GPT 的答案輸出結構 (骨架)
  1. 🗂️[PERSONAL] 個人庫內容
  1. 🌐[WEB] 不存在詞彙,從 Exa 網上搜索所得內容
  1. 🌐 [CODE|NEXT STEPS] → 下一步行動建議 ,由 AI 判斷是否有值價值的新知識。 (例如︰ 手動複製 /execute_action 的指令再貼上到新的發言,便可以指示 Letta 進行 C|Capture(存入 Archival Memory),將新知識儲入長期記憶
  1. ⚠️[LIMITS] → 限制與警告
四、常見問題與排錯
Q1. GPT 畫面長期停在「Talking to api.letta.com」
  • 原因(簡單講): GPT 想用外部工具,但瀏覽器未允許/UI 有快取。
    怎樣做:
  1. 進入此 Custom GPT 的 Privacy / Permissions → 將權限設為 Always allow(有時要關掉再開一次才真正生效)。
  1. 關掉此對話分頁→重新開一個新對話再問同一條問題。
  1. 仍不行:在 GPT 設定把「Allow this GPT to use Actions」關掉→再開
    代表已修好: 開新對話首問時,會看到系統顯示「正在檢查工具/已自動補齊」之類提示,然後正常回覆。
Q2 我需要每次都在 GPT Builder / Action 內先跑 upsertBaseTools 嗎?
  • 不用。
    系統會在新對話的第一次或偵測到「工具清單缺失」時自動補齊 (系統會先 GET /v1/tools 檢查,缺了才 POST /v1/tools/add-base-tools。)。
    怎樣判斷: 回覆裡若提到「工具缺失→已自動補齊」,之後再問就可以。
Q3. 出現 400 INVALID_ARGUMENT: Function calling config is set without function_declarations. 怎麼辦?
原因(簡單講): GPT 想用某個「動作」(Tool),但那刻沒有把該動作怎樣用的說明告訴模型,所以報錯;與「查不到資料」無關。
三步排查:
  1. 直接重問一次(很多時是瞬時問題)。
  1. 工具缺失 ? 看回覆是否提到「工具缺失→已自動補齊」 (upsertBaseTools),有的話等它補完再問。
  1. 仍報錯:到 Actions 設定檢查
  • 是否把 <YOUR_AGENT_ID> 換成真實 Agent ID
  • Authorization 是否為 Bearer <YOUR_LETTA_API_KEY>
  • 手動點選 (upsertBaseTools) 旁邊的 「Test」按鈕,執行 upsertBaseTools 指令;
  • 檢查你的動作 (Tool) 是否真的有列在工具清單
    不要急著改 Schema;通常是「工具宣告」沒注入好。
Q4. 為什麼我的原句被簡化了?
  • 已開 Verbatim 模式:只要你把原文包在 <<RAW>> ... <<END>> 裡,內容會原封送入 Letta。
    示例
    <<RAW>> 幫我把以下兩篇加入個人庫,之後做統整。 <<END>>
    若仍覺得被改,先確認 Insturctions 內你真的加了 <<RAW>><<END>> ?
Q5. 我可不可以自己打 /collect target_id=...
  • 可以,但不建議新手這樣做。
    最簡單做法是用自然語句下指令,例如:
「請把上面兩篇存入個人庫,加標籤:A/B。」
系統會自動產生可複製的命令並幫你執行,避免手動填 target_id 出錯。
Q6. 外部連結不穩/要登入才看得到,怎麼處理?
  • 這多半是網站本身限制,不是系統出錯。
    可行做法:
  • 請系統「用 Exa 抓取該 URL 並做重點摘要」,或改用其他關鍵字再找開放版本。
  • 回覆中會在 [LIMITS] 區塊標示 「[無公開連結]/[鏈接未驗證]」,方便你判斷可靠度。
Q7. 我已經「Capture(收藏)」了,但搜尋仍找不到(Semantic 命中為 0)?
  • 九成是:內容沒有真正寫進「Archival Memory」,只是在聊天裡說了而已。
    怎樣做:
  • 用自然語句再說一次:
「把剛才那兩篇寫入個人庫(Archival),並回報成功。」
  • 成功後,系統會回覆已落盤。此時再搜尋就會命中了。
    (進階用法:系統會用 archival_memory_insert 之類的工具把內容寫入檔案層。)
Q8. 看不到 Exa 工具/回覆沒有 [WEB] 區塊?
代表還未安裝好網搜工具。
怎樣做(一步步):
  1. Letta ADE → Tool Manager
  1. Add MCP Server:名稱填 Exa(URL:https://mcp.exa.ai/mcp)→ 設定 API Key / Access Token
  1. web_search_exa(及需要的 crawling_exa / company_research_exa附加到你的 Agent
  1. Deploy 後,回到 GPT 再問一次即可。
  • 到 Letta ADE:Tool Manager → Add MCP Server(Exa)Attach web_search_exa/crawling_exa/company_research_exaDeploy。完成後重問一次即可。
Q9. 為何不用 Letta 內建 web_search,改用 Exa?
唔係 Letta web_search 唔得,係用途唔同:web_search 走關鍵字/問答式,靠搜尋引擎收錄,回來多數係片段,啱快手搵參考;Exa 為 AI 而設,可直接提取網頁正文、輸出連引用的結構化結果,亦支援站內多層爬同多步研究,速度同穩定性更好。兩者都不會越過登入/付費牆;若要把資料存入知識庫(資料庫 / Archival Memory)重用、可追溯引用,選擇 Exa 更適合。

其他常見狀況(速查表)
  • GPT 發出訊息後,什麼都沒回(或只顯示錯誤碼):過一陣先重新發一次訊息;有時候 GPT 與 api.letta.com 之間的連接需時,等一會,再繼續。
  • 沒有 [WEB] 區塊:你問的主題可能已存在個人庫、或 Exa MCP 未連接。若是後者,請到 Letta ADE 檢查 MCP Server「Exa」是否連好並已 Attach 工具後再次 Deploy。
  • 命令裡有 target_id=<ID> 但你不知道那是什麼:不用理會,直接用自然語句「請幫我把上面兩篇存入個人庫」即可。
  • 鏈接打不開:屬外部網站行為層;可換關鍵字再搜,或改問「請用 Exa 抓取:<URL>」。
  • 401 未授權
    檢查 Authorization Header 是否為:Bearer <YOUR_LETTA_API_KEY>;重新存檔後再問。
  • 找不到 Exa 工具
    依 Q8 步驟新增 MCP Server「Exa」,把工具附加到 AgentDeploy
  • Action Schema 報錯
    多半是忘了把 <YOUR_AGENT_ID> 換成真的,或JSON 括號/逗號不匹配。
    做法:重新複製教學版範例,只改必要的 ID/Key 後整段貼上。
  • 外部連結不穩
    依規則:無 URL 就標 「[無公開連結]」;不確定就標 「[鏈接未驗證]」;可改用 Exa 重新抓取摘要。
  • Letta 的 Semantic 本該命中卻沒命中
    先讓系統「列出剛存入的內容」確認真的落盤;
    若使用檔案,請確定該檔已完成索引(稍等片刻再搜)。
小字訣(用詞翻譯)
  • Capture / 收藏:把「外部或你剛輸入的內容」寫入個人庫(長期保存)。
  • Archival Memory:長文資料庫(可被搜尋/重用)。
  • [PERSONAL] / [WEB]:回覆裡標示資料來源(內部庫或外部網頁)。
  • Exa:外部搜尋與擷取工具;安裝好後 [WEB] 內會優先使用它。
延伸閱讀︰

ai-kb-json-k7f5xt3.gamma.site

別再用「人類摘要」餵 AI 了!打造高效企業知識庫的黃金準則(附 Prompt 可直接複製使用)

您是否曾感覺,與 AI 詳細解釋完一個專案的背景後,重新開啟新話題後,它就忘得一乾二淨。這正是所有大型語言模型(LLM)的共同限制:「上下文窗口」有限。 Letta(一個基於開創性的 MemGPT 概念所打造的系統)正是為了解決這個核心痛點而生。 您可以將 Letta 想像成一個為 AI 安裝的「外接大腦」。它模仿電腦操作系統管理記憶體的方式,為 AI 提供了兩種記憶體: 工作記憶 (Working Memory): 如同電腦的 RAM,小而快,用於處理當前的對話和任務。 長期記憶 (Long-term Memory): 如同電腦的硬碟,巨大且可供搜尋,用於存儲過去所有的對話、文件和知識。 Letta 的魔法在於,AI 學會了自主管理這兩層記憶。當遇到一個它不記得的問題時,它會自動去「搜尋」自己的長期記憶硬碟,找到最相關的資料,然後調閱到工作記憶中來回答您。 這項技術,讓一個健忘的聊天機器人,蛻變為一個能夠持續學習、真正擁有「記憶」的知識夥伴。

www.facebook.com

Adam Chan

Adam Chan is on Facebook. Join Facebook to connect with Adam Chan and others you may know. Facebook gives people the power to share and makes the world more open and connected.