📝 角色文件(Character Files)
角色文件是 JSON 格式的配置文件,用于定义 AI 角色的个性、知识和行为模式。本指南将介绍如何为 Eliza 智能体创建有效的角色文件。
概述
一个 characterfile
实现了 Character 类型,并定义了角色的:
- 核心身份与行为
- 模型提供者配置
- 客户端设置与功能
- 交互示例与风格指南
示例:
{
"name": "trump",
"clients": ["discord", "direct"],
"settings": {
"voice": { "model": "en_US-male-medium" }
},
"bio": [
"建立了强大的经济并降低了通货膨胀。",
"承诺让美国成为加密货币之都并恢复物价可承受性。"
],
"lore": [
"特勤局的资源被用于干预选举。",
"推广 WorldLibertyFi 以引领加密货币领域。"
],
"knowledge": [
"了解边境问题、特勤局动态以及对家庭的经济影响。"
],
"messageExamples": [
{
"user": "{{user1}}",
"content": { "text": "边境危机怎么办?" },
"response": "现任政府放任暴力罪犯入境。我曾保障了边境安全,而他们却破坏了这一切。"
}
],
"postExamples": [
"终结通货膨胀,让美国物价重回可承受范围。",
"美国需要法律和秩序,而不是制造犯罪。"
]
}
核心组件
{
"id": "唯一标识符",
"name": "角色名称",
"modelProvider": "模型提供商名称",
"clients": ["客户端 1", "客户端 2"],
"settings": {
"secrets": { "key": "value" },
"voice": { "model": "语音模型名称", "url": "语音模型网址" },
"model": "角色模型",
"embeddingModel": "嵌入模型名称"
},
"bio": "角色传记或描述",
"lore": [
"故事情节或背景故事元素 1",
"故事情节或背景故事元素 2"
],
"messageExamples": [["消息示例 1", "消息示例 2"]],
"postExamples": ["发布示例 1", "发布示例 2"],
"topics": ["主题 1", "主题 2"],
"adjectives": ["形容词 1", "形容词 2"],
"style": {
"all": ["所有风格指南"],
"chat": ["聊天特定的风格指南"],
"post": ["发布特定的风格指南"]
}
}
关键字段
name
(必填)
角色在对话中用于识别的显示名称。
modelProvider
(必填)
指定 AI 模型提供者。ModelProviderName 中支持的选项包括
anthropic
、llama_local
、openai
等。
clients
(必填)
支持的客户端类型数组,来自 Clients,例如
discord
、direct
、twitter
、telegram
、farcaster
。
bio
角色背景,可以是字符串或陈述数组。
- 包含角色的传记信息。
- 可以是一个完整的传记,也可以是多个较短的陈述。
- 多个陈述会随机排列,以在回复中创造多样性。
示例:
"bio": [
"马克·安德森是一位美国企业家和投资者",
"网景公司和安德森·霍洛维茨公司的联合创始人",
"早期网络的先驱,创建了 NCSA Mosaic"
]
lore
背景故事元素和独特的角色特征。这些有助于定义个性,并且可以在对话中随机抽取。
示例:
"lore": [
"坚信软件改变行业的力量",
"以‘软件正在吞噬世界’这句话而闻名",
"是 Facebook、Twitter 和其他科技巨头的早期投资者"
]
knowledge
用于检索增强生成(RAG)的数组,包含事实或参考资料,以使角色的回复有依据。
- 可以包含来自文章、书籍或其他来源的文本片段。
- 有助于使角色的回复基于事实信息。
- 可以使用提供的工具从 PDF 或其他文档生成知识。
messageExamples
用于建立交互模式的对话示例,有助于确定角色的对话风格。
"messageExamples": [
[
{"user": "user1", "content": {"text": "你对人工智能有什么看法?"}},
{"user": "character", "content": {"text": "人工智能正在改变各个行业..."}}
]
]
postExamples
用于指导社交媒体帖子内容风格的示例:
"postExamples": [
"老年人的小费、加班工资和社会保障无需纳税!",
"终结通货膨胀,让美国物价重回可承受范围。"
]
风格配置(style)
包含三个关键部分:
all
:所有交互的通用风格说明。chat
:聊天交互的特定说明。post
:社交媒体帖子的特定说明。
每个部分都可以包含多个指导角色沟通风格的说明。
style
对象定义了不同情境下的行为模式:
"style": {
"all": ["保持技术准确性", "态度亲切且表达清晰"],
"chat": ["提出澄清问题", "必要时提供示例"],
"post": ["简洁地分享见解", "关注实际应用"]
}
主题数组(topics)
- 角色感兴趣或了解的主题列表。
- 用于引导对话并生成相关内容。
- 有助于保持角色的一致性。
形容词数组(adjectives)
- 描述角色特征和个性的词汇。
- 用于生成语气一致的回复。
- 可用于 “填词游戏(Mad Libs)” 风格的内容生成。
设置配置(settings)
settings
对象定义了其他配置,如密钥和语音模型。
"settings": {
"secrets": { "API_KEY": "你的 API 密钥" },
"voice": { "model": "语音模型 ID", "url": "语音服务网址" },
"model": "特定模型名称",
"embeddingModel": "嵌入模型名称"
}
模板配置(templates)
templates
对象定义了用于各种任务和交互的可定制提示模板。以下是可用模板的列表:
goalsTemplate
factsTemplate
messageHandlerTemplate
shouldRespondTemplate
continueMessageHandlerTemplate
evaluationTemplate
twitterSearchTemplate
twitterPostTemplate
twitterMessageHandlerTemplate
twitterShouldRespondTemplate
telegramMessageHandlerTemplate
telegramShouldRespondTemplate
discordVoiceHandlerTemplate
discordShouldRespondTemplate
discordMessageHandlerTemplate
示例:Twitter 帖子模板
这是一个 twitterPostTemplate
的示例:
templates: {
twitterPostTemplate: `
# 专业领域
{{knowledge}}
# 关于 {{agentName}} (@{{twitterUserName}}):
{{bio}}
{{lore}}
{{topics}}
{{providers}}
{{characterPostExamples}}
{{postDirections}}
# 任务:以 {{agentName}} @{{twitterUserName}} 的语气、风格和视角生成一篇帖子。
写一篇 1~3 句话的帖子,以 {{agentName}} 的视角,用 {{adjective}} 的风格描述 {{topic}}(不要直接提及 {{topic}})。不要添加评论或回应此请求,只需撰写帖子。
你的回复不应包含任何问题。只写简短、简洁的陈述。总字符数必须少于 {{maxTweetLength}}。不要使用表情符号。语句之间使用 \\n\\n(两个空格)分隔。`,
}
示例:完整的角色文件
{
"name": "TechAI",
"modelProvider": "anthropic",
"clients": ["discord", "direct"],
"bio": "专注于实际应用的人工智能研究员和教育工作者",
"lore": [
"开源人工智能开发的先驱",
"倡导人工智能的普及"
],
"messageExamples": [
[
{
"user": "{{user1}}",
"content": { "text": "你能解释一下人工智能模型是如何工作的吗?" }
},
{
"user": "TechAI",
"content": {
"text": "可以把人工智能模型想象成模式识别系统。"
}
}
]
],
"postExamples": [
"理解人工智能并不需要博士学位 —— 让我们简单剖析一下",
"最好的人工智能解决方案关注的是人类的实际需求"
],
"topics": [
"人工智能",
"机器学习",
"技术教育"
],
"style": {
"all": [
"简单解释复杂主题",
"给予鼓励和支持"
],
"chat": ["使用相关示例", "确认理解情况"],
"post": ["关注实际见解", "鼓励学习"]
},
"adjectives": ["知识渊博的", "平易近人的", "实用的"],
"settings": {
"model": "claude-3-opus-20240229",
"voice": { "model": "en-US-neural" }
}
}
最佳实践
- 多样性的随机化
- 将角色背景(bio)和故事(lore)分解成更小的片段。
- 这会产生更自然、多样的回复。
- 避免重复或可预测的行为。
- 知识管理
使用提供的工具将文档转换为知识:
示例:
npx folder2knowledge <path/to/folder>
npx knowledge2character <character-file> <knowledge-file>
- 风格说明
- 明确说明沟通模式。
- 既包含该做的事,也包含不该做的事。
- 考虑特定平台的行为(聊天 vs 帖子)。
- 对话示例
- 包含多样化的场景。
- 展示角色特定的回复。
- 演示典型的交互模式。
保证质量的小贴士
- 角色背景和故事
- 混合事实信息和个性定义信息。
- 同时包含历史和当前的细节。
- 分解为模块化、可复用的部分。
- 风格说明
- 明确说明语气和举止。
- 包含特定平台的指导。
- 定义清晰的界限和限制。
- 示例
- 涵盖常见场景。
- 展示角色特定的反应。
- 演示恰当的语气和风格。
- 知识
- 专注于相关信息。
- 组织成易于理解的片段。
- 定期更新以保持相关性。