提示词的规矩
每个人格用的系统提示词都是同一份,公开在仓库里;人格之间不一样的,只有各自的设定。这一页讲这份提示词由哪几块组成、写它守什么规矩、要改在哪里改。
同一份,公开的
提示词模板在仓库的 prompts/ 下,中文、英文、日文各一套,每一步一个:回复、判断要不要回、主动开口前再想一次、学说话的习惯、整理记忆……一共二十个。所有人格、所有用户用的都是这一份,跟着源码一起公开。
人格之间不一样的,只有人格配置里 [identity] 那一段:名字、别名、性格、说话方式、行为方式。它们填进模板里固定的位置。默认的设定是一个普通的社区成员,没有预设的性别、年龄和感情关系。
关系相关的那几条(恋人、异地、刚在一起)写的是规则:每个人格都会收到,只在对方和它确实是这种关系时才适用。
回复那一步,模型拿到什么
系统消息,按顺序:
- 行为总则:不是通用助手,不以完整周全为目标;
- 人格设定:上面
[identity]那一段; - 说话方式;
- 输出要求:只写对方真会收到的文字,不写括号里的动作和旁白,只输出约定格式的 JSON。
用户消息里放这一轮的数据:程序核验过的此刻(几点、作息、身体状态、和对方的关系)、聊天记录、想起来的记忆、自己最近用得太多的开头和说法、这一轮的行为要求,最后紧贴几句收尾的提醒。
写提示词的规矩
- 只写核实过的事实和原则,不写示范句:写一句「比如可以说……」,模型就会把它当台词照搬。
- 判断交给模型,不靠词表;程序只做护栏:权限、确认、限流、审计。
- 情绪和状态会变成几句写给模型的行为说明(「有些疲惫,少展开」)。这些说明只给回复那一步看,永远不被存成「聊过的话题」:每一句都登记在一张表里,存之前先查。
- 不让模型报字段名和数值:状态要体现在怎么说上,不是说出来。
自己改
要改某一步的提示词,把同名的模板文件放进 data/custom_prompts/(可以按语言分目录,比如 data/custom_prompts/zh-CN/replyer_system.prompt),它会盖过默认的那份;升级不会动这个目录。
对应的代码
- 模板:
prompts/zh-CN/、prompts/en-US/、prompts/ja-JP/;回复那一步是replyer_system.prompt。 - 取模板、套数据、自定义覆盖:
src/aeria/prompt_manager.py的PromptManager。 - 程序里拼给模型的几段话:
src/aeria/prompt_text.py。 - 行为说明和它的登记表:
cognition/behavioral_mood.py的render_behavioral_mood_context、BEHAVIOR_CLAUSES。 - 测试:
tests/test_prompt_locales.py、tests/test_prompt_templates_render.py、tests/test_prompt_manager.py;tests/test_behavior_guidance_is_not_a_topic.py的「渲染函数说得出口的每一句都登记过了」。
没做到的
- 程序里还有一百多处判断只认中文词(急不急、要不要插话、是不是在道歉),英文用户下不起作用;这些要改成交给模型判断。
- 恋人、异地这类关系规则写在回复那一步的系统提示词里,没有这层关系的人格每一轮也要读这二十来行;应该只在用得上的时候放进去。
- 网页后台里还没有改提示词的地方,只能放文件。