十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LlamaIndex 托管索引 API 详解:使用 VectaraIndex 接入 Vectara 云端 RAG 平台

LlamaIndex 托管索引 API 详解:使用 VectaraIndex 接入 Vectara 云端 RAG 平台 LlamaIndex 托管索引 API 详解使用 VectaraIndex 接入 Vectara 云端 RAG 平台【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index导读本文讲解 LlamaIndex 中llama_index.indices.managed.vectara模块及其核心类VectaraIndex的完整用法。VectaraIndex是一种典型的托管索引Managed Index文档的分块、向量化 embedding、检索乃至总结生成全部在 Vectara 服务端完成本地不保存节点与向量。读完本文你将掌握如何通过VectaraIndex完成建库、写入、检索、服务端总结Grounding Generation与多轮对话并理解其与本地索引在底层调用链上的本质差异。关联文档与源码定位本文基于 API 参考文档 indices/vectara.md。该页是 mkdocstrings 自动生成的类参考页其指令如下::: llama_index.indices.managed.vectara options: members: - VectaraIndex它声明了要渲染llama_index.indices.managed.vectara模块中的VectaraIndex成员。该模块的实现位于仓库的集成包llama-index-indices-managed-vectara目录llama-index-integrations/indices/llama-index-indices-managed-vectara/包内结构为base.pyVectaraIndex/VectaraIndexStruct主类retriever.pyVectaraRetriever/VectaraAutoRetriever/VectaraRerankerquery.pyVectaraQueryEngine/VectaraChatEngineprompts.py自动检索auto-retriever所用的提示模板test_indices_managed_vectara.py覆盖全流程的集成测试。包内导出的公开符号见 __init__.py为VectaraIndex、VectaraRetriever、VectaraAutoRetriever、VectaraQueryEngine。VectaraIndex 的职责把“索引的脏活”外包给服务端VectaraIndex继承自 llama_index.core 的BaseManagedIndex源码见 base.py。类 docstring 明确列出它在后端替传统索引完成的工作将文档切分为 chunksnodes为每个 chunk 生成 embedding执行 top-k 相似度检索可选地对 top-k 节点做总结summarization。因此使用VectaraIndex时本地不再维护 docstore、index_store 与向量库索引结构VectaraIndexStruct只是持有一个index_id即语料库 key的轻量占位见 base.py。构造参数与环境变量VectaraIndex.__init__的核心参数如下见 base.py参数类型默认值说明show_progressboolFalse是否显示 tqdm 进度条vectara_corpus_keystr环境变量VECTARA_CORPUS_KEY语料库 key支持多个语料库时用英文逗号分隔vectara_api_keystr环境变量VECTARA_API_KEYVectara API key需具备索引与查询权限parallelize_ingestboolFalse是否用线程池并发提交文档索引x_source_strstrllama_index用于内部使用统计的 X-Source 请求头vectara_base_urlstrhttps://api.vectara.ioAPI 基地址已用rstrip(/)归一化vectara_verify_sslboolTrue是否校验 SSL置False会关闭会话的证书校验初始化时若未提供 key 且环境变量缺失会抛出ValueError(Missing Vectara credentials)。内部通过requests.Session发起请求并挂载了最大 3 次重试的HTTPAdapter、vectara_api_timeout 90秒。__del__中会关闭 session。典型初始化from llama_index.indices.managed.vectara import VectaraIndex # 方式一依赖环境变量 VECTARA_API_KEY 与 VECTARA_CORPUS_KEY index VectaraIndex() # 方式二显式传参多语料以逗号分隔 index VectaraIndex( vectara_corpus_keycorpus-a,corpus-b, vectara_api_keyxxxxx, parallelize_ingestTrue, )从文档构建索引from_documents 与 add_document类方法from_documents见 base.py会先构造索引实例再逐个调用add_document(doc)写入。示例from llama_index.core.schema import Document docs [ Document(text_resourceVectara 与 LlamaIndex 的托管索引集成), Document(text_resource托管索引在服务端完成分块与向量化), ] index VectaraIndex.from_documents(docs)add_document用于以Structured Document格式写入单篇文档见 base.py参数类型说明docDocument建议在id_字段给出语料库中的文档 ID在metadata给出文档元数据corpus_keystr多语料时指定写入哪个语料库titlestr文档标题写入后可选descriptionstr文档描述写入后可选max_chars_per_chunkint服务端 chunk 的最大字符数会映射为max_chars_chunking_strategy从底层看add_document调用私有方法_insert。当传入document时构造如下的 Structured 文档体见 base.pydoc { id: document.id_, type: structured, metadata: metadata, # 自动追加 {framework: llama_index} sections: [{text: document.text_resource.text}], }随后_index_doc以POST {base_url}/v2/corpora/{corpus_key}/documents提交HTTP 201 返回E_SUCCEEDED否则读取响应 messages 中的错误文本见 base.py。成功写入的文档 id 会被记录在index.doc_ids便于后续清理。细粒度写入add_nodes 使用 Core Document 格式当你想自己完成分块、再以节点粒度入库时用add_nodes见 base.py参数类型说明nodesSequence[Node]用户切分好的文档片段可在每个 node 的metadata提供 part 级元数据document_idstr语料库内唯一文档 IDdocument_metadataDict文档级元数据默认{}corpus_keystr多语料时目标语料库底层构造Core Document请求体见 base.pydoc { id: insert_kwargs[doc_id], type: core, metadata: metadata, # 文档级元数据 framework 标记 document_parts: [ {text: node.text_resource.text, metadata: node.metadata} for node in nodes ], }VectaraIndex也接受先以空参构造、再调用add_nodes的方式建库。直接上传文件insert_file 与 table 抽取insert_file走 Vectara 的上传文件接口服务端按文件类型做预处理与最优分块见 base.py参数类型说明file_pathstr本地文件路径支持 text、HTML、PDF、markdown、doc/docx、ppt/pptx 等metadatadict与文件关联的元数据chunking_strategydict指定每 chunk 最大字符数等策略enable_table_extractionbool是否抽取表格默认Falsefilenamestr上传文件名默认取路径最后一段corpus_keystr目标语料库返回值为服务端生成的文档 idHTTP 201或None文件不存在 / 400 / 其他错误。文件通过multipart提交并携带table_extraction_config与可选的chunking_strategy字段。集成测试 test_indices_managed_vectara.py 展示了用insert_file上传文本并打上url元数据的使用方式。文档生命周期管理删除与更新delete_ref_doc签名见 base.pydef delete_ref_doc(self, ref_doc_id, delete_from_docstoreTrue, **delete_kwargs)delete_from_docstoreFalse时不做任何改动True时调用_delete_doc向DELETE /v2/corpora/{corpus_key}/documents/{doc_id}发起请求语料库 key 通过**delete_kwargs中的corpus_key传入。删除成功HTTP 204返回True。测试在 teardown 阶段用for id in index.doc_ids: index.delete_ref_doc(id)清理语料。update_ref_docupdate_ref_doc(document, **update_kwargs)通过PATCH /v2/corpora/{corpus_key}/documents/{doc_id}仅更新文档元数据见 base.pyindex.update_ref_doc( documentdoc, corpus_keymy-corpus, metadata{test_score: 14}, )注意document必须带id_update_kwargs需含metadata字典才触发更新更新成功状态码为 200。对应测试见 test_indices_managed_vectara.py更新后检索可验证新元数据生效。检索配置as_retriever 与 VectaraRetriever 参数index.as_retriever(**kwargs)返回VectaraRetriever见 base.py。其参数非常丰富全部源自 retriever.py 的 docstring 与__init__默认值参数默认值说明index必填VectaraIndex实例similarity_top_k10返回的 top-k 结果数offset0跳过前 N 条结果lambda_val0.005混合检索插值系数0纯向量、1纯关键词多语料可传 listsemanticsdefault标记查询是 query 还是 response 语义多语料可传 listcustom_dimensions{}查询时的自定义维度多语料可传 list of dictn_sentences_before/n_sentences_after2匹配句前后各取多少句拼入返回节点filter元数据过滤表达式多语料可传 list如doc.test_num 1rerankernone见下文VectaraRerankerrerank_k50参与重排的候选数rerank_limitNone重排后最多返回条数chain 重排不适用rerank_cutoffNone重排后结果的最低分数阈值chain 重排不适用mmr_diversity_bias0.3MMR 多样性系数0~1越大越多样udf_expressionNoneUDF 重排的用户自定义表达式rerank_chainNonechain 重排的串联重排器及参数列表summary_enabledFalse是否开启服务端总结as_query_engine/as_chat_engine会按需置位summary_response_langeng总结语言ISO 639-2 码summary_num_results7用于生成总结的结果条数summary_prompt_namevectara-summary-ext-24-05-med-omni生成 presetRAG 专用可设mockingbird-1.0-2024-07-16含表格文档建议vectara-summary-table-query-ext-dec-2024-gpt-4oprompt_textNone自定义提示模板含$vectaraQueryResults等变量max_response_chars/max_tokensNone总结字符 / token 上限temperature/frequency_penalty/presence_penaltyNone生成采样参数citations_styleNone引用样式numeric/html/markdown/nonecitations_url_pattern/citations_text_patternNone引用 URL 与展示文本模板如{doc.url}save_historyFalse是否在服务端保存查询历史基本检索示例retriever index.as_retriever( similarity_top_k5, filterdoc.test_num 1, rerankermmr, mmr_diversity_bias0.3, ) nodes retriever.retrieve(LlamaIndex 如何与 Vectara 集成)VectaraReranker是str枚举见 retriever.py取值none、mmr、slingshotmultilingual_reranker_v1别名、userfn、chain。mmr配合mmr_diversity_bias平衡相关性与多样性userfn用udf_expression写自定义打分例如get($.score) get($.document_metadata.test_score)chain按rerank_chain顺序执行多个重排器如[{type: slingshot}, {type: mmr, diversity_bias: 0.4}]链中各元素可带limit/cutoffslingshot必须位于链首其类型在构造期会被改写为customer_rerankerreranker_nameRerank_Multilingual_v1。测试 test_indices_managed_vectara.py 分别验证了 mmr 不同 diversity 下的排序、UDF 用 score 与日期表达式重排、以及多段 chain含limit、cutoff的稳定行为。请求体的构造逻辑重排与总结并非本地完成而是全部拼进发给 Vectara 的查询 JSON。_build_vectara_query_body见 retriever.py按语料逐个装配corpora配置含metadata_filter、lexical_interpolation、semantics、custom_dimensions再按需附加reranker与generation块。开启总结时请求体会固定带上enable_factual_consistency_score: True从而在响应中返回事实一致性分数 FCS。服务端生成式总结as_query_engineindex.as_query_engine(llmNone, **kwargs)见 base.py有两条路径默认summary_enabledTrue构造VectaraQueryEngine由 Vectara 服务端基于 top-k 结果生成带引用的总结无需本地 LLMsummary_enabledFalse退回标准 LlamaIndex 管线——使用as_retriever 本地RetrieverQueryEngine并以ResponseMode.COMPACT的 response synthesizer 和Settings.llm做本地总结。# 服务端总结默认开启 query_engine index.as_query_engine( similarity_top_k3, rerankerchain, rerank_chain[{type: slingshot}, {type: mmr, diversity_bias: 0.2}], summary_num_results7, summary_prompt_namemockingbird-1.0-2024-07-16, ) res query_engine.query(LlamaIndex 的托管索引是什么) print(res.response) # 总结文本 print(res.metadata[fcs]) # 事实一致性分数VectaraQueryEngine见 query.py支持node_postprocessors与streaming并把查询结果包装为标准的Responsesource_nodes中每个节点带part_metadata与文档级document元数据同时把 FCS 放入metadata[fcs]。自定义提示与引用prompt_text允许提供 Vectara 提示模板遍历$vectaraQueryResults并做多轮 role 编排。测试 test_custom_prompt 给出了可运行的系统/用户/助手三段式模板。citations_stylemarkdown/html样式需配citations_url_pattern如{doc.url}numeric样式无需 URL。测试 test_citations 验证了总结中会正确出现(source)与[数字]形式的引用标注。多轮对话as_chat_engine 与 VectaraChatEngineindex.as_chat_engine(**kwargs)会强制summary_enabledTrue并返回VectaraChatEngine见 base.py 与 query.py。chat_engine index.as_chat_engine( rerankerchain, rerank_k30, rerank_chain[{type: slingshot}, {type: mmr, diversity_bias: 0.2}], ) res chat_engine.chat(Paul 申请了哪些研究生院) print(res.response, res.metadata[fcs]) # 追问自动带上对话上下文服务端存储会话 res2 chat_engine.chat(那所学校的就读对他后来的职业有何帮助)实现要点对话请求体携带chat: {store: True}命中POST /v2/chats新建会话或POST /v2/chats/{conv_id}/turns续接会话并把返回的chat_id保存在conv_idchat()返回AgentChatResponse含response、source_nodes、metadata[fcs]reset()可清空会话chat_history()目前返回[Not implemented Yet.]测试 test_chat 验证了多轮追问沿用同一conv_id、FCS 大于 0、以及流式续聊等行为。流式输出支持VectaraRetriever._vectara_stream见 retriever.py以POST /v2/query或/v2/chats配合stream_response: True发起 SSE 流式请求逐行解析data:事件区分generation_chunk、factual_consistency_score、search_results与chat_info返回StreamingResponseas_query_engine(..., streamingTrue)与chat_engine.stream_chat(msg)均可使用流式接口见 query.py。测试 test_file_upload 验证了流式总结仍附带fcs元数据与source_nodes。多语料库支持构造函数与检索参数都支持一个索引对应多个语料库vectara_corpus_keycorpus-a,corpus-b逗号分隔_get_corpus_key(corpus_key)使用lru_cache若传入的 key 在列表中则用之否则回退到列表首个语料见 base.pyVectaraRetriever对filter、lambda_val、semantics、custom_dimensions都接受单值或与语料一一对应的 list多语料时 list 下标对应语料顺序见 retriever.py写入类方法则通过corpus_key参数选择目标语料。集成测试在双语料环境下使用filter[doc.test_num 1, ]、lambda_val[0.2, 0.01]、filter[, doc.author Vectara AND part.test_score 10]等按语料区分配置的写法见 test_indices_managed_vectara.py 与 test_filter_with_nodes其中文档级过滤用doc.xxx前缀、part 级过滤用part.xxx前缀。LLM 辅助自动检索VectaraAutoRetrieverVectaraAutoRetriever继承自 LlamaIndex 的VectorIndexAutoRetriever见 retriever.py思路是把语料内容与可过滤元数据VectorStoreInfo交给 LLM让它自动把自然语言问题转换为query filters再拼出 Vectara 过滤表达式(doc.key op value) and ...连接词随FilterCondition.AND/OR变化可通过显式filter参数与隐式过滤做 AND 合并。它使用 prompts.py 中DEFAULT_VECTARA_QUERY_PROMPT_TMPL提示模板模板内置了两组 few-shot 示例歌曲、书籍两个 schema。因此作为 API 参考页面的补充知识你可以通过as_retriever以外的方式直接构造VectaraAutoRetriever实现“问题即查询”的自适应过滤检索。源码级调用链速览一次VectaraIndex.as_query_engine().query(q)的典型调用链VectaraIndex.as_query_engine默认 summary→as_retriever→VectaraRetrieverVectaraQueryEngine._query→retriever._vectara_query(query_bundle, ...)_build_vectara_query_body组装含corpora/reranker/generation的 JSONrequests.Session.post到{base_url}/v2/query携带x-api-key、Content-Type、X-Source头90s 超时、3 次重试解析search_results为NodeWithScore文本置于MediaResourceid 用document_id元数据区分 part 级与文档级documentsummary 与 FCS 放入返回结构。需要提示的边界本模块强依赖可用的 Vectara 账号与语料配置。测试文件开头test_indices_managed_vectara.py说明了前置条件创建两个带过滤属性的 corpusLlamaindex-testing-1/llamaindex-testing-2、申请具备 query 与 indexing 权限的 API key、并设置VECTARA_API_KEY、VECTARA_CORPUS_KEY逗号分隔环境变量缺凭据时构造会抛ValueError测试中该场景以pytest.skip处理从 pyproject.toml 可知该包requires-python 3.10,4.0、依赖llama-index-core可结合仓库的 Makefile 与 uv.lock 在本地源码环境中安装验证。小结VectaraIndex把“分块—向量化—检索—总结—多轮对话”整条 RAG 链路下沉到 Vectara 托管服务让 LlamaIndex 侧只需关心文档内容与查询语义。通过本文给出的构造参数、写入/检索/总结参数表与源码调用链你可以在自己的 LlamaIndex 应用中直接接入 Vectara本地零 embedding 模型即可获得混合检索、多级重排、带引用与 FCS 分数的生成式问答并在需要时回退到本地 LLM 管线。【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表