目錄

  1. 什麼是智能體?
  2. 核心概念:智能體的四大要素
  3. 環境準備:安裝必要的庫
  4. 第一步:構建一個基礎的智能體框架
  5. 第二步:實現感知與行動
  6. 第三步:設計決策邏輯(“大腦”)
  7. 實戰項目:構建一個網絡購物智能助手
  • 項目目標
  • 環境定義
  • 智能體實現
  • 運行與交互
  1. 進階之路:如何讓你的智能體更“聰明”?
  2. 總結

1. 什麼是智能體?

在人工智能領域,智能體 是一個能夠自主感知環境、進行決策並執行行動的實體。它可以是純軟件的(如聊天機器人、遊戲AI),也可以是軟硬件結合的(如自動駕駛汽車、掃地機器人)。

想象一下你正在玩一個電子遊戲,你控制的角色就是一個智能體:

  • 感知:看到屏幕上的敵人、道具和地圖。
  • 決策:決定是打擊、躲避還是拾取道具。
  • 行動:按下按鈕,讓角色執行相應動作。

我們的目標就是用Python來創造這樣一個“角色”。

2. 核心概念:智能體的四大要素

一個經典的智能體模型通常包含以下四個核心部分:

  1. 感知:智能體如何從外部世界獲取信息。在代碼中,這通常是一個函數,用於讀取環境狀態。
  2. 決策:智能體的“大腦”。它根據感知到的信息,根據某種策略或算法來決定下一步該做什麼。
  3. 行動:智能體執行決策後產生的輸出,會改變環境的狀態。
  4. 環境:智能體所處的外部世界,智能體與之交互。

這四者形成了一個閉環:智能體感知環境 -> 在內部進行決策 -> 執行行動 -> 行動改變環境 -> 新的環境再次被感知...

3. 環境準備:安裝必要的庫

對於本教程,我們主要使用Python標準庫,這足以構建一個基礎的智能體。但在實際項目中,你可能會用到:

  • requests: 用於網絡請求(我們的購物助手會用到)。
  • beautifulsoup4: 用於解析網頁內容。
  • openai: 如果你希望集成強大的語言模型(如GPT)作為決策核心。

請通過pip安裝它們:

pip install requests beautifulsoup4 openai

4. 第一步:構建一個基礎的智能體框架

讓我們先用面向對象的思想,為智能體創建一個基礎類。這個類將定義智能體的基本結構和行為模式。

# agent_base.py
import time

class BaseAgent:
    def __init__(self, name="BaseAgent"):
        self.name = name
        self.is_running = False

    def perceive(self):
        """
        感知環境。子類必須實現此方法。
        返回感知到的信息。
        """
        raise NotImplementedError("Subclasses must implement the perceive method.")

    def decide(self, perception):
        """
        根據感知信息進行決策。子類必須實現此方法。
        返回一個行動決策。
        """
        raise NotImplementedError("Subclasses must implement the decide method.")

    def act(self, action):
        """
        執行行動。子類必須實現此方法。
        """
        raise NotImplementedError("Subclasses must implement the act method.")

    def run(self, interval=1):
        """
        啓動智能體的主循環。
        """
        self.is_running = True
        print(f"[{self.name}] 啓動中...")
        while self.is_running:
            # 1. 感知
            perception = self.perceive()
            print(f"[{self.name}] 感知到: {perception}")

            # 2. 決策
            action = self.decide(perception)
            print(f"[{self.name}] 決定執行: {action}")

            # 3. 行動
            self.act(action)
            print("-" * 20)

            # 等待一段時間再進行下一次循環
            time.sleep(interval)

    def stop(self):
        """
        停止智能體。
        """
        self.is_running = False
        print(f"[{self.name}] 已停止。")

這個 BaseAgent 類定義了智能體的生命週期:perceive -> decide -> act。它是一個模板,我們接下來要做的就是繼承它,並填充具體的功能。

5. 第二步:實現感知與行動

讓我們創建一個簡單的“温度調節智能體”來實踐這個框架。

  • 環境:一個房間,有當前温度。
  • 感知:讀取當前温度。
  • 決策:如果温度高於26度,則“打開空調”;如果低於22度,則“關閉空調”。
  • 行動:改變空調的狀態。
# temperature_agent.py
from agent_base import BaseAgent
import random

class Environment:
    """模擬一個簡單的環境:房間"""
    def __init__(self, initial_temp=25.0):
        self.temperature = initial_temp
        self.ac_is_on = False

    def update(self):
        """模擬温度變化"""
        if self.ac_is_on:
            self.temperature -= random.uniform(0.5, 1.5)
        else:
            self.temperature += random.uniform(0.2, 0.8)
        self.temperature = round(self.temperature, 1)

    def get_state(self):
        return {
            "temperature": self.temperature,
            "ac_is_on": self.ac_is_on
        }

