news 2026/5/14 1:41:04

基于规则匹配的AI对话情绪分析工具:claude-code-swear-counter

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于规则匹配的AI对话情绪分析工具:claude-code-swear-counter

1. 项目概述:一个为AI开发者设计的“情绪分析器”

如果你和我一样,每天都在和Claude Code这样的AI编程助手“斗智斗勇”,那你一定有过这样的时刻:面对一段死活跑不通的代码,或者一个怎么解释都理解不了你意图的AI,一股无名火从心底升起,手指在键盘上敲出的回复,从“这里好像有点问题”逐渐演变成“这什么破玩意儿”。事后看着聊天记录,自己都觉得好笑又有点不好意思——我居然对一个人工智能发了这么多脾气?

claude-code-swear-counter这个项目,就是来帮你量化这种“人机关系紧张度”的。它本质上是一个轻量级的Node.js命令行工具,专门扫描你本地Claude Code项目目录下的对话日志,然后给你生成两份报告:一份统计你“骂”了Claude多少次,另一份统计Claude“讨好”了你多少次。通过这种略带戏谑的数据分析,它让你直观地看到自己与AI协作时的情绪波动模式,某种程度上,它也是一个有趣的开发者自我观察工具。

这个项目适合所有使用Claude Code的开发者,无论你是刚入门的新手,还是已经深度依赖AI编程的老手。通过它,你不仅能获得一个有趣的谈资,更能从一个独特的角度反思自己与工具交互的方式——是高效冷静的指令下达,还是充满情绪的“咆哮式编程”?接下来,我将带你深入这个项目的内部,看看它是如何工作的,我们能从中获得什么启发,以及如何将它玩出花样。

2. 核心原理与设计思路拆解

2.1 核心需求:从日志文件到情绪指标

这个工具的核心需求非常明确:解析非结构化的对话文本,并基于预定义的词库进行情感倾向分类统计。听起来简单,但拆解开来,涉及几个关键环节:

  1. 数据源定位:Claude Code作为桌面应用,必然会在本地存储对话历史。工具需要准确找到这个存储路径。在macOS或Linux系统上,这个路径通常是用户主目录下的隐藏文件夹~/.claude/projects/。这里存放着以项目或会话为单位的日志文件(可能是JSON、TXT或某种专有格式)。
  2. 文本提取与清洗:读取这些日志文件后,需要将其中属于“用户”和“助手”(Claude)的发言内容分离出来。这涉及到解析文件格式,过滤掉时间戳、元数据等非对话内容,只保留纯文本。
  3. 关键词模式匹配:这是核心的“情绪分析”环节。工具需要维护两个词库:
    • 用户骂人词库:包含直接脏话(如f***, s***)、网络用语(如wtf, ffs)、以及表达强烈不满的词汇(如stupid, useless, broken, garbage)。
    • AI讨好词库:包含Claude可能使用的道歉、奉承、过度认同的短语(如“I apologize”, “You're absolutely right”, “Great question!”, “That's a fantastic point”)。 然后,它对分离后的文本进行扫描,统计这些关键词出现的频率。
  4. 结果聚合与可视化:将统计结果按照预设的“等级”(Tier)进行归类,并以一种直观、有趣的方式在终端中呈现出来,比如表格、ASCII艺术图表等。

项目的巧妙之处在于,它放弃了复杂的自然语言处理(NLP)和情感分析模型,转而采用基于规则的简单关键词匹配。这种设计选择带来了几个巨大优势:

  • 零依赖:不需要引入庞大的NLP库(如TensorFlow.js、Natural),使得工具极其轻量,安装运行瞬间完成。
  • 确定性高:规则明确,统计结果稳定可预期,不会因为模型的理解偏差而产生歧义。
  • 性能极佳:在本地处理文本,匹配速度快,几乎无感知。
  • 趣味性强:预设的“等级”名称(如“Gordon Ramsay Mode”、“Golden Retriever”)充满了程序员式的幽默,让原本枯燥的数据统计变得生动有趣。

2.2 架构设计:极简主义的胜利

