GTE Chinese Large实战教程:结合LangChain构建RAG检索模块

张开发
2026/5/11 5:18:18 15 分钟阅读

分享文章

GTE Chinese Large实战教程:结合LangChain构建RAG检索模块
GTE Chinese Large实战教程结合LangChain构建RAG检索模块1. 引言为什么需要高质量的文本嵌入想象一下你有一个包含数万份文档的知识库当用户提出问题时如何快速找到最相关的信息这就是文本嵌入模型的价值所在。GTE Chinese Large是一个专门为中文文本优化的嵌入模型能够将任意长度的中文文本转换为1024维的向量表示。这些向量就像文本的数字指纹语义相似的文本会有相似的向量表示从而让我们能够快速进行相似度计算和检索。本文将带你从零开始学习如何部署GTE Chinese Large模型并结合LangChain框架构建一个完整的RAG检索增强生成检索模块。无论你是NLP初学者还是有经验的开发者都能通过本教程快速上手。2. 环境准备与模型部署2.1 系统要求与依赖安装在开始之前请确保你的系统满足以下要求Python 3.8或更高版本至少8GB内存处理大文本时建议16GB以上GPU可选但能显著提升处理速度首先安装必要的依赖包# 创建并激活虚拟环境 python -m venv gte_env source gte_env/bin/activate # Linux/Mac # 或 gte_env\Scripts\activate # Windows # 安装核心依赖 pip install torch transformers sentence-transformers pip install langchain chromadb # RAG相关库 pip install fastapi uvicorn # Web服务依赖2.2 快速启动GTE服务按照官方提供的说明我们可以快速启动GTE模型服务# 进入模型目录 cd /root/nlp_gte_sentence-embedding_chinese-large # 启动Web服务 python /root/nlp_gte_sentence-embedding_chinese-large/app.py服务启动后可以通过 http://0.0.0.0:7860 访问Web界面或者通过API接口进行调用。3. GTE模型核心功能详解3.1 文本相似度计算文本相似度计算是GTE模型的基础功能之一。下面是一个完整的使用示例import requests import json def calculate_similarity(source_text, compare_texts): 计算源文本与多个比较文本的相似度 # 准备API请求数据 api_url http://localhost:7860/api/predict payload { data: [source_text, \n.join(compare_texts)] } try: response requests.post(api_url, jsonpayload) result response.json() # 解析返回结果 if data in result: similarities result[data] for i, text in enumerate(compare_texts): print(f与{text}的相似度: {similarities[i]:.4f}) return result except Exception as e: print(fAPI调用失败: {e}) return None # 使用示例 source 人工智能技术发展迅速 compare_texts [ AI技术日新月异, 机器学习算法进步很快, 今天天气真好 ] calculate_similarity(source, compare_texts)3.2 获取文本向量表示获取文本的向量表示是构建检索系统的基础def get_text_embedding(text): 获取文本的向量表示 api_url http://localhost:7860/api/predict payload { data: [text, , False, False, False, False] } try: response requests.post(api_url, jsonpayload) result response.json() if data in result: vector result[data] print(f文本向量维度: {len(vector)}) print(f前10维数值: {vector[:10]}) return vector return None except Exception as e: print(f获取向量失败: {e}) return None # 获取示例文本的向量 sample_text 深度学习在自然语言处理中的应用 embedding get_text_embedding(sample_text)4. 构建RAG检索模块4.1 使用LangChain集成GTE模型LangChain提供了强大的工具来集成各种嵌入模型。下面是如何将GTE模型集成到LangChain中from langchain.embeddings.base import Embeddings from typing import List import numpy as np class GTEEmbeddings(Embeddings): 自定义GTE嵌入类 def __init__(self, api_urlhttp://localhost:7860/api/predict): self.api_url api_url def embed_documents(self, texts: List[str]) - List[List[float]]: 为文档列表生成嵌入 embeddings [] for text in texts: vector self._get_embedding(text) if vector: embeddings.append(vector) return embeddings def embed_query(self, text: str) - List[float]: 为查询文本生成嵌入 return self._get_embedding(text) def _get_embedding(self, text: str) - List[float]: 调用GTE API获取嵌入向量 payload { data: [text, , False, False, False, False] } try: response requests.post(self.api_url, jsonpayload, timeout30) result response.json() return result.get(data, []) except Exception as e: print(f获取嵌入失败: {e}) return []4.2 创建向量数据库使用ChromaDB创建和管理向量数据库from langchain.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader def create_vector_store(documents_path, persist_directory./chroma_db): 创建并持久化向量数据库 # 加载文档 loader TextLoader(documents_path) documents loader.load() # 文本分割 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50 ) texts text_splitter.split_documents(documents) # 创建向量存储 gte_embeddings GTEEmbeddings() vectorstore Chroma.from_documents( documentstexts, embeddinggte_embeddings, persist_directorypersist_directory ) # 持久化存储 vectorstore.persist() print(f向量数据库已创建并保存到 {persist_directory}) return vectorstore # 使用示例 # vector_db create_vector_store(knowledge_base.txt)4.3 实现检索增强生成构建完整的RAG检索系统from langchain.chains import RetrievalQA from langchain.llms import OpenAI # 或其他LLM class RAGSystem: def __init__(self, vectorstore_path./chroma_db): # 初始化嵌入模型 self.embeddings GTEEmbeddings() # 加载向量数据库 self.vectorstore Chroma( persist_directoryvectorstore_path, embedding_functionself.embeddings ) # 初始化检索器 self.retriever self.vectorstore.as_retriever( search_typesimilarity, search_kwargs{k: 3} ) # 初始化LLM这里以OpenAI为例 self.llm OpenAI(temperature0) # 创建QA链 self.qa_chain RetrievalQA.from_chain_type( llmself.llm, chain_typestuff, retrieverself.retriever, return_source_documentsTrue ) def query(self, question): 执行查询并返回结果 result self.qa_chain({query: question}) return result # 使用示例 def demo_rag_system(): # 初始化RAG系统 rag_system RAGSystem() # 示例查询 questions [ 人工智能的主要应用领域有哪些, 机器学习与深度学习的区别是什么, 自然语言处理的最新进展有哪些 ] for question in questions: print(f\n问题: {question}) result rag_system.query(question) print(f答案: {result[result]}) print(参考文档:) for doc in result[source_documents]: print(f - {doc.metadata.get(source, 未知)}) # demo_rag_system()5. 实战案例构建智能问答系统5.1 准备知识库数据首先我们需要准备结构化的知识库数据def prepare_knowledge_base(): 准备示例知识库数据 knowledge_content 人工智能AI是计算机科学的一个分支旨在创建能够执行通常需要人类智能的任务的系统。 机器学习是AI的一个子领域它使计算机能够在没有明确编程的情况下学习。 深度学习是机器学习的一个子集使用神经网络模拟人脑的工作方式。 自然语言处理NLP是AI的一个分支专注于计算机与人类语言之间的交互。 文本嵌入是将文本转换为数值向量的过程用于测量文本之间的相似性。 RAG检索增强生成结合了信息检索和文本生成提供更准确和上下文相关的回答。 GTE模型是专门为中文文本优化的大型文本嵌入模型。 # 保存知识库文件 with open(ai_knowledge_base.txt, w, encodingutf-8) as f: f.write(knowledge_content) print(知识库文件已创建) return ai_knowledge_base.txt # 准备知识库 kb_file prepare_knowledge_base()5.2 完整系统集成将各个组件集成为完整的智能问答系统def build_complete_qa_system(): 构建完整的智能问答系统 print(正在构建智能问答系统...) # 步骤1: 准备知识库 kb_file prepare_knowledge_base() # 步骤2: 创建向量数据库 print(创建向量数据库中...) vectorstore create_vector_store(kb_file, ai_chroma_db) # 步骤3: 初始化RAG系统 print(初始化RAG系统中...) rag_system RAGSystem(ai_chroma_db) print(智能问答系统构建完成) return rag_system # 构建系统 # qa_system build_complete_qa_system() # 测试查询 def test_qa_system(system): test_questions [ 什么是人工智能, 机器学习和深度学习有什么关系, GTE模型有什么特点, RAG系统如何工作 ] for question in test_questions: print(f\n 问题: {question}) result system.query(question) print(f 答案: {result[result][:200]}...) # 限制输出长度 print( 参考来源:) for i, doc in enumerate(result[source_documents][:2]): # 显示前两个来源 print(f {i1}. {doc.page_content[:100]}...) # 测试系统 # test_qa_system(qa_system)5.3 性能优化建议在实际应用中你可能需要关注以下性能优化点def optimize_rag_performance(): RAG系统性能优化建议 optimization_tips { 批量处理: 对多个文档进行嵌入计算时使用批量处理减少API调用次数, 缓存机制: 对常见查询结果进行缓存避免重复计算, 索引优化: 使用合适的向量索引算法如HNSW提高检索速度, 分级存储: 对热门文档和冷门文档采用不同的存储策略, 异步处理: 使用异步IO处理大量并发请求 } print(性能优化建议:) for tip, description in optimization_tips.items(): print(f• {tip}: {description}) return optimization_tips # 获取优化建议 # optimize_rag_performance()6. 常见问题与解决方案6.1 API连接问题def troubleshoot_api_issues(): GTE API常见问题排查 issues { 连接拒绝: 检查GTE服务是否正常启动端口7860是否被占用, 响应超时: 增加请求超时时间检查网络连接, 内存不足: 减少批量处理的大小增加系统内存, 编码错误: 确保所有文本使用UTF-8编码, 维度不匹配: 确认使用的模型版本和期望的向量维度 } print(常见问题解决方案:) for problem, solution in issues.items(): print(f❓ {problem}: {solution}) return issues # 查看问题解决方案 # troubleshoot_api_issues()6.2 效果调优建议def improve_retrieval_quality(): 提高检索质量的实用建议 suggestions { 文本预处理: 清洗和标准化文本去除无关字符和停用词, 分块策略: 根据文档特点调整分块大小和重叠度, 多模态检索: 结合关键词检索和向量检索提高召回率, 重排序: 对初步检索结果进行二次排序提高精度, 反馈循环: 收集用户反馈持续优化检索效果 } print(检索质量提升建议:) for method, description in suggestions.items(): print(f✨ {method}: {description}) return suggestions # 获取质量提升建议 # improve_retrieval_quality()7. 总结通过本教程我们完整地学习了如何使用GTE Chinese Large模型结合LangChain构建RAG检索模块。从模型部署、API调用到系统集成每个步骤都提供了详细的代码示例和实践建议。关键收获GTE模型为中文文本提供了高质量的嵌入表示LangChain框架大大简化了RAG系统的开发流程合理的文本处理和检索策略对系统效果至关重要性能优化和效果调优是实际应用中需要持续关注的点现在你已经掌握了构建智能问答系统的核心技能可以尝试将这些技术应用到自己的项目中比如构建企业知识库、智能客服系统或者个性化推荐引擎。下一步学习建议探索不同的文本分块策略和检索算法学习如何评估和优化检索系统的效果了解多模态检索和混合检索技术实践大规模向量数据库的部署和优化获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章