class TemperatureAgent(BaseAgent):
    """温度調節智能體"""
    def __init__(self, env, target_high=26.0, target_low=22.0):
        super().__init__("TemperatureAgent")
        self.env = env
        self.target_high = target_high
        self.target_low = target_low

    def perceive(self):
        """感知:獲取當前環境狀態"""
        return self.env.get_state()

    def decide(self, perception):
        """決策:根據温度決定空調開關"""
        current_temp = perception["temperature"]
        ac_is_on = perception["ac_is_on"]

        if current_temp > self.target_high and not ac_is_on:
            return "TURN_ON_AC"
        elif current_temp < self.target_low and ac_is_on:
            return "TURN_OFF_AC"
        else:
            return "DO_NOTHING"

    def act(self, action):
        """行動:執行決策,改變環境"""
        if action == "TURN_ON_AC":
            self.env.ac_is_on = True
            print(f"[{self.name}] 行動:空調已打開。")
        elif action == "TURN_OFF_AC":
            self.env.ac_is_on = False
            print(f"[{self.name}] 行動:空調已關閉。")
        else:
            print(f"[{self.name}] 行動:保持現狀。")

        # 行動後,更新環境狀態
        self.env.update()

# --- 運行示例 ---
if __name__ == "__main__":
    # 1. 創建環境和智能體
    room_env = Environment(initial_temp=28.0)
    temp_agent = TemperatureAgent(room_env)

    # 2. 啓動智能體
    try:
        temp_agent.run(interval=2) # 每2秒執行一次循環
    except KeyboardInterrupt:
        temp_agent.stop()

運行這個腳本,你會看到智能體如何持續地感知温度、做出決策並採取行動,努力將房間温度維持在目標範圍內。

6. 第三步:設計決策邏輯(“大腦”)

decide 方法是智能體的靈魂。上面的例子使用了簡單的 if-else 規則。更復雜的智能體可以使用更高級的決策邏輯:

  • 規則引擎:一系列 if-then 規則,適合任務明確、邏輯清晰場景。
  • 狀態機:智能體在不同狀態間切換,每個狀態對應一套行為。
  • 搜索算法(如A*):在有明確目標和路徑的場景中,尋找最優解。
  • 強化學習:通過“試錯”來學習最優策略,適合環境複雜、規則不明確的場景。
  • 大語言模型:利用LLM強大的推理和自然語言理解能力,作為決策核心,尤其適合處理開放、複雜的任務。

7. 實戰項目:構建一個網絡購物智能助手

現在,我們來挑戰一個更復雜、更貼近現實的例子。

項目目標

創建一個智能體,用户只需告訴它想買什麼(例如,“我想買一本關於Python的編程書”),它就能自動:

  1. 在一個模擬的在線商城中搜索商品。
  2. 根據價格和評分進行篩選。
  3. 選出最優商品並推薦給用户。
環境定義

我們不需要真的去爬取亞馬遜,而是創建一個模擬的在線商城環境。

# shopping_env.py
class Product:
    def __init__(self, name, price, rating, category):
        self.name = name
        self.price = price
        self.rating = rating
        self.category = category

    def __repr__(self):
        return f"《{self.name}》 - 價格: ¥{self.price}, 評分: {self.rating}/5"

class ShoppingEnvironment:
    """模擬的在線商城環境"""
    def __init__(self):
        self.products = [
            Product("Python從入門到精通", 89.0, 4.8, "編程"),
            Product("流暢的Python", 128.0, 4.9, "編程"),
            Product("Python編程快速上手", 59.0, 4.5, "編程"),
            Product("機器學習實戰", 108.0, 4.7, "AI"),
            Product("深度學習", 158.0, 4.6, "AI"),
            Product("人類簡史", 68.0, 4.9, "歷史"),
        ]

    def search(self, query):
        """根據查詢關鍵詞搜索商品"""
        results = []
        for product in self.products:
            if query.lower() in product.name.lower() or query.lower() in product.category.lower():
                results.append(product)
        return results
智能體實現

現在,我們來實現這個購物助手智能體。

# shopping_agent.py
from agent_base import BaseAgent
from shopping_env import ShoppingEnvironment

