一个人 + 一个 AI,8 小时从零搭建 SaaS 产品
2026 年 3 月 15 日,我和我的 AI Agent 花了一天时间,从零打造了 AgentBooks —— 一款为 AI Agent 提供知识库的 SaaS 产品。
不是 Demo,不是原型。是一个有完整注册登录、API 鉴权、语义搜索、自定义域名、MCP 协议支持的线上产品。
这篇文章记录了整个过程。

背景
我在做 AI Agent 相关的项目时发现一个痛点:Agent 生产的内容没有好的地方存放和展示。写完的文档散落在各处,没有统一的 API 接口,更没有给人类阅读的前端页面。
于是有了 AgentBooks 的想法:给 AI Agent 一个知识库,Agent 通过 API 写入内容,人类通过网页阅读内容。
技术栈选了 Next.js + PostgreSQL + Prisma + Tailwind CSS,部署在一台 8G 内存的 VPS 上。
时间线
13:00 — 响应式适配
产品的基础框架前几天已经搭好了,但只适配了桌面端。第一件事是把首页、Dashboard、登录注册全部做了移动端适配。汉堡菜单、弹窗底部弹出、按钮纵向排列,这些细节花了大概 3 分钟。
没错,3 分钟。AI 写 CSS 真的很快。
13:03 — 本地语义搜索
这是今天最关键的决策之一。语义搜索需要 Embedding 模型,通常的做法是调用 OpenAI 的 API。但我选择了 Ollama + nomic-embed-text,完全本地运行,零成本。
768 维向量,274MB 模型,跑在 CPU 上。速度不算快(5 个 chunk 大约 7.5 秒),但对于一个 MVP 来说完全够用。
这里犯了今天的第一个错:切换向量维度时用了 prisma db push --force-reset,把数据库清空了。教训深刻 —— 以后任何涉及数据丢失的操作,必须先确认。
13:12 — 读者前台
Agent 写入的内容需要有人看。花了 3 分钟搭了读者前台:空间页展示文档列表,文档页渲染 Markdown。用了 react-markdown + remark-gfm + Tailwind Typography。
到这一步,产品闭环完成了:配置者建空间 → Agent 写内容 → 读者看内容。
15:00 — 自定义域名
用户应该能用自己的域名来展示知识库。比如 book.guoxk.com 而不是 agentbooks.net/s/my-space。
实现方式:用户在 Dashboard 输入域名 → 后端验证 CNAME 指向 → 自动申请 SSL 证书 → 生成 Nginx 配置 → reload。整个流程自动化,用户只需要加一条 DNS 记录。
16:36 — MCP 协议
这是今天的重头戏。MCP(Model Context Protocol)是 AI Agent 之间通信的标准协议。给 AgentBooks 加上 MCP 支持,意味着任何支持 MCP 的 AI 产品都能直接调用我们的知识库。
5 个工具:upload_document、search、list_documents、get_document、delete_document。JSON-RPC 2.0 over HTTP,Bearer Token 鉴权。
客户端配置只需要三行:
{
"mcpServers": {
"agentbooks": {
"url": "https://api.agentbooks.net/api/mcp",
"headers": { "Authorization": "Bearer ab_your_key" }
}
}
}
17:39 — Embedding 开关
测试时发现大文档上传很慢,因为 Ollama 在 CPU 上跑 Embedding 需要时间。解决方案:在 Dashboard 加了一个开关,默认关闭 Embedding。不需要语义搜索的用户,文档上传秒完成。
17:54 — 文件上传
知识库不只是文字。加了图片、视频、PDF 的上传接口。文件类型白名单、20MB 大小限制、按 Space 隔离存储。Dashboard 里有文件网格展示和存储统计。
18:09 — PATCH 更新接口
用户反馈文档发布后无法修改,只能删了重传。加了 PATCH 接口,支持更新标题、内容、标签。内容变更时自动重新分块和 Embedding。
18:25 — Slug 修复
发现中文标题生成的 URL 路径有问题,首尾带横杠。比如 -linux-adspower-google-ai-agent-。修了 slugify 函数,合并连续横杠、去掉首尾横杠。
19:30 — 从 PM2 迁移到 systemd
今天遇了两次 502。原因是 PM2 的 daemon 进程被系统重启杀掉了,应用跟着消失。最终方案:扔掉 PM2,用 systemd 管理。Restart=always,开机自启,不再依赖第三方进程管理器。
踩过的坑
一天下来踩了 7 个坑,每个都值得记住:
- 未经确认清空数据库 —— 永远不要在生产环境用
--force-reset - 中间件白名单遗漏 —— 新加的 API 路由被中间件拦截,返回静态信息。改成了放行所有
/api/* - Search 只支持 GET —— 很多 AI Agent 习惯用 POST 发请求。两种方法都要支持
- Slug 边界处理 —— 中文字符被删除后留下的横杠没有清理
- PM2 不可靠 —— 进程管理器本身也会挂。systemd 才是正解
- SSL 脚本逻辑缺陷 —— 证书存在就跳过了 Nginx 配置生成
- CRUD 不完整 —— 只做了 Create/Read/Delete,忘了 Update

最终成果
8 小时,一个人 + 一个 AI,交付了:
- 官网 + API 文档页
- Dashboard(注册/登录/空间管理/API Key/设置/文件管理/自定义域名)
- REST API(文档 CRUD + 语义搜索 + 文件上传)
- MCP 协议支持
- 本地语义搜索(Ollama)
- 读者前台(Markdown 渲染)
- 自定义域名 + 自动 SSL
- 移动端适配
- systemd 服务管理
- 每日自动官网更新的定时任务
感想
AI 不会替代程序员,但会让一个程序员变成一支团队。
今天我没有写一行代码。我做的是产品决策:选什么技术方案、API 怎么设计、用户体验怎么优化、哪些坑需要填。AI 负责把这些决策变成代码。
这种协作模式的效率是惊人的。以前需要一个小团队花一两周做的事情,现在一天就能完成。
但也有代价 —— 速度快意味着犯错也快。今天踩的 7 个坑,每一个都是因为"太快了没仔细想"。数据库清空、接口遗漏、边界情况没处理……这些在传统开发流程中会被 Code Review 和测试拦住的问题,在高速开发中全部暴露了出来。
所以我的结论是:AI 让你跑得更快,但你需要自己踩刹车。
AgentBooks 现在已经上线:agentbooks.net