当前位置: 首页 > article >正文

[RAG在LangChain中的实现-07]利用重排序选择相关性最高的检索内容构建上下文

重排序Re-ranking是一种关键的RAG优化技术。它通过在“初始检索”与“最终生成”之间通过对初步检索出的文档进行二次评估筛选出与用户查询语义最相关的结果从而提高生成内容的准确性。在典型的检索流程中第一步通常使用向量相似度搜索虽然速度极快但由于只对比向量间的距离往往难以捕捉深层的语义关系。重排序模型Reranker接收用户查询和一组初步检索到的文档输出每个文档的相关性分数。重排序相当于一个“精密的过滤器”能从粗筛出的几十个文档中精准挑出最核心的3-5个送入大模型有效解决“长上下文丢失”或“无关文档干扰”的问题。在一个典型的RAG管道中的流程如下初始检索利用向量数据库检索出前20个文档重排序将这20个文档和查询文本传给Reranker模型重新计算分值切片过滤只取分数最高的Top-K如前5个文档生成回答将精简后的文档作为Context提供给LLM1. ContextualCompressionRetriever对LangChain 1.0之前的版本重排序主要通过ContextualCompressionRetriever来实现。它通过“压缩”检索文档只保留最相关的部分。压缩是对检索文档的后处理操作之一LangChain专门为相关的类型定义如下这个名为BaseDocumentCompressor的抽象基类它的抽象方法compress_documents结合指定的查询对输入的文档序列进行压缩并返回压缩后的文档序列acompress_documents方法会以异步的方式执行compress_documents方法。ContextualCompressionRetriever在最新版本中已经被拿掉设计者觉得直接使用LCEL链的方式对检索文档进行压缩是更好的选择。classBaseDocumentCompressor(BaseModel,ABC):abstractmethoddefcompress_documents(self,documents:Sequence[Document],query:str,callbacks:Callbacks|NoneNone,)-Sequence[Document]:asyncdefacompress_documents(self,documents:Sequence[Document],query:str,callbacks:Callbacks|NoneNone,)-Sequence[Document]常用的重排序模型主要分为闭源商业 API、开源模型以及轻量化方案三大类。它们的核心区别在于性能、成本、多语言支持以及上下文长度。2. Cohere RerankCohere Rerank是目前工业界最领先的重排序商业方案之一专门用于增强RAG系统的检索精度。其3.0/3.5版本奠定了行业地位其核心特性包括上下文长度支持4,096个token能够处理比普通Embedding检索更长、更完整的文档块半结构化数据支持原生支持对JSON格式、代码、表格和Email进行重排序无需预先将数据扁平化为纯文本多语言能力支持 100 多种语言包括中文、英文、法语等在跨语言搜索中表现出色低成本高性能2025年末推出的Rerank 4.0 分为Pro和Fast 两个版本针对不同业务需求进行了优化。在如下几个方法具有重大改进上下文窗口飞跃从8K3.5版扩展至 32,000 token提升了4倍。这意味着它能一次性“阅读”更长的文档或更多的候选结果极大地减少了因切片导致的语义断裂版本双线并行Rerank 4 Pro追求极致精度适合风险建模、法律合规、科学研究等复杂推理任务Rerank 4 Fast追求低延迟比Pro快约 25-30%适合电商搜索、在线客服等高并发场景自学习能力首次引入了无需标注数据的自适应技术模型可以根据特定领域的术语和偏好自动微调性能作为智能体的治理层它不再仅仅是检索工具而是作为控制层过滤噪声通过提供高信号上下文来稳定多步推理智能体的决策过程Cohere Rerank重排序在LangChain中利用langchain_cohere库的CohereRerank类型来完成它继承自BaseDocumentCompressor重排序的功能实现rerank方法中实现的compress_documents会调用此方法。针对CohereRerank的使用可以查看官方开发文档。classCohereRerank(BaseDocumentCompressor):client:AnyNonetop_n:Optional[int]3model:Optional[str]Nonedefault_factorysecret_from_env(COHERE_API_KEY,defaultNone))base_url:Optional[str]Noneuser_agent:strlangchain:partnerdefrerank(self,documents:Sequence[Union[str,Document,dict]],query:str,*,rank_fields:Optional[Sequence[str]]None,model:Optional[str]None,top_n:Optional[int]-1,max_tokens_per_doc:Optional[int]None,)-List[Dict[str,Any]]defcompress_documents(self,documents:Sequence[Document],query:str,callbacks:Optional[Callbacks]None,)-Sequence[Document]3. Jina RerankerJina AI推出的重排序模型系列以小参数量、高性能和多语言支持著称。v2版本于2024年发布重点解决了RAG系统在工具调用和多语言检索中的性能瓶颈其核心特性包括架构设计采用Cross-Encoder架构并集成Flash Attention 2显著提升了推理速度极致速度其吞吐量比同级别的bge-reranker-v2-m3快约15倍Agent 友好原生支持针对函数调用和SQL查询的文档重排序能够更精准地帮助智能体Agent选择匹配的API或数据库表多语言能力支持超过 100 种语言在代码搜索任务中表现优异上下文限制支持1024 token的上下文长度v3版本于2025年10 月发布代表了目前重排序技术的最新趋势在如下几个方法实现了技术飞跃Listwise排序机制不同于v2逐对Query-Doc Pair评分v3在单一推理窗口内同时处理多个文档最多64个。这使得模型能进行文档间的交互推理通过对比得出更优的相对排名底座模型基于Qwen3-0.6B构建仅用 600M 的参数量就达到了超越 1.5B 甚至更大模型的检索性能超长上下文上下文容量大幅提升至 131K token极大地缓解了长文档重排时的信息丢失问题Last-but-Not-Late-Interaction机制结合了全交互Cross-encoding的精度和后期交互Late interaction的灵活性进一步增强了语义捕捉能力性能标杆在BEIR检索基准测试中刷新了SOTA记录尤其擅长处理复杂的逻辑推理和事实核查任务Jina Reranker重排序在LangChain中利用langchain_community库提供的如下这个JinaRerank来完成该类型所在模块的路径为langchain_community.document_compressors.jina_rerank。它也是BaseDocumentCompressor的继承类型利用jina_api_key字段设置好API-KEY就能使用。classJinaRerank(BaseDocumentCompressor):session:AnyNonetop_n:Optional[int]3model:strjina-reranker-v1-base-enjina_api_key:Optional[str]Noneuser_agent:strlangchaindefrerank(self,documents:Sequence[Union[str,Document,dict]],query:str,*,model:Optional[str]None,top_n:Optional[int]-1,max_chunks_per_doc:Optional[int]None,)-List[Dict[str,Any]]defcompress_documents(self,documents:Sequence[Document],query:str,callbacks:Optional[Callbacks]None,)-Sequence[Document]4. BGE-Reranker的BGE-Reranker是由国内北京智源人工智能研究院BAAI开发是目前开源界最主流、中文支持最好的重排序模型系列。如果说Cohere是商业标杆那BGE就是私有化部署的首选。不同于Cohere和Jina它还是一个开源的解决方案。BGE是Beijing Academy of Artificial Intelligence General Embedding的缩写。它是一个交叉编码器Cross-Encoder将用户问题和检索到的文档拼接在一起同时输入到Transformer模型中。所以模型能捕捉问题与文档之间细微的语义交互准确率远高于仅计算向量距离的初筛。但是这样会导致计算量大不适合对万级文档进行全量排序因此只用于对初筛后的Top 50-100个结果进行“精排”。LangChain定义了如下这个抽象基类BaseCrossEncoder来表示交叉编码器我们可以利用它来计算指定两个文本之间的相关度。如下面的代码片段所示我们可以将一个字符串二元组列表作为参数调用它的score方法用于计算每个元组提供的两条文本之间的相关性得分。HuggingFaceCrossEncoder是它的子类我们可以利用指定的交叉编码模型来计算文本相关性。从model_name字段的默认值可以看出默认采用的就是BAAI/bge-reranker-base模型。classBaseCrossEncoder(ABC):abstractmethoddefscore(self,text_pairs:list[tuple[str,str]])-list[float]classHuggingFaceCrossEncoder(BaseModel,BaseCrossEncoder):client:AnyNonemodel_name:strDEFAULT_MODEL_NAME model_kwargs:Dict[str,Any]Field(default_factorydict)def__init__(self,**kwargs:Any)defscore(self,text_pairs:List[Tuple[str,str]])-List[float]DEFAULT_MODEL_NAMEBAAI/bge-reranker-base我们可以利用HuggingFaceCrossEncoder来使用BGE-Reranker。HuggingFaceCrossEncoder是一个专门用于重排序的组件它封装了 Hugging Face的模型让我们能以极简的代码将高精度的交叉编码器集成到RAG工作流中。它属于embeddings模块的近亲但它的功能不是“生成向量”而是“打分”。在前面演示的实例中我们加载了博文的内容并将其分割存进了InMemoryVectorStore。如果我们采用单纯的相似度查询则会丧失检索结果的多样性所以我们可以采用最大边界相关性MMRMax Marginal Relevance算法。然后我们可以利用重排序在检索结果基础上选择与查询最相关的三个文档具体的程序如下所示fromlangchain_community.cross_encodersimportHuggingFaceCrossEncoderfromdotenvimportload_dotenv load_dotenv()fromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_core.vectorstoresimportInMemoryVectorStorefrombs4.filterimportSoupStrainerfromlangchain_community.document_loadersimportWebBaseLoaderfromlangchain_text_splittersimportRecursiveCharacterTextSplitter# Step 1: Load documents from the webloaderWebBaseLoader(web_paths(https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html,),bs_kwargs{parse_only:SoupStrainer(class_(postBody))},)documentsloader.load()# Step 2: Split documents into chunkssplitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200,add_start_indexTrue,)chunkssplitter.split_documents(documents)# Step 3: Add the chunks into vector storestoreInMemoryVectorStore(embeddingOpenAIEmbeddings(modeltext-embedding-3-small))store.add_documents(documentschunks)retrieverstore.as_retriever(search_typemmr,search_kwargs{k:10,fetch_k:20,lambda_mult:0.5})queryHttpContext和Server之间如何适配documentsretriever.invoke(query)# Step 4: Rerank the retrieved documents and select top 3encoderHuggingFaceCrossEncoder()scoresencoder.score([(query,doc.page_content)fordocindocuments])top_3sorted(zip(documents,scores),keylambdax:x[1],reverseTrue)[:3]fori,(doc,score)inenumerate(top_3):print(f排名{i1}(分数:{score:.4f}):)print(f内容:{doc.page_content[:100]}...\n)输出排名 1 (分数: 0.9991): 内容: { Task StartAsync(RequestDelegate handler); }9、HttpContext和Server之间的适配面向应用层的HttpContext对象是对请求和响... 排名 2 (分数: 0.7677): 内容: }我们有必要对上面这个Hello World程序作一个简答的介绍在创建出WebHostBuilder之后我们调用了它的扩展方法UseHttpListener注册了一个自定义的基于HttpListe... 排名 3 (分数: 0.6525): 内容: public IApplicationBuilder Use(FuncRequestDelegate, RequestDelegate middleware) { _mid...5. Qwen3-RerankerQwen3-Reranker是由阿里巴巴Qwen团队在2025年6月正式推出的最新一代开源重排序模型系列。它是Qwen家族中专为提升RAG系统精度而设计的“精排”引擎基于最新的Qwen3密集型基础模型构建,它具有的关键技术特性包括单塔Point-wise架构采用Cross-Encoder模式将查询和文档作为单一序列输入利用模型深层的语义交互直接输出相关性得分指令感知的灵活性 支持用户自定义指令Instruct引导模型针对特定任务、特定语言或特定行业场景进行排序优化。使用指令通常能带来1%到5%的性能提升多模态支持 (Qwen3-VL 系列)该系列还包含专门针对视觉任务的 Qwen3-VL-Reranker能够处理包含图像、视频或复杂视觉文档的多模态检索对强大的多语言能力继承自 Qwen3 底座原生支持超过100种语言并涵盖各种编程语言非常适合跨语言检索和代码搜索Qwen3-Reranker提供了全梯度的模型尺寸以适应从边缘端到服务器端的不同算力需求0.6B (如 Qwen3-Reranker-0.6B)极致轻量化适合预算有限、追求低延迟或本地化部署的场景;4B/8B平衡性能与资源其中8B版本在多项检索任务中展现出超越0.6B模型约3.0分的显著领先优势;如果需要将上面的例子切换成Qwen3-Reranker不能直接修改HuggingFaceCrossEncoder的模型名称因为Qwen3-Reranker针对批量处理需要为它的分词器设置pad_token目前HuggingFaceCrossEncoder没有对此提供支持所以我们采用如下的方式根据此模型名称创建了一个CrossEncoder对象并通过tokenizer_kwargs参数设置pad_token。经过我的测试这样还不够编码器的模型配置encoder.model.config也需要进行相应设置。相关性分数通过调用CrossEncoder对象的predict方法进行计算。fromsentence_transformersimportCrossEncoder encoderCrossEncoder(model_name_or_pathQwen/Qwen3-Reranker-0.6B,tokenizer_kwargs{pad_token:|endoftext|})encoder.model.config.pad_token_id151643print(encoder.tokenizer.pad_token_type_id)scoresencoder.predict([(query,doc.page_content)fordocindocuments],batch_size10)top_3sorted(zip(documents,scores),keylambdax:x[1],reverseTrue)[:3]fori,(doc,score)inenumerate(top_3):print(f排名{i1}(分数:{score:.4f}):)print(f内容:{doc.page_content[:100]}...\n)从如下的输出可以看出Qwen3-Reranker与BGE-Reranker针对相同查询文本和检索文档进行重排序产生的结果不太一样排名第一的文档是相同的但是第二、三名则不同。排名 1 (分数: 0.9922): 内容: { public static async Task Main() { await new WebHostBuilder() .UseHttpL... 排名 2 (分数: 0.9609): 内容: public HttpRequest(IFeatureCollection features) _feature features.GetIHttpRequestFeature(); }... 排名 3 (分数: 0.9609): 内容: public HttpListenerServer(params string[] urls) { _httpListener new HttpListener();

