项目介绍
博客问答 Agent 是运行在技术博客上的匿名 AI 助手。读者用自然语言提问,系统只依据已发布文章回答,并附上原文链接。
它从 WordPress 同步文章,按标题与段落切块、向量化后写入 PostgreSQL,使用 LangGraph 编排「改写 → 检索 → 生成」,通过 SSE 流式返回答案。
技术栈
- 后端:Python 3.14、FastAPI、SQLAlchemy 2.1 async
- 数据:PostgreSQL(pgvector + pg_trgm)、Redis db5
- RAG:LangChain 1.x、LangGraph 1.x
- 模型:Ollama Embedding + OpenAI 兼容对话模型
- 前端:原生 JS / CSS 博客悬浮挂件
功能清单
| 模块 | 功能 |
|---|---|
| 文章同步 | WordPress REST 增量同步、手动全量同步、分类与文章元数据 |
| 内容处理 | HTML 正文提取、按标题/段落切块、embedding、pgvector 入库 |
| 检索编排 | 问题改写 → 向量/关键词检索 → 无结果重试 → 生成 |
| 多轮对话 | 有历史时把追问改写成独立问题,只带最近 N 轮上下文 |
| 范围识别 | scope=auto 自动判断是否只查当前文章 |
| 流式回答 | SSE 事件:meta / delta / noAnswer / error / done / followups |
| 引用溯源 | 返回文章标题、链接与片段,前端可点击跳转 |
| 追问建议 | 回答完成后生成 2~3 个追问,可关闭 |
| 额度限流 | 匿名 IP 每日额度、Redis 计数、429 与 Retry-After |
| 站长面板 | 最近问答、未答出问题、耗时、tokens 与来源 |
技术架构
博客挂件
↓
Nginx /blog-agent-api
↓
blog-agent :18016
├─ PostgreSQL blog_agent
├─ Redis db5
├─ Ollama Embedding
└─ 对话模型
WordPress → sync → blog_post
首轮没有历史时不调用改写模型;多轮追问才先改写再检索。检索不到依据时直接返回未找到,不调用对话模型编造答案。