从向量检索到混合搜索:手把手教你搭建生产级RAG检索层(附全代码)
读完这篇你将得到成果说明✅ 一个可运行的 ChromaDB 向量库支持持久化、相似度检索✅ 一个可运行的 BM25 检索器中文分词、精确匹配✅ 一个混合检索器RRF 融合向量 关键词 双路召回✅ 一个 Rerank 精排模块Cross-Encoder 提升 Top 准确率✅ 一个完整的 RAGRetriever 类复制粘贴即可用环境要求Python 3.88GB 内存即可运行。第一部分环境准备5分钟bash# 创建虚拟环境 python -m venv rag_retriever source rag_retriever/bin/activate # Linux/Mac # rag_retriever\Scripts\activate # Windows # 安装依赖 pip install chromadb # 向量数据库 pip install sentence-transformers # Embedding 模型 pip install rank-bm25 # BM25 检索 pip install jieba # 中文分词 pip install FlagEmbedding # BGE Reranker可选较大 # 或轻量版pip install sentence-transformers验证安装pythonpython -c import chromadb; print(ChromaDB OK) python -c import sentence_transformers; print(Sentence Transformers OK)第二部分准备测试数据创建一个docs.txt文件text华为云 ModelArts 是一个端到端的 AI 开发平台支持数据处理、模型训练、模型部署。 MindSpore 是华为开源的全场景 AI 框架支持端边云协同。 ModelArts Pro 是企业级 AI 应用开发套件提供了预训练模型和自动化标注。 PyTorch 是一个流行的深度学习框架由 Meta 开源。 TensorFlow 是 Google 开源的机器学习框架广泛应用于生产环境。 ModelArts 支持 PyTorch、TensorFlow、MindSpore 等多种深度学习框架。 华为云 ModelArts 提供了自动学习功能无需编码即可训练模型。 ModelArts 支持大规模分布式训练可以处理亿级参数模型。读取文档pythonwith open(docs.txt, r, encodingutf-8) as f: documents [line.strip() for line in f if line.strip()] print(f共加载 {len(documents)} 条文档) for i, doc in enumerate(documents): print(f{i}: {doc[:50]}...)第三部分ChromaDB 向量检索实战初始化pythonimport chromadb from sentence_transformers import SentenceTransformer # 1. 创建持久化客户端数据保存在 ./chroma_db 目录 client chromadb.PersistentClient(path./chroma_db) # 2. 创建 Collection类似 SQL 的表 collection client.get_or_create_collection( namedocs, metadata{hnsw:space: cosine} # 使用余弦相似度 ) print(fCollection 已创建当前文档数: {collection.count()})加载 Embedding 模型python# 使用多语言模型支持中英文 model SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2) print(f向量维度: {model.get_sentence_embedding_dimension()}) def get_embedding(text): return model.encode(text).tolist()批量插入文档python# 生成 ID ids [fdoc_{i} for i in range(len(documents))] # 生成向量首次运行会慢一些 embeddings [get_embedding(doc) for doc in documents] # 插入 collection.add( idsids, documentsdocuments, embeddingsembeddings ) print(f成功插入 {len(documents)} 条文档)向量检索函数pythondef vector_search(query, top_k3): 向量检索 query_embedding get_embedding(query) results collection.query( query_embeddings[query_embedding], n_resultstop_k, include[documents, distances] ) print(f\n【向量检索】查询: {query}) print(- * 50) for i, (doc, dist) in enumerate(zip(results[documents][0], results[distances][0])): # 余弦距离转相似度1 - dist/2 similarity 1 - dist / 2 print(f{i1}. 相似度: {similarity:.3f}) print(f {doc}\n) return results # 测试 vector_search(ModelArts 支持哪些深度学习框架)预期输出text【向量检索】查询: ModelArts 支持哪些深度学习框架 -------------------------------------------------- 1. 相似度: 0.892 ModelArts 支持 PyTorch、TensorFlow、MindSpore 等多种深度学习框架。 2. 相似度: 0.754 华为云 ModelArts 是一个端到端的 AI 开发平台... 3. 相似度: 0.721 ModelArts Pro 是企业级 AI 应用开发套件...第四部分BM25 关键词检索实战安装中文分词pythonimport jieba def tokenize_chinese(text): 中文分词 return list(jieba.cut(text)) # 测试 print(tokenize_chinese(华为云 ModelArts 是 AI 平台)) # 输出: [华为云, , ModelArts, , 是, , AI, , 平台]构建 BM25 索引pythonfrom rank_bm25 import BM25Okapi # 对所有文档进行分词 tokenized_docs [tokenize_chinese(doc) for doc in documents] # 构建 BM25 索引 bm25 BM25Okapi(tokenized_docs) print(BM25 索引构建完成)BM25 检索函数pythondef bm25_search(query, top_k3): BM25 关键词检索 tokenized_query tokenize_chinese(query) scores bm25.get_scores(tokenized_query) # 获取 Top-K 索引 top_indices sorted(range(len(scores)), keylambda i: scores[i], reverseTrue)[:top_k] print(f\n【BM25检索】查询: {query}) print(- * 50) for i, idx in enumerate(top_indices): print(f{i1}. BM25分数: {scores[idx]:.3f}) print(f {documents[idx]}\n) return top_indices, scores # 测试 bm25_search(ModelArts Pro)预期输出text【BM25检索】查询: ModelArts Pro -------------------------------------------------- 1. BM25分数: 8.234 ModelArts Pro 是企业级 AI 应用开发套件... 2. BM25分数: 4.123 华为云 ModelArts 是一个端到端的 AI 开发平台... 3. BM25分数: 0.000 MindSpore 是华为开源的全场景 AI 框架...BM25 调参python# 自定义参数 # k1: 词频饱和度默认1.5越大词频影响越大 # b: 文档长度惩罚默认0.75越大长文档惩罚越重 bm25_custom BM25Okapi(tokenized_docs, k11.2, b0.75) # 不同场景推荐配置 configs { 短文档标题/摘要: {k1: 1.2, b: 0.5}, 长文档论文/财报: {k1: 1.5, b: 0.8}, 精确匹配优先: {k1: 0.0, b: 0.75}, }第五部分混合检索 RRF 融合为什么需要 RRF向量分数0-1和 BM25 分数0-10不在同一量纲不能直接相加。RRF 只看排名不看分数完整混合检索器pythonimport numpy as np from sentence_transformers import util class HybridRetriever: def __init__(self, documents, embedding_modelparaphrase-multilingual-MiniLM-L12-v2): self.documents documents self.n_docs len(documents) print(初始化 HybridRetriever...) # 1. BM25 索引 print( - 构建 BM25 索引...) self.tokenized_docs [tokenize_chinese(doc) for doc in documents] self.bm25 BM25Okapi(self.tokenized_docs) # 2. 向量索引 print( - 加载 Embedding 模型...) self.encoder SentenceTransformer(embedding_model) print(f - 生成文档向量...) self.doc_embeddings self.encoder.encode(documents, convert_to_tensorTrue) print(f初始化完成文档数: {self.n_docs}) def search_vector(self, query): 向量检索返回所有文档的相似度 query_embedding self.encoder.encode(query, convert_to_tensorTrue) scores util.cos_sim(query_embedding, self.doc_embeddings)[0].cpu().numpy() return scores def search_bm25(self, query): BM25 检索返回所有文档的分数 tokenized_query tokenize_chinese(query) scores self.bm25.get_scores(tokenized_query) return scores def hybrid_search(self, query, top_k3, rrf_k60, print_resultsTrue): 混合检索 RRF 融合 参数: query: 查询文本 top_k: 返回结果数 rrf_k: RRF 平滑参数默认 60 # 1. 获取两种检索的全量分数 bm25_scores self.search_bm25(query) vector_scores self.search_vector(query) # 2. 获取排名分数越高排名越靠前 bm25_rank {idx: i for i, idx in enumerate(np.argsort(bm25_scores)[::-1])} vector_rank {idx: i for i, idx in enumerate(np.argsort(vector_scores)[::-1])} # 3. RRF 融合 final_scores {} for idx in range(self.n_docs): rrf_score 0 if idx in bm25_rank: rrf_score 1.0 / (rrf_k bm25_rank[idx] 1) if idx in vector_rank: rrf_score 1.0 / (rrf_k vector_rank[idx] 1) final_scores[idx] rrf_score # 4. 排序并返回 sorted_indices sorted(final_scores.keys(), keylambda x: final_scores[x], reverseTrue)[:top_k] results [(idx, final_scores[idx], self.documents[idx]) for idx in sorted_indices] if print_results: print(f\n【混合检索】查询: {query}) print( * 60) for i, (idx, score, doc) in enumerate(results): print(f{i1}. [RRF: {score:.4f}] {doc}) return results # 使用 retriever HybridRetriever(documents) retriever.hybrid_search(ModelArts 支持哪些深度学习框架)预期输出text初始化 HybridRetriever... - 构建 BM25 索引... - 加载 Embedding 模型... - 生成文档向量... 初始化完成文档数: 8 【混合检索】查询: ModelArts 支持哪些深度学习框架 1. [RRF: 0.0328] ModelArts 支持 PyTorch、TensorFlow、MindSpore 等多种深度学习框架。 2. [RRF: 0.0161] 华为云 ModelArts 是一个端到端的 AI 开发平台... 3. [RRF: 0.0159] ModelArts Pro 是企业级 AI 应用开发套件...第六部分Rerank 结果重排为什么需要 Rerank混合检索返回的 Top-5 可能只有 2 条真正相关。Rerank 用更精细的模型重新排序。使用 BGE Rerankerpython# 方式1使用 FlagEmbedding推荐精度高 try: from FlagEmbedding import FlagReranker reranker FlagReranker(BAAI/bge-reranker-large, use_fp16False) print(BGE Reranker 加载成功) except Exception as e: print(fBGE Reranker 加载失败: {e}) reranker None # 方式2轻量级 Cross-Encoder备选 from sentence_transformers import CrossEncoder light_reranker CrossEncoder(cross-encoder/ms-marco-MiniLM-L-6-v2)Rerank 函数pythondef rerank_results(query, documents, top_k3): 对检索结果进行重排 if reranker is None: # 使用轻量级 reranker pairs [[query, doc] for doc in documents] scores light_reranker.predict(pairs) else: pairs [[query, doc] for doc in documents] scores [reranker.compute_score(pair) for pair in pairs] # 按分数排序 ranked sorted(zip(documents, scores), keylambda x: x[1], reverseTrue) print(f\n【Rerank 重排】查询: {query}) print( * 60) for i, (doc, score) in enumerate(ranked[:top_k]): print(f{i1}. [相关度: {score:.3f}] {doc}) return ranked[:top_k] # 测试先用混合检索拿候选再重排 candidates retriever.hybrid_search(ModelArts 支持 PyTorch 吗, top_k5, print_resultsFalse) candidate_docs [doc for _, _, doc in candidates] rerank_results(ModelArts 支持 PyTorch 吗, candidate_docs, top_k3)Rerank 前后对比pythondef compare_rerank(query, top_k3): 对比 Rerank 前后的结果 # 混合检索原始结果 raw_results retriever.hybrid_search(query, top_ktop_k, print_resultsFalse) raw_docs [doc for _, _, doc in raw_results] # Rerank 后结果 reranked rerank_results(query, raw_docs, top_ktop_k) reranked_docs [doc for doc, _ in reranked] print(f\n查询: {query}) print(f原始 Top-{top_k}: {[d[:40] for d in raw_docs]}) print(fRerank Top-{top_k}: {[d[:40] for d in reranked_docs]}) compare_rerank(ModelArts 的自动学习功能)第七部分完整 RAGRetriever 类把上面所有功能整合成一个类复制粘贴即可用pythonclass RAGRetriever: 完整的 RAG 检索器 - 开箱即用 def __init__(self, documents, embedding_modelparaphrase-multilingual-MiniLM-L12-v2): self.documents documents # BM25 self.tokenized_docs [tokenize_chinese(doc) for doc in documents] self.bm25 BM25Okapi(self.tokenized_docs) # 向量检索 self.encoder SentenceTransformer(embedding_model) self.doc_embeddings self.encoder.encode(documents, convert_to_tensorTrue) # Reranker懒加载 self._reranker None property def reranker(self): if self._reranker is None: try: from FlagEmbedding import FlagReranker self._reranker FlagReranker(BAAI/bge-reranker-large, use_fp16False) except: from sentence_transformers import CrossEncoder self._reranker CrossEncoder(cross-encoder/ms-marco-MiniLM-L-6-v2) return self._reranker def search(self, query, top_k5, use_rerankTrue): 统一检索接口 参数: query: 查询文本 top_k: 返回文档数 use_rerank: 是否使用 Rerank # 1. 混合检索 bm25_scores self.bm25.get_scores(tokenize_chinese(query)) query_emb self.encoder.encode(query, convert_to_tensorTrue) vector_scores util.cos_sim(query_emb, self.doc_embeddings)[0].cpu().numpy() # RRF 融合 bm25_rank {i: r for r, i in enumerate(np.argsort(bm25_scores)[::-1])} vector_rank {i: r for r, i in enumerate(np.argsort(vector_scores)[::-1])} final_scores {} for i in range(len(self.documents)): score 0 if i in bm25_rank: score 1 / (60 bm25_rank[i] 1) if i in vector_rank: score 1 / (60 vector_rank[i] 1) final_scores[i] score candidates sorted(final_scores.items(), keylambda x: x[1], reverseTrue)[:top_k] candidate_docs [(idx, self.documents[idx]) for idx, _ in candidates] # 2. Rerank可选 if use_rerank: pairs [[query, doc] for _, doc in candidate_docs] scores self.reranker.predict(pairs) if hasattr(self.reranker, predict) else [ self.reranker.compute_score(pair) for pair in pairs ] ranked sorted(zip(candidate_docs, scores), keylambda x: x[1], reverseTrue) results [(idx, doc, score) for (idx, doc), score in ranked] else: results [(idx, doc, final_scores[idx]) for idx, doc in candidate_docs] return results def print_results(self, query, top_k3, use_rerankTrue): 打印检索结果 results self.search(query, top_k, use_rerank) print(f\n查询: {query}) print( * 60) for i, (idx, doc, score) in enumerate(results[:top_k]): print(f{i1}. [分数: {score:.4f}] {doc}) return results # 使用 retriever RAGRetriever(documents) retriever.print_results(ModelArts 支持哪些框架) retriever.print_results(华为的 AI 开发平台有什么功能)第八部分性能对比总结python# 对比三种检索方式的效果 def benchmark(query): print(f\n{*60}) print(f基准测试: {query}) print(f{*60}) # 向量检索 vector_search(query, top_k3) # BM25 bm25_search(query, top_k3) # 混合检索 retriever.print_results(query, top_k3, use_rerankFalse) # 混合检索 Rerank retriever.print_results(query, top_k3, use_rerankTrue) benchmark(ModelArts 的自动学习功能)传统产品经理正在成为下个被淘汰的“传统岗位”。过去画原型、写 PRD、跟进度的“传统技能包”在AI时代正迅速贬值。63% 的企业转型做 AI 产品当下的问题不再是“要不要学 AI ”而是“如何构建 AI 产品”。前段时间还跟字节、腾讯的资深 AI 产品经理沟通他们反馈在大量招人只要有 AI 相关的项目经验基本都能拿到面试机会而且领导很舍得给钱涨薪 40-60% 很正常01接下来的产品人得卷AI能力了如今AI大火行业极速发展的背后懂AI 产品人才却严重稀缺。这不是要你转技术岗而是要掌握构建 AI 产品的核心方法如何将你的领域知识转化为 AI 产品的核心竞争力如何用 AI 技术实现你的产品需求如何设计真正懂用户的 AI 交互体验……懂AI就是产品经理的“救命稻草”风口之下与其焦虑被行业淘汰不如先人一步享受AI技术带来的红利我把AI产品经理的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】不限年龄不限岗位没有代码基础也能学现在扫码完课还送《AI产品面试题库》《AI大模型应用案例集》02掌握技术实战快速转型想成为一名卓越的AI大模型产品经理需要从技术、到项目实战的全方位转型指南**1**AI产品应用原理解析产品经理也能听懂对于产品经理来说如果你不懂技术做不了业务和AI大模型技术衔接、定义不了数据需求是没法完整的落地一个产品的本次课程专门面向产品经理人群解析当下最热门的AI产品应用的必备的「大模型」、「多模态」的实际应用和算法原理解析AI产品应用技术积累大模型能力简单易懂不需要会代码小白也能掌握大模型微调掌握主流大模型如DeepSeek、Qwen等的微调技术针对特定场景优化模型性能。学习如何利用领域数据如制造、医药、金融等进行模型定制AI Agent智能体搭建学习如何设计和开发AI Agent实现多任务协同、自主决策和复杂问题解决。构建垂类场景下的智能助手产品如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等2超全行业案例解析课程详细讲解现阶段大模型在各个行业和领域的应用现状包括零售与电商、教育、医疗、泛娱乐、法律等等10大行业详细讲解案例的思路、应用场景以及背后的技术原理、核心技术揭秘各个行业、场景的真实现状和未来产品的发展与机遇可以说讲解完一个案例就能积累一个AI产品实践的经验课程中所涉及到的实战项目都可以直接在自己的工作中使用让自己的产品/项目有可借鉴的成功案例3AI产品经理求职专项辅导课程中会系统的帮助大家拆解字节、腾讯、百度等大厂AI PM岗位JD关键词掌握AI PM高频面试题型与回答框架展示 AI 相关能力的关键技巧Prompt设计、模型评估、A/B测试、成本意识、与算法/工程协作经验To B类AI产品经理突出“行业理解 技术落地 商业闭环”能力的简历结构设计展示项目成果从客户需求洞察到技术方案设计展现端到产品思维如何评估To B AI产品的可行性、客户付费意愿与实施成本To C类AI产品经理拆解头部公司岗位JD将过往尽力转化为AI产品叙事逻辑从行业趋势、产品设计题、案例分析数据分析题、技术理解边界等全流程辅导面试避免无效海投、锁定最适合的AI产品岗位03本次课程全程直播讲解能直接对话大佬和专业助教不懂就问超详细的案例小白也能轻松get完课后还赠送《AI产品经理面试题库》、《AI大模型应用案例集》不断更新中……适合人群想转型AI产品经理、AI项目管理专家、AI产品解决方案等岗位想进行AI产品创业的创业者想成为制作AI产品的程序员想利用AI解决企业问题的管理岗想在AI方向寻找就业方向的毕业生AI方向前景广阔、待遇好目前很多产品人已经通过完整学习拿到大厂高薪offer收入嗷嗷涨我把AI产品经理的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

