关键组件说明

1. 用户端

  • 浏览器:访问 tianlejin.top,加载前端 JS/CSS,发起聊天请求

2. Cloudflare 网络

  • CDN:缓存静态资源(12小时),提供 DDoS 防护和全球加速
  • Tunnel:内网穿透服务,映射规则:tianlejin.toplocalhost:50001

3. Web 层

  • Nginx (localhost:50001):
    • 静态文件服务:/home/tianlejin/myblog/txm_blog/public
    • API 反向代理:/chathexo-api/*127.0.0.1:4317
    • 通过 Cloudflare Tunnel 暴露到公网域名 tianlejin.top
  • Hexo (localhost:4000):
    • 开发预览服务器(执行 hexo s 启动)
    • 仅本地使用,不参与生产环境
    • 构建命令 hexo g 生成 public/ 目录和 index.json

4. 应用层

  • FastAPI (127.0.0.1:4317):提供 /chathexo-api/chat 接口
  • LangGraph Agent:多轮对话管理,工具调用编排(ReAct 模式)
  • RAG 模块:向量检索 + 上下文生成

5. 数据层

  • index.json:博客文章元数据(标题、内容、标签等)
  • FAISS 缓存:1556 个文本块的向量索引(25MB)
  • MemorySaver:基于 thread_id 的会话状态管理

6. 远程 AI 服务

  • Embedding API (192.168.205.183:51001):Qwen3-Embedding-8B,文本向量化
  • Chat API (172.21.8.164:12480):Qwen3.5-35B-A3B,对话生成

数据流说明

用户聊天请求流程

  1. 用户在浏览器访问 tianlejin.top 并输入问题
  2. 请求路径:浏览器 → Cloudflare CDN → Cloudflare Tunnel → localhost:50001 (Nginx)
  3. Nginx 反向代理:/chathexo-api/chat127.0.0.1:4317 (FastAPI)
  4. FastAPI 调用 Agent,传入 querythread_id
  5. Agent 根据问题类型选择工具:
    • 语义搜索 → rag_tool → FAISS 检索 → Embedding API
    • 关键词搜索 → grep_tool → 直接读取 index.json
    • 列表查询 → list_posts → 直接读取 index.json
  6. Agent 调用 Chat API 生成回答(ReAct 推理)
  7. 返回结果:FastAPI → Nginx (localhost:50001) → Tunnel → CDN → 浏览器

索引构建流程

  1. 开发阶段:hexo s 启动开发服务器 (localhost:4000),本地预览博客
  2. 部署阶段:hexo clean && hexo g 生成静态文件到 public/ 目录
    • 包括 public/chathexo/index.json(所有文章元数据)
    • Nginx 提供 public/ 目录的静态文件服务
  3. 首次调用 rag_tool 时:
    • 读取 ../public/chathexo/index.json
    • 文本分块(1556 块)
    • 调用 Embedding API 向量化
    • 构建 FAISS 索引并缓存到 .cache/faiss_index(耗时 ~85 秒)
  4. 后续调用直接加载缓存(除非手动删除或重新构建)

性能指标

  • 索引构建时间:85.61 秒(1556 文本块)
  • 索引大小:25MB (index.faiss) + 2.9MB (index.pkl)
  • CDN 缓存时间:12 小时
  • 后端运行时间:15+ 小时(稳定运行)