界面上只差一个开关,后端差的是「这把 Key 属于谁」:
| 模式 | Key 在哪 | 怎么计费 |
|---|---|---|
| 账号配额 | 存在云端,客户端拿不到 | 消耗激活码次数,用户零配置 |
| 自备 Key | 存在浏览器本地,不上传 | 不消耗次数,直连用户自己的服务商 |
渲染换成成熟组件
7.0.0 里是一套手写正则,把 AI 回复转成 HTML。碰上表格、列表、代码块和公式就会散架。7.1.0 直接换成现成的库:
| 组件 | 版本 | 许可 | 作用 |
|---|---|---|---|
| markdown-it | 14.1.0 | MIT | Markdown 解析:标题、列表、表格、代码块、引用 |
| KaTeX | 0.16.22 | MIT | 数学公式排版,随包 13 个 woff2 字体 |
| markdown-it-texmath | 1.0.0 | MIT | 把 Markdown 里的公式段落交给 KaTeX |
var md = markdownit({
html: false, // AI 返回的原始 HTML 一律转义,不当标签用
linkify: true,
breaks: true,
}).use(texmath, {
engine: katex,
delimiters: 'dollars', // 支持 $...$ 与 $$...$$
katexOptions: { throwOnError: false }, // 公式写错只标红,不中断整段
});两个开关的取舍
html: false—— AI 回复里的标签全部转义成可见字符。模型被诱导吐出<script>也只显示成一行文字,不会执行。throwOnError: false—— 公式写错时 KaTeX 把那一段标红并显示原文,后面的内容照常渲染。一处公式写坏,不会让整条消息变空白。