相关文章:

[RAG在LangChain中的实现-07]利用重排序选择相关性最高的检索内容构建上下文

重排序(Re-ranking)是一种关键的RAG优化技术。它通过在“初始检索”与“最终生成”之间,通过对初步检索出的文档进行二次评估,筛选出与用户查询语义最相关的结果,从而提高生成内容的准确性。在典型的检索流程中&#x…...

如何验证Qwen3-4B部署效果?MMLU基准测试实战指南

如何验证Qwen3-4B部署效果?MMLU基准测试实战指南 1. 为什么需要验证模型效果? 当你成功部署了Qwen3-4B模型后,最关心的问题肯定是:这个模型到底表现如何?能不能满足我的需求?这时候就需要一个客观的评估方…...

别再用subprocess了!Mojo原生FFI直连Python C API的5种安全模式,含CPython 3.11+PyPy兼容性矩阵表

第一章:Mojo 与 Python 混合编程案例 生产环境部署Mojo 作为新兴的系统级编程语言,原生兼容 Python 生态,支持在关键性能路径中无缝调用 Mojo 编译模块,同时复用 Python 的成熟工具链与部署基础设施。在生产环境中,典型…...

Realistic Vision V5.1虚拟摄影棚快速上手:新手3步生成比肩单反的人像

