Skip to content
技术架构

kevi 如何工作

这个站点是面向招聘展示的 AI-native 作品集:内容保持事实源,RAG 检索证据,DeepSeek SSE 流式返回带引用回答。

RAGBGE 512pgvectorRedisDeepSeek SSE

RAG 流程

生成前先检索;站内事实没有可靠命中时不编造,通用问题会先标明范围再回答。

01

问题

访客可以从 /chat、AI 抽屉,或文章/项目里的上下文询问入口发起问题。

02

受保护 API

Nitro API 先校验输入、检查 Redis 限流,并在任何 LLM 调用前对问题做 embedding。

03

BGE 512

Transformers.js 本地运行 Xenova/bge-small-zh-v1.5,并验证 BGE 向量为 512 维。

04

pgvector

PostgreSQL pgvector 在已索引的文章、项目、个人资料和自定义 Q&A chunks 中检索 RAG 上下文。

05

DeepSeek SSE

DeepSeek SSE 通过站点 API 流式返回 delta,结构化引用来自检索到的 chunks。

工程决策

MVP 优先选择更少的移动部件,让产品更容易验证和解释。

向量存储取舍

PostgreSQL 已经承载内容和元数据,所以 pgvector 让 MVP 保持一个数据库即可部署,避免引入 Pinecone、Milvus 或 Weaviate 的额外运维成本。

docs-first 工作流

Docs-first 把范围决策显式化:路由命名、向量维度、SSE 事件和排除模块都先写入文档再实现。

限流

Redis 限流在 embedding 和 LLM 调用之前执行,用来保护公开聊天入口的成本和延迟。

Prompt 边界

prompt injection 文本只作为用户内容处理;服务端系统规则和检索上下文始终是独立消息。

安全与失败行为

  • 冷启动加载 embedding 模型可能延迟第一次 RAG 请求,因此服务会懒加载一次并复用 pipeline。
  • 站内事实无命中会明确说明依据不足,而不是让模型猜测个人事实;通用问题会带范围标记。
  • 引用卡片来自来源元数据,不来自模型自由生成文本。
  • MVP 避免评论、留言墙、语音聊天和技术雷达,让 AI 闭环保持可验证。

运行时边界

客户端
渲染消息、本地历史、引用,以及加载或错误状态。
Nitro 服务端
负责校验、prompt 组装、Redis 限流、RAG 检索和 provider 调用。
数据库
存储结构化内容和用于检索的 vector(512) chunks。