wikipedia-semantic-search
基于 Upstash Vector 的 Wikipedia 向量语义搜索 + RAG 对话系统,支持
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Upstash Vector 的 Wikipedia 向量语义搜索 + RAG 对话系统,支持
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你是否曾经遇到这种情况:明明知道想查什么,却不知道该用什么关键词?比如想知道「哪些国家曾经举办过世博会」,用传统关键词搜索很难找到精确答案——但如果你用中文说「世博会举办国」,向量数据库却能立刻理解你的意图,返回真正相关的文章。这种「语义理解」式的搜索体验,正是 upstash/wikipedia-semantic-search 所要呈现的。
upstash/wikipedia-semantic-search 是由 Upstash 团队开源维护的一个完整 RAG(检索增强生成)系统演示项目。Upstash 是一家专注于 Serverless 数据解决方案的云服务商,该项目旨在展示其向量数据库(Upstash Vector)和 RAG Chat SDK 的强大能力。
项目的核心思路非常清晰:
从代码结构来看,这是一个典型的 Next.js 14 全栈应用,技术栈选型非常现代。
后端服务层(src/lib/):
dbs.ts — 同时初始化 Upstash Vector 索引和 Upstash Redis:Vector 负责存储文章向量(带 WikiMetadata 元数据),Redis 负责管理对话会话状态rag-chat.ts — 核心 RAG 逻辑:基于 @upstash/rag-chat SDK 构建,引入 OpenAI GPT-4o 作为 LLM,使用自定义 Prompt 约束模型仅依据检索到的上下文作答,避免幻觉actions.ts — Server Actions,封装了向量检索和消息管理逻辑前端组件层(src/components/):
SearchTab.tsx — 纯向量检索模式:用户输入查询词 → 调用向量相似度搜索 → 按 score 排序展示 Wikipedia 条目ChatTab.tsx — RAG 对话模式:基于 ai/react(Vercel AI SDK)实现流式对话,将对话历史和上下文一起发送给 GPT-4o 生成回答LocaleSelect.tsx — 语言切换,11 种语言对应 11 个 Vector namespace,切换后检索范围随之改变部署架构方面值得注意的是:整个系统依赖三个外部服务——Upstash Vector(向量存储)、Upstash Redis(会话存储)、OpenAI API(LLM),全部通过 REST API 连接,属于典型的 Serverless 架构,没有自托管向量数据库的必要,非常适合快速原型验证。
语义搜索模式 的工作流程是:用户输入自然语言查询 → 系统在对应语言 namespace 中做 ANN(近似最近邻)向量检索 → 返回 Top-K 条 Wikipedia 文章链接和摘要。这个过程不经过 LLM,响应速度快,适合快速获取线索类信息。
RAG 对话模式 则更进一步:不仅检索相关文章片段,还会将高质量上下文注入 LLM Prompt,让模型能够综合多篇文章的内容生成连贯回答。在 rag-chat.ts 的实现中,Prompt 被设计为强制模型「仅依据上下文作答」,并在对话中保留历史记录,支持多轮追问。聊天消息通过 Upstash Redis 持久化,即使刷新页面也不会丢失。
多语言支持是这个项目的一大亮点。由于使用了 BGE-M3 嵌入模型,系统支持跨语言检索——用中文查询可以找到英文 Wikipedia 中的相关内容,这在实际知识问答场景中非常实用。
本地运行该项目需要以下准备:
.env 中配置 UPSTASH_VECTOR_REST_URL 和 UPSTASH_VECTOR_REST_TOKENUPSTASH_REDIS_REST_URL 和 UPSTASH_REDIS_REST_TOKEN完成配置后,运行 pnpm install && pnpm dev 即可启动。值得注意的是,向量索引的填充(将 Wikipedia 数据灌入 Vector)需要另外执行 Upstash 提供的脚本,这是通过 Upstash 平台侧完成的,不在本仓库范围内。
从代码来看,项目没有提供 Dockerfile 或 docker-compose,这意味着它面向的是有一定云服务使用经验的开发者,而非希望一键部署的用户群体。对于企业内网部署场景,需要自行解决向量数据库的替换问题(例如替换为 Qdrant 或 Milvus)。
这个项目虽然展示了完整的 RAG 流程,但也存在一些值得注意的局限:
1. 外部依赖过重 — 项目运转完全依赖 Upstash 商业服务和 OpenAI API。对于希望完全自托管的用户来说,需要重写整个数据层(Vector + Redis + LLM),工作量不小。
2. 索引填充不透明 — Wikipedia 数据预处理和向量化脚本不在本仓库中,1.44 亿向量的生成过程是个黑盒,开发者难以评估数据质量和更新频率。
3. 扩展性问题 — 1.44 亿向量如果仅用 Upstash Vector 的 Serverless 模式,在超大规模查询下可能面临冷启动延迟问题,生产环境需要评估 pricing 模型的可行性。
upstash/wikipedia-semantic-search 的核心价值不在于它的搜索效果有多好,而在于它提供了一个完整的、最小化的 RAG 生产架构参考。从向量检索 → 上下文注入 → LLM 生成 → 会话管理 → 多语言支持,整条链路在 3000+ 行 TypeScript 代码中完整呈现。
对于想要学习 RAG 系统设计的开发者,这个项目比很多理论教程更有参考价值——它是真实运行的代码,而不是示意图。对于想在 Upstash 生态中构建 AI 应用的开发者,它也是最权威的最佳实践指南。