智慧體課程文件
行動:使智慧體與其環境互動
並獲得增強的文件體驗
開始使用
行動:使智慧體與其環境互動
我們將介紹如何表示行動(使用 JSON 或程式碼)、停止和解析方法的重要性,並介紹不同型別的智慧體。
行動是 AI 智慧體與環境互動的具體步驟。
無論是瀏覽網頁獲取資訊還是控制物理裝置,每個行動都是智慧體執行的經過深思熟慮的操作。
例如,一個協助客戶服務的智慧體可能會檢索客戶資料、提供支援文章或將問題轉交給人為代表。
智慧體行動的型別
智慧體有多種型別,其行動方式各不相同
智慧體型別 | 描述 |
---|---|
JSON 智慧體 | 要執行的行動以 JSON 格式指定。 |
程式碼智慧體 | 智慧體編寫一個由外部解釋的程式碼塊。 |
函式呼叫智慧體 | 它是 JSON 智慧體的一個子類別,經過微調以針對每個行動生成新訊息。 |
行動本身可以有多種目的
行動型別 | 描述 |
---|---|
資訊收集 | 執行網頁搜尋、查詢資料庫或檢索文件。 |
工具使用 | 進行 API 呼叫、執行計算和執行程式碼。 |
環境互動 | 運算元字介面或控制物理裝置。 |
通訊 | 透過聊天與使用者互動或與其他智慧體協作。 |
LLM 只處理文字,並用它來描述它想要採取的行動以及提供給工具的引數。為了使智慧體正常工作,LLM 必須在發出所有定義完整行動的令牌後停止生成新令牌。這將控制權從 LLM 返回給智慧體,並確保結果可解析——無論預期格式是 JSON、程式碼還是函式呼叫。
停止和解析方法
實現行動的一個關鍵方法是停止和解析方法。此方法確保智慧體的輸出是結構化的且可預測的。
- 以結構化格式生成:
智慧體以清晰、預定的格式(JSON 或程式碼)輸出其預期的行動。
- 停止進一步生成:
一旦定義行動的文字發出,LLM 就會停止生成額外的令牌。這可以防止額外或錯誤的輸出。
- 解析輸出:
外部解析器讀取格式化的行動,確定要呼叫的工具,並提取所需的引數。
例如,需要檢查天氣的智慧體可能會輸出
Thought: I need to check the current weather for New York.
Action :
{
"action": "get_weather",
"action_input": {"location": "New York"}
}
然後,該框架可以輕鬆解析要呼叫的函式的名稱和要應用的引數。
這種清晰、機器可讀的格式最大限度地減少了錯誤,並使外部工具能夠準確處理智慧體的命令。
注意:函式呼叫智慧體透過結構化每個行動以呼叫具有正確引數的指定函式,從而以類似的方式執行。我們將在未來的單元中深入探討這些型別的智慧體。
程式碼智慧體
另一種方法是使用程式碼智慧體。其思想是:程式碼智慧體不輸出簡單的 JSON 物件,而是生成可執行的程式碼塊——通常是 Python 等高階語言。

這種方法有幾個優點
- 表達力: 程式碼可以自然地表示覆雜的邏輯,包括迴圈、條件和巢狀函式,提供比 JSON 更大的靈活性。
- 模組化和可重用性: 生成的程式碼可以包含在不同行動或任務中可重用的函式和模組。
- 增強可除錯性: 藉助定義良好的程式設計語法,程式碼錯誤通常更容易檢測和糾正。
- 直接整合: 程式碼智慧體可以直接與外部庫和 API 整合,從而實現更復雜的操作,例如資料處理或即時決策。
您必須記住,執行 LLM 生成的程式碼可能會帶來安全風險,從提示注入到有害程式碼的執行。這就是為什麼建議使用整合預設安全措施的 AI 智慧體框架,例如smolagents
。如果您想了解更多關於風險以及如何緩解它們的資訊,請檢視此專用部分。
例如,一個負責獲取天氣的程式碼智慧體可能會生成以下 Python 程式碼片段
# Code Agent Example: Retrieve Weather Information
def get_weather(city):
import requests
api_url = f"https://api.weather.com/v1/location/{city}?apiKey=YOUR_API_KEY"
response = requests.get(api_url)
if response.status_code == 200:
data = response.json()
return data.get("weather", "No weather information available")
else:
return "Error: Unable to fetch weather data."
# Execute the function and prepare the final answer
result = get_weather("New York")
final_answer = f"The current weather in New York is: {result}"
print(final_answer)
在此示例中,程式碼智慧體
- 透過 API 呼叫檢索天氣資料,
- 處理響應,
- 並使用 print() 函式輸出最終答案。
此方法也遵循停止和解析方法,透過清晰地分隔程式碼塊併發出執行完成的訊號(此處透過列印 final_answer)。
我們瞭解到,行動透過執行清晰、結構化的任務——無論是透過 JSON、程式碼還是函式呼叫——將智慧體的內部推理與其現實世界互動連線起來。
這種深思熟慮的執行確保每個行動都是精確的,並透過停止和解析方法為外部處理做好準備。在下一節中,我們將探索觀察,以瞭解智慧體如何捕獲和整合來自其環境的反饋。
之後,我們將最終準備好構建我們的第一個智慧體!
< > 在 GitHub 上更新