
OpenClaw Amazon S3 Vectors 从零搭建个人知识库RAG 实战让 AI 助手真正懂你 你有没有这种体验跟 AI 助手聊了半小时业务背景一刷新页面它啥都不记得了。 更离谱的是公司内部文档它压根读不懂。你问我们的部署流程它给你编一个看似合理但完全错误的答案。 说白了现在的 AI 助手就是个金鱼脑。我折腾了大半年直到 Amazon S3 Vectors 出来才找到一个优雅解法。今天带你用 OpenClaw S3 Vectors 从零搭一个个人知识库。全程有代码拿去就能跑。 S3 Vectors 是个啥 亚马逊云科技在 S3 上加了向量存储能力。 说白了就是把文本转成一串数字向量通过数学运算找语义相近的内容。传统方案得单独搞向量数据库维护集群、管索引……光运维就够喝一壶。S3 Vectors 不一样——直接在 S3 上存向量不用额外跑服务。 核心概念就三个Vector Bucket向量桶、Vector Index向量索引、Vector向量数据。就这么简单。 RAG 架构先搜再答 RAGRetrievalAugmented Generation——检索增强生成。流程是 用户提问 → 从知识库搜相关内容 → 搜到的内容 问题一起喂给大模型 → 基于参考资料回答 像开卷考试。模型不需要背下所有知识能翻书就行。 从零搭建完整流程 1. 创建 Vector Bucket 和 Index python import boto3 s3vectors boto3.clients3vectors s3vectors.createvectorbucket vectorBucketNamemyknowledgebase dimension1024 对应 Titan Embed Text v2 输出维度 s3vectors.createvectorindex vectorBucketNamemyknowledgebase, vectorIndexNamedocsindex, dimension1024, distanceMetriccosine print向量桶和索引创建完成 distanceMetriccosine 是余弦相似度文本场景用这个就对了。 2. 文档预处理切分 向量化 这步容易踩坑。文档不能整篇丢进去得先切小块不然搜索精度很差。 python import boto3 import json def getembeddingtext: 调用 Bedrock 生成文本向量 bedrock boto3.clientbedrockruntime response bedrock.invokemodel modelIdamazon.titanembedtextv2:0, bodyjson.dumps{inputText: text} return json.loadsresponsebody.readembedding def splittexttext, chunksize500, overlap50: 文本切分带重叠避免切断上下文 chunks start 0 while start lentext: end start chunksize chunk textstart:end if chunk.strip: chunks.appendchunk.strip start end overlap return chunks 踩坑提醒chunksize 别太小不然切出几百块写入很慢太大搜索精度又不行。500 字左右比较合适。 3. 写入向量数据 python import boto3 import json def getembeddingtext: bedrock boto3.clientbedrockruntime response bedrock.invokemodel modelIdamazon.titanembedtextv2:0, bodyjson.dumps{inputText: text} return json.loadsresponsebody.readembedding def splittexttext, chunksize500, overlap50: chunks start 0 while start lentext: end start chunksize chunk textstart:end if chunk.strip: chunks.appendchunk.strip start end overlap return chunks def ingestdocumentsdocuments: 批量写入文档向量 s3vectors boto3.clients3vectors total 0 for doc in documents: chunks splittextdoccontent vectors for i, chunk in enumeratechunks: embedding getembeddingchunk vectors.append{ key: f{docid}{i:03d}, data: {float32: embedding}, metadata: { title: doctitle, source: doc.getsource, manual, content: chunk } } 每 20 条一批写入 for j in range0, lenvectors, 20: batch vectorsj:j 20 s3vectors.putvectors vectorBucketNamemyknowledgebase, vectorIndexNamedocsindex, vectorsbatch total lenbatch printf共写入 {total} 条向量 示例数据 documents { id: deployguide, title: 部署指南, content: 我们的服务使用 Docker 容器化部署。 首先拉取镜像然后运行 dockercompose up d。 健康检查端点是 /health正常返回 200。, source: wiki }, { id: faqpassword, title: 如何重置密码, content: 访问登录页面点击忘记密码 输入注册邮箱查收重置邮件 设置新密码至少8位含大小写和数字。, source: faq } ingestdocumentsdocuments 4. 语义搜索 python import boto3 import json def getembeddingtext: bedrock boto3.clientbedrockruntime response bedrock.invokemodel modelIdamazon.titanembedtextv2:0, bodyjson.dumps{inputText: text} return json.loadsresponsebody.readembedding def searchquery, topk5: 语义搜索知识库 s3vectors boto3.clients3vectors results s3vectors.queryvectors vectorBucketNamemyknowledgebase, vectorIndexNamedocsindex, queryVector{float32: getembeddingquery}, topKtopk for vec in results.getvectors, : meta vec.getmetadata, {} printf{vec.getscore, 0:.4f} {meta.gettitle, } printf {meta.getcontent, :100} search怎么部署服务 搜怎么部署服务也能匹配到部署指南——这就是语义搜索不是关键词匹配而是理解意思。 5. 和 OpenClaw 集成 OpenClaw 支持 Skill 扩展。创建 knowledgebase/SKILL.md markdown Knowledge Base Search 搜索公司内部知识库返回相关文档片段。 当用户问到内部信息时先搜索知识库获取参考再回答。 搜索脚本 knowledgebase/scripts/search.py python !/usr/bin/env python3 import sys import json import boto3 def getembeddingtext: bedrock boto3.clientbedrockruntime response bedrock.invokemodel modelIdamazon.titanembedtextv2:0, bodyjson.dumps{inputText: t