Realistic Vision V5.1虚拟摄影棚快速上手:新手3步生成比肩单反的人像 1. 为什么选择Realistic Vision V5.1虚拟摄影棚 如果你一直想尝试专业级人像摄影,但又苦于没有昂贵的单反设备和摄影棚,Realistic Vision V5.1虚拟摄影棚就是为你量身定…...

MRIcroGL:3步掌握开源医学影像3D可视化工具,让诊断更直观

MRIcroGL:3步掌握开源医学影像3D可视化工具,让诊断更直观 【免费下载链接】MRIcroGL v1.2 GLSL volume rendering. Able to view NIfTI, DICOM, MGH, MHD, NRRD, AFNI format images. 项目地址: https://gitcode.com/gh_mirrors/mr/MRIcroGL 想要…...

STM32控制步进电机复位的三种实用方法及适用场景分析

1. 步进电机复位的基本原理与挑战 步进电机作为工业控制和智能硬件中常见的执行元件,其复位功能直接关系到设备的重复定位精度。所谓复位,就是让电机轴回到预设的零位参考点。我在调试3D打印机时发现,哪怕只有0.1mm的复位误差,都…...

为什么头部AI团队已弃用Triton+ONNX Runtime?Cuvil架构设计图暴露Python推理第三条路!

第一章:Cuvil编译器在Python AI推理中的应用全景概览Cuvil编译器是一款面向AI工作负载的轻量级领域专用编译器,专为优化Python生态中基于PyTorch、ONNX及自定义计算图的推理流程而设计。它不替代传统Python解释器,而是通过源码到IR&#xff0…...