【GLTF/GLB 实操】用 OpenFiles的 Model Viewer 做 3D 模型交付前检查

【GLTF/GLB 实操】用 OpenFiles的 Model Viewer 做 3D 模型交付前检查

摘要:本文记录一次可复现的 GLTF/GLB 预览流程。基于 OpenFiles 官方格式页和 .gltf 详情页,.gltf 与 .glb 属于已支持格式,并由 OpenFiles 打开。示例使用 Khronos glTF Sample Assets 中 CC BY 4.0 许可的 Box 模型,演示如何检查…

2026/7/7 1:39:08阅读更多 →
MPC850SARDB评估板硬件配置与通信接口复用深度解析

MPC850SARDB评估板硬件配置与通信接口复用深度解析

1. 项目概述在嵌入式开发的早期阶段,尤其是在通信和网络设备领域,一块功能全面、接口丰富的评估板是工程师手中的“瑞士军刀”。它不仅是验证芯片功能的试验田,更是连接硬件原理图与最终产品固件的桥梁。今天要深入探讨的,就是一块…

2026/7/7 2:13:21阅读更多 →
PCB互感计算:从理论到MATLAB工具,解决天线与高速信号串扰

PCB互感计算:从理论到MATLAB工具,解决天线与高速信号串扰

1. 项目缘起:从一次失败的PCB天线调试说起去年,我接手了一个紧凑型物联网设备的射频前端设计。为了节省空间和成本,我们决定采用PCB板载天线,而不是外接陶瓷天线。方案选型时,一切看起来都很美好:参考设计、…

