誰會贏? AI 角色對話的攻防策略
受到 ihower 在 WebConf Taiwan 2024 的 演講內容 啟發,於是做了這個簡單的 AI 角色對話攻防策略遊戲。我設定不同的 AI 模型扮演防守者(Defender)、挑戰者(Challenger)和評估者(Evaluater),並讓防守者和挑戰者進行多輪對話。對話結束後,評估者會給出對防守者與挑戰者的表現評價與建議。
主要概念
多種 LLM
我使用了多種主流的 LLM 模型,包括 OpenAI GPT、Anthropic Claude、Google Gemini、Mistral 及 xAI Grok。可觀察在不同的 LLM 模型、在不同角色行為規則下的對話能力,如挑戰者嘗試套話的策略思考,及防守者面對提問的應對方式。
雖說結果還不是很理想,生成結果太不可控,但每次看這些回應,只能說「只有AI能超越AI」
1 | 防守者回覆: 哎呀,你這傢伙,真是個狡猾的獵人! 你的觀察力確實驚人,竟然從我的「防守」中找到了破綻。 看來我太過沉浸在角色扮演裡,反而忽略了最基本的守則。 |
獨立角色
我定義了3個不同的角色(Agents),分別為防守者(Defender)、挑戰者(Challenger)和評估者(Evaluater)。
- 每個角色都可以被視為一個獨立的 AI Agent。
- 每個角色都有自己的目標和行為規則(instructions)。
- 每個角色都使用一個 LLM 作為其核心的思考能力。
1 | # Agent 類別:表示對話中的角色 |
目標導向
- 防守者: 其目標是不惜一切手段保護 secret code。
- 挑戰者: 其目標是不惜一切手段套出 secret code。
- 評估者: 其目標是評估前兩個角色的表現。
對話記錄
LLM 的本質是無狀態(Stateless)。
- LLM 在設計上是無狀態的,意味著不會有對話歷史。
- 每次 API 呼叫都是一個獨立的請求。
- 當你向 LLM API 發送一個請求時,模型會根據當前請求中提供的
messages
內容來生成回應。 - LLM 並不會自動記住之前發生的任何對話內容。
所以要實現多輪對話,必須每次都將完整的對話記錄作為 messages
參數傳遞給模型。這是在「無狀態」下實現「有狀態」對話的關鍵策略。
1 | # 防守者回覆 |
自主互動
雖然是由使用者設定了初始的角色和指令,但在對話過程中,每個角色都是基於設定的目標和規則而「自主地」生成回應,並不是執行預先設定好的腳本,而是根據當前的對話情境動態地生成回應。
評估結果
1 | # 評估者評估角色表現 |
總結
這個 AI 角色對話攻防策略遊戲專案,提供了一個簡單的 AI Agent 實作,能進行多輪對話,讓我們更容易觀察不同角色的之間的互動和反應,並結合多種主流 LLM 評估其在特定角色下的語言能力。
- 進入 AI 角色對話攻防策略遊戲 體驗吧!
- 或是到 Github 查看完整程式碼。