博客 / 詳情

返回

Minion框架早已實現PTC:超越傳統Tool Calling的Agent架構

引言
2025年11月24日,Anthropic正式發佈了Programmatic Tool Calling (PTC)特性,允許Claude通過代碼而非單次API調用來編排工具執行。這一創新被認為是Agent開發的重要突破,能夠顯著降低token消耗、減少延遲並提升準確性。
然而,作為minion框架的創建者,我想分享一個有趣的事實:minion從一開始就採用了這種架構理念。在PTC概念被正式提出之前,minion已經在生產環境中證明了這種方法的價值。
PTC解決了什麼問題?
Anthropic在博文中指出了傳統Tool Calling的兩個核心問題:

  1. Context污染問題
    傳統方式中,每次工具調用的結果都會返回到LLM的context中。例如分析一個10MB的日誌文件時,整個文件內容會進入context window,即使LLM只需要錯誤頻率的摘要。
  2. 推理開銷與手動綜合
    每次工具調用都需要一次完整的模型推理。LLM必須"眼球式"地解析數據、提取相關信息、推理片段如何組合,然後決定下一步——這個過程既緩慢又容易出錯。
    Minion的解決方案:天然的PTC架構
    Minion框架從設計之初就採用了一種根本不同的架構:LLM專注於規劃和決策,具體執行交給代碼環境。
    核心設計理念

    Minion的典型工作流

  3. LLM分析用户需求,制定執行計劃
  4. LLM生成Python代碼來編排工具調用
  5. 代碼在隔離環境中執行,處理所有數據操作
  6. 只有最終結果返回給LLM

這正是PTC想要實現的效果,但minion將其作為基礎架構而非可選特性。
實際案例對比
讓我們看看Anthropic博文中的預算合規檢查示例:
任務:找出Q3差旅超預算的團隊成員
傳統Tool Calling方式:

獲取團隊成員 → 20人
為每人獲取Q3費用 → 20次工具調用,每次返回50-100條費用明細
獲取各級別預算限額
所有數據進入context:2000+條費用記錄(50KB+)
LLM手動彙總每人費用、查找預算、比較超支情況

使用PTC後:

Claude寫一段Python腳本編排整個流程
腳本在Code Execution環境運行
LLM只看到最終結果:2-3個超支人員

在Minion中,這種模式是默認行為,llm會生成代碼:

Minion中的實現(偽代碼)

async def check_budget_compliance():

# LLM生成的計劃代碼
team = await get_team_members("engineering")

# 並行獲取所有數據
levels = list(set(m["level"] for m in team))
budgets = {
    level: await get_budget_by_level(level)
    for level in levels
}

# 數據處理在本地完成
exceeded = []
for member in team:
    expenses = await get_expenses(member["id"], "Q3")
    total = sum(e["amount"] for e in expenses)
    budget = budgets[member["level"]]

    if total > budget["travel_limit"]:
        exceeded.append({
            "name": member["name"],
            "spent": total,
            "limit": budget["travel_limit"]
        })

return exceeded  # 只返回關鍵結果

關鍵區別在於:

Minion:這是框架的核心設計,所有複雜任務都這樣處理

PTC:需要顯式啓用,存在多重架構限制

必須顯式標記哪些工具允許programmatic調用(allowed_callers配置)

運行在受限的Claude容器環境中,無法自由安裝任意包

文件需要通過額外的Files API上傳(單文件最大500MB限制)

工具必須在容器4.5分鐘不活動超時前返回結果

Web工具、MCP工具無法通過programmatic方式調用

Minion的優勢:更進一步
Minion不僅實現了PTC的核心理念,還提供了更多優勢:

  1. 完整的Python生態系統
    Minion中的代碼執行環境擁有完整的Python生態訪問權:

    Minion可以直接使用任何Python庫

    import pandas as pd
    import numpy as np
    from sklearn.cluster import KMeans

強大的數據處理

df = pd.DataFrame(expense_data)
analysis = df.groupby('category').agg({

'amount': ['sum', 'mean', 'std'],
'count': 'size'

})

複雜的數據科學任務

