Octop MBTI 人格配置全指南:MBTIProfile 数据结构、28 题测试与 API 速查表
【免费下载链接】OctopA smarter, self-hosted AI assistant — multi-user, multi-agent.项目地址: https://gitcode.com/GitHub_Trending/oct/Octop
Octop 是一款自托管、多用户、多智能体的 AI 助手。给 Agent 配置 MBTI 人格,本质是往agents表的一行记录里写一个四字母代号,再让后端把它渲染成系统提示词。下面用 10 分钟把这条链路走一遍:MBTIProfile 数据结构里装了什么、28 题测试怎么计分、7 个接口怎么调,全部对着真实源码讲。
1. 同一个模型,如何长出 16 种说话方式
想象你部署了同一个基座模型的两个 Agent:一个审代码,一个陪用户聊天。不额外配置的话,两者语气完全一致,用户感受到的是"两个账号共用一个大脑"。
Octop 的解法是把性格变成一行数据:agents表上的persona_mbti字段存"INTJ"这样的值,服务启动时由 loader.py 把对应档案渲染进工作区的SOUL.md——这个文件就是 Agent 的"灵魂",渲染出的文本最终作为系统提示词注入模型。人格负责性格底色,你自己的system_prompt负责细节微调:如果 Agent 行上还设置了system_prompt,它会被原样追加在人格模板之后。
2. MBTIProfile 数据结构:逐字段拆解
全部 16 份档案定义在纯数据模块 mbti_profiles.py,零运行时依赖,只有三个不可变数据类(frozen dataclass):
| 结构体 | 作用 | 大白话 |
|---|---|---|
MBTIProfile | 单个类型的完整档案 | 一份人事档案 |
MBTIDimensions | 四轴(主导极, 百分比)元组 | 一张性格雷达图 |
MBTIBehaviorMapping | 六种交互场景的行为指导语 | 一本行为 SOP |
MBTIProfile的字段如下:
| 字段 | 作用 | 示例(INTJ) |
|---|---|---|
code | 稳定标识,持久化到agents.persona_mbti | INTJ |
name_zh/name_en | 本地化显示名 | 建筑师 / Architect |
nickname_zh | 中文网络梗昵称 | 紫老头 |
summary_zh/summary_en | 一句话人设简介 | 富有想象力的战略家,对一切都有计划 |
descriptors_zh/descriptors_en | 逗号分隔的关键词标签 | 战略家、独立、深邃、追求完美 |
dimensions | 四维度(极点, 百分比) | ei=("I", 78) |
behavior | 六场景行为指导,中英双语 | 见下 |
color/symbol | UI 主题色(hex)/ 装饰性 Unicode 符号 | #6366F1/ ♜ |
MBTIDimensions:百分比从哪里来。四条轴ei、sn、tf、jp各是一个元组,百分比取值 50~85。("I", 78)意思是 78% 内向倾向。前端 MBTISelector.tsx 就用这组数据画横向维度条,一眼看出性格雷达。
MBTIBehaviorMapping:人格真正"生效"的地方。六种交互场景各一句指导语,每句都有*_zh后缀的中文版本:
| 场景字段 | 指导内容(INTJ 为例) |
|---|---|
answer_style | 简洁有条理,喜欢深度而非广度 |
casual_chat | 不爱闲聊,话题很快拐向观点和洞察 |
conflict | 冷静分析,直击问题根源 |
creativity | 系统级思考,构建优雅的长期方案 |
emotion | 简短回应情绪,然后给出务实建议 |
planning | 制定详尽的战略路线图,附带应急预案 |
数据流转是一条直线:persona_mbti字段 →resolve_persona_code定出类型码 →PersonaLoader.load(code)取模板(带缓存)→render_persona_template产出固定文案 → 渲染结果写入SOUL.md。模板层只暴露三个占位符,人格档案负责其余所有文案:
| 占位符 | 来源 |
|---|---|
{agent_name} | agents.name |
{user_display} | users.display_name,回退users.username |
{custom} | agents.system_prompt(原样追加) |
3. 16 型人格速查表与 28 题计分规则
16 份档案集中在模块内_PROFILES字典,通过get_all_profiles()整体获取。按四大会系速查:
| 会系 | 类型 | 名称 | 梗昵称 | 一句话简介 |
|---|---|---|---|---|
| 分析家 NT | INTJ | 建筑师 | 紫老头 | 富有想象力的战略家,对一切都有计划 |
| 分析家 NT | INTP | 逻辑学家 | 小瓶子 | 富有创造力的发明家,对知识有无尽渴望 |
| 分析家 NT | ENTJ | 指挥官 | 霸道总裁 | 大胆果断,效率至上,只认结果 |
| 分析家 NT | ENTP | 辩论家 | 杠精 | 聪明好奇,从不放过智力挑战 |
| 外交家 NF | INFJ | 提倡者 | 绿老头 | 安静而有洞察力的理想主义者 |
| 外交家 NF | INFP | 调停者 | 小蝴蝶 | 诗意善良的利他主义者 |
| 外交家 NF | ENFJ | 主人公 | 大宝剑 | 富有魅力的鼓舞者,能让众人追随 |
| 外交家 NF | ENFP | 竞选者 | 快乐小狗 | 热情有创造力的自由精灵 |
| 守护者 SJ | ISTJ | 物流师 | 蓝老头 | 务实、注重事实的可靠执行者 |
| 守护者 SJ | ISFJ | 守卫者 | 小护士 | 敬业温暖,时刻准备保护所爱之人 |
| 守护者 SJ | ESTJ | 总经理 | 尺子姐 | 出色的管理者,管人理事无与伦比 |
| 守护者 SJ | ESFJ | 执政官 | 蛋糕哥 | 极具同情心的社交达人 |
| 探索者 SP | ISTP | 鉴赏家 | 电钻哥 | 大胆实际的实验家,工具信手拈来 |
| 探索者 SP | ISFP | 探险家 | 小画家 | 灵活有魅力的艺术家,随时探索新事物 |
| 探索者 SP | ESTP | 企业家 | 墨镜哥 | 聪明精力充沛,善于随机应变 |
| 探索者 SP | ESFP | 表演者 | 气氛组组长 | 自发、精力充沛,生活从不无聊 |
28 题测试的题库不在数据模块里,而是和路由写在 mbti.py 的_QUESTIONS列表(4 维度 × 7 题)。计分函数_score_answers的规则很直白:
| 规则 | 具体值 |
|---|---|
| 答题门槛 | 至少 20 题,否则test/submit返回 400 |
| 计票 | 每题按所选 A/B 选项,为对应极点 +1 票 |
| 主导极 | 票多的一方;平票取该轴第一极点;整轴未答则默认 E/S/T/J、百分比 50 |
| 百分比 | round(50 + 主导票 / 该轴总票 × 35),截断在 50~85 |
举例:I 得 4 票、E 得 3 票,则50 + 4/7×35 = 70%。
4. 实操路径:从点应用到写 curl
三条路径按投入递增排布,每一步都标了文件位置。
4.1 手动:UI 人格选择器。进入 Agent 的个性化(Personalization)页,左侧 16 型卡片、右侧详情面板展示简介、关键词与四维度条形图,点"应用"即写入。前端组件是 MBTISelector.tsx,点击后调用applyMBTIType,后端经_persist_persona→agent_registry.apply_persona_mbti落库并重新加载运行时、重新生成SOUL.md,人格即刻生效。
4.2 半自动:28 题测试一键应用 🧪。拿不准自己是哪型,直接测:MBTITest.tsx 先GET /api/mbti/test/questions拉题库,作答后POST /api/mbti/test/submit提交{answers, auto_apply, language}。auto_apply: true时要求请求带X-Octop-Agent-Id头,测出的类型直接写入当前 Agent,响应里applied: true表示落库成功;不勾选则纯只读计分,不会改任何数据。
4.3 自动化:API 与 CLI。路由实现在 mbti.py,前缀/api/mbti,接口清单如下:
| 接口 | 方法 | 作用 |
|---|---|---|
/api/mbti/types | GET | 列出全部 16 型完整档案 |
/api/mbti/types/{code} | GET | 单型维度、行为、UI 元数据 |
/api/mbti/current | GET | 当前 Agent 已应用人格(需X-Octop-Agent-Id头) |
/api/mbti/preview/{code} | GET | 预览渲染后的人格模板 |
/api/mbti/test/questions | GET | 拉取 28 题题库 |
/api/mbti/test/submit | POST | 提交答案计分,body{answers: {qid: "A\|"B"}, auto_apply?} |
/api/mbti/apply | POST | 把指定类型应用到当前 Agent,未知类型返回 404 |
命令行两条最短路径:创建时一步到位octop agent create --persona-mbti INTJ(commands/agent.py 的--persona-mbti选项),或走 HTTP 创建 Agent 时 body 里直接带persona_mbti字段。运行时切换用:
curl -X POST http://127.0.0.1:8088/api/mbti/apply \ -H "Authorization: Bearer $TOK" \ -H "X-Octop-Agent-Id: $AGENT_ID" \ -d '{"code": "INTJ"}'前端对这些接口的封装在 dashboard/src/api/modules/mbti.ts,类型定义在 dashboard/src/api/types/mbti.ts。
5. 边界与回退顺序:能改什么、不能改什么
读人格时有一条明确的回退链,resolve_persona_code(loader.py)按序取值:persona_mbti字段(转大写)→config_json.persona→ 两者皆空则用内置_DEFAULT_PERSONA_TEMPLATE(温暖、直接、专业的语气)。GET /api/mbti/current走同样的读取顺序,且会校验代号必须匹配已知档案,避免历史脏数据泄露到响应里。
能改的:
- 逐 Agent 微调:设置
system_prompt,它作为{custom}原样追加到模板末尾,是官方推荐的定制点; - 改人格内容本体:编辑 mbti_profiles.py 后重启服务,这是官方支持的改法。
刻意不提供的:没有任何"在线编辑人格"的管理接口。原因是人格内容一旦随用户漂移,Agent 行为将不可复现——所以官方把它锁在代码里,随版本走。另外,旧的 16 个 Markdown 人格文件(personas/*.md目录)已经删除:人格是数据而非文件,本地化只是加*_zh字段,不用再维护 16 份独立文档。
6. TL;DR:一行公式与关键文件导航
MBTIProfile = 身份(code/名称/简介)+ 量化性格(dimensions)+ 行为脚本(behavior)+ UI 元数据(color/symbol),链路是persona_mbti字段 →resolve_persona_code→ 模板渲染 →SOUL.md系统提示词,system_prompt永远追加在最后。
| 路径 | 职责 |
|---|---|
| mbti_profiles.py | 16 型档案数据定义(三个 frozen dataclass) |
| loader.py | 模板渲染、默认兜底、类型码解析优先级 |
| mbti.py | /api/mbti路由 + 28 题库与计分逻辑 |
| MBTISelector.tsx | UI 人格卡片与维度条选择器 |
| MBTITest.tsx | 28 题测试交互与一键应用 |
| personas.md | 官方人格机制与自定义边界文档 |
【免费下载链接】OctopA smarter, self-hosted AI assistant — multi-user, multi-agent.项目地址: https://gitcode.com/GitHub_Trending/oct/Octop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考