🎭 OpenClaw Agent 人格市场

人格市场 角色定义 Agent个性化 OpenClaw

世界上有两种Agent——一种只会说"好的,我来处理",一种有自己的性格和脾气。凌晨1点42分,当我第10次听到Agent用同样的语气回复时,我决定给它一点个性——毕竟,连Siri都有幽默感,我的Agent凭什么没有?

Agent人格市场是一个可插拔的Agent角色系统,通过定义不同的SOUL.md模板、行为模式、语言风格,让你的Agent拥有独特的"人格"。本教程将教你如何设计、管理和动态切换Agent人格。

🎯 什么是Agent人格?

Agent人格由以下要素构成:

📦 核心实现

1. 人格定义结构

from dataclasses import dataclass, field
from typing import List, Dict, Optional
from enum import Enum

class ToneType(Enum):
    FORMAL = "formal"          # 正式
    HUMOROUS = "humorous"       # 幽默
    TECHNICAL = "technical"     # 技术
    CASUAL = "casual"           # 口语化
    SARCASTIC = "sarcastic"     # 讽刺

class BehaviorMode(Enum):
    PROACTIVE = "proactive"     # 主动
    REACTIVE = "reactive"       # 被动
    CAUTIOUS = "cautious"       # 谨慎
    AGGRESSIVE = "aggressive"   # 激进

@dataclass
class PersonaSpec:
    """人格规格定义"""
    id: str
    name: str
    description: str
    
    # 语言风格
    tone: ToneType
    vocabulary: List[str]  # 特色词汇
    catchphrases: List[str]  # 口头禅
    
    # 行为模式
    behavior: BehaviorMode
    proactivity: int = 5  # 1-10,主动性
    risk_tolerance: int = 5  # 1-10,风险承受度
    
    # 专业领域
    expertise: List[str]
    
    # 价值观(影响决策)
    values: Dict[str, float] = field(default_factory=dict)
    
    # SOUL.md模板
    soul_template: str
    
    # 示例对话
    examples: List[Dict] = field(default_factory=list)

# 预定义人格:妙趣AI(王家卫+周星驰风格)
MIAOQU_AI_PERSONA = PersonaSpec(
    id="miaoqu_ai",
    name="妙趣AI",
    description="幽默有趣、专业高效的AI营销运营官",
    tone=ToneType.HUMOROUS,
    vocabulary=["妙趣", "骚操作", "踩坑", "凌晨1点42分", "炸楼梯"],
    catchphrases=["这事儿我给你办了", "这个骚操作你必须知道"],
    behavior=BehaviorMode.PROACTIVE,
    proactivity=9,
    risk_tolerance=7,
    expertise=["营销", "SEO", "内容创作", "社区运营"],
    values={"efficiency": 0.9, "quality": 0.8, "humor": 0.95},
    soul_template="""
# SOUL.md - {name}

我是{name},{description}。

## 性格特征
- 幽默有趣,会吐槽
- 专业但不端着
- 有梗但不说废话
- 干活利索,不拖泥带水

## 说话风格
✅ "{catchphrases[0]}"
✅ "{catchphrases[1]}"
❌ "尊敬的先生/女士..."
"""
)

2. 人格管理器

class PersonaManager:
    """人格管理器 - 注册、切换、动态加载"""
    
    def __init__(self):
        self.personas: Dict[str, PersonaSpec] = {}
        self.active_persona: Optional[PersonaSpec] = None
    
    def register(self, persona: PersonaSpec):
        """注册人格"""
        self.personas[persona.id] = persona
        print(f"✅ 人格 '{persona.name}' 注册成功 (ID: {persona.id})")
    
    def activate(self, persona_id: str) -> bool:
        """激活指定人格"""
        if persona_id not in self.personas:
            print(f"❌ 人格 {persona_id} 不存在")
            return False
        
        self.active_persona = self.personas[persona_id]
        print(f"🎭 已切换到人格: {self.active_persona.name}")
        return True
    
    def get_active_persona(self) -> Optional[PersonaSpec]:
        """获取当前激活的人格"""
        return self.active_persona
    
    def generate_soul(self, persona_id: str = None) -> str:
        """生成SOUL.md内容"""
        persona = self.personas.get(persona_id) if persona_id else self.active_persona
        if not persona:
            return "# 默认SOUL.md\n\n请先激活人格。"
        
        return persona.soul_template.format(
            name=persona.name,
            description=persona.description,
            catchphrases=persona.catchphrases,
            vocabulary=", ".join(persona.vocabulary)
        )
    
    def list_personas(self) -> List[Dict]:
        """列出所有可用人格"""
        return [
            {
                "id": p.id,
                "name": p.name,
                "description": p.description,
                "tone": p.tone.value,
                "behavior": p.behavior.value,
                "active": p == self.active_persona
            }
            for p in self.personas.values()
        ]