抖音内容下载技术方案:多策略架构与智能下载引擎实现

抖音内容下载技术方案:多策略架构与智能下载引擎实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

DLSS Swapper终极指南:5分钟掌握游戏性能优化新技能

DLSS Swapper终极指南:5分钟掌握游戏性能优化新技能 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾因游戏帧率不足而烦恼?是否想尝试新版本DLSS却担心兼容性问题?DLSS Swap…...

Graphormer多场景教程:学术论文配图生成、课程教学演示、项目原型开发

Graphormer多场景教程:学术论文配图生成、课程教学演示、项目原型开发 1. 认识Graphormer模型 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。这个模型在OGB、…...

快速验证openclaw抓取能力:用快马一键生成部署原型

最近在做一个内容抓取的小项目,尝试用openclaw框架快速搭建原型。这个开源机器人框架功能强大,但配置起来确实有点麻烦,特别是环境依赖和部署环节。经过一番折腾,我发现用InsCode(快马)平台可以省去很多重复劳动,分享下…...

阿里小云KWS模型多语言支持实战:中英文混合唤醒

阿里小云KWS模型多语言支持实战:中英文混合唤醒 1. 引言 语音唤醒技术正在变得越来越智能,但有一个问题一直困扰着开发者:怎么让设备既能听懂中文,又能响应英文?想象一下,你对着智能音箱说"小云小云…...

解锁Windows全版本安装自由:MediaCreationTool.bat实战指南

解锁Windows全版本安装自由:MediaCreationTool.bat实战指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

如何快速实现手机号码定位查询:3步掌握号码地理位置追踪技术

如何快速实现手机号码定位查询:3步掌握号码地理位置追踪技术 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/g…...

深度学习特征分解、SVD 与 PCA —— 矩阵的“质因数分解“(六)

1. 定位导航 本篇是第2章线性代数的终篇,覆盖三个最有力的矩阵分析工具:特征分解、奇异值分解(SVD)、主成分分析(PCA)。此外还包括三个辅助工具:Moore-Penrose 伪逆、迹运算、行列式。 这些工具贯穿深度学习的方方面面——PCA 用于数据预处理和降维,SVD 用于模型压缩…...

AI编程实战:工具选型、效率提升与代码优化技巧

2026年,AI编程已进入“自动驾驶时代”,据行业数据显示,AI编程工具可使开发者效率提升30%-70%,中小企业开发成本降低70%,个人开发者可快速实现产品落地。对于开发者而言,熟练运用AI编程工具,不是…...

效率倍增:用快马平台自动化生成类qoderwork官网的高质量模板

在开发企业级工具类官网时,效率往往是团队最关注的核心指标之一。最近尝试用InsCode(快马)平台自动化生成类似qoderwork官网的模板,发现它能将传统需要数天的手动搭建过程压缩到几分钟内完成,这种效率提升对中小团队尤其有价值。以下是具体实…...

Hotkey Detective:3分钟快速定位Windows热键冲突的终极指南

Hotkey Detective:3分钟快速定位Windows热键冲突的终极指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...

中文医学知识图谱构建指南:从技术痛点到价值落地