model = KMeans(n_clusters=3)
clusters = model.fit_predict(spending_patterns)

  1. 狀態管理和持久化
    Minion天然支持複雜的狀態管理:
    class BudgetAnalyzer:
    def __init__(self):

     self.cache = {}
     self.history = []
    

    async def analyze_department(self, dept):

     # 狀態在整個分析過程中保持
     if dept in self.cache:
         return self.cache[dept]
    
     result = await self._deep_analysis(dept)
     self.cache[dept] = result
     self.history.append(result)
     return result
    
    
  2. 錯誤處理和重試邏輯
    在代碼中顯式處理各種邊界情況:
    async def robust_fetch(user_id, max_retries=3):
    for attempt in range(max_retries):

     try:
         return await get_expenses(user_id, "Q3")
     except RateLimitError:
         await asyncio.sleep(2 ** attempt)
     except DataNotFoundError:
         return []  # 合理的默認值

    raise Exception(f"Failed after {max_retries} attempts")

  3. 並行和異步操作
    充分利用Python的異步能力:

    高效的並行處理

    async def analyze_all_departments():
    departments = ["eng", "sales", "marketing", "ops"]

    # 同時分析所有部門
    results = await asyncio.gather(*[

     analyze_department(dept)
     for dept in departments

    ])

    # 整合分析結果
    return consolidate_results(results)

性能數據對比
根據Anthropic的內部測試,PTC帶來了顯著改進:

Token節省:複雜研究任務從43,588降至27,297 tokens(減少37%)
延遲降低:消除了多次模型推理往返
準確率提升:

內部知識檢索:25.6% → 28.5%
GIA基準測試:46.5% → 51.2%

在minion的生產使用中,我們觀察到類似甚至更好的指標,因為:

更少的模型調用:LLM只在規劃階段和最終總結時參與
更高效的資源利用:本地數據處理不消耗API tokens
更可預測的性能:代碼執行路徑明確,減少了LLM的不確定性

架構哲學:誰應該做什麼?
Minion的設計基於一個核心信念:

LLM擅長理解、規劃和推理;Python擅長執行、處理和轉換。

這種職責分離帶來了清晰的架構:
用户請求

[LLM:理解意圖,制定計劃]

[生成Python代碼]

[代碼執行環境:調用工具、處理數據、控制流程]

[返回結構化結果]

[LLM:解讀結果,生成用户友好的響應]

這不僅僅是優化,而是一種架構級別的重新思考。
Tool Search Tool:Minion的動態工具發現
Anthropic的另一個新特性是Tool Search Tool,解決大型工具庫的context消耗問題。Minion在這方面也有相應的機制:
分層工具暴露

Minion的工具分層策略

class MinionToolRegistry:

def __init__(self):
    self.core_tools = []      # 始終加載
    self.domain_tools = {}    # 按需加載
    self.rare_tools = {}      # 搜索發現

def get_tools_for_task(self, task_description):
    # 智能工具選擇
    tools = self.core_tools.copy()

    # 基於任務描述添加相關工具
    if "database" in task_description:
        tools.extend(self.domain_tools["database"])

    if "visualization" in task_description:
        tools.extend(self.domain_tools["plotting"])

    return tools

向量搜索工具發現

使用embedding的工具搜索

from sentence_transformers import SentenceTransformer

class SemanticToolSearch:

def __init__(self, tool_descriptions):
    self.model = SentenceTransformer('all-MiniLM-L6-v2')
    self.tool_embeddings = self.model.encode(tool_descriptions)

def find_tools(self, query, top_k=5):
    query_embedding = self.model.encode([query])
    similarities = cosine_similarity(query_embedding, self.tool_embeddings)
    return self.get_top_tools(similarities, top_k)

實際應用:Minion在生產環境
Minion框架已經在多個實際場景中證明了這種架構的價值:
案例1:大規模數據分析
金融科技公司使用minion分析數百萬條交易記錄,尋找異常模式:
async def detect_anomalies():

# LLM規劃:需要獲取數據、清洗、特徵工程、異常檢測

# 執行代碼直接處理大數據集
transactions = await fetch_all_transactions(start_date, end_date)
# 1M+ records, 但不進入LLM context