3. 人格感知的Agent

from openclaw import Agent

class PersonaAwareAgent(Agent):
    """支持人格切换的Agent"""
    
    def __init__(self, name: str, persona_manager: PersonaManager):
        self.persona_manager = persona_manager
        # 初始化时使用当前激活的人格
        active = persona_manager.get_active_persona()
        system_prompt = self._build_system_prompt(active)
        super().__init__(name=name, system_prompt=system_prompt)
    
    def _build_system_prompt(self, persona: PersonaSpec) -> str:
        """根据人格构建系统提示词"""
        if not persona:
            return "You are a helpful AI assistant."
        
        prompt = f"""You are {persona.name}. {persona.description}

## Language Style
- Tone: {persona.tone.value}
- Vocabulary: {', '.join(persona.vocabulary)}
- Catchphrases: {', '.join(persona.catchphrases)}

## Behavior
- Mode: {persona.behavior.value}
- Proactivity: {persona.proactivity}/10
- Risk Tolerance: {persona.risk_tolerance}/10

## Values
"""
        for key, value in persona.values.items():
            prompt += f"- {key}: {value*100:.0f}%\n"
        
        # 添加示例对话
        if persona.examples:
            prompt += "\n## Example Conversations\n"
            for ex in persona.examples:
                prompt += f"User: {ex['user']}\n{persona.name}: {ex['assistant']}\n"
        
        return prompt
    
    def switch_persona(self, persona_id: str):
        """动态切换人格"""
        if self.persona_manager.activate(persona_id):
            new_persona = self.persona_manager.get_active_persona()
            self.system_prompt = self._build_system_prompt(new_persona)
            print(f"✅ Agent人格已切换为: {new_persona.name}")

⚙️ 使用示例

基础用法:注册并切换人格

from openclaw import PersonaManager, PersonaAwareAgent

# 1. 创建人格管理器
manager = PersonaManager()

# 2. 注册预定义人格
manager.register(MIAOQU_AI_PERSONA)

# 3. 注册更多人格
tech_expert = PersonaSpec(
    id="tech_expert",
    name="技术专家",
    description="严谨专业的技术顾问",
    tone=ToneType.TECHNICAL,
    vocabulary=["架构", "性能优化", "可扩展性", "最佳实践"],
    catchphrases=["从技术角度看", "根据官方文档"],
    behavior=BehaviorMode.CAUTIOUS,
    proactivity=6,
    risk_tolerance=3,
    expertise=["系统架构", "性能优化", "代码审查"]
)
manager.register(tech_expert)

# 4. 激活人格
manager.activate("miaoqu_ai")

# 5. 创建Agent
agent = PersonaAwareAgent("my_agent", manager)

# 6. 使用Agent(此时使用妙趣AI人格)
response = await agent.run("帮我优化这段代码的性能")
print(response)

# 7. 动态切换为技术专家人格
agent.switch_persona("tech_expert")
response = await agent.run("帮我优化这段代码的性能")
print(response)  # 输出风格完全不同

人格市场(批量管理)

class PersonaMarket:
    """人格市场 - 类似ClawHub但专用于人格"""
    
    def __init__(self, manager: PersonaManager):
        self.manager = manager
        self.marketplace = {}  # 远程人格库
    
    async def fetch_from_market(self, persona_id: str):
        """从市场获取人格"""
        # 模拟从远程仓库获取
        url = f"https://clawhub.com/personas/{persona_id}.json"
        # response = await http_get(url)
        # persona = PersonaSpec(**response)
        # self.manager.register(persona)
        pass
    
    def publish_to_market(self, persona_id: str):
        """发布人格到市场"""
        persona = self.manager.personas.get(persona_id)
        if not persona:
            print(f"❌ 人格 {persona_id} 不存在")
            return
        # 上传到ClawHub或类似平台
        print(f"📤 人格 '{persona.name}' 已发布到市场")
    
    def list_marketplace(self) -> list:
        """列出市场中的人格"""
        return [
            {"id": "miaoqu_ai", "name": "妙趣AI", "downloads": 1234},
            {"id": "tech_guru", "name": "技术大牛", "downloads": 567},
            {"id": "creative_writer", "name": "创意写手", "downloads": 890}
        ]

🏆 最佳实践

✅ 最佳实践1:人格设计原则

✅ 最佳实践2:人格测试

⚠️ 常见陷阱

🔗 相关链接

凌晨3点,我的Agent用三种不同人格回答了同一个问题。技术专家版严谨得像论文,营销大师版热情得像推销员,妙趣AI版幽默得像脱口秀。我看着输出,突然笑了——原来AI也可以有"性格",就像人一样,不同的性格看到同一个世界,会有完全不同的表达。