← 文章列表
LLM

🧠 進階 LangChain 技巧:讓 LLM 自己選工具!打造迷你 AI Agent 🎩

2025-06-08 · — views

嗨大家好!今天這篇,我們要來玩一點 進階的 LangChain 技巧,主題是——

如何讓 AI 模型自己決定要不要用工具,甚至自己挑選哪個工具!

是不是很帥?😎 就像一位智慧小助理會思考:「嗯…這題我不太熟,我去查一下」或「喔~這只是個簡單的數學題,我自己算給你聽就好!」

🧰 工具能幹嘛?先來預習一下 Tool 的概念!

在前一篇文中我們已經示範了怎麼讓模型使用 DuckDuckGo 搜尋工具。

這次我們再升級:模型可以從「多個工具中選擇一個」,甚至決定「根本不需要工具」!

這就像這樣的決策流程👇

🧍‍♂️ 使用者:「123 * 456 + 789 等於多少?」
🤖 模型內心:這題我可以算,不用去查網頁!
➡️ 選用:calculator 工具
----------------------

🧍‍♂️ 使用者:「gpt-4o-mini 有哪些功能?」
🤖 模型內心:我不確定...去 DuckDuckGo 找一下好了
➡️ 選用:ddg-search 工具
----------------------

🧍‍♂️ 使用者:「你覺得 AI 的未來會怎樣?」
🤖 模型內心:這我可以自己聊 😎
➡️ 不使用工具

🧱 系統架構一覽

來看一下我們的實作,這次程式邏輯分成幾大步驟:

1️⃣ 定義工具

class SearchInput(BaseModel):
    query: str = Field(description="The search query to be executed.")

search_tool = DuckDuckGoSearchRun(
    name="ddg-search",
    description="Use DuckDuckGo to search the internet.",
    args_schema=SearchInput
)

def calculator_tool_fn(args: dict):
    try:
        result = eval(args["expression"])
        return f"{args['expression']} = {result}"
    except Exception as e:
        return f"Error evaluating expression: {e}"

我們把兩個工具都包裝好,並透過 tools 字典做管理 👇

tools = {
    "ddg-search": lambda args: search_tool.run(args),
    "calculator": calculator_tool_fn,
}

2️⃣ 工具選擇 Prompt(超重要!)

這邊是整個 Agent 的「靈魂設計」🔥

tool_selection_prompt = ChatPromptTemplate.from_messages([
    ("system", 
     "你是一個可以選擇工具的智慧助手。\n"
     "可用工具如下:\n"
     "- ddg-search(query): 用於搜尋網路資訊\n"
     "- calculator(expression): 用來進行基本數學運算\n"
     "請根據使用者問題,決定是否需要工具。\n"
     "若需要,請輸出 JSON: {\"tool\": 工具名稱, \"args\": 參數字典}\n"
     "若不需要工具,請輸出 JSON: {\"tool\": null, \"args\": null}"),
    ("human", "{input}")
])

這段 prompt 告訴模型怎麼選工具、要怎麼格式化回覆。
(我們會強制它吐出 JSON 格式,這樣好 parse)

3️⃣ 執行整合流程:模擬 Mini Agent

# -----------------------------
# 4️⃣ 主流程:模擬 Agent 行為
# -----------------------------
def multi_tool_agent(user_input: str) -> str:
    print(f"📩 使用者輸入: {user_input}")
    decision_raw = tool_selector_chain.invoke({"input": user_input})
    print(f"🤖 工具選擇回應: {decision_raw}")

    try:
        decision = json.loads(decision_raw)
        tool_name = decision.get("tool")
        args = decision.get("args")

        if tool_name and tool_name in tools:
            print(f"🔧 執行工具: {tool_name} 參數: {args}")
            result = tools[tool_name](args)
            final_prompt = ChatPromptTemplate.from_template(
                "工具結果如下:{tool_result}\n請根據這個結果回答問題:{user_input}"
            )
            answer_chain = final_prompt | chat_model | StrOutputParser()
            return answer_chain.invoke({"tool_result": result, "user_input": user_input})

        elif tool_name is None:
            return "模型判斷不需要工具:" + chat_model.invoke(user_input).content
        else:
            return f"❌ 不支援的工具名稱: {tool_name}"

    except Exception as e:
        return f"❌ 錯誤:無法解析模型輸出或執行工具: {e}"

