在 Nexus AI 代理平台中,動作 (Actions)工具 (Tools) 是賦予代理執行具體任務和與外部系統互動的核心元件。理解並掌握如何開發這兩者,是構建強大 AI 代理的關鍵。

工具與動作的核心概念

在 Nexus 中,工具和動作有明確的區分:

  • 工具 (Tools):代表代理可以使用的基本功能,如網路搜尋、檔案讀寫、API 呼叫等。它們是能力的原子單元。
  • 動作 (Actions):代表使用工具執行的特定操作,可以是一個簡單的工具呼叫,也可以是多個工具的組合。

這種分層設計使得功能可以被重用和組合,增強了系統的靈活性。

Nexus 工具與動作架構圖

此圖展示了 Nexus 平台中工具與動作的架構,以及它們如何被代理核心整合和使用。

PlantUML 圖表

開發原生工具 (Native Tools)

原生工具是使用 Python 程式碼實作的功能,提供了完全的靈活性。以下是一個天氣查詢工具的範例:

from nexus.tools.base_tool import BaseTool
import requests

class WeatherTool(BaseTool):
    def __init__(self, api_key):
        super().__init__(
            name="weather_tool",
            description="查詢特定城市的當前天氣狀況",
            parameters={
                "city": {"type": "string", "description": "城市名稱"}
            }
        )
        self.api_key = api_key
        
    def _execute(self, city: str):
        """執行天氣查詢"""
        url = f"https://api.weatherapi.com/v1/current.json?key={self.api_key}&q={city}"
        try:
            response = requests.get(url)
            data = response.json()
            if "error" in data:
                return f"查詢錯誤: {data['error']['message']}"
            
            current = data["current"]
            return {
                "溫度": f"{current['temp_c']}°C",
                "狀況": current["condition"]["text"],
            }
        except Exception as e:
            return f"查詢天氣時發生錯誤: {str(e)}"

這個 WeatherTool 繼承自 BaseTool,在初始化時定義了名稱、描述和參數。核心邏輯在 _execute 方法中,它負責呼叫外部天氣 API 並回傳結構化結果。

開發語意工具 (Semantic Tools)

語意工具使用提示詞而非程式碼來定義功能,這使得建立新工具變得非常簡單,特別是對於創意或分析類任務。

from nexus.tools.semantic_tool import SemanticTool

brainstorming_tool = SemanticTool(
    name="brainstorming_tool",
    description="針對特定主題進行創意頭腦風暴,生成多種可能的想法。",
    parameters={
        "topic": {"type": "string", "description": "需要頭腦風暴的主題"},
        "idea_count": {"type": "integer", "description": "希望生成的想法數量", "default": 5}
    },
    prompt_template="""
    請針對主題「{topic}」進行創意頭腦風暴。
    生成 {idea_count} 個獨特且多樣化的想法。
    對於每個想法,請提供簡短標題和兩三句描述。
    """
)

這個 brainstorming_tool 使用 SemanticTool 類別,其核心是一個 prompt_template,它會將參數(如 {topic})填充後傳送給 LLM 來執行任務。

在 Nexus 中整合行為樹

行為樹(Behavior Trees)是控制代理決策的強大工具。Nexus 提供了實作和使用行為樹的機制,讓代理的行為更加結構化和可預測。

行為樹決策流程圖

此流程圖展示了一個簡單的行為樹如何根據使用者輸入,決定是直接回答還是使用搜尋工具。

PlantUML 圖表

實作行為樹

在 Nexus 中,我們可以定義一個行為樹來協調不同的工具和動作。

from nexus.behaviors.behavior_tree import (
    BehaviorTree, SelectorNode, SequenceNode, ActionNode, ConditionNode
)

# 假設 is_question, search_action, answer_directly 已定義
# is_question: 檢查使用者輸入是否包含問號
# search_action: 執行搜尋工具的動作
# answer_directly: 直接呼叫 LLM 生成回答的動作

tree = BehaviorTree(
    root=SelectorNode(
        name="root_selector",
        children=[
            SequenceNode(
                name="search_flow",
                children=[
                    ConditionNode(name="is_question", condition_fn=is_question),
                    ActionNode(name="search", action_fn=search_action)
                ]
            ),
            ActionNode(name="direct_answer", action_fn=answer_directly)
        ]
    )
)

這個行為樹的邏輯是:如果使用者輸入是一個問題,則執行搜尋流程;否則,直接回答。這種結構化的決策過程使得代理的行為更加清晰和可控。

結論

為 AI 代理開發動作與工具是釋放其全部潛力的關鍵。Nexus 平台透過其靈活的工具系統(支援原生和語意工具)和強大的行為樹決策框架,為開發者提供了一套完整的解決方案。透過將原子化的工具組織到結構化的行為樹中,我們可以構建出能夠應對複雜任務、與外部世界有效互動的智慧代理系統。