1. 项目概述:从聊天记录中窥见真实的你
你有没有想过,你和AI助手(比如ChatGPT、Claude或者DeepSeek)的每一次对话,其实都在不经意间暴露着你的思维习惯和性格底色?我们总以为自己在回答MBTI问卷时足够诚实,但“你认为自己会怎么做”和“你实际怎么做”之间,往往隔着一条名为“自我认知偏差”的鸿沟。KnowMe这个开源项目,就是来帮你跨越这条鸿沟的。它不问你任何问题,只做一件事:冷静地分析你与AI的历史聊天记录,从中提取超过50种行为信号,然后像一位经验丰富的分析师一样,推断出你的MBTI类型、性格优劣势,甚至为你量身定制职业方向建议。
这个项目的核心价值在于“客观”与“隐私”。它完全本地运行,你的聊天数据无需上传到任何云端服务器,彻底杜绝了隐私泄露的担忧。同时,它摒弃了主观问卷,基于你真实的语言模式、提问方式、话题偏好和决策逻辑进行分析,得出的结论往往比传统测试更让你感到“一针见血”——“对,这确实是我会干的事”。无论你是想进行一场深度的自我探索,还是希望优化自己的沟通方式,或是为职业发展寻找一些数据化的参考,KnowMe都能提供一个独特且有趣的视角。接下来,我将带你深入这个项目的内部,看看它是如何工作的,以及你如何能最大程度地利用它来了解自己。
2. 核心原理深度拆解:信号如何编织成性格画像
KnowMe的魔力不在于调用某个庞大的AI模型来“猜”你的性格,而在于一套精巧的、基于规则的“信号评分系统”。这套系统的设计哲学是:复杂的人格特质,可以通过一系列可观测、可量化的微观行为来逼近。这就像医生通过体温、血压、血常规等指标来综合判断健康状况,而非仅仅依靠病人的主观描述。
2.1 信号词典:从聊天文本到行为标签
项目最核心的资产是它的“信号词典”。这本质上是一个庞大的映射规则库,存储在类似references/mbti_signals.md的文件中。词典里定义了50多种行为信号,每条信号都关联着它可能影响的MBTI维度(E/I, S/N, T/F, J/P)以及影响的权重。
例如,当分析引擎在你的对话中扫描到以下模式时:
- 模式识别:用户频繁使用“假设”、“如果...会怎样”、“从理论上讲”等短语。
- 信号触发:这会被标记为“抽象思维倾向”信号。
- 维度影响:该信号会为直觉(N)维度增加正分数,同时可能为实感(S)维度增加负分数或减少正分数。
再比如:
- 模式识别:用户多次在提问中提及具体的数据、指标或要求“用数字证明”。
- 信号触发:标记为“数据驱动决策”信号。
- 维度影响:为思考(T)维度加分。
这个过程是中英双语进行的。项目内置了针对中英文常见表达模式的识别规则。例如,中文里的“咱们一起想想办法”和英文里的“Let's brainstorm together”都会触发“协作倾向”信号,从而为外倾(E)维度加分。
注意:信号权重不是固定的1或2。在更复杂的实现中,权重可能是动态的。例如,一个强烈表达情感的词(如“这让我感到非常沮丧”)可能比一个中性词(如“我觉得”)对情感(F)维度的贡献权重更高。KnowMe的代码逻辑里,通常会为不同强度的表达预设不同的权重值。
2.2. 评分引擎:从信号到维度分数
收集到所有信号后,分析引擎(scripts/analyze.py)开始工作。它的任务不是简单地将信号得分相加,而是进行加权汇总和归一化处理。
- 维度初始分数:每个MBTI维度(如E维度)的初始分数为0。
- 信号累加:遍历所有识别到的信号。如果一个信号被标记为影响E维度+2,那么E维度的分数就加2;如果另一个信号影响I维度+3,那么I维度分数加3。注意,E和I是同一轴上的两端,它们的分数是此消彼长的关系。
- 对话长度与频率归一化:为了防止某次超长的、情绪化的对话过度影响结果,引擎通常会对分数进行归一化处理。例如,将每个维度得到的总分数,除以分析的有效消息总数,得到一个“平均信号强度”。同时,某些高频出现的核心信号(如持续性的数据引用)可能会被赋予更高的权重。
- 生成百分比:最终,E和I的分数会被转换成百分比。比如E维度累计强度为28,I维度累计强度为72,那么就会显示为E (28%) / I (72%)。百分比差距越大,引擎对该维度的判断“置信度”就越高。
2.3. 置信度机制:结果有多可靠?
KnowMe报告中的“高置信度”、“中置信度”不是随便标注的,它基于几个关键指标:
- 信号密度:在分析的对话中,与该维度相关的信号出现的频率和强度。密度越高,置信度越高。
- 信号一致性:所有信号指向是否一致。例如,如果大部分信号都强化I(内倾),只有零星一两个信号指向E,那么I的置信度会很高。如果信号互相矛盾(比如一半支持T,一半支持F),则置信度会降低,甚至可能给出“倾向不明显”的提示。
- 数据量:这是最重要的因素之一。分析10条消息和1000条消息,其统计意义天差地别。项目文档建议至少50条消息,就是为了获得足够稳定的信号样本,避免因偶然对话主题带来的偏差。
这套基于规则的系统,相比调用大语言模型(LLM)API进行分析,有三大不可替代的优势:
- 速度与成本:本地秒级完成,零API费用。
- 可解释性:你可以精确地知道是哪次对话中的哪句话,导致了某个分数的变化。这是“黑盒”LLM无法提供的。
- 确定性与隐私:相同的输入永远产生相同的输出,且所有计算都在你的设备上完成。
3. 从安装到报告:完整实操指南
了解了原理,我们来看看如何亲手运行KnowMe,生成一份属于自己的性格分析报告。这里以最推荐的命令行方式为例,因为它能给你最大的控制权和透明度。
3.1. 环境准备与数据导出
首先,你需要一个能运行Python 3.8+的环境。如果你不是开发者,我强烈建议使用Anaconda或Miniconda来创建一个独立的Python环境,避免污染系统环境。
# 1. 克隆项目代码到本地 git clone https://github.com/AIPMAndy/KnowMe.git cd KnowMe # 2. (可选但推荐)创建并激活一个虚拟环境 # 如果你使用conda conda create -n knowme python=3.10 conda activate knowme # 如果你使用venv(Python内置) python -m venv venv # 在Windows上: venv\Scripts\activate # 在Mac/Linux上: source venv/bin/activate # 3. 安装项目依赖 # 通常项目根目录会有一个requirements.txt文件 pip install -r requirements.txt # 如果没有,可能需要手动安装一些常见库,如json, re, argparse等(通常Python已内置)接下来是最关键的一步:导出你的聊天数据。数据的质量和数量直接决定分析的准确性。
对于ChatGPT (OpenAI):
- 登录ChatGPT网页版。
- 点击左下角你的名字,进入“设置”(Settings)。
- 选择“数据控制”(Data controls)。
- 找到“导出数据”(Export data)并点击确认。OpenAI会给你发送一封邮件,里面包含一个下载链接。下载解压后,你会找到一个名为
conversations.json的文件。记住它的路径,比如~/Downloads/chatgpt_export/conversations.json。
对于Claude (Anthropic):
- 登录Claude网页版。
- 点击左下角设置图标,进入“设置”(Settings)。
- 选择“账户”(Account)。
- 找到“导出数据”(Export data)选项并申请导出。处理完成后下载得到的JSON文件。
对于DeepSeek及其他平台: 目前KnowMe可能尚未内置官方解析器。你可以查看
scripts/collect.py的源码,了解其解析JSON结构的方式,并尝试手动将你的对话历史整理成类似的格式,或者使用--source text模式(见后文)。
实操心得:尽量导出尽可能长的历史记录。我建议至少包含过去3个月到半年的对话。短期的、主题集中的对话(比如你连续一周都在问编程问题)可能会导致分析结果严重偏向“思维(T)”和“直觉(N)”,而忽略了你在生活、情感类话题上的沟通模式。多样性是准确性的朋友。
3.2. 运行分析三部曲
数据准备好后,打开终端,进入KnowMe项目目录,并确保虚拟环境已激活。
第一步:数据收集与清洗collect.py脚本的作用是充当一个“适配器”,它将不同来源、不同格式的原始数据,转换成KnowMe内部统一的、干净的JSON格式。
# 分析ChatGPT数据 python scripts/collect.py --source chatgpt --file /path/to/your/conversations.json --output my_data.json # 分析Claude数据 python scripts/collect.py --source claude --file /path/to/your/claude_export.json --output my_data.json # 如果你想合并多个来源的数据,可以先分别收集,然后手动或编写脚本合并多个JSON文件,但注意时间戳和去重。第二步:核心性格分析这是最核心的一步,analyze.py会加载上一步生成的my_data.json,运行我们之前讲到的信号扫描和评分引擎。
python scripts/analyze.py --input my_data.json --output my_report.md执行这个命令后,你会看到终端可能有简单的日志输出,然后就在当前目录生成了一个my_report.md的Markdown文件。此时,你已经可以打开它查看你的MBTI类型和基础分析了。
第三步:生成个性化建议advise.py脚本是KnowMe的“智慧大脑”。它读取你的分析报告,根据你的MBTI类型,从一个丰富的建议框架库(references/advice_frameworks.md)中提取对应的模块,并可能结合你报告中一些特定的信号(比如“话题分布中技术类占80%”),来微调建议的侧重点,最终生成包含职业方向在内的全面建议。
python scripts/advise.py --report my_report.md --output my_advice.md现在,你可以用任何文本编辑器或Markdown阅读器打开my_report.md和my_advice.md,开始你的自我发现之旅了。
3.3. 进阶玩法:处理非标准数据源
如果你的聊天记录不在ChatGPT或Claude中怎么办?KnowMe提供了灵活的--source text选项。
准备文本:将你的对话整理成固定的格式。最简单的格式是每段话以
User:或Assistant:开头。例如:User: 你好,能帮我解释一下什么是机器学习吗? Assistant: 机器学习是人工智能的一个分支,它允许计算机系统从数据中学习并改进,而无需进行明确的编程。 User: 那么监督学习和无监督学习的主要区别是什么? Assistant: 主要区别在于数据是否有标签...你可以把这样的内容保存为
my_chats.txt或my_chats.md。运行分析:
python scripts/collect.py --source text --file /path/to/my_chats.txt --output my_text_data.json然后像之前一样,用
analyze.py和advise.py处理生成的my_text_data.json即可。
注意事项:文本模式依赖简单的正则表达式匹配
User:和Assistant:标签。请确保格式严格一致,避免使用容易混淆的冒号。如果对话中有多个参与者(比如群聊),目前可能不支持,需要你预先处理成一对一的格式。
4. 报告解读与行动指南:超越MBTI标签
生成了报告,看着那些百分比柱状图和描述,你可能会兴奋,也可能会疑惑。如何真正理解并运用这份报告,而不是贴上一个标签就束之高阁?这才是KnowMe价值的最终体现。
4.1. 深度解析你的分析报告
一份完整的KnowMe报告通常包含以下几个部分,我们逐一拆解:
MBTI类型与置信度: 报告开头的类型(如INTJ)是一个综合结论。但更有价值的是看四个维度的百分比和置信度。
- 高置信度(如 I 72%):这意味着在你的对话中,体现内倾特质(如深度思考、独立解决问题、减少社交提及)的信号非常强且一致。你可以高度信任这个倾向,并思考它如何影响你的工作方式(例如,你可能更擅长独立攻坚而非头脑风暴会议)。
- 中/低置信度(如 J 68%):这表示判断(J)倾向存在,但感知(P)的信号也有相当比例。这可能揭示了你性格中的灵活性。比如,你在项目规划上喜欢有条不紊(J),但在信息收集阶段又保持开放、随时调整(P)。不要忽视中低置信度的维度,它们往往是你性格中丰富和矛盾的亮点,是自我成长的关键切入点。
行为证据列表: 这是报告中最“宝藏”的部分。它会列出具体是哪些对话片段,贡献了关键分数。例如:
“在讨论项目风险时,你提到‘我们先列出所有可能的风险点,并评估其发生概率和影响程度’(+T,+J)” “当你描述一次团队冲突时,你说‘我当时更关心的是他的感受,而不是谁对谁错’(+F)”
仔细阅读这些证据。它们是你真实行为的镜子。问问自己:“这确实是我的典型反应吗?” 如果是,为什么?如果不是,那次对话的特殊背景是什么?这个过程本身就是极佳的自我觉察练习。
沟通风格与话题分布: 这部分量化了你的沟通习惯。
- 平均消息长度:长篇大论可能意味着你喜欢详尽解释(J或N?),也可能是在反复澄清(S?)。简短回复可能意味着高效直接(T?),也可能是回避深入(F?)。需要结合上下文看。
- 提问 vs 陈述比例:高提问比例可能表明探索性和好奇心(N,P),而高陈述比例可能表明结论性和确定性(J)。
- 话题分布:看看你的对话在“技术”、“商业”、“创意”、“人际”、“自我成长”等类别中的占比。一个技术话题占90%的INFJ,和一个同样技术话题占90%的ISTJ,其内在动机和表达方式可能截然不同。这个分布帮你看到自己的“注意力地图”。
4.2. 将职业建议转化为行动计划
KnowMe的职业建议框架(针对16型人格)是一个很好的起点,但切忌生搬硬套。你需要做的是“对号入座”后的“个性化裁剪”。
交叉验证:将报告中的“职业方向建议”与“你的超能力”和“成长空间”部分结合起来看。例如,报告建议INTJ适合“战略咨询”,而“你的超能力”里提到了“快速看到系统全貌”,“成长空间”里提到了“容易低估人的因素”。那么,一个具体的行动计划可以是:在接下来的工作中,主动承担一次需要跨部门协调的小型战略规划任务,并刻意将“团队沟通与反馈收集”作为与“方案逻辑严谨性”同等重要的KPI。
关注“职业陷阱”:这是报告中最具预警价值的部分。它直指你凭借本能行事时可能踩的坑。例如,给INTP的“可能陷入理论循环而延迟行动”。如果你认可这一点,可以建立一个简单的“行动触发器”:当对一个问题的研究超过预定时间(比如2小时),就强制自己产出第一个最小可行方案(MVP)或写下三个可立即执行的动作,而不是继续寻找完美解。
利用“30天挑战”:报告末尾的挑战通常是具体、微小、可操作的行为实验。比如“每周主动发起一次非工作相关的闲聊”。不要小看它。认真执行这个挑战,并记录过程中的感受和对方的反应。30天后,你获得的关于自己社交模式的体感认知,远比一个“E/I百分比”要深刻得多。
4.3. 生成式个性化:从性格到视觉形象
KnowMe v2.0的肖像生成功能,为自我认知增添了一层有趣的感性维度。它基于MBTI类型和风格关键词,生成AI肖像。
# 生成描述你性格的文本提示词 python scripts/generate_portrait.py --mbti ENFP --style artistic # 输出可能是一段如“一个充满热情和好奇心的探索者,眼中闪烁着灵感的光芒,身处色彩斑斓、元素混搭的创意空间”的Prompt。 # 使用该Prompt调用图像生成服务(需自行配置API Key) python scripts/generate_image.py --prompt "上述生成的提示词" --service bailian --output my_portrait.png这个功能的意义何在?它不仅仅是为了好玩。对于偏直觉(N)和情感(F)类型的人来说,一个符合他们性格特质的视觉形象,能加强他们对自我认同的感知。你可以把这个生成的图像用作社交媒体的头像,或者打印出来放在桌前,作为一种积极的自我暗示。它把抽象的性格描述,转化为了一个可感知的符号。
重要提醒:请务必理性看待所有结果。MBTI描述的是偏好和倾向,不是能力,更不是命运。KnowMe的分析是基于你在特定环境(与AI对话)下的行为样本,这个样本可能存在偏差(比如,你向AI提问时可能比现实中更逻辑化)。报告应作为“自我反思的催化剂”和“行为优化的数据参考”,而非绝对的“人格判决书”。最好的使用方式是,每隔半年或一年,重新分析一批新的对话数据,看看你的“行为信号”图谱发生了哪些变化,这本身就是个人成长的动态记录。
5. 常见问题与排查技巧实录
在实际使用和与社区交流的过程中,我总结了一些常见的问题和解决方法。如果你遇到了麻烦,不妨先在这里找找答案。
5.1. 安装与运行类问题
Q1: 运行pip install -r requirements.txt时出错,提示某些包找不到或版本冲突。
- 排查:首先确认你的Python版本是3.8或更高(
python --version)。其次,KnowMe可能依赖一些较新的库。 - 解决:
- 升级pip:
pip install --upgrade pip - 尝试单独安装可能出错的包,或者指定稍低的版本。你可以打开
requirements.txt文件查看具体依赖。 - 最有效的办法:使用虚拟环境(如conda或venv),确保环境纯净。如果问题依旧,可以去项目的GitHub Issues页面搜索相关错误信息,很可能已经有人提出过解决方案。
- 升级pip:
Q2: 运行collect.py时,提示“无法识别的数据源格式”或JSON解析错误。
- 排查:这几乎总是因为导出的数据文件格式与脚本预期不符。AI平台可能会更新其数据导出格式。
- 解决:
- 用文本编辑器打开你导出的JSON文件,查看其顶层结构。是直接一个对话数组,还是被包裹在
{“conversations”: [...]}这样的结构里? - 打开
scripts/collect.py,找到对应数据源(如parse_chatgpt函数)的解析逻辑。对比一下代码期望的JSON路径和你实际文件的路径。你可能需要轻微地修改代码中的键名(key names)。 - 在KnowMe的GitHub仓库提交Issue,附上错误信息和你的数据文件结构(注意脱敏),帮助开发者更新解析器。
- 用文本编辑器打开你导出的JSON文件,查看其顶层结构。是直接一个对话数组,还是被包裹在
5.2. 数据分析与报告类问题
Q3: 我的报告结果感觉完全不准,和我在其他平台测试的MBTI结果不一样。
- 排查:这是最常见也最值得深思的问题。原因可能是多方面的:
- 数据量不足:你只分析了十几条消息,样本太少,偶然性太大。
- 数据偏差:你导出的对话全部是关于某个特定专业领域(如编程),缺乏生活、情感、决策等多元话题。
- “工作人格”与“真实人格”:你和AI对话时,可能处于“解决问题”模式,更偏向逻辑(T)和规划(J),而忽略了生活中更随性(P)、更注重感受(F)的一面。
- 传统测试的自我美化:也许KnowMe揭示了你更真实的行为模式,而传统问卷测试受到了你“理想自我”的影响。
- 解决:
- 确保数据量:合并尽可能多的、跨平台的对话记录,目标是200条以上不同主题的消息。
- 检查行为证据:不要只看结论,去看报告里列出的具体对话证据。这些证据本身是否准确描述了你的行为?如果证据本身是准确的,但结论让你意外,那正是自我觉察的开始——也许你在某些情境下的行为模式,连自己都没意识到。
- 进行对照实验:故意与AI进行几次不同风格的对话。比如,进行一次纯粹感性的倾诉,或一次天马行空的头脑风暴。将这些新对话加入数据重新分析,看结果是否发生变化。
Q4: 报告中的“话题分布”显示我90%都在聊技术,这会影响其他维度的判断吗?
- 排查与解释:当然会,而且这正是KnowMe客观性的体现。如果你绝大部分对话都是技术性的,那么分析引擎捕捉到的信号自然会更偏向于逻辑(T)、系统化(N/J)、客观(T)等特质。这未必是“不准确”,它准确反映了你在“与AI进行技术对话”这一特定场景下的主导行为模式。
- 建议:你可以将此解读为你的“专业面孔”或“问题解决模式”。要获得更全面的人格画像,你需要有意识地引入更多元的数据。或者,你可以分别生成两份报告:一份基于纯技术对话,一份基于非技术对话(如果数据足够),对比观察你在不同情境下的行为模式切换,这本身就是一项高级的自我认知练习。
Q5: 置信度一直很低怎么办?
- 排查:置信度低通常意味着信号弱、信号矛盾或数据量不足。
- 解决:
- 首要任务是增加数据量和多样性。
- 其次,审视你的对话风格是否非常中性、平衡,导致E/I、T/F等维度信号相互抵消。这本身可能就是一种性格特点——高度的适应性和情境性。
- 如果经过多次尝试,某个维度(特别是T/F或J/P)的置信度始终很低,这可能提示你在这个维度上本就处于中间地带,没有强烈的先天偏好,能够根据情境灵活调整。在MBTI理论中,这被称为“模糊偏好”,同样是有效且常见的结果。
5.3. 高级使用与贡献
Q6: 我想为KnowMe添加对新AI平台(如DeepSeek、通义千问)的数据支持,该怎么做?
- 路径:这是社区非常欢迎的贡献!你需要做的是在
scripts/collect.py中编写一个新的解析函数。 - 步骤:
- 从目标平台导出你的对话数据(通常是JSON格式)。
- 研究其数据结构,找到包含“用户消息”、“AI回复”、“时间戳”等关键信息的字段。
- 模仿现有的
parse_chatgpt或parse_claude函数,编写一个新的解析函数(如parse_deepseek)。该函数的核心任务是将原始数据转换为KnowMe内部统一的对话列表格式。 - 在命令行参数解析部分,添加对新数据源(如
--source deepseek)的支持。 - 提交Pull Request (PR)。
Q7: 我觉得某个行为信号的判断逻辑不对,想修改或新增信号,如何操作?
- 路径:修改
references/mbti_signals.md文件和相关评分逻辑。 - 步骤:
- 在
mbti_signals.md中,信号通常以某种结构列出(可能是YAML、JSON或自定义格式)。找到你想修改的信号。 - 你可以调整其影响的维度权重,或者修改触发该信号的正则表达式或关键词列表。
- 更进阶的做法是修改
scripts/analyze.py中的信号扫描逻辑,使其能识别更复杂的语言模式(例如,使用依存句法分析来识别句子结构)。 - 重要:在修改前,最好用自己的一份数据做基准测试,确保修改后的分析结果更符合你(或一批测试者)的预期,并且有可解释的理由。
- 在
使用KnowMe的过程,不仅是获得一份报告,更是一个与自己的数字足迹对话、理解自身行为模式的技术实践。它提供的不是终点,而是一张动态的、有待你亲自去验证和填充细节的自我地图。