中文医学知识图谱构建指南:从技术痛点到价值落地 【免费下载链接】CMeKG_tools 项目地址: https://gitcode.com/gh_mirrors/cm/CMeKG_tools 破解医学文本处理的三重困境 当前医学NLP领域面临着专业术语识别难、实体边界模糊、关系抽取准确率低的三重挑战。…...

Qwen-Image镜像快速入门:手把手教你用RTX4090D搭建多模态AI开发环境

Qwen-Image镜像快速入门:手把手教你用RTX4090D搭建多模态AI开发环境 1. 开篇:为什么选择Qwen-Image镜像? 如果你正在寻找一个开箱即用的多模态AI开发环境,特别是针对RTX 4090D显卡优化的大模型推理方案,那么Qwen-Ima…...

Spring_couplet_generation 构建RESTful API最佳实践

Spring_couplet_generation 构建RESTful API最佳实践 最近在做一个挺有意思的小项目,想把一个春联生成模型包装成服务,方便其他应用调用。这让我重新思考了如何把一个AI模型能力,通过API的方式,既规范又稳定地提供出去。相信不少…...

Pixel Epic应用场景:律所尽调报告辅助生成+法律条文精准引用案例

Pixel Epic应用场景:律所尽调报告辅助生成法律条文精准引用案例 1. 法律行业的数字化挑战 法律尽职调查是并购交易、股权投资等商业活动中的关键环节。传统模式下,律师团队需要: 人工查阅数百页企业资料逐条核对法律法规手工编写数十页的尽…...

文墨共鸣大模型与Matlab科学计算结合:数据报告自动化

文墨共鸣大模型与Matlab科学计算结合:数据报告自动化 每次做完仿真和数据分析,看着满屏的图表和密密麻麻的数据矩阵,你是不是也头疼怎么写报告?从数据到文字,这中间仿佛隔着一道鸿沟,既要组织语言&#xf…...

基于钓鱼邮件的 DarkSword 攻击对 iOS 设备的威胁机理与防御体系研究

摘要 2026 年 3 月曝光的 DarkSword 攻击以钓鱼邮件为传播载体,针对 iOS 18.4 至 18.7 版本 iPhone 设备实施无文件、静默式入侵,通过组合利用 WebKit 引擎与内核级漏洞实现远程代码执行与敏感数据窃取,已构成面向国际组织与特定目标的高级持…...

抖音批量下载工具:高效解决方案与实战指南

抖音批量下载工具:高效解决方案与实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量…...

用Python手搓一个简易飞行仿真器:从状态机到轨迹计算的保姆级教程

用Python手搓一个简易飞行仿真器:从状态机到轨迹计算的保姆级教程 飞行仿真技术听起来像是航空航天工程师的专属领域,但你知道吗?用Python和一些基础库,我们完全可以构建一个简化版的飞行仿真系统。本文将带你从零开始&#xff0…...

30天重置一次:JetBrains IDE评估期管理工具使用指南

30天重置一次:JetBrains IDE评估期管理工具使用指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在软件开发过程中,JetBrains系列IDE(如IntelliJ IDEA、PyCharm、WebStorm等…...

马上深挖!!!三段逆置如何实现数组轮转?!用最简单的话让你秒懂

一、目的给定一个数组和一个整数k&#xff0c;让数组向右轮转k个数。如令[1,2,3,4,5,6]向右轮转3个数&#xff0c;结果为[4,5,6,1,2,3]。二、代码#include <iostream> using namespace std;void swap(int* a,int* b) {int tmp*a;*a*b;*btmp;return; }void reverse(int* a…...

3步打造智能家居音乐自由:给爱好者的开源方案详解

3步打造智能家居音乐自由&#xff1a;给爱好者的开源方案详解 【免费下载链接】xiaomusic 使用小爱音箱播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 在智能家居的日常使用中&#xff0c;许多用户都面临着…...

德希科技在线污泥浓度传感器

一、应用场景与产品定位 污泥浓度是污水处理生化系统稳定运行的关键控制指标&#xff0c;研发人员针对市政污水、工业废水处理厂曝气池、二沉池、氧化沟等场景的监测需求&#xff0c;推出散射光法在线污泥浓度传感器。设备以高稳定性、强抗干扰、长寿命的特性&#xff0c;适配…...