一个为 Typecho 博客系统设计的 AI 对话插件,适用于所有 Typecho 主题。支持创建独立 AI 对话页面和在文章/页面中使用短代码嵌入聊天窗口。
本插件基于Xuan's blog改善,适用了所用Typecho主题,原项目地址见:https://blog.ybyq.wang/archives/836.html
✨ 功能特性
- 🔌 全主题通用:不依赖任何特定主题,兼容所有 Typecho 主题
- 📝 两种使用方式:独立页面模板 + 文章短代码嵌入
- 🤖 多模型支持:支持所有 OpenAI 兼容格式的 API
- 💾 对话历史:登录用户云端同步,游客本地存储
- 📱 响应式设计:完美适配桌面和移动端
- 🎨 独立样式:自带美观的聊天界面,不与主题样式冲突
- 🚀 零依赖:移除 jQuery 依赖,纯原生 JavaScript
- ⚙️ 丰富配置:系统提示词、窗口高度、嵌入方式等可自定义
插件下载:
https://github.com/chenyuwebwawa/AiChat/
🚀 安装方法
1. 上传插件
将整个 AiChat 文件夹上传到 Typecho 的 usr/plugins/ 目录下。
2. 激活插件
- 登录 Typecho 后台
- 进入"控制台" → "插件管理"
- 找到"AiChat"插件,点击"激活"
3. 配置插件
在插件设置页面配置以下参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
| AI API接口地址 | OpenAI 兼容格式的 API 地址 | https://api.deepseek.com/v1/chat/completions |
| AI API Key | 您的 API 密钥 | - |
| AI 模型 | 使用的模型名称 | deepseek-chat |
| 温度参数 | 控制回复随机性 0.0-1.0 | 0.7 |
| 最大回复长度 | 单次回复最大 token 数 | 2000 |
| 系统提示词 | 设置 AI 的角色和行为 | - |
| 嵌入方式 | 选择插件的使用方式 | 同时支持 |
| 聊天窗口高度 | 聊天区域高度(像素) | 450 |
📖 使用方法
方法一:创建独立对话页面(推荐)
- 在 Typecho 后台进入 管理 → 独立页面
- 点击 新增页面
- 在右侧 自定义模板 下拉框中选择 "AI Chat Plugin (通用版)"
- 填写页面标题(如:"AI助手")
- 发布页面即可
方法二:在文章/页面中嵌入聊天窗口
在任何文章或页面的内容中,使用短代码:
[aichat]即可在文章内容中嵌入聊天窗口!
示例:
## 欢迎与我对话
如果您有任何问题,欢迎使用下方的 AI 助手:
[aichat]
感谢您的访问!方法三:若以上方法都不适用
开启插件后访问:您的域名/ai-chat
🔌 支持的 API 服务
插件支持所有 OpenAI Chat API 兼容格式的服务,包括但不限于:
| 服务商 | API 地址 | 模型示例 |
|---|---|---|
| DeepSeek | https://api.deepseek.com/v1/chat/completions | deepseek-chat |
| OpenAI | https://api.openai.com/v1/chat/completions | gpt-3.5-turbo, gpt-4 |
| Kimi | https://api.moonshot.cn/v1/chat/completions | moonshot-v1-8k |
| 通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions | qwen-turbo |
| 文心一言 | https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop | ernie-bot |
| 其他 | 任意兼容 OpenAI 格式的接口 | - |
📋 系统要求
- Typecho 1.2+
- PHP 7.2+ (推荐 7.4+)
- 服务器支持 cURL 扩展
- MySQL 5.6+ / MariaDB 10.1+
🔧 故障排除
问题1:自定义模板不显示
解决方案:
- 重新激活插件
- 清除浏览器缓存后刷新后台页面
问题2:短代码不生效
解决方案:
- 确保短代码拼写正确:
[aichat](小写,无空格) - 在插件设置中确认"嵌入方式"设置为"短代码嵌入"或"同时支持"
问题3:API 请求失败
解决方案:
- 检查 API Key 是否正确
- 确认服务器可以访问外网
- 检查 cURL 扩展是否启用
- 查看 PHP 错误日志获取详细信息
问题4:聊天窗口样式异常
解决方案:
- 这是新版 v2.0 的重点优化!现在应该不会出现了
- 如仍有问题,请在插件设置中调整聊天窗口高度
问题5:对话历史无法保存
解决方案:
- 游客:检查浏览器是否禁用了 localStorage
- 登录用户:检查数据库表是否创建成功
🆚 v2.0 改进说明
相比旧版本,v2.0 通用版做了以下重大改进:
- 主题兼容性:彻底移除 Handsome 主题依赖,适用于 所有 Typecho 主题
两种嵌入方式:
- 独立页面模板(原方式)
[aichat]短代码,可嵌入任意文章/页面
技术优化:
- 移除 jQuery 依赖,使用纯原生 JS
- 独立的 CSS 命名空间,避免样式冲突
- 自动注入 CSS 和 JS,无需修改主题
新增配置项:
- 系统提示词配置
- 聊天窗口高度自定义
- 嵌入方式选择
- 代码优化:更规范、更高效、更易维护
📄 更新日志
v2.0.0 🌟 通用版重大更新
- ✨ 全主题通用:移除对 Handsome 主题的依赖,兼容所有 Typecho 主题
- ✨ 短代码支持:新增
[aichat]短代码,可在文章中嵌入聊天窗口 - ✨ 移除 jQuery:纯原生 JavaScript 实现,减少依赖
- ✨ 自动注入:CSS 和 JS 自动注入页面,无需手动修改主题
- ✨ 系统提示词:新增自定义系统角色配置
- ✨ 独立命名空间:所有 CSS 类加前缀,避免样式冲突
- ✨ 新增配置:聊天窗口高度自定义、嵌入方式选择
- 🔧 代码重构:优化代码结构,提升可维护性
v1.3.1
- 优化 PJAX 兼容性(Handsome 主题专用)
- 重构前后端分离架构
v1.0.0
- 初始版本发布
📞 技术支持
如遇到问题,请:
- 检查插件配置是否正确
- 查看浏览器控制台(F12)是否有错误
- 检查 PHP 错误日志
- 确认 API 服务可正常访问
享受您的 AI 对话之旅! 🎉
本文来自投稿,不代表本站立场,如若转载,请注明出处:


