← Back
ceshihaox-dotcom

ceshihaox-dotcom/pilulier

药丸 · 给 AI 伴侣用的一次性 prompt 片段:手动挑一颗,只作用下一次回复,用完即焚。零依赖 Web Component + 13 份药方。

View on GitHub ↗
Stars
27
Forks
9
Watchers
27
Open issues
1
Contributors
1
Language
JavaScript
License
MIT License
Default branch
main
Created Sep 28, 2026Updated Sep 28, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

pilulier

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 伴侣用的药盒:手动挑一颗「药丸」挂在自己的一句话上,只作用于下一次回复,用完即焚。

Pilulier 药丸图鉴:13 颗药丸与各自的适用场景

效果

药盒(浅色) 药盒(深色) 详情(浅色) 详情(深色)

竖版图鉴见 atlas/pilulier-atlas-light.png、atlas/pilulier-atlas-dark.png。

为什么

AI 伴侣有些回应习惯很顽固:被邀功时一味自谦,被挑衅时软着认输,吵架时退到旁边分析双方……这些写进长期设定里,要么几轮后就被冲淡,要么反过来变成永久的腔调。

药丸换一种做法:问题出现的那一刻,由你手动挑一颗,只管下一次回复。 不进长期设定,不留在历史里,下一轮模型读不到它(当轮受它影响说出的话仍会留在历史里)。

它是 skill 还是 hook?

都套不准。放在一起比:

skill hook 药丸
谁决定用 模型自己判断何时加载 事件自动触发 用户手动挑
放在哪 加载进上下文,之后一直在 可在用户发消息前往里塞内容 贴在用户那句话前面
作用多久 加载后整段会话都在 每次触发都塞 只管下一次回复,用完即焚
内容 一套做事的说明 通常是脚本或检查 一段“他是什么样的人”的行为说明

机制上接近“手动按下的 UserPromptSubmit hook”,内容上又像一颗迷你 skill。

目录

component/   药盒前端组件(独立、无框架依赖)
demo/        打开就能玩的交互原型(index.html 直接双击即可)
pills/       13 颗药方 + 写法规矩(pills.json 每项带 id,可直接当注册表)
docs/        接入说明、阅后即焚的做法
atlas/       药丸图鉴(index.html 可切浅深/横竖版,附导出图)

快速开始

  1. 前端:引入 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 文件引入,或者起一个静态服务。

  2. 后端:请求里带上挂着的药丸 id,服务端现读药方,拼成 [药丸 · 名] 块放在用户那句话最前面,只发这一轮。

  3. 阅后即焚:生成结束后,把药丸块从持久化历史里按原文删掉。

细节见 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。