class ShoppingAssistant(BaseAgent):
    """網絡購物智能助手"""
    def __init__(self, env):
        super().__init__("ShoppingAssistant")
        self.env = env
        self.user_request = None
        self.search_results = []

    def perceive(self):
        """感知:獲取用户的請求"""
        if not self.user_request:
            self.user_request = input("請告訴我您想買什麼(輸入 'exit' 退出): ")
        return {"user_request": self.user_request}

    def decide(self, perception):
        """決策:分析請求並決定下一步行動"""
        request = perception["user_request"]

        if request.lower() == 'exit':
            return "EXIT"

        if not self.search_results:
            return "SEARCH"
        else:
            return "RECOMMEND"

    def act(self, action):
        """行動:執行搜索或推薦"""
        request = self.user_request

        if action == "SEARCH":
            print(f"[{self.name}] 正在為您搜索 '{request}' 相關商品...")
            self.search_results = self.env.search(request)
            if not self.search_results:
                print(f"[{self.name}] 抱歉,沒找到與 '{request}' 相關的商品。")
                self.user_request = None # 重置請求
            else:
                print(f"[{self.name}] 找到了 {len(self.search_results)} 件商品。")

        elif action == "RECOMMEND":
            print(f"[{self.name}] 正在為您篩選和推薦...")
            # 簡單策略:按評分降序,再按價格升序
            sorted_products = sorted(self.search_results, key=lambda p: (-p.rating, p.price))
            best_product = sorted_products[0]
            print("\n" + "="*30)
            print(f"根據您的需求,我們為您推薦:")
            print(best_product)
            print("="*30 + "\n")
            
            # 重置狀態,準備下一次請求
            self.user_request = None
            self.search_results = []

        elif action == "EXIT":
            print(f"[{self.name}] 感謝您的使用,再見!")
            self.stop()

    def run(self):
        """重寫run循環,使其非阻塞式交互"""
        self.is_running = True
        print(f"[{self.name}] 您好!我是您的專屬購物助手。")
        while self.is_running:
            perception = self.perceive()
            if not self.is_running: break # 如果用户輸入exit,perceive會觸發stop
            action = self.decide(perception)
            self.act(action)

# --- 運行示例 ---
if __name__ == "__main__":
    shop_env = ShoppingEnvironment()
    assistant = ShoppingAssistant(shop_env)
    assistant.run()
運行與交互

運行 shopping_agent.py,你將看到如下交互過程:

[ShoppingAssistant] 您好!我是您的專屬購物助手。
請告訴我您想買什麼(輸入 'exit' 退出): python
[ShoppingAssistant] 正在為您搜索 'python' 相關商品...
[ShoppingAssistant] 找到了 3 件商品。
[ShoppingAssistant] 正在為您篩選和推薦...

==============================
根據您的需求,我們為您推薦:
《流暢的Python》 - 價格: ¥128.0, 評分: 4.9/5
==============================

請告訴我您想買什麼(輸入 'exit' 退出): 歷史
[ShoppingAssistant] 正在為您搜索 '歷史' 相關商品...
[ShoppingAssistant] 找到了 1 件商品。
[ShoppingAssistant] 正在為您篩選和推薦...

==============================
根據您的需求,我們為您推薦:
《人類簡史》 - 價格: ¥68.0, 評分: 4.9/5
==============================

請告訴我您想買什麼(輸入 'exit' 退出): exit
[ShoppingAssistant] 感謝您的使用,再見!
[ShoppingAssistant] 已停止。

這個購物助手已經具備了智能體的核心特徵,能夠理解自然語言請求,與環境(商城)交互,並做出有用的決策。

8. 進階之路:如何讓你的智能體更“聰明”?

我們構建的購物助手還很初級。這裏有一些讓它變得更強大的方向:

  1. 集成大語言模型(LLM)
  • 自然語言理解:用LLM代替簡單的字符串匹配來理解用户意圖。例如,“我想找一本不超過100塊,評價又好的Python書”,LLM可以解析出價格上限和評分要求。
  • 動態決策:將搜索結果和用户歷史偏好作為上下文,讓LLM生成更人性化的推薦理由和對話。
  1. 引入記憶
  • 為智能體添加一個記憶模塊(可以是一個簡單的列表或數據庫),記錄用户的購買歷史、偏好和之前的對話。這樣它就能提供更個性化的服務。
  1. 使用強化學習
  • 定義獎勵函數(如用户是否點擊購買、是否滿意推薦),讓智能體通過多次與模擬用户或真實用户交互,學習最優的推薦策略。
  1. 連接真實API
  • ShoppingEnvironment 替換為真實的電商API(如淘寶、京東開放平台API),讓智能體在真實世界中工作。
  1. 多智能體系統
  • 創建多個不同功能的智能體(如搜索專家、比價專家、評論分析專家),讓它們協同工作,共同完成一個複雜的任務。

9. 總結

恭喜你!通過本教程,你已經從零開始,掌握了Python智能體開發的核心概念和實踐方法。

我們回顧一下關鍵步驟:

  • 理解智能體模型:感知-決策-行動的閉環。
  • 搭建基礎框架:創建一個可複用的 BaseAgent 類。
  • 填充具體邏輯:實現 perceive, decide, act 方法。
  • 通過項目實踐:構建了一個有趣的購物助手。

智能體開發是一個充滿創造力和挑戰的領域。今天你構建的只是一個起點,未來你可以用它來解決各種自動化問題,從簡單的腳本任務到複雜的業務流程管理。保持好奇心,不斷探索,你的智能體將變得越來越強大!