尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
历史周报语义搜索与知识问答:基于向量相似度的智能回忆录
历史周报语义搜索与知识问答基于向量相似度的智能回忆录在很多企业或个人开发者的知识资产积累中工作周报沉淀了最宝贵的“技术排障实录、架构演进决策与踩坑解决方案”。然而当用户在半年后遇到一个相似的线上事故时“我记得 3 个月前我在微前端里解决过一个 Shadow DOM 字体跨域污染的问题当时改了哪个 Nginx 配置来着”如果使用传统的模糊关键词匹配如LIKE %字体%系统会搜出 50 篇毫无关联的文字用户不得不一篇一篇人肉翻找更不用说用户想问一句“请帮我汇总一下我在 Q2 季度为支付模块做了哪些具体的安全防刷措施”传统关键词搜索对此彻底束手无策。为了将散落在数百篇历史周报中的碎片信息升华为**“可对话、可精准追溯来源、支持自然语言语义检索的个人技术知识库Semantic Recall QA”**基于轻量向量检索Vector Embeddings Cosine Similarity与 RAG 架构是最佳落地范式。周报语义搜索与 RAG 问答架构用户自然语言提问: 我之前是怎么解决微前端字体跨域问题的 │ ▼ (步骤 1: 将 Query 转化为高维向量 Query Embedding) ┌─────────────────────────────────────────────────────────────┐ │ 向量相似度检索 (SQLite-vec / 余弦相似度 Top-3) │ ├──────────────────────────────┬──────────────────────────────┤ │ 召回切片 1: 0914 周报 (相似度 0.89) 包含 Nginx CORS 字体配置 │ │ 召回切片 2: 0918 周报 (相似度 0.81) 包含 Shadow DOM 样式隔离 │ └──────────────────────────────┴──────────────────────────────┘ │ ▼ (步骤 2: 组装 Prompt 注入精准上下文 Context) ┌─────────────────────────────────────────────────────────────┐ │ 大语言模型 (LLM) 综合生成回答 │ │ - 给出结构化的排障方案总结 │ │ - 附带精确的周报日期与跳转锚点 [引用来源: 2026-09-14 周报] │ └─────────────────────────────────────────────────────────────┘核心实现一向量余弦相似度计算与召回TypeScript// src/services/semanticSearchEngine.ts import { db } from ../db; import { reportEmbeddings, reports } from ../db/schema; import { eq } from drizzle-orm; import { generateEmbedding } from ./embeddingService; export interface SearchResultItem { reportId: string; title: string; dateStr: string; snippet: string; similarityScore: number; } // 计算两个浮点向量之间的余弦相似度 (Cosine Similarity) export function cosineSimilarity(vecA: number[], vecB: number[]): number { let dotProduct 0; let normA 0; let normB 0; for (let i 0; i vecA.length; i) { dotProduct vecA[i] * vecB[i]; normA vecA[i] * vecA[i]; normB vecB[i] * vecB[i]; } if (normA 0 || normB 0) return 0; return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)); } export async function searchHistoricalReports(userId: string, query: string, topK 3): PromiseSearchResultItem[] { // 1. 将用户的自然语言搜索转为 1536 维向量 const queryVector await generateEmbedding(query); // 2. 查询该用户的所有周报向量切片 const userEmbeddings await db .select({ reportId: reportEmbeddings.reportId, embedding: reportEmbeddings.embedding, contentChunk: reportEmbeddings.chunkContent, reportTitle: reports.title, createdAt: reports.createdAt }) .from(reportEmbeddings) .innerJoin(reports, eq(reportEmbeddings.reportId, reports.id)) .where(eq(reports.userId, userId)); // 3. 内存计算相似度并降序排序 const scoredItems userEmbeddings.map((item) { const similarity cosineSimilarity(queryVector, item.embedding as number[]); return { reportId: item.reportId, title: item.reportTitle, dateStr: item.createdAt.toISOString().slice(0, 10), snippet: item.contentChunk, similarityScore: similarity }; }); return scoredItems .sort((a, b) b.similarityScore - a.similarityScore) .slice(0, topK); }核心实现二基于 RAG 的智能周报问答引擎TypeScript// src/services/historicalQAService.ts import OpenAI from openai; import { searchHistoricalReports } from ./semanticSearchEngine; const openai new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); export async function answerUserHistoryQuestion(userId: string, question: string) { // 1. 语义向量检索最相关的历史周报片段 const relevantChunks await searchHistoricalReports(userId, question, 3); if (relevantChunks.length 0 || relevantChunks[0].similarityScore 0.65) { return { answer: 抱歉在您的历史周报中没有找到与该问题相关的技术记录。, sources: [] }; } // 2. 构造 RAG 上下文 const contextText relevantChunks .map((c, i) [来源 ${i 1}: ${c.dateStr} 《${c.title}》]\n${c.snippet}) .join(\n\n---\n\n); // 3. 调用大模型综合提炼回答 const completion await openai.chat.completions.create({ model: gpt-4o-mini, temperature: 0.2, messages: [ { role: system, content: 你是一位全知全能的个人技术档案秘书。请基于以下提供的历史周报真实记录严谨、客观地回答用户的问题。如果记录中没有提及请如实告知严禁凭空捏造。 }, { role: user, content: 【历史周报档案记录】:\n${contextText}\n\n【用户问题】: ${question} } ] }); return { answer: completion.choices[0].message.content, sources: relevantChunks.map(c ({ title: c.title, date: c.dateStr, reportId: c.reportId })) }; }前端交互体验呈现用户在“智能回忆录”搜索框中输入“我上个月是怎么优化 Vite 静态资源小图标请求的”系统在 800ms 内输出您在 **2026-09-14** 的周报中详细记录了该方案 1. 在 vite.config.ts 中将 assetsInlineLimit 阈值配置为 4096 (4KB)实现了小图片自动 Base64 内联 2. 引入了 vite-plugin-svg-icons 插件在编译期将分散的 SVG 图标全量合成为单体 SVG 精灵图 DOM 符号表 3. 将首屏 HTTP 请求数从 54 个锐减至 14 个彻底消灭了布局闪烁。 **关联引用来源** - [2026-09-14 · Vite静态资源内联优化与SVG精灵图合并](#)知识沉淀价值将非结构化的历史周报转变为**“随身携带的智能第二大脑Second Brain”**工程师写过的每一行技术总结都不再沉睡在归档库里随时可以被自然语言重新唤醒在季度晋升答辩、年度述职与新员工交接时一键生成全局技术贡献知识图谱极大地放大了技术沉淀的长期价值。
RELATED