2026/7/7 2:29:25阅读更多 →
Python+Qt:别让界面拖后腿!学这招,GUI编程快得像开挂

Python+Qt:别让界面拖后腿!学这招,GUI编程快得像开挂

Qt Quick是Qt给出的一种高级用户界面工具包, 它涵盖描述性语言QML, 具备语言运行时, 拥有大量的用户界面元素, 有着对QML的完美支持, 含有设计器, 还支持QML与C混合编程等众多技术。Qt Quick是集合了一些新UI技术的事物, 它主要由3部分构成, 一部分是Qt IDE, 这里面包含着Qt Qu…

2026/7/7 3:48:00阅读更多 →
【单片机毕业设计】基于 STM32 的智能快递柜短信取件控制系统设计,基于单片机的自助快递存取验证装置开发(017101)

【单片机毕业设计】基于 STM32 的智能快递柜短信取件控制系统设计,基于单片机的自助快递存取验证装置开发(017101)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案一、核心硬件设备清单及选型说明二、硬件整体架构逻辑核心功能一、基础底层功能二、核心存件业务功能三、核心取件业务功能技术路线项目演示关于我们项目案例源码获取博主介绍:✌️码农一枚 ,…

2026/7/7 3:48:00阅读更多 →
长文档OCR实战指南:从原理到批量处理优化

