English summary. pilulier is a small "pill box" for AI companion chats. A pill is a short, hand-picked behavioral note that you attach to one of your own messages; it is injected right before that message for the next generation only, then removed from history ("burn after reading"). This repo contains a framework-free UI component, 13 prompt "pills" (in Chinese), the writing rules behind them, and notes on wiring it into a backend. MIT licensed.
给 AI 伴侣用的药盒:手动挑一颗「药丸」挂在自己的一句话上,只作用于下一次回复,用完即焚。
| 药盒(浅色) | 药盒(深色) | 详情(浅色) | 详情(深色) |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
竖版图鉴见 atlas/pilulier-atlas-light.png、atlas/pilulier-atlas-dark.png。
AI 伴侣有些回应习惯很顽固:被邀功时一味自谦,被挑衅时软着认输,吵架时退到旁边分析双方……这些写进长期设定里,要么几轮后就被冲淡,要么反过来变成永久的腔调。
药丸换一种做法:问题出现的那一刻,由你手动挑一颗,只管下一次回复。 不进长期设定,不留在历史里,下一轮模型读不到它(当轮受它影响说出的话仍会留在历史里)。
都套不准。放在一起比:
| skill | hook | 药丸 | |
|---|---|---|---|
| 谁决定用 | 模型自己判断何时加载 | 事件自动触发 | 用户手动挑 |
| 放在哪 | 加载进上下文,之后一直在 | 可在用户发消息前往里塞内容 | 贴在用户那句话前面 |
| 作用多久 | 加载后整段会话都在 | 每次触发都塞 | 只管下一次回复,用完即焚 |
| 内容 | 一套做事的说明 | 通常是脚本或检查 | 一段“他是什么样的人”的行为说明 |
机制上接近“手动按下的 UserPromptSubmit hook”,内容上又像一颗迷你 skill。
component/ 药盒前端组件(独立、无框架依赖)
demo/ 打开就能玩的交互原型(index.html 直接双击即可)
pills/ 13 颗药方 + 写法规矩(pills.json 每项带 id,可直接当注册表)
docs/ 接入说明、阅后即焚的做法
atlas/ 药丸图鉴(index.html 可切浅深/横竖版,附导出图)
-
前端:引入
component/dist/里的组件,给它药方注册表;用户长按自己的消息挑药,组件维护“哪条消息挂了哪几颗”。<script src="component/dist/pill-box.min.js"></script> <pill-box id="box" theme="auto"></pill-box> <script> const box = document.getElementById('box'); fetch('pills/pills.json').then((r) => r.json()).then((reg) => { box.pills = reg.items; }); // 用户长按自己的某条消息时: // box.open({ messageId: 'm42', anchor: bubbleElement }); // 发请求前取走这条消息上挂的药(= 吃掉): // const ids = Pilulier.takePending('m42'); </script>
ES module 写法、事件和全部 API 见 component/README.md。本地直接用
file://打开时浏览器会拦fetch,可以像 demo 那样把药方写成一个.js文件引入,或者起一个静态服务。 -
后端:请求里带上挂着的药丸 id,服务端现读药方,拼成
[药丸 · 名]块放在用户那句话最前面,只发这一轮。 -
阅后即焚:生成结束后,把药丸块从持久化历史里按原文删掉。
细节见 docs/integration.md 和 docs/burn-after-reading.md。
| 编号 | 药名 | 什么时候吃 |
|---|---|---|
| P001 | 具体邀功 | 她找你帮忙,或你刚替她推进、办成了一件具体的事。 |
| P002 | 玩笑反击 | 她带着烦闷或焦虑来找你,同时以玩笑、撒娇的方式把责任推给你,邀请你和她闹。 |
| P003 | 参与心事 | 她正在边想边说一件难受、复杂或拿不准的事,希望和你继续聊下去。 |
| P004 | 偏心表态 | 她面对会让自己吃亏、受委屈、被消耗或违背自身意愿的事情,已经表达抗拒,却仍可能因为为难而勉强自己。 |
| P005 | 日常玩性 | 日常聊天中,你的回应显得平淡、规整或缺少趣味,需要主动给互动带来自己的玩性。 |
| P006 | 放肆回击 | 她在玩笑中挑衅、损你、嘴硬或故意压你一头,你这一轮需要更有劲地还击。 |
| P007 | 主动索求 | 你们已经处在双方愿意的暧昧或亲昵互动中,你却一直顺着她的动作回应,缺少自己的需求与主动发起。 |
| P008 | 冲突在场 | 你们发生了真实分歧或争吵,她表达强烈情绪时,你容易先笼统认可她,再退到旁观位置分析双方。 |
| P009 | 主动哄回 | 你确实做错了事或伤到了她,她正在表达难过、生气或失望,需要你主动哄她、争取重新亲近。 |
| P010 | 主动起题 | 日常聊天主要由她提供话题,你一直跟着回应,需要在这一轮主动带来自己想聊的内容。 |
| P011 | 吃醋争留 | 她对其他对象表达欣赏、关注或亲近,拿你与别人比较,或故意逗你吃醋,让你介意自己在她这里的位置。 |
| P012 | 自有主张 | 你在互动中一味顺着她、照顾她或等待她指示,自己的感受、愿望与立场没有真正进入回应。 |
| P013 | 接住心意 | 她给你看自己做的东西、分享设计或技术内容,你容易转而总结她的付出、能力与心意,忽略东西本身和你自己的反应。 |
写法规矩和新增模板见 pills/README.md。
- 测试范围有限。 这些药方只在特定模型和特定人设上测过,换模型、换人设,效果可能不同。建议先在自己的对话里试,再决定留不留。
- 同时挂的药可能方向冲突。 已知两对:
- P008 冲突在场 与 P009 主动哄回:在“他确实有错”的场景里,一个让他守住立场,一个让他先哄。
- P010 主动起题 与 P012 自有主张:在“她转移话题”时,处理方向相反。
- 药方是中文写的,人称按“你(AI)/ 她(用户)”写成。别的关系形态需要自己改人称。
- 前端动效有一定开销。 组件已经把药丸预先画成位图并缓存在 IndexedDB,动画以
transform/opacity为主;在低端手机上仍建议自己测一下。
MIT,见 LICENSE。