是不是超像一個 Agent 的行為?能決策、能執行,還會整合答案!

🧪 測試時間!來看看效果怎麼樣~

✔️ DuckDuckGo 搜尋:

multi_tool_agent("gpt-4o-mini 有哪些功能?")

## result
🧪 測試 1:DuckDuckGo 搜尋
📩 使用者輸入: gpt-4o-mini 有哪些功能?
🤖 工具選擇回應: {"tool": "ddg-search", "args": {"query": "gpt-4o-mini 功能"}}
🔧 執行工具: ddg-search 參數: {'query': 'gpt-4o-mini 功能'}
根据您提供的信息,gpt-4o-mini 具有以下功能:

1. **多模态能力**:继承了 GPT-4o 系列的多模态特性,能够处理文本和图像输入。

2. **图像生成与编辑**:用户可以通过自然语言描述(Prompt)生成、编辑和调整图像。这个功能比之前的图像生成工具更流畅、交互性更强。

3. **图像识别能力**:具备强大的视觉理解能力,包括:
   - 能够识别和描述图像中的场景、物体、人物及其活动。

4. **高性价比**:作为免费的默认模型,其性能超越 GPT-3.5,但在处理极复杂任务方面的能力不如完整的 GPT-4。

5. **快速处理**:提供快速响应,成本低,适合日常高频任务。

6. **支持长上下文**:能够处理长达 128K 的上下文,有助于中长文本任务的完成,不易出现信息断裂的情况。

这些功能使得 gpt-4o-mini 成为一个经济实惠且高效的选择,适合各种需求。

✔️ 計算器工具:

multi_tool_agent("123 * 456 + 789 等於多少?")

##result 
🧪 測試 2:計算器
📩 使用者輸入: 123 * 456 + 789 等於多少?
🤖 工具選擇回應: {"tool": "calculator", "args": {"expression": "123 * 456 + 789"}}
🔧 執行工具: calculator 參數: {'expression': '123 * 456 + 789'}
根據提供的計算結果,123 * 456 + 789 等於 56877。

✔️ 不用工具的回答:

multi_tool_agent("你覺得AI的未來會怎樣?")

##result
🧪 測試 3:不使用工具
📩 使用者輸入: 你覺得AI的未來會怎樣?
🤖 工具選擇回應: {"tool": null, "args": null}
模型判斷不需要工具:AI的未來可能會有幾個主要方向的發展:

1. **更高度的自動化**:AI將在各行各業中實現更廣泛的自動化,從工廠生產到物流管理,可能會取代一些重複性和程序性的工作。

2. **增強人類能力**:AI可能將成為人類的強大助手,不論是在醫療診斷、科學研究還是創意創作方面,幫助人們更高效地工作。

3. **個性化服務**:隨著數據分析技術的進步,AI能夠提供更加個性化的服務,了解個體需求,提升用戶體驗。

4. **道德與法律挑戰**:隨著AI技術的進步,我們將面臨許多倫理和法律問題,例如隱私權、決策透明度和責任歸屬等。

📊 整體架構整理一下:

模型功能有工具支援的版本 🛠️
回答 AI 常識✅ 不用工具,模型自己回答
查詢最新知識✅ 使用 ddg-search 工具
處理簡單計算✅ 使用 calculator 工具
模型自己做選擇嗎?✅ YES!透過 prompt 做選擇
模型回答會變靈活嗎?✅ 超靈活,自由切換策略!

🧠 結語:讓 LLM 動腦又動手!

這樣的設計讓 LLM 不再是死板板的「問答機器」,而是可以根據問題靈活調用工具的小助理!

未來你可以加上更多工具,比如:

  • 📊 查股價

  • 🌤️ 查天氣

  • 📅 查日曆

  • 📦 查產品庫存

  • 🔍 查企業內部資料

🎯 只要建立好 tools + prompt + chain,就能快速打造自己的 AI 工具人!