2026/4/18 18:05:57
网站建设
项目流程
做公司网站流程,拓谋网络深圳分公司,网站你懂我意思正能量免费软件,凡科网站怎么做链接头像logo文章目录1.核心概念2.与LangChain区别3.如何搭建4.案列1.as_query_engine2.as_chat_engine3.rag检索增强Settings.embed_model 和 Settings.llm 的调用机制1. **全局配置作用**2. **调用时机**3. **隐式使用机制**4. **框架集成**官网地址 LlamaIndex#xff08;之前叫 GPT In…文章目录1.核心概念2.与LangChain区别3.如何搭建4.案列1.as_query_engine2.as_chat_engine3.rag检索增强Settings.embed_model 和 Settings.llm 的调用机制1. **全局配置作用**2. **调用时机**3. **隐式使用机制**4. **框架集成**官网地址LlamaIndex之前叫 GPT Index是一个专门为 LLM 应用程序 设计的数据框架主要解决 数据摄取、索引和查询 的问题。它让你能够轻松地将私有数据或领域特定数据与大语言模型如 GPT-4、Llama 等结合使用。1.核心概念LlamaIndex 核心概念├─基础定位LLM 数据增强框架衔接私有数据与大模型├─六大核心基础概念数据流转顺序│ ├─ Document原始数据载体数据入口│ ├─ Node最小处理单元文档切分产物│ ├─ Index结构化检索库核心数据组织形式│ ├─ Retriever检索器索引与引擎的桥梁│ ├─ Query Engine单轮问答接口核心交互入口│ └─ Chat Engine多轮对话接口上下文记忆├─四大进阶核心概念能力扩展│ ├─ Embedding Model文本转向量相似度检索基础│ ├─ LLM大模型答案生成核心│ ├─ Service Context全局配置中心│ └─ Storage数据持久化存储└─核心流程加载数据→构建Document→切分Node→构建Index→生成Engine→问答交互2.与LangChain区别3.如何搭建# 安装环境conda create-n llama-index python3.10conda activate llama-index pip install chromadb#如果官网下载速度比较慢可以使用阿里云镜像源pip install chromadb-i https://mirrors.aliyun.com/pypi/simple pip install llama-index在idea中切换python环境4.案列LlamaIndex框架适用于openAI较多所以当时这个代码改了很多次本地建Chroma向量数据库1.as_query_engineimportchromadb# 替换为你的阿里云DashScope API-KEYDASHSCOPE_API_KEYsk-秘钥# -------------------------- ✅ 核心库导入 --------------------------fromllama_index.coreimportSimpleDirectoryReader,VectorStoreIndex,StorageContext,Settingsfromllama_index.vector_stores.chromaimportChromaVectorStorefromllama_index.embeddings.dashscopeimportDashScopeEmbeddingfromllama_index.llms.dashscopeimportDashScope# ✅ 关键1导入Chroma专属异常类必须加fromchromadb.errorsimportNotFoundError# -------------------------- ✅ 1. 配置通义嵌入模型 --------------------------Settings.embed_modelDashScopeEmbedding(model_nametext-embedding-v1,api_keyDASHSCOPE_API_KEY,show_progressTrue)# -------------------------- ✅ 2. 配置通义大模型LLM --------------------------Settings.llmDashScope(model_nameqwen-turbo,api_keyDASHSCOPE_API_KEY,temperature0.1,max_tokens2048)# -------------------------- ✅ 3. Chroma向量库初始化核心修复 --------------------------# 初始化Chroma持久化客户端指定本地存储路径chroma_clientchromadb.PersistentClient(path./chroma_robot_db)# ✅ 关键2精准捕获 Chroma 专属的 NotFoundErrortry:chroma_collectionchroma_client.get_collection(quickstart)print(✅ 成功加载已存在的集合quickstart)exceptNotFoundError:# 替换原有的 ValueError精准拦截「集合不存在」chroma_collectionchroma_client.create_collection(quickstart)print(✅ 集合不存在已自动新建quickstart)# 绑定向量存储vector_storeChromaVectorStore(chroma_collectionchroma_collection)storage_contextStorageContext.from_defaults(vector_storevector_store)# -------------------------- ✅ 4. 文档加载 索引构建 查询 --------------------------documentsSimpleDirectoryReader(./data).load_data()print(f 成功加载{len(documents)}个文档片段)# 智能构建/加载索引ifdocuments:indexVectorStoreIndex.from_documents(documents,storage_contextstorage_context)else:indexVectorStoreIndex.from_vector_store(vector_store)# 执行查询query_engineindex.as_query_engine(similarity_top_k5)responsequery_engine.query(人形机器人包含了那些行业请用中文答复)# 格式化输出print(\n*80)print( 查询问题人形机器人请用中文答复)print( 答复结果\n,response)print(*80)结果就是RAG后会读取data里面的内容2.as_chat_engine# as_query_engine 和 as_chat_engine 的区别## 1. **功能定位**-as_query_engine:用于构建**问答引擎**专门处理基于检索的问答任务-as_chat_engine:用于构建**对话引擎**支持连续的多轮对话交互## 2. **使用场景**-as_query_engine:适用于单次查询场景如文档检索、知识库问答-as_chat_engine:适用于需要上下文记忆的对话场景如聊天机器人## 3. **返回内容**-as_query_engine:返回与查询最相关的文档片段和答案-as_chat_engine:维护对话历史支持上下文连贯的多轮交互## 4. **参数配置**-as_query_engine:主要配置 similarity_top_k 等检索参数-as_chat_engine:支持 chat_mode 等对话模式参数如 ChatMode.CONTEXT、ChatMode.CONDENSE_QUESTION 等## 5. **调用方式**-as_query_engine:通常用于一次性查询每次调用独立处理-as_chat_engine:保持会话状态支持连续的对话交互importchromadb# 替换为你的阿里云DashScope API-KEYDASHSCOPE_API_KEYsk-秘钥# -------------------------- ✅ 核心库导入 --------------------------fromllama_index.coreimportSimpleDirectoryReader,VectorStoreIndex,StorageContext,Settingsfromllama_index.vector_stores.chromaimportChromaVectorStorefromllama_index.embeddings.dashscopeimportDashScopeEmbeddingfromllama_index.llms.dashscopeimportDashScope# ✅ 关键1导入Chroma专属异常类必须加fromchromadb.errorsimportNotFoundError# -------------------------- ✅ 1. 配置通义嵌入模型 --------------------------Settings.embed_modelDashScopeEmbedding(model_nametext-embedding-v1,api_keyDASHSCOPE_API_KEY,show_progressTrue)# -------------------------- ✅ 2. 配置通义大模型LLM --------------------------Settings.llmDashScope(model_nameqwen-turbo,api_keyDASHSCOPE_API_KEY,temperature0.1,max_tokens2048)# -------------------------- ✅ 3. Chroma向量库初始化核心修复 --------------------------# 初始化Chroma持久化客户端指定本地存储路径chroma_clientchromadb.PersistentClient(path./chroma_robot_db)# ✅ 关键2精准捕获 Chroma 专属的 NotFoundErrortry:chroma_collectionchroma_client.get_collection(quickstart)print(✅ 成功加载已存在的集合quickstart)exceptNotFoundError:# 替换原有的 ValueError精准拦截「集合不存在」chroma_collectionchroma_client.create_collection(quickstart)print(✅ 集合不存在已自动新建quickstart)# 绑定向量存储vector_storeChromaVectorStore(chroma_collectionchroma_collection)storage_contextStorageContext.from_defaults(vector_storevector_store)# -------------------------- ✅ 4. 文档加载 索引构建 查询 --------------------------documentsSimpleDirectoryReader(./data).load_data()print(f 成功加载{len(documents)}个文档片段)# 智能构建/加载索引ifdocuments:indexVectorStoreIndex.from_documents(documents,storage_contextstorage_context)else:indexVectorStoreIndex.from_vector_store(vector_store)# 执行查询chatindex.as_chat_engine(similarity_top_k5)responsechat.chat(人形机器人包含了那些行业请用中文答复)# 格式化输出print(\n*80)print( 查询问题人形机器人请用中文答复)print( 答复结果\n,response)print(*80)3.rag检索增强从魔搭社区下载本地deepseek模型魔搭如何使用看之前文章魔搭下载最小的1.5b模型3.2G# 模型下载fromllama_index.core.base.llms.typesimportChatMessage#pip install modelscope -i https://mirrors.aliyun.com/pypi/simplefrommodelscopeimportsnapshot_download##首次会下载后面就会读取本地model_dirsnapshot_download(deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B)fromllama_index.llms.huggingfaceimportHuggingFaceLLM# 使用HuggingFaceLLM加载本地大模型llmHuggingFaceLLM(model_nameD:\langChain\modelscope\models\models\deepseek-ai\DeepSeek-R1-Distill-Qwen-1___5B,tokenizer_nameD:\langChain\modelscope\models\models\deepseek-ai\DeepSeek-R1-Distill-Qwen-1___5B,model_kwargs{trust_remote_code:True},tokenizer_kwargs{trust_remote_code:True})# trust_remote_codeTrue允许模型和分词器加载来自远程仓库的自定义代码。具体来说# 对于 model_kwargs它使得模型可以信任并执行远程代码例如自定义的前向传播逻辑或特殊的初始化方法。# 对于 tokenizer_kwargs它使得分词器可以信任并执行远程代码例如自定义的分词规则或预处理逻辑。# 这两个参数通常用于加载那些不仅仅是权重文件还包含自定义实现的模型和分词器。确保设置为 True 可以使这些自定义实现生效但出错。# 调用模型chat引擎得到回复rspllm.chat(messages[ChatMessage(content你叫什么名字)])print(rsp)# 模型下载fromllama_index.core.base.llms.typesimportChatMessage#pip install modelscope -i https://mirrors.aliyun.com/pypi/simplefrommodelscopeimportsnapshot_download#model_dir snapshot_download(deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B)fromllama_index.coreimportSimpleDirectoryReader,VectorStoreIndex,StorageContext,Settingsfromllama_index.vector_stores.chromaimportChromaVectorStorefromllama_index.embeddings.dashscopeimportDashScopeEmbeddingfromllama_index.llms.huggingfaceimportHuggingFaceLLM DASHSCOPE_API_KEYsk-秘钥# -------------------------- ✅ 1. 配置通义嵌入模型 --------------------------Settings.embed_modelDashScopeEmbedding(model_nametext-embedding-v1,api_keyDASHSCOPE_API_KEY,show_progressTrue)# 使用HuggingFaceLLM加载本地大模型Settings.llmHuggingFaceLLM(model_nameD:\langChain\modelscope\models\models\deepseek-ai\DeepSeek-R1-Distill-Qwen-1___5B,tokenizer_nameD:\langChain\modelscope\models\models\deepseek-ai\DeepSeek-R1-Distill-Qwen-1___5B,model_kwargs{trust_remote_code:True},tokenizer_kwargs{trust_remote_code:True})# trust_remote_codeTrue允许模型和分词器加载来自远程仓库的自定义代码。具体来说# 对于 model_kwargs它使得模型可以信任并执行远程代码例如自定义的前向传播逻辑或特殊的初始化方法。# 对于 tokenizer_kwargs它使得分词器可以信任并执行远程代码例如自定义的分词规则或预处理逻辑。# 这两个参数通常用于加载那些不仅仅是权重文件还包含自定义实现的模型和分词器。确保设置为 True 可以使这些自定义实现生效但出错。documentsSimpleDirectoryReader(./data).load_data()indexVectorStoreIndex.from_documents(documents)query_engineindex.as_query_engine()rspquery_engine.query(材料科学是什么)print(rsp)Settings.embed_model 和 Settings.llm 的调用机制1.全局配置作用Settings.embed_model和Settings.llm是全局配置对象在框架内部被自动引用无需显式传递2.调用时机Settings.embed_model: 在VectorStoreIndex.from_documents()时自动使用用于将文档转换为向量表示Settings.llm: 在as_query_engine()创建查询引擎时自动使用用于处理查询和生成回答3.隐式使用机制VectorStoreIndex.from_documents()内部会检查Settings.embed_modelas_query_engine()方法内部会使用Settings.llm创建查询处理逻辑通过全局状态管理避免了在每个方法调用时重复传递模型实例4.框架集成llama-index 框架设计为使用全局Settings对象所有相关组件都会自动从全局配置中获取模型实例这种设计简化了 API 使用避免了冗余的参数传递