相关推荐

独立开发者代码重构AI工具链:Cursor与Claude3.5实测

独立开发者代码重构AI工具链:Cursor与Claude3.5实测

独立开发者代码重构AI工具链:Cursor与Claude3.5实测在 2026 年的 AI 辅助编程领域,软件开发范式已经从“在网页对话框里让 ChatGPT 生成单段代码并人肉复制”,全面演进为了“原生嵌入 IDE、理解全局代码库(Full-Codebase Awarenes…

📅 2026/9/21 22:14:10
堆栈式优化实战:3个坑让性能翻倍,面试必问

堆栈式优化实战:3个坑让性能翻倍,面试必问

堆栈式优化实战:3个坑让性能翻倍,面试必问 刚入职那会儿,我盯着屏幕上的 java.lang.StackOverflowError…

📅 2026/9/21 22:09:10
怎么建自己的网站?新手避坑指南,3步跑通全流程

怎么建自己的网站?新手避坑指南,3步跑通全流程

怎么建自己的网站?新手避坑指南,3步跑通全流程 配置环境就卡半天,Node装不上、端口被占用、Nginx配置报错,这是多少新手的噩梦?别慌,今天这篇 新手避坑 指南,专门讲清楚 怎么建自己的网站…

📅 2026/9/21 22:09:10
MORE NEWS

更多资讯

📰

aiohttp 修复 `CookieJar.update_cookies()` 未复制用户传入的可变 `Morsel` 对象的缺陷解析

后端Web框架WebSocket 【免费下载链接】aiohttp Asynchronous HTTP client/server framework for asyncio and Python 项目地址: https://gitcode.com/gh_mirrors/ai/aiohttp 点击查看 免费下载 本篇文章围绕 aiohttp 变更日志条目 CHANGES/13637.bugfix.rst&#…

📰

OpenSearch查询DSL完全指南:Bool、Term、Range、Wildcard等10大查询类型一篇讲透

OpenSearch查询DSL完全指南:Bool、Term、Range、Wildcard等10大查询类型一篇讲透 【免费下载链接】OpenSearch 🔎 Open source distributed and RESTful search engine. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSearch OpenSearch 是一…

📰

Gyroflow 开源视频稳定工具使用指南:用陀螺仪数据消除画面抖动

Gyroflow 开源视频稳定工具使用指南:用陀螺仪数据消除画面抖动 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow Gyroflow 是一款开源的视频稳定工具,它直接读取…

📰

免费 3 步下载流媒体:DASH/HLS 课程与直播的本地保存方法

免费 3 步下载流媒体:DASH/HLS 课程与直播的本地保存方法 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE…

📰

5个sina邮箱开发避坑点:新手速查手册

5个sina邮箱开发避坑点:新手速查手册 sina邮箱的开发文档太厚,新人根本抓不住重点。别翻那几百页的PDF了,直接看这份速查手册。…

📰

公租房摇号时间源码深度剖析:3个技巧搞定性能优化

公租房摇号时间源码深度剖析:3个技巧搞定性能优化 官方文档几百页,翻到头晕还是找不到核心逻辑?别急,公租房摇号时间的计算看似简单,实则是高并发场景下的性能优化典型。今天拆解开源实现,直接看代码。 入口定位:从请求到计算的全链路…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