刚刷到这个 说真的第一反应是 又有人给typecho写插件了 不容易啊 typecho这玩意多久没更新了 我那个站还停在1 2 一堆插件早就不维护了 所以看到新的还挺高兴 但是吧 我看到那句 适用于所有Typecho主题 我就笑了 这话我是不太信的 兄弟 我自己用过至少五六个主题 每个主题的css命名习惯都不一样 有的用rem 有的用px 有的把全局字号设成14px 你插件塞进去 界面能不变形 我不信 除非你用了shadow dom 那还行 要是没做 迟早有人去你github提issue 说在他主题上聊天框挤成一坨 作者说基于Xuan's blog改善 我还特意去翻了原地址 原来那个确实只能用在特定主题 所以这个改动能说是有进步 这点得承认 不过我最关心的不是这个 我最关心的是api key存哪 后台配置页填的那个key是不是明文存数据库 我猜大概率是 因为typecho插件的配置就是那么存的 塞在options表里 那问题就来了 你博客但凡被人拖了库 或者你自己手滑把数据库导出来发群里 那个key就跟着出去了 到时候人家拿你的key猛刷gpt4 你第二天起来看账单 人傻了 这种事我真见过 不是我 是我一个群友 他装的一个插件也这么搞 后来账单两百多刀 找谁说理去 平台又不认 只认key是你的 所以我是真心建议作者 至少后台那个key输入框做成密码样式 页面别回显 另外加一句提示 告诉用户 万一泄露赶紧去后台吊销 再狠一点 可以在服务端做个中转 别让前端直接拿key去请求 虽然多一层 但安全多了 还有那个短代码 文章里嵌入 我一开始觉得挺方便 后来一想 不对 typecho的文章内容是走markdown解析的 你把短代码写在正文里 编辑器会不会把它当普通文字 或者你那个hook是在什么时机处理的 如果是在正文输出之后处理 那还好 如果是在markdown解析之前 那段方括号可能就被吃了 或者被转义 显示成一堆乱码 我没测 但我觉得这里容易翻车 而且就算能显示 一个聊天框夹在文章中间 上下都是正文 视觉上有点怪 我要是读者 我滑到一半突然看到个输入框 我会以为我点错了 独立页面那个方式我觉得更靠谱 干净 不跟正文打架 但独立页面又有个问题 它得走主题的header和footer 那些老主题 有的header里塞了一堆全局样式 有的footer里又加载一堆脚本 你这聊天框夹在中间 谁知道会不会被谁覆盖 响应式设计说得好听 但手机上那个软键盘一弹 页面会不会被顶上去 输入框会不会被挡住 这个不实测真不知道 我自己就遇到过 一个移动端聊天框 键盘一弹 输入框直接跑到屏幕外面去了 用户根本看不见自己打啥 气得我当场卸了 游客本地存储 登录用户云端同步 这个设计思路我理解 就是不想逼游客注册嘛 挺好 但云端同步存哪 是新建表还是塞进typecho自带的表里 如果是新建表 卸载插件的时候有没有删干净 我以前装过一个插件 卸了之后数据库里留了两张空表 强迫症看着难受 还得自己手动去drop 还有游客那个localStorage 清一次浏览器缓存就没了 对话记录全丢 用户会不会骂你 要不要给个提示 或者干脆允许导出 零依赖 移除jQuery 这个我要点个赞 真的 老插件十个里有八个依赖jQuery 现在主题都不带jQuery了 一装就报jQuery is not defined 烦得很 用原生js写fetch挺好 又小又快 还能顺手用fetch的流式输出 那个打字机效果 用户看着爽 说到流式 你这插件是流式还是一口气返回的 要是一口气返回 那用户得等好几秒 屏幕一片空白 体验差挺多 流式的话要处理SSE 前端还得拼chunk 稍微麻烦点 但值 温度参数默认0 7 我觉得聊天场景0 7有点飘 你可以调到0 3到0 5更稳一点 尤其是做博客问答 你一飘就开始编 编得比真的还像 我吃过这个亏 之前拿AI回答技术问题 它给我编了个根本不存在的函数 我还当真了 查了半小时文档才发现是它瞎说的 从那以后我调温度都往低了压 宁可它笨一点 也别胡说 最大回复长度2000 token 也算合理 再长用户也懒得看 系统提示词那个框 我觉得可以预设几个模板 比如技术问答一个 闲聊一个 客服一个 直接选 省得新手不知道该写啥 说到编 就得说内容安全 你把AI挂在自己博客上 等于开了个公开接口给全世界用 有人上来问一些奇怪的东西 你的api那边可能会触发风控 轻则警告 重则封号 而且你博客的服务器IP也会被记录 万一出了事 你解释不清 说这是网友问的不是我问的 人家信吗 我不是危言耸听 概率不大但也不是零 建议作者加个简单的频率限制 比如同一个IP一分钟最多几次 再加个词过滤 哪怕就过滤几个关键词也行 挡一挡 还有token用量 最好有个统计面板 让人今天就知道烧了多少钱 不然月底一看账单又傻眼 现在deepseek挺便宜 当默认确实是个聪明选择 但有人非要上gpt4 那就得提醒他一句 你这是拿钱当柴火烧 多模型支持这个点我挺喜欢 所有openai兼容格式 那就是说 ollama 也能接 localhost那个地址填进去就行 还有像one-api这种中转 一个key接一堆模型 特别适合折腾的人 你要是能在文档里提一句 会加分不少 还有个现实问题 你这插件挂在博客上 真的有人用吗 我说句扎心的 现在大部分个人博客 一天访问量能有几十个ip就不错了 文章下面评论都没几条 你放个AI聊天 大概率是零对话 我自己那个站 装过类似的东西 三个月一共三个人跟它聊过 其中一个还是我自己 测试用的 所以我觉得这插件更适合两种人 一种是技术博客 拿来做问答知识库 读者查文档方便 确实有用 前提是你自己把文档喂给它 另一种就是纯粹折腾玩 图个乐 那也行 我也属于这种 明知道没人用还是想装 装完截图发群里 爽 下载地址那个我提一句 有些兄弟网络不好 github打不开 或者clone到一半断了 作者能不能顺手在releases里打个zip包 或者放个别的盘也行 别嫌麻烦 真的有人需要 还有readme最好写清楚 最低php版本是多少 typecho最低多少 有没有依赖curl扩展 别让人装一半报错 然后来评论区问你 你又不在 多尴尬 我自己php 7 4 不知道你这个要求是多少 有空补一句 最后说个版权的事 作者写了基于Xuan's blog改善 原项目地址也贴了 这点做得对 但我建议再明确一下 是fork还是参考 改了哪些 有没有沿用原来的部分 最好在readme里写清楚 免得以后原作者看到了不高兴 开源圈这种事最容易起争议 提前写好 大家都省心 还有插件名 AiChat 这名字太通用了 搜一下能搜出一堆同名的 建议加个前缀 或者作者id 省得跟别人撞 行 我啰嗦完了 总结一下我的看法 插件本身思路没问题 该有的功能基本都有 全主题通用这点我保留意见 得实测 api key安全那块是最大的坑 内容安全和频率限制是必须要加的 不然早晚出事 短代码嵌入我持怀疑态度 独立页面更稳 我回头找个测试站装一下 有问题我再来这贴 😂 对了 忘记说了 你那聊天窗口高度默认450 在手机上是不是有点高 建议给个百分比或者vh 让它自适应 别写死像素 🤔
api key塞前端 等着被薅吧
说真的 这个插件我装了又卸了 折腾了两个晚上 先别急着喷我 我用的主题是handsome 按理说用户量够大了吧 结果嵌入文章那个短代码 在首页列表里直接把我整个布局搞崩了 侧边栏跑到底部去了 后来才发现得在设置里手动加个什么容器类名 但文档里根本没写 我是翻源码才找到的 还有就是API Key的问题 你放在插件配置里 那所有看到你页面源代码的人 都能从js里把你key抠出来 我试了下 确实能 直接访问你后台那个请求接口 连个鉴权都没有 只要知道你的key 别人就能拿你的额度去聊天 这可不是小事 要是被刷爆了 一个月账单够你喝一壶 不过话又说回来 对于那种懒得折腾的人 这插件确实省事 我试了下deepseek的接口 响应速度还行 聊天窗口那个气泡动画也挺顺滑 比我自己之前拼的iframe强多了 但你要让我说推荐不推荐 我只能说 博客折腾党的福音 懒人的坑 顺便问一句 作者有没有考虑过做个用户级别的限额功能 就是每个访客一天能聊多少条 超了就不给用了 这样就算key泄露了 损失也有限 不然我是真不敢在公网上挂这个
卧槽,刚看到这个插件,第一反应是 Typecho 终于也有人搞这玩意儿了。我之前一直在自己博客上折腾各种 AI 聊天,试过把 ChatGPT 的 iframe 直接嵌进去,丑得一批不说,每次加载还卡半天。你这个零依赖、纯原生 JS 倒是挺对我胃口,毕竟我那破主题加载个 jQuery 都嫌重。 不过话说回来,「适用于所有 Typecho 主题」这话我从不敢信。Typecho 主题圈有多野你又不是不知道,有些人写主题连标准的 `page.php` 模板都懒得做,直接一个 `index.php` 通吃所有页面。你那个独立页面模板「在右侧自定义模板下拉框里选」——好家伙,要是主题压根没定义自定义模板功能,下拉框直接没得选,咋整?你说方法三可以走 `/ai-chat` 路由,那这个路由是插件自己注册的吗?跟某些主题的伪静态规则撞了咋办?会不会直接 404 给用户看?你得把 fallback 逻辑写清楚一点啊。 再一个就是 API key 的安全问题。这个我必须得喷一下,你插件配置文件里直接明文存 API Key 对吧?Typecho 插件设置项都是塞数据库的,万一哪天博客被拖库或者后台密码泄露,key 直接就裸奔了。如果是像 wordpress 那个 AI 插件一样把 key 放环境变量或者单独一个 php 文件里,至少心理上能安全点。跑个题,我有个朋友之前就是把某个平台的 key 写进博客配置文件,后来发现被人盗刷了几百块,真是日了狗了。虽然你说支持所有 OpenAI 兼容格式的 API,但建议文档里加一个「建议使用环境变量或配置文件存储密钥」的提示,能救一个是一个。 还有一个细节,游客对话历史存 localStorage,这个我得说太拉了。且不说不换浏览器的问题,你知道有些用户(比如我)是开无痕模式的吗?关掉窗口记录全没了,下次继续对话的时候 AI 一脸懵,还得重新教它一遍背景。你还不如直接用 IndexedDB 做,或者干脆游客不存历史、省点空间,省得给了希望又让人失望。 不过说真的,你这插件有个小细节我挺喜欢——「窗口高度可配置」,默认 450 像素。这玩意儿听起来小,对强迫症博主来说真是救命稻草。我之前用别的插件,高度写死 600 像素,在手机上看聊天框占大半屏幕,往下滑都费劲。你现在写了响应式设计,那手机端高度是不是也自适应?还是说直接继承桌面端高度?有空的话可以在文档里补一句移动端的具体表现,不然装完了还得自己调半天 CSS。 最后说下原项目的事。你说基于 Xuan's blog 改善,还给了一个原项目地址。这个态度没毛病,开源就该这样。但你既然都改了,好歹列个 change log 吧?不然别人根本不知道你改了个啥。是加了多模型支持,还是重写了前端?我打开你 GitHub 仓库也只看到 README 里一堆功能特性,没看到和新版本的比较。你让后来者怎么选?直接闭眼装你的版本吗?万一人家原版的某些功能恰恰是你砍掉的,那不蛋疼了。 不过整体而言,如果这玩意儿真能像你说的那样,在任意主题下都能跑得起来,那对我来说已经够香了。我那个破 Typecho 博客,主题是好多年前买的,作者早跑路了,到现在啥插件都兼容不上。反正先装下来试试,要是出问题我再回来喷你,别跑。
又要填API key又要配模型,折腾半天不如直接挂个链接,真服了。