长文档OCR实战指南:从原理到批量处理优化

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。无限制OCR的核心价值在于,它把传统的“…

2026/7/7 3:48:00阅读更多 →
`datetime` 是 Python 中用于处理日期和时间的标准库模块,它提供了多种类和方法来操作日期、时间以及它们的组合

`datetime` 是 Python 中用于处理日期和时间的标准库模块,它提供了多种类和方法来操作日期、时间以及它们的组合

datetime 是 Python 中用于处理日期和时间的标准库模块,它提供了多种类和方法来操作日期、时间以及它们的组合,还支持时间的格式化、运算等操作。以下是关于 datetime 模块的详细介绍: 一、主要类 date 类:专门处理日期&#xff0…

2026/7/7 3:48:00阅读更多 →
拒绝“无效直播”:如何利用AI智播中控构建“全链路”数据复盘体系?

拒绝“无效直播”:如何利用AI智播中控构建“全链路”数据复盘体系?

在2026年的直播电商实战中,绝大多数中小商家陷入了“只播不复盘”或“无效复盘”的怪圈。他们盯着GMV(商品交易总额)看结果,却看不懂过程。真正的智播中控,不应只是直播时的“辅助驾驶”,更应是下播后的“黑…

2026/7/7 3:48:00阅读更多 →
实战案例勤策签约三得利市场运营方案

实战案例勤策签约三得利市场运营方案

在消费品行业竞争日益激烈的今天,如何通过数字化手段提升渠道效率、优化终端管理,已成为各大品牌商的核心课题。近日,勤策与全球知名饮品企业三得利正式达成合作签约,这一举动不仅体现了双方在渠道管理理念上的高度契合&#xff0…

2026/7/7 3:43:00阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →