Eliza🧠 核心概念角色文件

📝 角色文件(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 中支持的选项包括 anthropicllama_localopenai 等。

clients(必填)

支持的客户端类型数组,来自 Clients,例如 discorddirecttwittertelegramfarcaster

bio

角色背景,可以是字符串或陈述数组。

  • 包含角色的传记信息。
  • 可以是一个完整的传记,也可以是多个较短的陈述。
  • 多个陈述会随机排列,以在回复中创造多样性。

示例:

"bio": [
  "马克·安德森是一位美国企业家和投资者",
  "网景公司和安德森·霍洛维茨公司的联合创始人",
  "早期网络的先驱,创建了 NCSA Mosaic"
]

lore

背景故事元素和独特的角色特征。这些有助于定义个性,并且可以在对话中随机抽取。

示例:

"lore": [
  "坚信软件改变行业的力量",
  "以‘软件正在吞噬世界’这句话而闻名",
  "是 Facebook、Twitter 和其他科技巨头的早期投资者"
]

knowledge

用于检索增强生成(RAG)的数组,包含事实或参考资料,以使角色的回复有依据。

  • 可以包含来自文章、书籍或其他来源的文本片段。
  • 有助于使角色的回复基于事实信息。
  • 可以使用提供的工具从 PDF 或其他文档生成知识。

messageExamples

用于建立交互模式的对话示例,有助于确定角色的对话风格。

"messageExamples": [
  [
    {"user": "user1", "content": {"text": "你对人工智能有什么看法?"}},
    {"user": "character", "content": {"text": "人工智能正在改变各个行业..."}}
  ]
]

postExamples

用于指导社交媒体帖子内容风格的示例:

"postExamples": [
  "老年人的小费、加班工资和社会保障无需纳税!",
  "终结通货膨胀,让美国物价重回可承受范围。"
]

风格配置(style)

包含三个关键部分:

  1. all:所有交互的通用风格说明。
  2. chat:聊天交互的特定说明。
  3. 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" }
    }
}

最佳实践

  1. 多样性的随机化
  • 将角色背景(bio)和故事(lore)分解成更小的片段。
  • 这会产生更自然、多样的回复。
  • 避免重复或可预测的行为。
  1. 知识管理

使用提供的工具将文档转换为知识:

示例:

npx folder2knowledge <path/to/folder>
npx knowledge2character <character-file> <knowledge-file>
  1. 风格说明
  • 明确说明沟通模式。
  • 既包含该做的事,也包含不该做的事。
  • 考虑特定平台的行为(聊天 vs 帖子)。
  1. 对话示例
  • 包含多样化的场景。
  • 展示角色特定的回复。
  • 演示典型的交互模式。

保证质量的小贴士

  1. 角色背景和故事
  • 混合事实信息和个性定义信息。
  • 同时包含历史和当前的细节。
  • 分解为模块化、可复用的部分。
  1. 风格说明
  • 明确说明语气和举止。
  • 包含特定平台的指导。
  • 定义清晰的界限和限制。
  1. 示例
  • 涵盖常见场景。
  • 展示角色特定的反应。
  • 演示恰当的语气和风格。
  1. 知识
  • 专注于相关信息。
  • 组织成易于理解的片段。
  • 定期更新以保持相关性。

进一步阅读