构建查询分析系统:一步步实现搜索引擎优化

构建一个查询分析系统 构建一个查询分析系统时,需要能够加载文档、使用聊天模型、生成嵌入、创建向量存储并执行检索。这些过程的目标是将用户输入的查询优化,以实现更为精准的检索结果。本文将通过一个端到端的示例展示如何使用查询分析提升检索结果的相关性。我们将着眼于如何对LangChain的YouTube视频进行检索,并通过查询分析解决原始用户问题直接传递给搜索引擎时可能出现的失败模式。 阅读详情

技术背景介绍

在现代信息 retrieval 系统中,简单的内容检索往往无法满足用户的复杂查询需求。特别是在处理自然语言查询时,直接的字符串匹配可能导致结果不够精确或相关。本次指南将展示如何利用查询分析技术来改进搜索引擎结果。我们将构建一个简单的查询分析系统,通过对 LangChain 的 YouTube 视频进行检索来展示其效果。

核心原理解析

查询分析的核心在于将自然语言查询转换为结构化查询,以便能够根据特定的文档属性进行过滤和精确匹配。在这个示例中,我们将通过定义一个查询模式(query schema),并使用 OpenAI 模型将自然语言查询转换为结构化查询。

代码实现演示

安装依赖

# 安装必要的Python依赖
%pip install -qU langchain langchain-community langchain-openai youtube-transcript-api pytube langchain-chroma

设置环境变量

使用 OpenAI 的 API 进行查询分析。

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()  # 安全获取API密钥

加载文档

利用 YoutubeLoader 从 YouTube 加载 LangChain 视频的转录文本。

from langchain_community.document_loaders import YoutubeLoader

urls = [
    "https://www.youtube.com/watch?v=HAn9vnJy6S4",
    # 可继续添加其他视频链接
]
docs = []
for url in urls:
    docs.extend(YoutubeLoader.from_youtube_url(url, add_video_info=True).load())

# 为每个文档添加额外的元数据
import datetime

for doc in docs:
    doc.metadata["publish_year"] = int(
        datetime.datetime.strptime(
            doc.metadata["publish_date"], "%Y-%m-%d %H:%M:%S"
        ).strftime("%Y")
    )

索引文档

使用向量存储创建文档索引。

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000)
chunked_docs = text_splitter.split_documents(docs)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
    chunked_docs,
    embeddings,
)

不使用查询分析的检索

直接对用户问题进行相似性搜索。

search_results = vectorstore.similarity_search("how do I build a RAG agent")
print(search_results[0].metadata["title"])  # 打印检索到的文档标题

使用查询分析进行检索

定义查询模式,转换用户问题到结构化查询。

from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field

class Search(BaseModel):
    query: str = Field(..., description="Similarity search query applied to video transcripts.")
    publish_year: Optional[int] = Field(None, description="Year video was published")

# 使用 OpenAI 模型生成结构化查询。
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are an expert at converting user questions into database queries."),
    ("human", "{question}"),
])
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
structured_llm = llm.with_structured_output(Search)
query_analyzer = {"question": RunnablePassthrough()} | prompt | structured_llm

利用生成的查询进行检索:

def retrieval(search: Search):
    if search.publish_year is not None:
        _filter = {"publish_year": {"$eq": search.publish_year}}
    else:
        _filter = None
    return vectorstore.similarity_search(search.query, filter=_filter)

retrieval_chain = query_analyzer | retrieval
results = retrieval_chain.invoke("RAG tutorial published in 2023")
[(doc.metadata["title"], doc.metadata["publish_date"]) for doc in results]

应用场景分析

查询分析可显著提升搜索引擎结果的相关性,尤其在需要结合时间、来源等复杂条件的查询中表现优异。这种技术可广泛应用于文档检索、推荐系统、智能问答平台等领域。

实践建议

  1. 完善查询模式:根据具体业务场景,调整查询模式以满足特定需求。
  2. 实验和评估:多次实验不同的模型参数与数据集,评估效果。
  3. 安全管理密钥:使用环境变量或安全的密钥管理系统。

如果遇到问题欢迎在评论区交流。

—END—

win10和Mac上安装Freesurfer Mac安装Freesurfer 软件下载地址 可以根据官方给出的demo视频一步一步下载 阅读详情

相关推荐

11、AUTOSAR配置全解析:从运行实体到通信接口

本博客详细解析了在Simulink中使用AUTOSAR字典配置AUTOSAR运行实体(Runnables)、运行实体间变量(IRVs)、参数以及多种通信接口的过程。内容涵盖运行实体及其事件的配置、IRV和参数的属性设置,以及发送-接收接口、模式切换接口、客户端-服务器接口、非易失性数据接口、参数接口和触发接口的详细配置方法。通过这些步骤,开发者可以高效地构建符合AUTOSAR标准的汽车电子软件系统。

e3f4g5的博客 100

ElasticSearch优化实战:打造高性能搜索引擎的秘籍

本文深入探讨了ElasticSearch(ES)的优化策略,旨在帮助读者提升搜索引擎的性能和效率。文章首先介绍了ES的数据写入和搜索的流程。随后,通过具体用例分析,展现了在不同业务场景下的优化实践,如新闻内容检索、客户服务记录检索和物流信息追踪平台。这些用例揭示了索引分片调整、热点数据处理、异步写入、内容分级索引等多种优化手段的实际效果。文章强调优化ES是一个持续的过程,需要不断地监控、调整和优化以应对数据增长和业务需求的变化。

东境物语 2万+

基于深度学习实现驾驶员驾驶行为识别项目源码+数据集+毕业设计(高分已过项目).zip

基于深度学习实现驾驶员驾驶行为识别项目源码+数据集+毕业设计(高分已过项目).zip 高分毕业设计项目,代码完整下载可用,纯手打高分设计,可作为毕业设计、期末大作业和课程设计,小白也可实战。不仅可以识别出疲劳驾驶,还能够识别出各种各样的行为状态。基于深度学习实现驾驶员驾驶行为识别项目源码+数据集+毕业设计(高分已过项目).zip 高分毕业设计项目,代码完整下载可用,纯手打高分设计,可作为毕业设计、期末大作业和课程设计,小白也可实战。不仅可以识别出疲劳驾驶,还能够识别出各种各样的行为状态。基于深度学习实现驾驶员驾驶行为识别项目源码+数据集+毕业设计(高分已过项目).zip 高分毕业设计项目,代码完整下载可用,纯手打高分设计,可作为毕业设计、期末大作业和课程设计,小白也可实战。不仅可以识别出疲劳驾驶,还能够识别出各种各样的行为状态。基于深度学习实现驾驶员驾驶行为识别项目源码+数据集+毕业设计(高分已过项目).zip 高分毕业设计项目,代码完整下载可用,纯手打高分设计,可作为毕业设计、期末大作业和课程设计,小白也可实战。不仅可以识别出疲劳驾驶,还能够识别出各种各样的行为状态。

在淘客返利系统中使用Elasticsearch实现搜索引擎优化

本文将探讨如何在淘客返利系统中使用Elasticsearch来实现搜索引擎优化,提升搜索速度和准确性,满足高并发、大数据量的搜索需求。Elasticsearch是一个开源的分布式搜索引擎,基于Lucene构建,提供了强大的全文搜索和分析能力。本文深入探讨了如何在淘客返利系统中使用Elasticsearch实现搜索引擎优化,通过集成Elasticsearch,可以提升系统的搜索性能、查询效率和用户体验,满足复杂业务场景下的需求。大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

技术研究中心 2678

Elasticsearch 全面解析:从原理到实战的分布式搜索引擎指南

Elasticsearch作为分布式搜索与分析引擎,凭借近实时检索、分布式架构和强大全文搜索能力,成为企业级搜索的首选解决方案。本文系统介绍ES核心概念(索引、分片、倒排索引)、架构原理(分布式协同、近实时机制)、实操部署(Docker环境搭建)及典型应用场景(日志分析、业务监控等),并给出性能优化策略。随着AI技术融合,ES正从关键词搜索向语义理解演进,未来将在更多数据场景中发挥关键作用。

m0_58782205的博客 2680

用Elasticsearch构建社交网络搜索分析系统

本文详细介绍了如何用Elasticsearch构建社交网络搜索分析系统,涵盖索引设计、数据导入、核心搜索功能、实时分析及推荐系统集成。Elasticsearch的倒排索引丰富的查询DSL实时聚合等功能,使其成为社交网络搜索分析的理想选择。针对社交场景的Elasticsearch索引设计技巧;如何实现高效的全文搜索、过滤与排序;如何构建实时热门话题、用户活跃度等分析功能;如何结合Elasticsearch实现个性化推荐。

Agentic AI人工智能与大数据正在引领一场新智能科技革命。 1134

构建查询分析系统:从查询到结果的一站式实现

查询分析是一种优化数据检索的方法,通过解析用户查询,生成结构化检索请求,以提高检索结果的相关性和准确性。在本例中,我们以LangChain的YouTube视频为检索对象,构建一个简单的搜索引擎,并展示如何通过查询分析改善搜索结果。

tt_jishu的博客 378

bodybuilder快速入门:10分钟学会构建Elasticsearch查询

想要快速掌握Elasticsearch查询构建技巧吗?bodybuilder是一个强大的JavaScript库,专门用于简化Elasticsearch查询构建过程。这个轻量级工具让复杂的查询语句变得简单易懂,通过直观的链式API,即使是初学者也能在10分钟内学会构建专业的Elasticsearch查询。无论你是数据分析师、后端开发者还是搜索工程师,bodybuilder都能让你的查询构建工作事半功

gitblog_00591的博客 841

Elasticsearch数据库优化实战:让你的ES飞起来

摘要:ES已经成为了全能型的数据产品,在很多领域越来越受欢迎,本文旨在从数据库领域分析ES的使用。

华为云官方博客 2393

杭州GEO网站建设哪家好:面向搜索引擎与AI推荐的

杭州 GEO 网站建设哪家好,更合理的判断方式,是看服务商是否真正具备: 网站策划能力、SEO 基础、AI 抓取能力、前后端开发能力、内容结构能力、真实案例和长期运维能力。

hzxpaipai的博客 234

高收益玩法:站群泛程序结合本地服务引流变现全流程

本文介绍了站群泛程序结合本地服务的互联网营销模式。通过搭建多个优化网站形成站群吸引流量,再将其精准引导至本地服务实现变现。该模式包含站群搭建、内容填充、SEO优化、多渠道引流及多元变现等关键环节,数据显示可使企业收益提升30%以上。这种创新模式充分发挥网络优势,将流量高效转化为本地服务收益,为创业者提供高回报的营销解决方案。

hyf326633的博客 279

用 Java 编写一个轻量级搜索引擎爬虫后端服务

本文介绍了一个使用Java原生API构建的轻量级搜索引擎爬虫后端服务。该服务采用JDK内置HttpServer和HttpClient,结合Jsoup和Gson等轻量级库,实现了搜索结果的获取、缓存和代理功能。 本文作者: 张赐荣,视障者,资深软件开发工程师,信息无障碍解决方案研发专家,长期致力于数字化产品的可及性研究与用户体验优化工作。 曾参与国内外多个互联网大型产品的无障碍改造项目及发布大量原创技术指南,系统性地推动了无障碍技术的标准化进程与落地部署工作。

张赐荣的技术博客 248

SEO优化与GEO优化关系:搜索引擎排序到生成引擎引用的技术拆解

本文从工程视角解析SEO优化搜索引擎优化)与GEO优化(生成引擎优化)的关系。SEO优化传统搜索入口,提升抓取与排序;GEO优化则争取内容被AI引用,建立信任。研究指出两者互补共存,86%用户仍使用传统搜索,同时72%消费者会咨询AI。文章提出AI筛选内容的六大维度:语义相关、信息增益、信源权威、结构化、多模态和时效性,并引用华南理工研究数据,显示权威媒体发布的内容被引用概率高4.5倍。结论强调需双管齐下,既占入口又建信任。

RoseMarketing的博客 342

2026年陕西做GEO推广,找新网企兴解决获客难题

在传统流量红利见顶的当下,企业获客成本逐年攀升,尤其对于依赖精准线索的B2B企业而言,如何低成本获取高质量客户已成为核心痛点。随着人工智能技术的爆发式增长,用户的搜索习惯正在发生根本性变革,这种变革催生了全新的营销赛道——GEO(Generative Engine Optimization,生成式引擎优化)。对于身处西安、面向全国的软件开发企业而言,陕西新网企兴科技有限公司正凭借其专业的技术实力与前瞻性的战略眼光,成为企业解决获客难题的关键伙伴。

2601_96141928的博客 202

retriever 的通俗说法就是——紧急预案知识库的“搜索引擎

我来看一下retriever的实际实现,给你讲清楚。retriever的通俗说法就是——。它在里实现,是一个封装了 Elasticsearch 检索的类。

你是人间四月天 254

从CVI(C)到Pyside(python)/Qt(C++)/VS(C#)的一点吐槽

Tkinter 布局助手”,是我接触过的基于python原生的图形界面套件Tkinter来做GUI程序的最佳实践,链接是https://www.pytk.net/],在web上就可以拖拽基础控件到面板,并定义控件的回调函数,完了存盘到本机。我曾经死抱着CVI不放,没有去追逐更现代的IDE,究其原因,主要是以前没有 AI 辅助编程,很多新 IDE 摸都不敢摸,随便一个编译报错或环境配错,就会卡死我半天。所以,遇到我这样,时不时输出一个学习心得的老工程师,也应该算是一种缘分了,很罕见的哦。

qq_15084199的博客 245

用 TRAE Builder+MCP+VibeCoding 做个超酷的AI旅游札记生成器

可以通过修改"文艺": "文字优美,富有诗意...","幽默": "语言轻松活泼...","深度": "深入思考旅行的意义...","简洁": "语言简洁明了...","古风": "使用文言文或古风语言,富有古典韵味...","科技感": "使用现代科技词汇,突出数字化体验..."兄弟们,咱们的AI旅游札记生成应用终于搞定啦!基于TRAE Builder+MCP服务和VibeCoding技术,咱们开发出了一个功能超全、体验超棒的旅行小伙伴。它能帮你做什么呢?🤖智能旅行札记生成。

laozhangguzhang的博客 211

AI Agent学习笔记(20260817)

肖斌。

weixin_43341767的博客 241

Reddit 数据抓取工具指南:如何在 2026 年抓取 Reddit 数据

本文介绍了2026年Reddit数据抓取的主要方法及注意事项。官方API(如PRAW库)适合结构化数据获取,而第三方工具(如Apify)简化了数据收集流程。常见问题包括403/429错误、缺失评论和重复数据,建议采用退避策略和唯一标识符解决。关键注意事项包括:最小化个人数据收集、控制请求频率、合理使用代理IP(如IPFoxy的动态住宅代理),以及优先收集高质量小数据集而非海量杂乱信息。最佳方法取决于项目需求,小型项目可用现成工具,复杂任务建议构建自定义Python管道。

2603_96479538的博客 349

PC / 外设资产 TCO 测算模型:租赁模式和直接采购怎么量化对比

本文介绍了企业IT硬件全生命周期管理中PC及外设类硬件的TCO(总拥有成本)量化测算工程实现方案。针对传统Excel测算的缺陷(如逻辑硬编码、隐性成本缺失、无统一对比基准等),提出结构化TCO测算引擎架构,通过参数配置层、计算内核层、约束校验层和结果输出层四部分实现。方案采用Python开发,包含完整可运行Demo,支持自购与租赁模式的年均等效成本对比,可输出分项明细和参数敏感性分析。文章详细展示了YAML参数配置、边界校验模块和核心计算逻辑的设计,重点解决了企业硬件采购决策中隐性成本量化困难等问题。

企业 IT 文印实战知识库,面向 IT 运维、信息化负责人、采购决策者。 专栏《复印机》:分布式文印全套落地实战系列,包含架构、安全、SDK 集成、TCO 测算、设备监控、电子化归档。 672
上一篇: 使用腾讯云VectorDB进行自查询信息检索的实战指南
下一篇: 如何实现聊天模型响应的流式处理
qahaj
博客等级 码龄2年 824粉丝 · 248原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值