# 策展 · X (Twitter) 🔥

> 作者：Ashpreet Bedi (@ashpreetbedi) · 平台：X (Twitter) · 日期：2026-05-08

> 原始來源：https://x.com/ashpreetbedi/status/2052413981487427871

## 中文摘要

# 如何打造一個 Agent 平台

雲端平台、資料平台，現在輪到 Agent 平台了。

每家公司都想打造一個平台來運行一群 Agent。由於我過去曾參與過雲端、運算與資料平台的建置，我希望能從過去的錯誤中汲取教訓，並在第一次嘗試時就將其做對。

資料時代是一個特別值得警惕的例子。我經歷過那場大規模的「拆解潮」，當時我們必須將多種工具拼湊在一起，以處理資料攝取、編排、轉換，以及處理 metadata、BI 和資料品質的服務。每個工具單獨使用時都很棒，但要將它們整合在一起簡直是場災難。80% 的工程時間都花在處理這些整合工作上。隨後，「整合潮」來了。Snowflake、Databricks 和雲端供應商（特別是 AWS）整合了整個技術堆疊，並提供了統一的平台。

Agent 時代正以同樣的方式開始，各種功能被當作產品販售，供應商們試圖解決那些根本還不存在的問題。

如果你發現自己正在 3 個不同的供應商上運行 Agent，追蹤紀錄散落在各處，且沒有自動改進的循環機制，那麼這篇文章就是為你準備的。

## 你需要一個 Agent 平台

如果你將 Agent 視為應用程式，那麼很明顯，它們需要一個像作業系統（OS）那樣的系統來運行。

你的 Agent 平台負責運行 Agent、收集資料與指標、透過防止未經授權的存取來管理安全性，並阻止某個 Agent 存取或污染另一個 Agent 的資料。

## 我們要打造什麼

今天，我們將打造一個可以在本地運行，或以每月 20 美元在 Railway 上運行的 Agent 平台。

一旦運行起來，你將能夠在不編寫任何程式碼的情況下發布新的 Agent（或工作流程）。由於平台處理了一切，Claude Code 可以以高品質建置新的 Agent，然後透過即時查詢它們來遞迴地進行改進。這是擁有統一 Agent 平台最大的優勢。

我們還將設定一個用於定期工作的排程器，透過 evals (評估) 來鎖定行為，並將 Agent 連接到 Slack 等介面。

最有趣的部分莫過於看著 Claude Code 遞迴地改進你的 Agent。

## Agent 平台的組成要素

一個 Agent 平台由五個部分組成：

1. Runtime (執行環境)：運行 Agent 的服務。這部分負責大部分繁重的工作。

2. Storage (儲存)：存放資料的資料庫：Agent 會話、記憶、知識、追蹤紀錄和 eval 歷史紀錄。

3. Connectors (連接器)：讓 Agent 透過 MCP、API 或 CLI 與外部系統連接的工具。將它們集中在同一個地方對安全性是一大加分。

4. Interfaces (介面)：Slack、Discord、Telegram、自訂 UI。在一個地方解決跨平台的身份識別問題，這樣無論同一個人是在 Slack 上敲你，還是使用網頁應用程式，他們都會對應到同一個 user_id。

5. Infrastructure (基礎設施)：一切運行的環境。我們將使用 Docker 進行本地開發，並使用 Railway 進行生產部署。

## 讓我們開始吧

我將分享一個你可以基於此進行開發的基礎程式庫。

在我看來，這是 Agent 平台的完美起點。

```bash
agent-platform
├── agents                       # Agent 程式碼放在這裡
│   ├── code_search.py
│   └── web_search.py
├── app                          # 伺服器程式碼放在這裡
│   ├── config.yaml
│   ├── main.py
│   └── settings.py
├── compose.yaml
├── db
│   ├── session.py
│   └── url.py
├── Dockerfile
├── docs                         # 文件放在這裡
│   ├── create-new-agent.md
│   ├── eval-and-improve.md
│   ├── improve-agent.md
│   └── review-and-improve.md
├── evals
│   └── cases.py                 # 測試案例
└── README.md
```

## 第 1 步：在本地運行

首先，讓我們複製、設定並運行我們的 Agent 平台。

請確保已安裝並運行 Docker。如果沒有，請按照這些步驟操作。

