简单RAG检索方法示例与解析
本示例用 Qwen 大模型把一个自然语言问题转换成更适合检索系统使用的“检索式”并演示检索结果如何被组织展示。代码取自《AI Agent智能体开发实践》第5章。AI Agent智能体开发实践【行情 报价 价格 评测】-京东示例代码如下# -*- coding: utf-8 -*- Created on Sat Jul 19 10:27:43 2025 author: liguo import requests import os # 1. 配置Qwen API假设使用阿里云DashScope API url https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation # 实际API端点请参考最新文档 api_key os.getenv(DASHSCOPE_API_KEY) # 替换自己的QWEN_API_KEY headers { Authorization: fBearer {api_key}, Content-Type: application/json } # 2. 构建请求注意Qwen是生成模型不是检索模型 query 混合检索与RAG的技术综述 prompt f请基于以下问题生成检索式{query} payload { model: qwen-max, # 可选qwen-max、qwen-plus等 input: { messages: [ { role: user, content: prompt } ] }, parameters: { result_format: text } } # 3. 发起生成请求 resp requests.post(url, headersheaders, jsonpayload, timeout30) resp.raise_for_status() # 4. 解析生成结果 result resp.json() generated_text result[output][text] print(f生成的检索式: {generated_text}) # 5. 可选模拟检索过程 - 实际应用中需接入真实检索系统 print(\n模拟检索结果) retrieval_results [ 混合检索在RAG系统中的应用综述, 基于稠密向量和稀疏向量的混合检索技术, RAG架构中检索增强生成的技术细节, 混合检索与传统检索方法的对比分析 ] for idx, title in enumerate(retrieval_results, 1): print(f{idx}. {title} | 相关性: 0.{950 - idx*10})代码运行结果如下C:\Users\xiayu\miniconda3\envs\langchain03\python.exe C:\Users\xiayu\PyCharmMiscProject\AI-Agent-Dev-Practices-Code\第5章代码\5.1检索方法.py 生成的检索式: 为了检索关于“混合检索与RAGRetrieval-Augmented Generation技术综述”的相关信息可以构建如下检索式。这里提供几个不同风格的检索式示例以适应不同的搜索工具或数据库需求 1. **基础检索式** - 混合检索 RAG 技术综述 - (混合检索 AND RAG) 技术综述 2. **使用布尔逻辑和引号进行精确匹配** - 混合检索 AND RAG AND 技术综述 - (混合检索 OR hybrid retrieval) AND (RAG OR retrieval-augmented generation) AND 综述 3. **考虑同义词和相关术语** - (混合检索 OR 融合检索 OR hybrid retrieval) AND (RAG OR retrieval-augmented generation OR retrieval enhanced generation) AND (技术综述 OR 综述 OR review OR survey) 4. **针对特定数据库或平台优化** - 如果是在Google Scholar、CNKI等学术资源库中搜索则可以尝试更具体的表达方式如 - intitle:混合检索 RAG 技术综述 - 混合检索 RAG 技术综述 site:edu.cn - 对于支持高级搜索功能的平台还可以设置时间范围、文献类型等过滤条件。 5. **英文环境下的检索式** - Hybrid Retrieval AND RAG AND Survey OR Review - (Hybrid Retrieval OR Fusion Retrieval) AND (RAG OR Retrieval-Augmented Generation) AND (Survey OR Review) 请根据您实际使用的搜索引擎或数据库的特点选择合适的检索式并适当调整关键词以获得最佳结果。 模拟检索结果 1. 混合检索在RAG系统中的应用综述 | 相关性: 0.940 2. 基于稠密向量和稀疏向量的混合检索技术 | 相关性: 0.930 3. RAG架构中检索增强生成的技术细节 | 相关性: 0.920 4. 混合检索与传统检索方法的对比分析 | 相关性: 0.910 Process finished with exit code 0示例可以理解为这样一个流程用户问题 ↓ Qwen 生成检索式 ↓ 假装用检索式去查资料 ↓ 返回若干“看起来很相关”的结果代码逐层实现方法解释✅ 1️⃣ 配置 Qwen API准备“大脑”api_key os.getenv(DASHSCOPE_API_KEY) headers { Authorization: fBearer {api_key}, Content-Type: application/json }目的使用阿里云 DashScope 平台通过 HTTP 调用 Qwen 的生成能力os.getenv防止密钥硬编码工程最佳实践 ✅✅ 2️⃣ 构造 Prompt核心思想query 混合检索与RAG的技术综述 prompt f请基于以下问题生成检索式{query}这里在做的事原始输入目标输出自然语言问题更“像检索词”的表达例如模型可能生成混合检索 AND RAGdense retrieval sparse retrievalRetrieval-Augmented Generation survey这就是“检索式生成”✅ 3️⃣ 调用 Qwen 生成文本payload { model: qwen-max, input: { messages: [{role: user, content: prompt}] } }实现方法使用Chat Completion 接口qwen-max能力强、适合复杂语义任务本质是一次文本生成推理✅ 4️⃣ 解析并返回结果generated_text result[output][text] print(f生成的检索式: {generated_text})作用从 JSON 中提取生成内容展示“模型认为该怎么搜”✅ 5️⃣ 模拟检索结果演示用retrieval_results [ 混合检索在RAG系统中的应用综述, ... ]⚠️重点说明❌ 没有真正检索✅ 只是“假装已经搜到了”这是为了让你看到“如果检索系统返回这些结果长什么样”在真实系统中这里会换成ElasticsearchFAISSMilvus数据库 SQL