df = pd.DataFrame(transactions)
df = clean_data(df)
features = engineer_features(df)

# 使用機器學習檢測異常
anomalies = detect_with_isolation_forest(features)

# 只返回異常摘要給LLM
return {
    "total_transactions": len(df),
    "anomalies_found": len(anomalies),
    "top_anomalies": anomalies.head(10).to_dict()
}

結果:

處理100萬條記錄
LLM僅消耗~5K tokens(傳統方式需要500K+)
端到端延遲:30秒(vs 傳統方式的5分鐘+)

案例2:多源數據整合
SaaS公司使用minion整合來自多個API的客户數據:
async def comprehensive_customer_analysis(customer_id):

# 並行獲取所有數據源
crm_data, support_tickets, usage_logs, billing_history = await asyncio.gather(
    fetch_crm_data(customer_id),
    fetch_support_tickets(customer_id),
    fetch_usage_logs(customer_id),
    fetch_billing_history(customer_id)
)

# 本地數據融合和分析
customer_profile = {
    "health_score": calculate_health_score(...),
    "churn_risk": predict_churn_risk(...),
    "upsell_opportunities": identify_opportunities(...),
    "support_sentiment": analyze_ticket_sentiment(support_tickets)
}

return customer_profile

案例3:自動化工作流
DevOps團隊使用minion自動化複雜的部署流程:
async def deploy_with_validation():

# 多步驟工作流,每步都有條件邏輯

# 1. 運行測試
test_results = await run_test_suite()
if test_results.failed > 0:
    return {"status": "blocked", "reason": "tests failed"}

# 2. 構建和推送鏡像
image = await build_docker_image()
await push_to_registry(image)

# 3. 金絲雀部署
canary = await deploy_canary(image, percentage=10)
await asyncio.sleep(300)  # 監控5分鐘

metrics = await get_canary_metrics(canary)
if metrics.error_rate > 0.01:
    await rollback_canary(canary)
    return {"status": "rolled_back", "metrics": metrics}

# 4. 完整部署
await deploy_full(image)
return {"status": "success", "image": image.tag}

超越PTC:Minion的未來方向
雖然PTC是一個重要的進步,但minion的架構設計讓我們能夠探索更多可能性:

  1. 混合推理模式
    在一個會話中智能切換:

    簡單任務:直接工具調用

    if task.complexity < THRESHOLD:
    result = await simple_tool_call(task)

複雜任務:生成編排代碼

else:

orchestration_code = await llm.generate_code(task)
result = await execute_code(orchestration_code)

  1. 增量計算和緩存
    智能重用中間結果:

    記憶化的數據獲取

    @lru_cache(maxsize=1000)
    async def cached_get_user_data(user_id):
    return await fetch_user_data(user_id)

增量更新而非全量重算

async def update_analysis(new_data):

previous_state = load_checkpoint()
delta = compute_delta(previous_state, new_data)
updated_state = apply_delta(previous_state, delta)
return updated_state

  1. 多模型協作
    不同模型處理不同階段:

    規劃用強模型

    plan = await claude_opus.create_plan(user_request)

代碼生成用專門模型

code = await codegen_model.generate(plan)

執行和監控

result = await execute_with_monitoring(code)

用户交互用快速模型

response = await claude_haiku.format_response(result)

開源的力量:社區驅動的創新
Minion作為開源項目(300+ GitHub stars),其發展得益於社區的貢獻和反饋。這種開放性帶來了:

快速迭代:社區發現問題和用例,推動快速改進
多樣化應用:用户在我們未曾想象的場景中使用minion

相比之下,PTC雖然強大,但:

需要顯式配置(allowed_callers, defer_loading等)
依賴特定的API版本和beta功能
與Claude的生態系統緊密耦合

Minion的設計原則是provider-agnostic——你可以用任何LLM後端(Claude, GPT-4, 開源模型),架構優勢依然存在。
技術細節:實現對比
讓我們深入比較實現細節:
PTC的實現方式

Anthropic的PTC需要特定配置

{

"tools": [
    {
        "type": "code_execution_20250825",
        "name": "code_execution"
    },
    {
        "name": "get_team_members",
        "allowed_callers": ["code_execution_20250825"],
        ...
    }
]

}

Claude生成工具調用

{

"type": "server_tool_use",
"id": "srvtoolu_abc",
"name": "code_execution",
"input": {
    "code": "team = get_team_members('engineering')\\\\\\\\n..."
}

}

Minion的實現方式

Minion的工具定義是標準Python

class MinionTools:

@tool
async def get_team_members(self, department: str):
    """Get all members of a department"""
    return await self.db.query(...)

@tool
async def get_expenses(self, user_id: str, quarter: str):
    """Get expense records"""
    return await self.expenses_api.fetch(...)

LLM生成的是完整的Python函數

async def analyze_budget():

# 直接調用工具函數
team = await tools.get_team_members("engineering")

# 完整的Python語言能力
expenses_by_user = {
    member.id: await tools.get_expenses(member.id, "Q3")
    for member in team
}

# 任意複雜度的數據處理
analysis = perform_complex_analysis(expenses_by_user)
return analysis

關鍵區別:

PTC:工具調用通過特殊的API機制,有caller/callee關係
Minion:工具就是普通的Python async函數,LLM生成標準代碼

為什麼這個架構如此重要?
隨着AI Agent向生產環境發展,我們面臨的核心挑戰是:

規模:處理百萬級數據,不能全塞進context
可靠性:生產系統需要確定性的錯誤處理
成本:token消耗直接影響商業可行性
性能:用户體驗需要亞秒級響應

傳統的單次工具調用模式在這些維度上都遇到瓶頸。代碼編排模式(無論是PTC還是minion)提供了突破:
傳統模式:LLM <-> Tool <-> LLM <-> Tool <-> LLM

      (慢)   (貴)   (脆弱)

編排模式:LLM -> [Code: Tool+Tool+Tool+Processing] -> LLM

      (快)   (省)   (可靠)

  1. 經過驗證的架構
    PTC的發佈證明了我們架構選擇的正確性——這不是投機性的設計,而是行業領先者獨立得出的結論。
  2. 先發優勢
    在PTC成為官方特性之前,minion已經在生產環境積累了經驗和最佳實踐。
  3. 更廣泛的適用性

支持多種LLM後端(Claude, GPT-4, 開源模型)
靈活的部署選項(雲端、本地、混合)
豐富的Python生態系統集成

  1. 社區和生態
    300+stars代表的不僅是認可,還有潛在的用户基礎和貢獻者社區。
    結論:架構的必然收斂
    Anthropic推出PTC不是偶然——這是agent架構演進的必然方向。當你需要構建能處理複雜任務、大規模數據、多步驟流程的生產級agent時,你會自然而然地得出這樣的結論:

LLM應該專注於它擅長的(理解和規劃),讓代碼處理它擅長的(執行和轉換)。

Minion從一開始就擁抱了這個理念,並將繼續推動這個方向:

✅ 今天:完整的PTC式架構,生產環境驗證
🚀 明天:更智能的工具發現、更高效的狀態管理
🌟 未來:混合推理、增量計算、多模型協作

如果你正在構建需要處理真實世界複雜性的AI agent,我邀請你:

試用minion:GitHub倉庫
加入討論:分享你的用例和反饋
參與社區:貢獻代碼、文檔、想法

這不是關於誰先想到某個特性,而是關於共同推動AI agent架構向正確方向發展。PTC的發佈對整個生態系統都是好消息——它驗證了這條路徑,並將吸引更多開發者探索programmatic orchestration的潛力。
讓我們一起構建下一代AI agent。
延伸閲讀 完全開源!全新多合一AI智能體框架來了:無縫支持多種工具、多種任務

相關資源
視頻演示

PTC Example - Expense Tracking: https://youtu.be/hDAIB0sF7-k
Tool Search Tool Example - Create GitHub PR: https://youtu.be/G7dDvza9PO8

參考資料:
https://github.com/femto/minion
Advanced Tool Use Guide: https://github.com/femto/minion/blob/main/docs/advanced_tool_use.md

GitHub: https://github.com/femto/minion

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.