然後打開你的終端機，逐一執行以下指令：

1. 複製 agent-platform 模板

```bash
git clone https://github.com/agno-agi/agentos-railway-template.git agent-platform
cd agent-platform
```

2. 設定你的環境。複製範例 .env 檔案，用你喜歡的程式碼編輯器打開，並在其中加入 OpenAI 金鑰。

```bash
cp example.env .env
```

3. 運行你的平台：1 個 FastAPI 伺服器和 1 個 Postgres 資料庫

```bash
docker compose up -d --build
```

這會啟動兩個容器：一個 FastAPI 伺服器和一個 Postgres 資料庫。確認 API 正在 http://localhost:8000/docs 運行。

現在讓我們為平台加上 UI。

1. 前往 os.agno.com 並登入。

2. 連接到你的本地 OS，網址為 http://localhost:8000。

你應該會看到類似這樣的畫面：

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778208152597-iaHHsid6YaEAAcXYxjpg.jpg)

## 第 2 步：建立你的第一個 Agent

程式庫中附帶了兩個參考 Agent 和一個可以為你建立新 Agent 的 Claude Code Prompt。

要建立一個新的 Agent，請打開 Claude Code 並執行：

```plaintext
Run docs/create-new-agent.md
```

Claude 會詢問你該 Agent 應該做什麼、需要什麼工具，然後產生 Agent 檔案、在 app/main.py 中註冊它、重啟容器，並執行冒煙測試。

對於簡單的 Agent，這通常需要 5-10 分鐘。如果你要建置帶有自訂工具的特殊功能，則需要更久。

## 第 3 步：測試你的新 Agent

打開 os.agno.com 與你的 Agent 對話。使用真實的 Prompt 進行測試。檢查追蹤紀錄和會話。試著找出它的破綻。嘗試分佈外 (out-of-distribution) 的問題、Prompt 注入、邊緣案例。這通常需要 5-20 分鐘。

## 第 4 步：遞迴地改進你的 Agent

這就是你的平台開始發揮效益的地方。

在儲存庫中打開 Claude Code 並貼上：

```plaintext
Run docs/improve-agent.md
```

Claude Code 可以直接使用 curl 呼叫你線上的 Agent。然後進行迭代並改進你的 Agent。

這就是為什麼擁有整個技術堆疊是值得的。追蹤資料、Agent 程式碼、運行的平台以及迭代工具都存在同一個盒子裡。Claude Code 可以看到這一切，並根據需要進行改進。

## 第 5 步：透過 evals 鎖定行為

Evals 是你 Agent 的回歸測試。相同的 Prompt、相同的 Agent，按排程運行，當行為發生偏移時就會失敗。

Evals 被定義為一系列案例：

```python
# evals/cases.py
Case(
    name="web_search_recent_anthropic_research",
    agent=web_search,
    input="What did Anthropic publish about agent research recently?",
    criteria=(
        "Answers the question by citing at least one real Anthropic URL "
        "(anthropic.com domain). The response is grounded in fetched content "
        "rather than refusing to answer."
    ),
    expected_tool_calls=(_WEB_SEARCH_TOOL,),
)
```

稍後使用 `python -m evals` 執行它們。

結果會透過 eval_db 寫入你的 Postgres，因此 eval 歷史紀錄會與會話和追蹤紀錄一起顯示在 os.agno.com 上。

透過貼上 `Run docs/eval-and-improve.md` 將 Claude Code 連接到診斷循環。它會對每次失敗進行分類並修復範圍內的問題。

## 第 6 步：在 Railway 上運行

讓我們將平台託管到某個地方，使其正式上線。你的公司可能有一套運行軟體的標準流程。請遵循該流程。

如果你正在尋找一個無需經歷完整 DevOps 流程就能進行測試的地方，Railway 是我發現最便宜且最快的 PaaS。每月 20 美元就能讓你做很多事，而且程式庫已經內建了部署到 Railway 的腳本。

> 需要 Railway CLI 和 railway login。

6.1 設定生產環境

部署腳本會先讀取 .env.production，如果找不到則會退回到 .env。這讓你能夠為本地和生產環境保留不同的數值：不同的 OpenAI 金鑰（對應不同的預算）、僅限生產環境的憑證、不同的 Slack workspace 等等。

