Hexo 博客专属AI助手
本项目通过向量检索 + 大语言模型(RAG)结合本地 Hexo 博客内容,实现基于语义的智能问答接口。
项目地址:https://github.com/EvannZhongg/hexo-ai-assistant.git
项目结构
1 | 📁 D:/YourProjects/ |
执行原理(项目运行流程)
语义知识构建阶段(由
build_vector_store.py
执行):- 扫描博客的 Markdown 源文件,提取文章正文内容。
- 使用嵌入模型(如 BGE)生成语义向量。
- 构建
vector_store.json
和title_mapping.json
,供问答使用。
用户问答处理阶段(由
main.py
提供 API):- 用户通过前端发送提问。
- 后端提问向量化,与本地向量库匹配最相关文章。
- 拼接问答上下文(包含语义内容和标题索引)发给大语言模型。
- 模型生成带参考链接的回答,流式返回至前端。
前端问答展示阶段(由
chat.html
/chatbot.ejs
负责):- 用户界面加载聊天框,支持 Markdown 格式渲染和多轮对话。
- 请求被代理转发至本地后端或公网中转地址。
1. 安装依赖
建议使用虚拟环境:
1 | python -m venv .venv |
2. 配置项修改(hexo-ai-assistant/config.yml
)
1 | paths: |
3. 构建向量库 & 标题映射表
1 | python build_vector_store.py |
生成文件:
vector_store.json
: 含每篇文章的文本和语义向量title_mapping.json
: 含每篇文章的标题 + 主标题 + 链接
博客格式需遵循以下结构:
1 | --- |
4. 启动后端问答服务
1 | python main.py |
本地服务启动后默认监听:
1 | http://127.0.0.1:5000/ask |
你可以在浏览器中打开 chat.html
进行测试,查看是否可以正确输出回答。
5. 配置 Hexo
脚本
如果上述操作都正确执行后,将向量构建脚本接入 Hexo
构建流程
1.创建脚本文件 scripts/auto_vector.js
:
1 | const { exec } = require("child_process"); |
这个脚本的作用是在运行 hexo g
时,自动重构向量库保证所有博客均被项链化。
2. 在页面底部引入 ejs 文件
打开文件:
1 | themes/hexo-theme-Chic/layout/_partial/footer.ejs |
在 </footer>
标签之后添加以下代码:
1 | <%- partial('chatbot') %> |
新建文件 chatbot.ejs
在路径 themes\hexo-theme-Chic\layout\_partial\chatbot.ejs
1 | 将chatbot.ejs的代码拷贝至此处 |
运行以下命令,重新生成并启动本地预览:
1 | hexo clean |
效果如下:
6. 使用 Ngrok 暴露后端接口(可选)
在本地测试都没问题后,可以使用 Ngrok 暴露本地服务至公网
1 | ngrok http 5000 |
将 https://xxx.ngrok-free.app/ask
地址填入前端请求 chatbot.ejs
中:
1 | const response = await fetch("https://xxx.ngrok-free.app/ask", {...}); |
只使用 Ngrok 有网路安全问题,你可以自行设置代理保证你的端口不被暴露在公网中。
完整流程总结
- 写好博客(Markdown 文件),保证格式符合要求
build_vector_store.py
提取文本并生成向量main.py
启动问答服务并支持语义检索- 前端请求通过 Ngrok 访问服务
- 模型结合语义内容和标题表生成参考明确的回答
该项目代码基于 Hexo 和 hexo-theme-Chic 。