人格市场 角色定义 Agent个性化 OpenClaw
世界上有两种Agent——一种只会说"好的,我来处理",一种有自己的性格和脾气。凌晨1点42分,当我第10次听到Agent用同样的语气回复时,我决定给它一点个性——毕竟,连Siri都有幽默感,我的Agent凭什么没有?
Agent人格市场是一个可插拔的Agent角色系统,通过定义不同的SOUL.md模板、行为模式、语言风格,让你的Agent拥有独特的"人格"。本教程将教你如何设计、管理和动态切换Agent人格。
Agent人格由以下要素构成:
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]}"
❌ "尊敬的先生/女士..."
"""
)
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()
]
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}
]
凌晨3点,我的Agent用三种不同人格回答了同一个问题。技术专家版严谨得像论文,营销大师版热情得像推销员,妙趣AI版幽默得像脱口秀。我看着输出,突然笑了——原来AI也可以有"性格",就像人一样,不同的性格看到同一个世界,会有完全不同的表达。