```bash
cp .env .env.production
# 使用生產環境數值編輯 .env.production
```

6.2 部署

程式庫附帶了一個腳本，可以配置 Postgres 資料庫並在同一個私有網路上部署應用程式。執行它：

```bash
./scripts/railway/up.sh
```

6.3 你的第一次部署會失敗。這是預期中的。

基於 token 的授權預設為開啟狀態。

如果沒有 JWT_VERIFICATION_KEY，應用程式會拒絕提供服務。你平台的職責是保護你的資料不被公開到網路上。解決方法是產生一個金鑰並將其放入你的生產環境變數中。

> 另一種選擇是發布時關閉驗證，並期望使用者稍後再自行加入，但我們都知道這通常不會發生。人們會讓伺服器暴露在公網上，遭到駭客攻擊，然後怪罪於我。

基於 token 的授權為你提供了三件事：

- 無公開存取。伺服器會拒絕沒有有效 token 的請求。

- 請求級別的身份識別。中介軟體會解析 token 並將 user_id、session_id 和自訂宣告注入到你的端點中。每個請求都與使用者和會話綁定，因此可以防止資料外洩。

- 細粒度的權限。使用者級別的 token 可以運行 Agent 並查看自己的會話。管理員 token 可以讀取所有人的會話並測試任何 Agent。你現在不需要知道或關心 RBAC，但你已經為開始考慮安全性時打下了基礎。

6.4 取得你的驗證金鑰

預設路徑是讓 os.agno.com 為你產生金鑰對：

1. 打開 os.agno.com，點擊 Add OS → Live，輸入你的 Railway 網域。

2. 啟用 Token Based Authorization 然後連接。

3. 將公開金鑰貼入 .env.production。

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778208154015-iaHHsxPpPawAAu7E4jpg.jpg)

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778208152504-iaHHsxPpQacAAeVB5jpg.jpg)

```plaintext
JWT_VERIFICATION_KEY=-----BEGIN PUBLIC KEY-----
MIIBIjANBgkq...
-----END PUBLIC KEY-----
```

> 連接到 AgentOS 的 Live 功能需要專業版訂閱。使用 PLATFORM30 優惠碼可獲得 1 個月免費試用。如果你不想被收費，請記得在試用期結束前取消。

供你參考：你不一定要使用 os.agno.com 來完成此操作。你可以產生自己的 RSA 或 EC 金鑰對，使用私鑰在自己的服務中簽署 token，並將對應的公開金鑰放入 JWT_VERIFICATION_KEY。平台不在乎金鑰來自哪裡，只要傳入的 token 能通過驗證即可。

6.5 同步環境變數並驗證

在 .env.production 開啟時，將叢集內的排程器指向你的公開 Railway 網域，以便 cron 觸發器可以存取 AgentOS：

```bash
# .env.production
AGENTOS_URL=https://<your-app>.up.railway.app
```

然後將變數推送到 Railway：

```bash
./scripts/railway/env-sync.sh
```

Railway 會在環境變數變更時自動部署。觀察日誌並確認平台正在服務：

```bash
railway logs --service agent-os
```

一旦看到成功的請求，AgentOS 就會透過你的 Railway 網域連接，你就正式上線了。

6.6 從 GitHub 自動部署

到目前為止，每次程式碼更新都需要執行 ./scripts/railway/redeploy.sh。

若要實現推送到 main 分支時自動部署：

1. 打開 Railway 儀表板 → 你的專案 → agent-os 服務 → Settings。

2. 在 Source 下，點擊 Connect Repo 並選擇你的儲存庫。

3. 將部署分支設定為 main。

現在每次推送到 main 都會觸發建置和滾動部署。./scripts/railway/env-sync.sh 仍然是用來同步環境變數變更的方式。

選擇不使用 JWT（不推薦）

如果你必須在沒有授權的情況下運行生產環境（例如，在另一個授權層後的私有 VPC 內），請在 app/main.py 中將 authorization 設定為 False 並重新部署。對於任何存放真實資料的部署，請務必保持授權開啟。如果沒有它，任何猜到你 Railway 網域的人都可以讀取你的會話和 Agent。

擴充性

預設部署是兩個副本，每個副本配備 4Gi 記憶體和 2 vCPU。這為你提供了零停機時間的滾動部署和基本的容錯能力。隨著使用量的增加，可以在 railway.json 中調高或調低 numReplicas 和限制。

## 超越 Agent

經驗法則：Agent 用於開放式問題，團隊用於路由，工作流程用於處理程序。你的平台大部分將會是 Agent。少數會是團隊或工作流程。你會知道什麼時候需要哪一種。

多 Agent 團隊。當一個 Agent 不夠用時，將工作分配給一個專家團隊。Agno 團隊有三種模式：

- 協調 (Coordinate)。領導者規劃工作，呼叫合適的專家，並進行綜合處理。

- 路由 (Route)。路由器選擇一名專家來處理請求。

- 廣播 (Broadcast)。每個專家並行運行；你進行聚合。

當無法預先知道合適的專家時，請使用團隊。團隊概覽介紹了每種模式。

Agentic 工作流程。當一個流程需要每次都以相同方式運行時，請編寫工作流程。工作流程為你提供確定性。將它們用於你平台中少數需要可重複執行的高槓桿流程。工作流程概覽涵蓋了這些模式。

關於 Agent 本身（指令、工具、記憶、模型設定）的更多資訊，請參考 Agent 概覽。

## 排程任務

該平台預設在 app/main.py 中啟用了一個輕量級排程器：

```python
agent_os = AgentOS(
    name="AgentOS",
    scheduler=True,
    ...
)
```

在 cron 上排程任何 Agent 或工作流程。常見模式：

- 維護。清除超過 90 天的會話。清理你的 Postgres 資料表。將追蹤資料輪替到冷儲存。

- 主動運行。每個工作日的早晨，運行一個 Agent 來總結你投資組合公司的隔夜新聞。發布到 Slack。

- 捕捉回歸。每週針對你的生產環境 Agent 執行 `python -m evals`。偏移會在使用者感覺到之前出現在 eval 歷史紀錄中。

請參閱 agno 排程器文件以了解 cron API。

## 連接到介面

你的 Agent 應該在使用者所在的地方提供服務。Slack 執行緒、Discord 頻道、現場團隊使用的 Telegram。

或者最重要的是：在你產品內部的自訂 UI。

對於 Slack、Discord、Telegram：模式是相似的。透過介面公開 Agent。請參閱 app/main.py 作為參考：

```python
interfaces: list = []
if SLACK_BOT_TOKEN and SLACK_SIGNING_SECRET:
    from agno.os.interfaces.slack import Slack

    interfaces.append(
        Slack(
            agent=code_search,
            streaming=True,
            token=SLACK_BOT_TOKEN,
            signing_secret=SLACK_SIGNING_SECRET,
            resolve_user_identity=True,
        )
    )

...

agent_os = AgentOS(
    ...
    interfaces=interfaces,
)
```

閱讀介面指南以獲取更多資訊。

## 總結

恭喜。如果你讀到這裡，你已經在雲端中安全地運行了一個統一的 Agent 平台。技術使用者可以使用 Claude Code 建立和部署 Agent。非技術使用者可以使用無程式碼 UI。

會話、追蹤紀錄和知識都存放在你的資料庫中。你的基礎設施受到基於 JWT 的 RBAC 保護，且 API 金鑰在同一個地方管理。

## 為什麼控制你的資料很重要

在結束之前，關於資料主權的說明。

與你平台的每次互動都會產生資料。會話、記憶和追蹤紀錄都會流入你的 Postgres 資料庫。這點很重要的兩個原因：

1. 合規性。將資料保留在自己的資料庫中可降低外洩風險。一旦客戶資料、專有程式碼或內部文件接觸到第三方追蹤工具或記憶服務，你的安全性等級就變成了對方的安全性等級。

2. 自動改進。你的追蹤紀錄是 Claude Code（或你自己）關閉 Agent 品質循環的方式。編寫程式碼的 Agent 將成為建置和改進 Agent 的主要方式。它們之所以能運作，是因為追蹤資料存放在迭代工具可以讀取的地方。供應商拼湊的堆疊將此表面分散在三個 SaaS 產品中，導致循環永遠無法閉合。

你今天發布的 Agent 只是你所建置內容中最小的一部分。它們底下的平台，以及它所實現的迭代循環，才是真正重要的東西。

感謝閱讀。由 Agno 🧡 打造。

## 標籤

Agent, 產業趨勢, Agent Platform