从项目描述强调“Zero dependencies”和“raw ANSI escape codes”就能看出,作者崇尚极简主义。这种架构设计值得我们深入学习:

  1. 依赖管理:完全使用Node.js原生模块,如fs(文件系统)、path(路径处理)、readline(逐行读取)。这意味着用户只需要安装Node.js环境,无需npm install等待任何第三方包,真正实现了“开箱即用”。使用npx直接运行远程包,更是将便捷性做到了极致。
  2. 输出渲染:没有使用常见的终端美化库如chalk(颜色)、boxen(画框)、ora(加载动画)。而是直接使用ANSI转义码来设置文本颜色、样式,并用Unicode字符(如,,,,,,)来手动绘制表格边框。这样做虽然增加了代码的复杂度,但消除了唯一的依赖风险,并且让工具在任何符合ANSI标准的终端里都能有一致的表现。
  3. 配置与词库:骂人词库和讨好词库很可能以数组的形式硬编码在源代码中。这种做法的好处是简单直接,修改词库需要改代码然后发布新版本。一个更灵活但稍复杂的改进版,可以将词库放在外部的JSON配置文件中,允许用户自定义。

注意:这种极简设计是一把双刃剑。优点是干净、透明、可控。缺点是功能扩展性受限(比如想加一个简单的进度条都会比较麻烦),并且需要开发者对终端底层编码有较好的理解。对于这样一个功能单一的小工具来说,利远大于弊。

2.3 文件解析策略猜测

项目没有明说日志格式,但我们可以根据经验进行合理推测。Claude Code的对话日志很可能是一种结构化的数据,例如:

  • JSON Lines格式:每行是一个独立的JSON对象,包含role(“user”或“assistant”)和content字段。
  • 纯文本标记格式:用特定的分隔符或标记来区分发言者,例如[USER][ASSISTANT]

工具的工作流大致如下:

// 伪代码示意 const logFiles = 遍历 ~/.claude/projects/ 目录下的所有日志文件; let userSwearCount = 0; let claudeFlatterCount = 0; for (const file of logFiles) { const content = 读取文件(file); const messages = 解析内容,分离出用户和Claude的发言数组; for (const msg of messages) { if (msg.role === 'user') { userSwearCount += 在msg.content中匹配用户骂人词库的次数; } else if (msg.role === 'assistant') { claudeFlatterCount += 在msg.content中匹配AI讨好词库的次数; } } } // 根据数量计算等级 const userTier = 根据userSwearCount匹配“Suspiciously Polite”到“Gordon Ramsay Mode”; const claudeTier = 根据claudeFlatterCount匹配“Stone Cold”到“Golden Retriever”; // 使用ANSI码和Unicode字符绘制终端输出 打印结果表格(userTier, claudeTier, userSwearCount, claudeFlatterCount);

3. 深入实操:安装、运行与结果解读

3.1 环境准备与一键运行

使用这个工具的门槛低到令人发指。你只需要确保两件事:

  1. Node.js环境:版本需要在18或以上。你可以在终端输入node --version来检查。如果没有安装,去Node.js官网下载安装LTS版本即可。
  2. Claude Code使用历史:你至少用Claude Code进行过一些对话,这样在~/.claude/projects/目录下才会有日志文件可供分析。

满足以上条件后,打开你的终端(如Terminal、iTerm2、Windows Terminal等),输入以下命令:

npx --yes claude-code-swear-counter@latest

命令拆解

  • npx:Node.js自带的包执行器。它允许你不全局安装包,而是直接下载并运行远程npm包。
  • --yes:这是npx的一个参数,表示对任何提示(比如“是否确定安装?”)都自动回答“是”,实现完全非交互式运行。
  • claude-code-swear-counter@latest:指定要运行的npm包名及其版本(@latest表示最新的稳定版)。

按下回车后,你会看到终端开始联网下载这个工具包(通常只有几十KB),下载完成后立即执行。整个过程在几秒内完成,你就能看到分析结果了。

3.2 结果报告深度解读

运行后,你可能会看到类似下面的输出(以下为模拟示例):

