iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
生成式 AI

Multi-Agent 實戰:開發多代理智慧小幫手系列 第 13

【Day 13】 Prompt 的深入探討與實作(上)

  • 分享至 

  • xImage
  •  

上一篇我們認識了 Prompt 的基本概念,也知道了它在 Agent 中的重要性。
不過在實作時,常常會遇到一個問題:
「明明 Prompt 已經寫好了,為什麼 Agent 還是會出錯?」
這篇我們就來更深入探討 Prompt 的挑戰、管理方式等。

為什麼 Prompt 有時候已經寫了還是會出錯?

即使 Prompt 寫得再清楚,LLM 或 Agent 有時候仍可能出錯。原因大致可分為兩類:模型本身的特性Prompt 設計不足
而這兩類再往下分的原因大概還有幾種:

  1. 模型的隨機性(Stochastic Nature)

    • LLM 在生成答案時,本質上是依照機率分佈來預測下一個詞,而不是絕對固定的輸出。
    • 即使給定相同的 Prompt,每次回覆可能略有差異。
  2. Prompt 不夠具體

    • 如果 Prompt 內容模糊,模型也可能誤解了你的意圖。
    • 例如:
      請回傳天氣
      
      → 模型可能隨意發揮,甚至忽略你想要的格式(如 JSON)。
  3. Agent 的行為不等同於工具輸出
    即使你的工具函式(如 Day 10、Day 11 的 add_numbersreverse_text)有固定的 return 格式,Agent 不一定會「原封不動」回傳結果。在 ADK(如 Google ADK)的流程中,LLM 會決定:

    • 是否呼叫工具
    • 工具結果是否直接使用
    • 或者自己改寫輸出

    因此,LLM 可能只抽取核心資訊(例如 8 或反轉後的字串)來回覆,而忽略完整句子。

  4. 上下文不足或資訊缺失

    • 任務太複雜或包含多個步驟,容易導致模型遺漏、順序錯亂或自由發揮。
  5. Instruction 沒有限制格式

    • 如果 Prompt 或 Agent 的 instruction 沒明確要求「必須完整回傳工具輸出的句子」,LLM 可能只給出最簡化的答案。這也是為什麼有時候你看到的回覆只是數字或字串,而不是完整訊息。

總結:Prompt 出錯不是 Bug,而是 LLM 的本質 + Prompt 設計不足的綜合作用。

Prompt 一定要用英文?

其實 Prompt 不一定非得用英文,中文也可以運作,但在實務上,很多人會建議以英文來寫,原因主要有這幾點:

  1. 訓練語料比例差異
    • 多數大型語言模型(LLM)訓練資料以英文為主。
    • 雖然模型支援多語,但英文的資料量、範例數和品質都遠高於其他語言。
    • 這代表用英文指令,模型理解的精準度和一致性會更高。
  2. 技術文件與範例多數是英文
    • API 文件、程式碼範例、研究論文,幾乎都用英文撰寫。
    • 如果你寫 Prompt 時也用英文,模型更容易和這些「知識脈絡」對齊,產生結果的正確性和一致性會更高。
  3. 避免語言歧義
    • 中文、日文等語言常有「同一個詞有多種意思」的情況。
    • 英文表達更容易具體化,降低模型「誤解指令」的風險。
  4. 多數最佳實踐與研究基於英文
    • 很多 Prompt 技巧最初都是針對英文測試。
    • 直接用英文,能最大化利用這些既有成果。

那中文 Prompt 完全不行嗎?

中文在 對話、內容生成、教學文案 等任務上表現其實不差,甚至更自然。但在 程式、結構化輸出、精準控制格式 的情境下,用英文通常更穩定。

結論:

  • 如果要 教模型做精確的事(例如 API、工具回傳格式、JSON 結構、代碼生成)→ 建議用英文。
  • 如果要 和使用者互動、寫文章、內容表達 → 中文一樣可以,甚至更貼近需求。

為什麼要分開成單獨一個檔案?

在 Google ADK 的專案結構中,我們通常會把 Prompt 放在 prompt.py(或多個檔案)。這麼做有幾個好處:

  1. 方便管理
    • 每個 Agent 的描述(description)與指令(instruction)集中存放,不會散落在程式碼各處。
  2. 更容易調整與版本控制
    • 只要修改 prompt.py,就能快速更新 Agent 行為,不需要動到主要程式。
  3. 可讀性更好
    • 程式碼部分專注於「邏輯與工具」;Prompt 部分專注於「語言與行為設定」。
  4. 利於協作
    • 開發者可以專注寫程式,PM / 策略人員可以專注設計 Prompt,互不干擾。

實務上,專案規模一大,Prompt 拆分檔案管理 幾乎是必須的。

Prompt 要怎麼寫最好?

1. 明確角色定位(Role Setting)

  • 指定模型身份,避免它自由發揮。
  • 角色設定會影響 AI 回答的風格與角度。

範例:

你是一個友善的天氣助理,負責根據地點與日期回覆天氣資訊。

2. 清楚定義任務(Task Instruction)

  • 告訴模型「要做什麼」,而不是模糊的「幫我處理」。
  • 明確任務讓 AI 知道輸出重點,減少偏離。

範例:

請回傳氣溫與天氣狀況

3. 提供上下文(Context)

  • 提供背景資訊,讓 AI 更懂你的需求,避免亂猜或偏題。

範例:

我正在寫一篇關於遠端工作的文章,目標讀者是剛接觸自由接案的新手。
請幫我列出 5 個遠端工作的常見挑戰,並給出解決建議。

4. 規範輸出格式(Output Format)

  • 規範輸出格式(Output Format)
  • 使用 JSON、Markdown、表格等結構化格式,方便閱讀或程式解析。
  • 統一輸出格式可以提升系統自動化與一致性。

範例:

請回傳 JSON 格式:
{
  "location": "",
  "date": "",
  "weather": "",
  "temperature": ""
}

5. 限制範圍(Constraint / Boundary)

  • 設定邊界,避免 AI 隨意發揮。
  • 可以指定語言、字數限制,或特定情況的回覆內容。

範例:

如果輸入缺少地點或日期,請回覆「請提供完整資訊」。
回答請使用繁體中文,每個要點不超過 30 字。

寫好 Prompt 的黃金公式

你可以用這個框架來設計 Prompt:

[角色] + [任務] + [上下文] + [格式要求] + [限制條件]

範例:

你是一位資深的產品經理。
請幫我分析一個新創 APP 的商業模式。
這個 APP 的功能是「幫使用者追蹤日常喝水量」。
請用表格格式輸出,欄位包含「收入來源」、「目標族群」、「潛在風險」。
回答請使用繁體中文。

這樣的 Prompt 能讓 AI 更清楚任務範圍、行為規則與輸出格式,結果也會更穩定。

額外小技巧

  • 先模擬對話:想像你請一個人幫忙,你會如何交代?照著那個邏輯寫 Prompt。
  • 逐步提示(Step-by-step Prompting):如果任務太大,拆成小步驟,逐步引導 AI 完成。
  • 提供範例(Few-shot Prompting):給模型正確輸入/輸出範例,讓它模仿學習。
  • 反覆測試與優化:好的 Prompt 很少一次就到位,通常需要多次調整。

上一篇
【Day 12】 認識 Prompt
下一篇
【Day 14】 Prompt 的深入探討與實作(下)
系列文
Multi-Agent 實戰:開發多代理智慧小幫手15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言