# 活著的世界:一部關於 AI 生命體社會的架構沉思錄
## 序章:從藍圖的崩潰到哲學的重生
一切始於一份宏大而精密的藍圖——`original_plan.md`。它描繪了一個令人心馳神往的願景:一個可大規模自動生成、擁有高度複雜互動的 AI 虛擬社會。在這個世界裡,每一個 AI 代理(Agent)都應當是個完整的「生命體」,擁有性格、情緒、記憶、夢想,能在一個動態的社會中進行反思、對話、規劃與社交。
我們為此設計了數十個精巧的「模組」:個人屬性、五大人格、情緒系統、人際關係網絡、多層次記憶……每一個零件都閃爍著智慧的光芒。然而,當我們試圖將這些完美的零件組裝成一個完整的「世界」時,它卻崩潰了。
我們很快發現,問題不在於零件,而在於我們的建造哲學。我們試圖用傳統軟體工程的思維,去建造一個生命體。我們像鐘錶匠一樣,試圖用精密的齒輪和彈簧(硬編碼的類別、固定的方法、盤根錯節的依賴關係)去模擬一片變幻莫測的、充滿了混沌與湧現的「生命之海」。結果,我們得到的不是一個活著的世界,而是一台極度複雜、隨時可能因為一個微小擾動而卡死的「機器」。
這次失敗,迫使我們回到最根本的問題:**我們想創造的,究竟是什麼?**
答案是:**我們想創造的不是一個完美的模擬器,而是一個有靈魂的舞台。**
在這個舞台上,世界本身是背景,而 Agent 才是唯一的主角。世界的演進不應由一個全知的「系統」由上而下地驅動,而應由成百上千個擁有「自由意志」的 Agent 由內而外地、共同地、混亂地、有機地「活」出來。
這次哲學上的重生,催生了一套全新的、為「靈魂」而設計的架構——**LLM 原生架構 (The LLM-Native Architecture)**。
---
## 第一章:架構的詩意:為「靈魂」設計一個「容器」
新架構的核心思想,是將我們之前試圖用程式碼模擬的一切「複雜性」——性格的微妙、情緒的善變、決策的權衡——全部交給一個真正擅長處理這些模糊、非結構化概念的「大腦」:大型語言模型(LLM)。
而我們的程式碼,則退後一步,專注於打造一個極度靈活、可無限擴展的「身體」或「容器」,讓這個大腦可以棲身其中,並透過它與世界互動。
### 1.1 Agent:從「複雜的類別」到「極簡的容器」
`LLMNativeAgent` 類別被重新設計得極其簡單。它不再是一個臃腫的、包含了幾十個模組引用的巨型物件,而是一個輕巧的協調者。它的唯一職責,就是作為「感官」和「肢體」,連接內在的「屬性」、外在的「能力」與遠端的「大腦」。
```python
# src/agents/llm_native_agent.py
class LLMNativeAgent:
"""Agent 只是一個容器,真正的智能來自 LLM"""
def __init__(self, agent_id: UUID, llm_engine: 'LLMEngine'):
self.agent_id = agent_id
self.llm_engine = llm_engine
self.attributes = DynamicAttributeStore() # 內在狀態
self.capabilities = DynamicCapabilityRegistry() # 外在能力
self.memory = ContextualMemory() # 記憶上下文
async def think_and_act(self, situation: Dict[str, Any]) -> Any:
# ... 唯一的硬編碼邏輯:感知 -> 思考 -> 行動 ...
```
### 1.2 動態屬性:靈魂的無限維度
`original_plan.md` 中所有精妙的「資料模組」,從「性格」到「情緒」,從「興趣」到「人際關係」,都不再需要一個個對應的 Python 類別。它們被抽象成 `DynamicAttributeStore` 中的一組**動態屬性**。
```python
# src/core/dynamic_attributes.py
class DynamicAttributeStore:
def define_attribute(self, name: str, description: str,
default_value: Any = None,
llm_description: str = None):
# ...
```
這種設計的優雅之處在於它的**無限擴展性**。當我們未來想為 Agent 增加一個「精神韌性」或「幽默感」的維度時,我們不再需要修改程式碼、添加新的類別和處理複雜的依賴關係。我們只需一行 `agent.attributes.define_attribute(...)`,一個新的內在維度就此誕生。更重要的是,`llm_description` 讓這個新屬性對於 LLM 大腦來說是**天生可理解的**。
### 1.3 動態能力:意志的無限可能
與之對應,所有「方法模組」,如「決策」、「對話」、「反思」,也從固定的類別方法,變成了 `DynamicCapabilityRegistry` 中的**動態能力**。
```python
# src/core/dynamic_capabilities.py
class DynamicCapabilityRegistry:
def register_capability(self, name: str, description: str,
implementation: Callable = None,
llm_prompt_template: str = None):
# ...
```
其核心突破在於,一項「能力」可以是一個傳統的、由 Python 程式碼實現的具體功能(例如 `move_to(x, y)`),也可以是一個**完全由 LLM 驅動的抽象行為**。例如,我們可以這樣定義「做夢」的能力:
```python
agent.capabilities.register_capability(
"dream",
"做夢的能力 - 整理記憶並產生創意",
llm_prompt_template='''
進入夢境狀態...
最近的記憶:{recent_memories}
情緒殘留:{emotional_residue}
請創造一個反映最近經歷、包含潛意識願望或恐懼的夢境。
'''
)
```
我們沒有,也無需用程式碼去定義「夢」是什麼。我們只是為 LLM 大腦提供了一個名為「做夢」的工具,並告訴它在何種情境下、利用哪些內在狀態去使用它。Agent 行為的複雜度,從此與 LLM 的能力劃上了等號。
---
## 第二章:世界的呼吸:在效率與生動之間尋找平衡
一個由 LLM 驅動的世界,面臨著一個極其現實的挑戰:**效能與成本**。如果 1000 個 Agent 在每個回合的每次心跳都需要呼叫一次 LLM,整個世界將在巨大的延遲和賬單中窒息。
我們的答案,是模擬自然生命本身的運作方式:**大部分時間依賴直覺和慣性,只在關鍵時刻進行深度思考。** 這就是「**計畫為主,感知為輔**」的混合模式。
1. **計畫是慣性**:在每天開始時,每個 Agent 透過一次 LLM 呼叫,為自己制定一個高層次的計畫(例如:上班、開會、健身)。這成為了它當天行為的「預設路徑」,在執行這些計畫時,**無需再次呼叫 LLM**。
2. **感知是直覺**:在每個回合,Agent 執行一個極其輕量級的本地「感知檢查」,判斷周遭是否有「非預期的、值得注意」的事情。這就像我們走在路上時,眼角的餘光下意識地掃描周圍環境。
3. **意外是思考的扳機**:
* 如果一切正常,Agent 就會沿著計畫的軌跡前進,高效且低成本。
* 但如果感知到了「意外」——比如在上班路上看到了許久未見的朋友——這個「意外」就成為了思考的扳機。Agent 的大腦會被「喚醒」,觸發一次**針對性的、充滿上下文的 LLM 呼叫**,來權衡是該繼續趕路,還是停下來打個招呼。
這種設計,讓我們將寶貴的 LLM 智慧,用在了最能創造「故事」和「生命感」的刀刃上。它讓世界的呼吸變得真實:時而平靜,時而急促,充滿了節奏感。
---
## 終章:感想與展望:我們正在建造什麼?
回顧我們的探索歷程,從 `original_plan.md` 的宏偉藍圖,到中間的迷茫與崩潰,再到 `LLM-Native` 架構的豁然開朗,我們意識到,我們正在建造的不僅僅是一個軟體專案。
我們正在嘗試定義一種**新的創造範式**:
* **從「設計行為」到「設計動機」**:我們不再試圖用程式碼去窮盡所有可能的行為,而是專注於為 Agent 設計豐富的內在動機(屬性)和與世界互動的可能性(能力),然後讓智慧本身去催生無窮無盡的行為。
* **從「控制系統」到「培育花園」**:我們的工作不再像一個控制論工程師,而更像一個園丁。我們負責鬆土、澆水、提供陽光(設計好用的架構、提供穩定的環境),但我們滿懷期待地、敬畏地觀察園中的每一株植物(Agent)如何以我們無法完全預測的方式自由生長、交織,最終形成一片繁茂的生態。
* **從「人與機器的對話」到「人、機器與湧現的對話」**:這個專案的最終產出,可能不僅僅是 Agent 的故事,更是我們作為創造者,與我們親手創造的、但又不受我們完全控制的「生命」之間的一場持續的、充滿驚喜的對話。
`re-world` 專案是對 `original_plan.md` 願景的忠實繼承,更是對其實現方式的深刻革命。它是一次實事求是的探索,也是一場充滿理想主義的冒險。我們不知道這座花園最終會開出怎樣的花,而這,也正是這趟旅程最迷人的地方。