============================================== CLAUDE CODE SWEAR COUNTER ============================================== Analyzed 47 conversations from ~/.claude/projects/ YOUR SWEARING TIER: 🥊 **Eminem** Total swear words detected: 127 (That's about 2.7 swears per conversation. It's not anger, it's rhythm.) CLAUDE'S SYCOPHANCY TIER: 🐕 **Golden Retriever** Total flattery phrases detected: 89 (Claude would apologize for apologizing. And then compliment you about it.)

如何理解你的“等级”?

  • Suspiciously Polite / Oops:说明你情绪非常稳定,或者使用Claude Code的频率/深度还不够。可以尝试用它处理更复杂、更易出错的任务。
  • Eminem / Karen Mode:这可能是大多数中级开发者的常态。表明你与AI的互动频繁且深入,在调试和迭代过程中产生了足够的“摩擦”。这个区间其实代表了高效的使用——你在积极地纠正和指导AI。
  • Psycho / Gordon Ramsay Mode:嗯……也许你需要休息一下,或者思考一下是不是给AI的指令本身就不够清晰?过高的情绪输出可能意味着沟通效率有待优化。

如何理解Claude的“等级”?

  • Stone Cold / Straight Shooter:早期的Claude模型或某些配置下可能更“高冷”。这不一定不好,说明回复更简洁直接。
  • Smooth Operator / People Pleaser:这是Claude的常见人格,旨在提供友好、积极的协作体验。
  • Therapist Mode / Golden Retriever:如果你的“骂人等级”很高,Claude的“讨好等级”往往也会水涨船高。因为AI的安全机制和对话微调会倾向于在检测到用户负面情绪时,更多地使用道歉和安抚性语言。这形成了一个有趣的“你越骂,它越怂”的循环。

3.3 高级参数使用

工具提供了一些命令行参数来定制输出:

  • --breakdown:这是最有用的参数之一。它会列出检测到的每一个具体词汇或短语及其出现的次数。
    npx --yes claude-code-swear-counter@latest --breakdown
    输出会多出两个精美的ASCII表格,分别详细展示你常用的“骂人词汇”Top 10和Claude常用的“讨好话术”Top 10。这能让你精准地发现自己的“口头禅”和AI的“套路”。
  • --me--claude:如果你只关心自己或只关心Claude的统计,可以使用这两个参数来过滤输出。
  • --json:这个参数对于想进一步处理数据的用户非常有用。它会以JSON格式输出原始数据,方便你集成到其他脚本或应用中。
    npx --yes claude-code-swear-counter@latest --json > result.json
    然后你就可以用jq或其他工具来解析result.json文件了。

4. 从娱乐工具到开发启示

4.1 技术实现启示

  1. “够用就好”的哲学:在构建开发者工具时,不一定非要追求大而全的技术栈。精准定位需求(统计关键词),选择最简单可靠的技术方案(文件IO+字符串匹配),往往能打造出最受开发者欢迎的“锋利”工具。
  2. 终端用户体验:即使是一个小工具,良好的输出展示也至关重要。使用ANSI码和Box-drawing字符能极大提升专业感和趣味性。考虑颜色(红色表示警告/高数量,绿色表示良好)、符号(✅, ⚠️, 🔥)和进度指示,能让工具显得更精致。
  3. 零依赖的优势:对于旨在广泛传播和使用的CLI工具,将依赖项降到零可以避免无数环境冲突和安装问题,真正做到无障碍运行。这需要开发者对原生API更熟悉,但回报是工具的鲁棒性和用户体验显著提升。

4.2 对AI协作模式的反思

这个工具虽然以搞笑为主,但它像一面镜子,映照出我们与AI协作时的一些无意识行为模式:

  • 情绪化反馈的有效性:我们对AI输出“垃圾”代码感到愤怒是人之常情。但冷静下来想,愤怒的措辞是否能更有效地让AI理解错误?还是清晰、具体、不带情绪的指令描述更有用?工具的数据可以促使我们向后者转变。
  • AI的“人格”塑造:Claude的“讨好”倾向是产品设计的结果。我们是否希望AI伙伴是一个永远说“是”的应声虫,还是一个能提出反对意见、进行辩论的思考伙伴?通过观察它的回应模式,我们可以更清醒地认识到当前AI交互设计的局限性。
  • 调试过程的量化:骂人词的频率,或许可以粗糙地量化你在一个编程任务上遇到的挫折程度。结合时间戳分析(如果日志有的话),你甚至能找出一天中自己最容易烦躁的“低效时段”。

4.3 潜在的扩展方向

这个项目的概念有巨大的扩展潜力:

  1. 时间序列分析:不只是统计总数,而是按日期绘制你“骂人强度”的折线图。看看是不是在项目截止日期前曲线陡然上升?
  2. 情感趋势关联:将你的“情绪指数”与对话最终是否成功解决问题关联起来。是越骂越解决不了问题,还是发泄一下后思路更清晰了?(这需要定义“成功”的标准)
  3. 多AI平台支持:原理是通用的。可以开发支持GitHub Copilot、Cursor、Windsurf等其他AI编程助手日志分析的版本,甚至做一个统一的“AI搭档情绪压力计”。
  4. 实时反馈插件:正如项目提到的“MCP Server”构想,可以开发一个插件,在你输入情绪化词汇时给出温和的提示(比如“检测到可能无效的沟通词汇,建议尝试更具体的指令…”),充当一个实时的“沟通教练”。

5. 常见问题与排查技巧

在实际运行和使用这类工具时,你可能会遇到一些问题。以下是一些常见情况的排查思路:

5.1 运行报错:“找不到日志目录”或“没有数据”

  • 症状:工具运行后立即退出,提示类似No conversation logs found at ~/.claude/projects/或分析结果为0。
  • 排查步骤
    1. 确认Claude Code已安装并使用过:确保你确实在电脑上安装并登录了Claude Code,并且用它进行过对话。
    2. 手动检查日志路径:打开终端,输入ls -la ~/.claude/projects/(Mac/Linux)或在文件管理器中导航到该目录。如果目录不存在或为空,说明Claude Code可能将日志存储在了其他位置,或者你的使用记录尚未生成/被清理。
    3. 检查Claude Code版本:不同版本的Claude Code可能更改日志存储策略。尝试更新Claude Code到最新版。
    4. 权限问题:极少数情况下,可能是目录读取权限不足。可以尝试用sudo运行(不推荐,有安全风险),或者检查目录权限。

5.2 统计结果与自我感觉严重不符

  • 症状:你觉得你经常吐槽,但工具显示你是“Suspiciously Polite”;或者你觉得很客气,工具却判定为“Karen Mode”。
  • 排查与理解
    1. 词库覆盖度:工具的骂人词库是预设的。你可能用了很多它词库里没有的、但充满怨念的表达,比如“我晕”、“这都行?”、“离谱”。这些没有被统计进去。你可以查看--breakdown的输出,确认它到底识别了哪些词。
    2. 语言问题:当前工具很可能只针对英文词库。如果你主要用中文和Claude交流,那么所有的中文抱怨都不会被计入。这是工具的一个主要局限性。
    3. 阈值理解:每个“等级”对应的数量阈值是作者主观设定的。你的“感觉”和工具的“量化”之间存在天然的差距。

5.3 对“讨好话术”的判定有争议

  • 症状:你认为Claude一些中性的、鼓励性的表达(如“好的”、“让我们试试这个”)也被算作了“讨好”。
  • 理解:这是基于规则系统的固有问题。工具的作者在定义“sycophancy”(谄媚)词库时,边界可能划得比较宽,将常见的礼貌性、积极性回复都包含了进去。这更多是为了娱乐效果和引发思考,并非严谨的学术分析。你可以通过--breakdown查看具体哪些短语被命中,来理解作者的判定逻辑。

5.4 想自定义词库或贡献新词

  • 现状:目前工具是零依赖的二进制包,词库硬编码在源码中。普通用户无法直接修改。
  • 参与方式:正如项目README所说,“PRs welcome”。如果你有想法,可以前往项目的GitHub仓库(通常是github.com/jithinolickal/claude-code-swear-counter),Fork项目,修改源码中的词库数组(比如在src/目录下找到swearWords.jsflatteryPhrases.js之类的文件),然后提交Pull Request。
  • 本地开发:如果你想在本地修改并测试,可以克隆仓库,然后使用npm link或直接node index.js来运行你的修改版。

6. 安全、隐私与伦理考量

在使用此类工具时,有几点必须清醒认识:

  1. 隐私安全:这个工具需要读取你本地磁盘上的对话日志。尽管代码开源可供审查,且仅在本地运行,但原则上你是在将私人对话数据提供给一个第三方程序执行。务必只从官方npm渠道(npmjs.com)下载此类工具,避免运行来路不明的脚本。运行前,可以快速浏览其源码,确认它没有网络请求代码,不会将你的数据上传。
  2. 数据敏感性:你的Claude Code对话日志可能包含未提交的代码片段、项目思路、甚至API密钥等敏感信息。工具本身只进行文本匹配,不存储、不上传,风险较低。但养成良好的安全意识总是对的。
  3. 娱乐工具的定位:切勿将工具的统计结果作为严肃的心理学或工作效率评估依据。它只是一个启发思考、博君一笑的趣味程序。你与AI协作的真实效率,应由项目进度和代码质量来衡量,而非骂人次数。
  4. 健康的协作心态:工具揭示的模式或许能提醒我们,在与AI(乃至与真人同事)协作时,保持清晰、冷静、具体的沟通,远比情绪化的表达更有效。试着把“这代码真蠢”换成“这个函数在输入为null时没有处理边界情况,请添加校验”,你会发现协作体验和结果都会提升一个档次。

claude-code-swear-counter作为一个周末项目,完美地诠释了“小工具,大智慧”。它用极简的技术实现了一个有趣的概念,让我们在自嘲之余,也能停下来反思自己与日益智能的工具之间的互动关系。下次当你又要对Claude“爆发”时,也许可以先运行一下这个工具,看着那个可能又上升了一级的“头衔”,笑一笑,然后深吸一口气,敲下一行更清晰的指令。这,或许就是它最大的价值。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 1:40:14

AI编程助手领域专家配置实战:cursor-claude-personas深度解析

1. 项目概述:为你的IDE注入“领域专家大脑”如果你和我一样,每天都在和Cursor、Claude Code这类AI编程助手打交道,那你一定遇到过这样的场景:想让它帮你写一个复杂的数据库迁移脚本,结果它给出的方案过于通用&#xff…

作者头像 李华
网站建设 2026/5/14 1:39:35

HuggingClaw:用开源模型模拟Claude API的本地开发与测试方案

1. 项目概述:当HuggingFace遇上Claude,一个AI模型管理新思路最近在GitHub上看到一个挺有意思的项目,叫“HuggingClaw”。光看名字,你大概就能猜到它想干什么——把HuggingFace和Claude这两个在AI领域响当当的名字结合到一起。作为…

作者头像 李华
网站建设 2026/5/14 1:39:33

技术圈的“冒充者综合征”:为什么越优秀越觉得自己不够好?

测试工程师的隐秘困境当你成功定位了一个偶发崩溃的内存泄漏问题,或在回归测试中发现了那个连开发都惊叹的深层逻辑错误时,你获得的不是纯粹的喜悦,而是一种侥幸感:“这次只是运气好,下次肯定没这么走运了。” 当同事称…

作者头像 李华
网站建设 2026/5/14 1:36:06

当技术成为唯一身份标签:为什么你需要一个“非技术”爱好?

在软件测试的世界里,你每天都在与缺陷、用例、自动化脚本和JIRA工单打交道。你的专业价值,被精确地量化为“发现的Bug数量”“覆盖的异常场景”和“缩短的上线周期”。久而久之,一个隐形的标签悄然贴在了你的身上——技术人。你的思维模式、社…

作者头像 李华
网站建设 2026/5/14 1:33:03

PCAN脚本编程:从宏录制到自动化测试的进阶之路

1. PCAN脚本编程入门:从宏录制开始 第一次接触PCAN脚本编程时,我被它的强大功能震撼到了。想象一下,你不再需要手动点击发送按钮,而是让脚本自动完成所有重复性工作。PCAN的.mrc宏脚本就像是一个录音机,只不过它记录的…

作者头像 李华
网站建设 2026/5/14 1:22:06

C++协程从入门到放弃?不,是从入门到手搓调度器

目录 理解协程 1. 为什么需要协程? 2. 协程的三个关键字 3. 最简示例:从编译错误开始 协程的三大概念 1. Promise Type(承诺类型) 2. Awaitable 与 Awaiter 接口 3. coroutine_handle(协程句柄) 4…

作者头像 李华