在 Nexus AI 代理平台中,動作 (Actions) 和 工具 (Tools) 是賦予代理執行具體任務和與外部系統互動的核心元件。理解並掌握如何開發這兩者,是構建強大 AI 代理的關鍵。
工具與動作的核心概念
在 Nexus 中,工具和動作有明確的區分:
- 工具 (Tools):代表代理可以使用的基本功能,如網路搜尋、檔案讀寫、API 呼叫等。它們是能力的原子單元。
- 動作 (Actions):代表使用工具執行的特定操作,可以是一個簡單的工具呼叫,也可以是多個工具的組合。
這種分層設計使得功能可以被重用和組合,增強了系統的靈活性。
Nexus 工具與動作架構圖
此圖展示了 Nexus 平台中工具與動作的架構,以及它們如何被代理核心整合和使用。
開發原生工具 (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 提供了實作和使用行為樹的機制,讓代理的行為更加結構化和可預測。
行為樹決策流程圖
此流程圖展示了一個簡單的行為樹如何根據使用者輸入,決定是直接回答還是使用搜尋工具。
實作行為樹
在 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 平台透過其靈活的工具系統(支援原生和語意工具)和強大的行為樹決策框架,為開發者提供了一套完整的解決方案。透過將原子化的工具組織到結構化的行為樹中,我們可以構建出能夠應對複雜任務、與外部世界有效互動的智慧代理系統。