门户网站建设公司市场内蒙古呼和浩特邮编
门户网站建设公司市场,内蒙古呼和浩特邮编,快手刷评论推广网站,湖南做网站的公司排名⚖️Lychee-Rerank实战教程#xff1a;结合LangChain构建端到端RAG重排链路
1. 开篇#xff1a;为什么需要本地化重排工具#xff1f;
想象一下这个场景#xff1a;你正在构建一个智能问答系统#xff0c;用户输入问题后#xff0c;系统从海量文档中检索出10篇可能相关…⚖️Lychee-Rerank实战教程结合LangChain构建端到端RAG重排链路1. 开篇为什么需要本地化重排工具想象一下这个场景你正在构建一个智能问答系统用户输入问题后系统从海量文档中检索出10篇可能相关的文章。但问题是——如何从这10篇文章中找出最相关的那几篇传统的关键词匹配已经不够用了我们需要更智能的相关性判断。这就是Lychee-Rerank要解决的问题。它是一个纯本地的检索相关性评分工具基于强大的Qwen2.5-1.5B模型能够准确判断查询语句与文档的相关程度。最棒的是一切都在本地运行你的数据永远不会离开你的电脑。本文将手把手教你如何部署和使用Lychee-Rerank并展示如何将其集成到LangChain框架中构建完整的RAG检索增强生成流水线。2. 环境准备与快速部署2.1 系统要求与依赖安装在开始之前请确保你的系统满足以下要求Python 3.8或更高版本至少8GB内存推荐16GB10GB可用磁盘空间用于存储模型权重安装必要的依赖包pip install torch transformers streamlit langchain sentence-transformers2.2 一键启动Lychee-RerankLychee-Rerank提供了极其简单的启动方式。创建一个新的Python文件比如lychee_rerank_demo.py然后添加以下代码import streamlit as st from transformers import AutoTokenizer, AutoModelForCausalLM import torch import numpy as np # 初始化模型和分词器 st.cache_resource def load_model(): model_name Qwen/Qwen2.5-1.5B-Instruct tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained(model_name, torch_dtypetorch.float16, device_mapauto) return tokenizer, model tokenizer, model load_model() # Streamlit界面 st.title(⚖️ Lychee-Rerank 相关性评分工具)保存文件后在终端中运行streamlit run lychee_rerank_demo.py控制台会输出一个本地访问地址通常是http://localhost:8501用浏览器打开这个地址就能看到评分工具界面了。3. 核心概念快速入门3.1 理解相关性评分原理Lychee-Rerank的工作原理其实很直观。它基于一个简单的二分类判断给定一个查询语句和一篇文档模型需要判断这篇文档是否与查询相关技术实现上工具使用了特定的提示词格式Instruction基于查询检索相关文档/Instruction Query用户的实际查询语句/Query Document待评分的文档内容/Document模型需要输出yes或no然后工具计算yes的概率作为相关性分数。分数越接近1说明文档与查询越相关。3.2 关键组件解析指令Instruction告诉模型要做什么任务默认是基于查询检索相关文档查询Query用户的实际问题或搜索词候选文档待评分的文档集合每行一篇文档相关性分数0到1之间的数值1表示完全相关4. 分步实践操作4.1 基础使用单次评分演示让我们从一个简单的例子开始。假设我们想查询人工智能的历史有以下5篇候选文档人工智能起源于1956年的达特茅斯会议机器学习是人工智能的一个子领域深度学习在2010年后取得突破性进展神经网络受到人脑结构的启发Python是最流行的人工智能编程语言在Lychee-Rerank界面中在Instruction字段保持默认值在Query字段输入人工智能的历史在候选文档区域输入上面的5篇文档每行一篇点击 计算相关性分数按钮你会看到工具为每篇文档计算了相关性分数并按分数从高到低排序。第一篇关于达特茅斯会议的文档应该得分最高因为它最直接地回答了历史相关的问题。4.2 批量处理技巧Lychee-Rerank支持批量处理大量文档。如果你有上百篇文档需要评分可以这样操作# 批量处理示例代码 def batch_rerank(queries, documents, instruction基于查询检索相关文档): results [] for query in queries: scores [] for doc in documents: # 构建提示词 prompt fInstruction{instruction}/Instruction\nQuery{query}/Query\nDocument{doc}/Document # 计算相关性分数 inputs tokenizer(prompt, return_tensorspt).to(model.device) with torch.no_grad(): outputs model(**inputs) # 提取yes的概率作为分数 score calculate_yes_probability(outputs, inputs) scores.append(score) # 按分数排序 sorted_indices np.argsort(scores)[::-1] results.append({ query: query, sorted_documents: [documents[i] for i in sorted_indices], scores: [scores[i] for i in sorted_indices] }) return results5. 结合LangChain构建端到端RAG链路5.1 创建自定义重排器现在来到最精彩的部分——将Lychee-Rerank集成到LangChain中。首先我们需要创建一个自定义的重排器from langchain.schema import BaseOutputParser, Document from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import BaseDocumentCompressor from typing import List class LycheeReranker(BaseDocumentCompressor): def __init__(self, model, tokenizer, instruction基于查询检索相关文档): self.model model self.tokenizer tokenizer self.instruction instruction def compress_documents(self, documents: List[Document], query: str) - List[Document]: # 为每个文档计算相关性分数 scored_documents [] for doc in documents: score self._calculate_relevance_score(query, doc.page_content) scored_documents.append((doc, score)) # 按分数降序排序 scored_documents.sort(keylambda x: x[1], reverseTrue) # 返回重排后的文档 return [doc for doc, score in scored_documents] def _calculate_relevance_score(self, query: str, document: str) - float: prompt fInstruction{self.instruction}/Instruction\nQuery{query}/Query\nDocument{document}/Document inputs self.tokenizer(prompt, return_tensorspt).to(self.model.device) with torch.no_grad(): outputs self.model(**inputs) # 这里需要实现具体的分数计算逻辑 return calculate_yes_probability(outputs, inputs) # 初始化重排器 reranker LycheeReranker(model, tokenizer)5.2 构建完整RAG流水线有了自定义重排器我们现在可以构建完整的RAG系统from langchain.vectorstores import Chroma from langchain.embeddings import HuggingFaceEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader from langchain.retrievers import ContextualCompressionRetriever # 1. 加载文档 loader TextLoader(your_document.txt) documents loader.load() # 2. 分割文档 text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) texts text_splitter.split_documents(documents) # 3. 创建向量数据库 embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) vectorstore Chroma.from_documents(texts, embeddings) # 4. 创建基础检索器 base_retriever vectorstore.as_retriever(search_kwargs{k: 20}) # 5. 创建带重排的检索器 compression_retriever ContextualCompressionRetriever( base_compressorreranker, base_retrieverbase_retriever ) # 6. 测试检索效果 query 人工智能的发展历史 compressed_docs compression_retriever.get_relevant_documents(query) print(f检索到 {len(compressed_docs)} 篇相关文档) for i, doc in enumerate(compressed_docs[:3]): print(fTop {i1}: {doc.page_content[:100]}...)6. 实用技巧与进阶用法6.1 优化评分效果如果你发现评分结果不太理想可以尝试以下优化方法调整指令Instruction默认指令基于查询检索相关文档尝试更具体的指令判断以下文档是否直接回答了查询问题或者从技术文档的角度评估相关性温度参数调整# 在计算分数时调整温度参数 def calculate_yes_probability(outputs, inputs, temperature0.1): # 实现带温度参数的分数计算 logits outputs.logits[:, -1, :] probs torch.softmax(logits / temperature, dim-1) yes_token_id tokenizer.encode(yes)[0] return probs[0, yes_token_id].item()6.2 处理长文档策略当遇到很长的文档时可以考虑以下策略def rerank_long_documents(query, long_document, chunk_size500): # 将长文档分割成 chunks chunks [long_document[i:ichunk_size] for i in range(0, len(long_document), chunk_size)] # 为每个 chunk 计算分数 chunk_scores [] for chunk in chunks: score calculate_relevance_score(query, chunk) chunk_scores.append(score) # 使用最高分作为整个文档的分数 return max(chunk_scores) if chunk_scores else 0.07. 常见问题解答Q: 为什么有些明显相关的文档得分却不高A: 这可能是因为文档中的表述方式与查询不太匹配。尝试调整Instruction或者使用同义词扩展查询。Q: 处理大量文档时速度很慢怎么办A: 可以考虑批量处理而不是逐条处理或者使用更小的模型版本。Qwen2.5-0.5B是一个不错的轻量级替代方案。Q: 能否使用自己的模型A: 当然可以只要模型支持类似的文本生成任务你都可以替换现有的Qwen模型。只需要修改模型加载部分的代码即可。Q: 分数阈值怎么设置A: 通常建议分数 0.8高度相关直接使用分数 0.4-0.8中等相关可以保留但可能需要进一步处理分数 0.4低相关建议过滤掉8. 总结通过本教程我们完整学习了Lychee-Rerank的部署、使用和集成方法。这个工具最大的价值在于提供了纯本地的相关性评分能力特别适合对数据隐私要求较高的场景。关键要点回顾本地化优势数据不出本地避免隐私泄露风险易用性简单的界面和API快速集成到现有系统灵活性支持自定义指令适应不同场景需求LangChain集成可以无缝融入现有的RAG流水线实践中建议开始时使用默认配置然后根据实际效果逐步调整对于重要应用建议人工评估一批结果以校准分数阈值定期更新模型版本以获得更好的性能Lychee-Rerank只是一个工具真正的价值在于如何将它应用到解决实际问题上。希望本教程能帮助你构建更智能、更准确的检索系统获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。