Doramagic 项目包 · 项目说明书
llama_index 项目
LlamaIndex 是领先的文件智能体与 OCR 平台
Framework Overview & Monorepo Architecture
LlamaIndex 是一个面向大语言模型(LLM)应用的数据框架,核心目标是把外部数据源、检索层、向量库、工具集与 Agent 工作流统一在同一套抽象下,让开发者能够以最小代价构建 RAG(检索增强生成)、工具调用与多 Agent 协作系统。仓库采用 monorepo 形式管理,把核心库与大量第三方集成放在同一个 Git 仓库内协同发布。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
框架概览与 Monorepo 架构
一、定位与目标
LlamaIndex 是一个面向大语言模型(LLM)应用的数据框架,核心目标是把外部数据源、检索层、向量库、工具集与 Agent 工作流统一在同一套抽象下,让开发者能够以最小代价构建 RAG(检索增强生成)、工具调用与多 Agent 协作系统。仓库采用 monorepo 形式管理,把核心库与大量第三方集成放在同一个 Git 仓库内协同发布。
仓库顶层通过 llama-index-core 提供基础抽象(Document、BaseReader、BaseToolSpec 等),再以同名可独立发布的子包形式挂载各种数据连接器、LLM、嵌入模型、向量库、回调与 Agent 集成。社区也通过这一架构提供"外部集成"通道,例如 issue #21883 提到的 Bocha Web Search ToolSpec 即作为独立外部包发布。
二、Monorepo 目录组织
仓库在顶层按职责拆分为多个子目录,常见的有 llama-index-core/(核心抽象)和 llama-index-integrations/(集成生态)。llama-index-integrations/ 内部又按集成类别分子目录,每个子目录对应一个或多个 PyPI 可发布包。
graph TD A[llama_index monorepo] --> B[llama-index-core] A --> C[llama-index-integrations] A --> D[llama-dev] B --> B1[核心抽象: Document / BaseReader / BaseToolSpec / Settings] B --> B2[Agent / Workflow 模板] C --> E[readers<br/>数据连接器] C --> F[tools<br/>工具规格] C --> G[vector_stores<br/>向量库后端] C --> H[graph_rag<br/>图检索增强] C --> I[llms / embeddings / agents / callbacks] E --> E1[apify / docling / wikipedia / obsidian / confluence / markitdown / service_now / layoutir / docstring_walker / docugami] F --> F1[tavily-research / wikipedia / seltz / agentql / parallel-web-systems] G --> G1[wordlift 等] H --> H1[cognee 等] D --> D1[统一开发与发布 CLI]
每个集成子包都遵循统一的命名约定(llama-index-<category>-<name>)并提供独立 README.md、依赖与版本号,方便按需安装,避免核心包过度膨胀。
三、集成层次与典型子包
1. Readers(数据连接器)
Readers 负责把异构数据源解析为 Document 列表,是构建索引与 Agent 上下文的最上游。仓库内置丰富的开箱即用连接器:
- 通用文档解析:
llama-index-readers-docling基于 Docling 提供 PDF/DOCX/HTML 等格式解析,可输出 Markdown 或 Docling 原始 JSON 资料来源:llama-index-readers-docling/README.md:1-50。 - 格式转换:
llama-index-readers-markitdown调用微软 MarkItDown 将 PPTX/DOCX/PDF/HTML 等转为 Markdown 资料来源:llama-index-readers-markitdown/README.md:1-20。 - 企业协作:
llama-index-readers-confluence支持 Confluence 空间、页面 ID 与 CQL 查询检索,并可通过process_attachment_callback过滤附件资料来源:llama-index-readers-confluence/README.md:50-120;llama-index-readers-service-now则面向 ServiceNow 知识库表(默认kb_knowledge),并要求用户提供自定义解析器(如 HTMLParser)资料来源:llama-index-readers-service-now/README.md:1-60。 - 本地与个人数据:
llama-index-readers-obsidian解析 Obsidian Vault,抽取 wikilinks、backlinks 与任务元数据 资料来源:llama-index-readers-obsidian/README.md:1-30;llama-index-readers-wikipedia按页面标题批量抓取 Wikipedia 资料来源:llama-index-readers-wikipedia/README.md:1-15。 - 专用场景:
llama-index-readers-apify借助 Apify Actor 抓取网页并通过dataset_mapping_function映射成Document资料来源:llama-index-readers-apify/README.md:1-20;llama-index-readers-docstring-walker通过 AST 提取代码库中模块、类与函数的 docstring 资料来源:llama-index-readers-docstring-walker/README.md:1-20。
2. Tools(Agent 工具规格)
Tools 子包面向 FunctionAgent 等工作流 Agent 提供结构化能力。BaseToolSpec 的 to_tool_list() 方法把每个工具函数转换成 LLM 可调用的工具描述。例如:
TavilyToolSpec提供search与extract两个工具,可与FunctionAgent配合做实时检索 资料来源:llama-index-tools-tavily-research/README.md:30-55。WikipediaToolSpec暴露load_data与search_data,供 Agent 按需加载 Wikipedia 页面 资料来源:llama-index-tools-wikipedia/README.md:1-25。SeltzToolSpec与AgentQL工具则进一步提供上下文工程化与浏览器交互能力 资料来源:llama-index-tools-seltz/README.md:1-40、llama-index-tools-agentql/README.md:1-30。
Agent 自身的提示与循环由核心层提供,例如 ReAct 模板通过 system_header_template.md 定义了 Thought / Action / Action Input / Observation 的标准交互格式 资料来源:llama-index-core/llama_index/core/agent/react/templates/system_header_template.md:1-30。
3. Vector Stores 与 Graph RAG
向量库集成位于 llama-index-integrations/vector_stores/,例如 llama-index-vector-stores-wordlift 把 Linked Data 知识图谱与向量检索结合,要求在节点 metadata 中提供 entity_id 以建立永久可解析 URI 资料来源:llama-index-vector-stores-wordlift/README.md:1-15。
graph_rag/ 子目录则承载图检索增强方案,例如 llama-index-graph-rag-cognee 提供 add、process_data、search、rag_search、get_related_nodes 与 visualize_graph 等方法,支持 SQLite/PostgreSQL/Neo4j 等多种后端 资料来源:llama-index-graph-rag-cognee/README.md:1-50。
四、发布节奏与社区演进
仓库遵循核心包 + 集成包独立版本化的发布模式。以最新一次发布 v0.14.22(2026-05-14)为例,单次发布可同时推动数十个集成包版本号前进,集成包之间通过 pyproject.toml 显式声明对 llama-index-core 的依赖约束。
近期核心包演进方向包括:
- 可观测与安全:
llama-index-callbacks-agentops、honeyhive、argilla、wandb等回调被持续更新以支持新的事件类型(如v0.14.12的 async tool spec 追踪)。 - 性能与稳定性:
v0.14.16引入 LLM/embedding 调用的 token-bucket 限流器;v0.14.14修复VectorStoreQueryOutputParser中的pydantic.ValidationError捕获问题。 - Agent 增强:
v0.14.15新增多模态类型基础操作;v0.14.13为 agent workflow 增加early_stopping_method参数;同版本还加入了基于 token 的CodeSplitter与RayIngestionPipeline集成。 - Trust / Governance 生态:社区讨论中的 AgentMesh 与 Agent Magnet 等提案表明,治理、记忆与可信 Agent 正在成为下一阶段重点。
See Also
- 项目主仓库:run-llama/llama_index
- 最新发布说明:v0.14.22 Release Notes
- 外部集成通道参考:CONTRIBUTING.md
- 相关 Wiki 页面建议:
Reader 体系与 Document 抽象、Agent Workflow 与 ReAct 模板、向量库与 GraphRAG 集成
来源:https://github.com/run-llama/llama_index / 项目说明书
Data Connectors, Node Parsers & Ingestion Pipeline
LlamaIndex 的摄取子系统由三个互相衔接的层级组成:Data Connectors(Reader) 负责将外部数据源(Confluence、Obsidian、Apify、ServiceNow、Docling、Wikipedia 等)转换为统一的 Document 对象;Node Parsers 把长文档切分为可索引的 Node;Ingestion Pipeline ...
继续阅读本节完整说明和来源证据。
概述
LlamaIndex 的摄取子系统由三个互相衔接的层级组成:Data Connectors(Reader) 负责将外部数据源(Confluence、Obsidian、Apify、ServiceNow、Docling、Wikipedia 等)转换为统一的 Document 对象;Node Parsers 把长文档切分为可索引的 Node;Ingestion Pipeline 则将转换、切片、嵌入、写入向量库等步骤编排为可复用、可缓存、可并行的工作流。社区在 v0.14.13 引入 RayIngestionPipeline,将分布式执行下沉到 Ray 集群,以满足大规模场景的吞吐需求(参见 v0.14.13 release notes)。在 v0.14.16 中又新增 LLM 与 Embedding 调用的 token-bucket 限流器(参见 v0.14.16 release notes)。
数据连接器(Data Connectors)
数据连接器位于 llama-index-integrations/readers/ 目录,是摄取流程的入口。每个 Reader 都继承自 BaseReader,并通过 load_data(...) 方法返回 List[Document]。按照数据来源可分为以下几类:
- 办公与知识管理:
ConfluenceReader支持page_ids、space_key、label、cql四种互斥的页面加载方式(参见 llama-index-readers-confluence/README.md);ObsidianReader通过遍历 Vault 目录并按 Markdown 标题切分,同时抽取wikilinks与backlinks元数据(参见 llama-index-readers-obsidian/README.md)。 - 企业服务台与工作流:
SnowKBReader通过article_sys_id或numbers从 ServiceNow 知识库拉取文章,并要求使用者自行注入custom_parsers(参见 llama-index-readers-service-now/README.md)。 - 格式转换:
DoclingReader默认输出 Markdown,可选输出 Docling JSON IR;MarkItDownReader使用 Microsoft MarkItDown 库将 PPTX、DOCX、PDF、ZIP 等转换为 Markdown;LayoutIRReader利用带编译器风格 IR 的 LayoutIR 引擎保留多栏、表格等复杂版式(分别参见 llama-index-readers-docling/README.md、llama-index-readers-markitdown/README.md、llama-index-readers-layoutir/README.md)。 - 结构化与半结构化处理:
DocugamiReader把文档解析为带语义标签的 XML 块树,再映射成 Node;LilacReader与 Lilac 项目配合,用于数据清洗与可视化分析(分别参见 llama-index-readers-docugami/README.md、llama-index-readers-lilac/README.md)。 - 网页与外部 API:
ApifyDataset通过 Apify Actor 的 dataset_id 拉取抓取结果;WikipediaReader接收页名列表拉取维基百科全文(分别参见 llama-index-readers-apify/README.md、llama-index-readers-wikipedia/README.md)。
社区关注点:用户曾在 #1321 反馈索引在缺乏上下文时仍可能产生“超出文档”的回答,这通常意味着需要更严格的metadata过滤与提示词约束;为 Reader 注入更丰富元数据(如 Obsidian 的wikilinks/backlinks)是缓解手段之一(参见 Issue #1321)。
节点解析器(Node Parsers)
Node Parser 的职责是把 Document.text 切分为 BaseNode 列表,是检索质量的关键环节。v0.14.13 引入 token-based CodeSplitter,按模型 token 预算对齐代码块边界;SemanticSplitterNodeParser 借助嵌入相似度识别语义断点;SentenceSplitter 是默认实现,按句子与 chunk_overlap 进行滑动切分。Reader 与 Parser 之间通过统一 metadata 透传:例如 ObsidianReader 将 file_name、folder_path、wikilinks 写入 Document.metadata,这些字段会在 Parser 阶段被复制到每个生成的 Node,供后续 Hybrid Search 与 Metadata Filter 使用(参见 llama-index-readers-obsidian/README.md)。
摄取管道(Ingestion Pipeline)
IngestionPipeline 把 Reader 输出后的处理步骤(Transformations、Embedding、Vector Store 写入、去重、缓存)编排为可重启的工作流。典型流程如下:
flowchart LR
A[数据源<br/>Confluence/Obsidian/Docling/...] --> B[Reader<br/>load_data]
B --> C[List[Document]]
C --> D[Node Parser<br/>SentenceSplitter/CodeSplitter]
D --> E[List[Node]]
E --> F[Embedding<br/>+ Token-Bucket 限流]
F --> G[(Vector Store<br/>Qdrant/Weaviate/PGVector)]
G --> H[Index / Query Engine]在 v0.14.13 中加入的 RayIngestionPipeline 将上述流程下沉到 Ray 集群并行执行;v0.14.16 引入的 token-bucket 限流器对 LLM 与 Embedding API 调用生效,可与 Ray 流水线配合防止外部服务触发 429。同时,CogneeGraphRAG 提供 add → process_data → search 的高层封装,把摄取结果以图结构组织,支持 get_related_nodes 与 visualize_graph(参见 llama-index-graph-rag-cognee/README.md)。最后,Reader 输出的 Document 还会被 ReActAgent 通过 tool_spec.to_tool_list() 暴露给 Agent,由 LLM 决策触发顺序(参见 system_header_template.md)。
常见失败模式
- 缺少自定义解析器:
SnowKBReader与ConfluenceReader不内置 HTML/DOCX 解析器,未注入custom_parsers时会在附件阶段抛出异常(参见 llama-index-readers-service-now/README.md)。 - Docling JSON 误用:若使用
ExportType.JSON而未在 Pipeline 中配置 Docling Node Parser,节点内容会变成原始 JSON 字符串(参见 llama-index-readers-docling/README.md)。 - 元数据漂移:Reader 与 Parser 之间若未保持一致的
metadata字段命名,会导致 Hybrid Search 过滤失败,建议在 Reader 侧显式声明字段并复用同一 schema(参见 llama-index-readers-obsidian/README.md)。
参见
- Agents & Tool Specs(Tools / Function Calling)
- Vector Stores & Embedding Integrations
- Graph RAG 集成(Cognee、Neo4j 等)
- ReAct Agent 工作流与 System Prompt
来源:https://github.com/run-llama/llama_index / 项目说明书
Index Types, Vector Stores & Storage Layer
LlamaIndex 的存储与索引体系是其 RAG(检索增强生成)能力的核心。该体系由三层组成:Index Types(索引类型) 负责组织数据并提供查询接口,Vector Stores(向量存储) 负责持久化嵌入向量与元数据,Storage Layer(存储层) 则统一管理文档存储、索引存储以及向量存储之间的协作关系。三者通过 StorageContext 解耦,用户可以...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 概述
LlamaIndex 的存储与索引体系是其 RAG(检索增强生成)能力的核心。该体系由三层组成:Index Types(索引类型) 负责组织数据并提供查询接口,Vector Stores(向量存储) 负责持久化嵌入向量与元数据,Storage Layer(存储层) 则统一管理文档存储、索引存储以及向量存储之间的协作关系。三者通过 StorageContext 解耦,用户可以灵活替换底层实现(如 Pinecone、Chroma、PostgreSQL 等),而无需修改上层业务代码。
资料来源:llama-index-core/llama_index/core/indices/__init__.py llama-index-core/llama_index/core/storage/storage_context.py
2. 索引类型(Index Types)
LlamaIndex 内置多种索引类型,适用于不同的检索场景:
2.1 VectorStoreIndex
最常用的索引类型,基于向量相似度进行检索。它将文档分块、向量化后存入底层 VectorStore,查询时通过余弦相似度或近似最近邻(ANN)算法召回相关节点。资料来源:llama-index-core/llama_index/core/indices/vector_store/base.py
2.2 TreeIndex
树形索引,采用自底向上方式构建——父节点摘要子节点内容。查询时支持 default(递归遍历树叶节点)与 retrieve(直接以根节点为上下文)两种模式。资料来源:llama-index-core/llama_index/core/indices/tree/README.md
2.3 KeywordTableIndex
基于关键词抽取的非向量索引,适合需要精确关键词匹配的场景。它从节点文本中提取关键字,并构建关键字到节点的映射表。资料来源:llama-index-core/llama_index/core/indices/keyword_table/base.py
2.4 PropertyGraphIndex
属性图索引,将文档建模为图结构,节点表示实体,边表示关系。该索引常与图存储后端(如 Neo4j、WordLift)配合使用,支持复杂的关系推理。资料来源:llama-index-core/llama_index/core/indices/property_graph/base.py 社区近期讨论的 AgentMesh 集成(v0.14.15 起)以及 Agent Magnet 等记忆层方案,也倾向于基于此类图索引构建持久化记忆能力。资料来源:GitHub Issue #21880
graph LR
A[Documents] --> B[Index Types]
B --> B1[VectorStoreIndex]
B --> B2[TreeIndex]
B --> B3[KeywordTableIndex]
B --> B4[PropertyGraphIndex]
B1 --> C[Vector Stores]
B2 --> C
B4 --> C
C --> D[Storage Layer]
D --> D1[Document Store]
D --> D2[Index Store]
D --> D3[Vector Store]3. 向量存储(Vector Stores)
向量存储是索引的物理后端,定义了 add、delete、query 等核心操作的协议抽象。BasePydanticVectorStore 规定所有实现必须返回 VectorStoreQueryResult,包含节点 ID、相似度分数及原始数据。
资料来源:llama-index-core/llama_index/core/vector_stores/types.py
社区提供了丰富的集成选项:
- WordLift 向量存储:将节点映射为 Linked Data 中的 dereferentiable URI,持久化到知识图谱中,需在元数据中包含
entity_id字段。资料来源:llama-index-integrations/vector_stores/llama-index-vector-stores-wordlift/README.md - Cognee Graph RAG:支持 SQLite、PostgreSQL、Neo4j、QDrant、Weaviate 等多种后端,并提供基于 D3.js 的图谱可视化能力。资料来源:llama-index-integrations/graph_rag/llama-index-graph-rag-cognee/README.md
4. 存储层(Storage Layer)
StorageContext 是存储层的入口,集中管理以下组件:
docstore:文档存储,保存原始Document对象;index_store:索引元数据,保存索引结构(如树结构、图结构)的序列化结果;vector_store:向量存储,保存嵌入向量及节点引用;graph_store:图存储(可选),仅PropertyGraphIndex使用。
用户可通过 StorageContext.from_defaults() 快速创建默认(内存)实现,或显式注入自定义后端。资料来源:llama-index-core/llama_index/core/storage/storage_context.py
5. 常见问题与社区反馈
- Pydantic 版本兼容性:长期存在 #13477 等讨论,用户希望默认采用 Pydantic v2,以避免与 FastAPI 等下游框架冲突。资料来源:GitHub Issue #13477
- 本地部署:社区常问如何在本地使用 Alpaca 等模型构建完全自托管的索引与向量存储,避免数据外传。资料来源:GitHub Issue #928
- 索引答案超出文档范围:使用
VectorStoreIndex时,模型可能基于通用知识回答未在语料中出现的问题,可通过自定义QueryEngine提示词模板或增加相关性阈值来缓解。资料来源:GitHub Issue #1321 - 外部集成策略:自 v0.14.x 起,官方鼓励第三方工具(如 Bocha Web Search)以外部包形式发布,并通过回调机制(Instrumentation Handler)增强可观测性与安全性。资料来源:GitHub Issue #21883
See Also
资料来源:llama-index-core/llama_index/core/indices/__init__.py llama-index-core/llama_index/core/storage/storage_context.py
Retrievers, Query Engines & Response Synthesizers
LlamaIndex 的 RAG(Retrieval-Augmented Generation)管道围绕三个核心抽象构建:Retriever(检索器)负责从索引中召回相关节点,Query Engine(查询引擎)将检索与 LLM 编排组合为端到端问答接口,Response Synthesizer(响应合成器)则把检索到的节点与查询合成为最终答案。仓库中大量的 reader、...
继续阅读本节完整说明和来源证据。
概览
LlamaIndex 的 RAG(Retrieval-Augmented Generation)管道围绕三个核心抽象构建:Retriever(检索器)负责从索引中召回相关节点,Query Engine(查询引擎)将检索与 LLM 编排组合为端到端问答接口,Response Synthesizer(响应合成器)则把检索到的节点与查询合成为最终答案。仓库中大量的 reader、tool spec、vector store 集成包,正是为了在数据接入、工具能力与向量存储三个外围环节为这三大核心组件提供可插拔的输入/输出。
llama-index-readers-apify 的 ApifyDataset 将 Apify Actor 数据集映射为 Document 列表后即可送入索引(llama-index-readers-apify/README.md:18-35)。类似地,ObsidianReader 会解析 vault 下的 Markdown 文件并附带 wikilinks/backlinks 元数据(llama-index-readers-obsidian/README.md:9-19)。这些 Document 正是 Retriever 所检索对象的源头。
数据读取器(Readers)— Retriever 的输入侧
Readers 是管道最前端的适配器,其职责是将异构来源转换为统一的 Document 列表。仓库按来源类型划分出多个 reader 集成包:
| Reader 集成 | 典型来源 | 关键能力 |
|---|---|---|
llama-index-readers-apify | Apify Dataset(README.md:18-35) | 通过 dataset_mapping_function 自定义字段映射 |
llama-index-readers-obsidian | 本地 Obsidian vault(README.md:7-19) | 提取 wikilinks/backlinks、tasks 元数据 |
llama-index-readers-wikipedia | Wikipedia 页面(README.md:14-23) | 按 pages 列表批量拉取 |
llama-index-readers-service-now | ServiceNow KB(README.md:5-50) | 通过 article_sys_id 或 numbers 检索;必须用户提供自定义解析器 |
llama-index-readers-docling | PDF/DOCX/HTML(README.md:8-39) | 支持 Markdown 与 Docling JSON 双导出 |
llama-index-readers-layoutir | PDF(README.md:20-45) | 通过 IR 中间表示保留多栏与表格结构 |
llama-index-readers-markitdown | Office/HTML/PDF/ZIP(README.md:6-13) | 基于 MarkItDown 的通用文本抽取 |
llama-index-readers-web/.../spider_web | 任意网页(README.md:8-39) | mode="scrape" 或 mode="crawl" 双模式 |
DocstringWalker 走的是另一条路径——使用 Python AST 解析本地代码库的 docstring(llama-index-readers-docstring-walker/README.md:5-13),它说明 Readers 不限于文本文档,也可直接产出可索引的结构化文本。
ServiceNow reader 特别强调:用户必须提供继承自 BaseReader 的自定义解析器(至少 HTML 解析器),库不会内置文件解析(llama-index-readers-service-now/README.md:18-50)。这是常见的"边界由集成方控制"设计哲学,避免对外部文件格式做强假设。
工具层(Tools)— Query Engine 的能力扩展
Tool Spec 把外部服务暴露为 Agent 可调用的 Tool,让 Query Engine 在 ReAct/LLM 工作流中获得检索之外的能力(搜索、网页交互、抽取等)。FunctionAgent 配合 tool_spec.to_tool_list() 是标准接入方式(llama-index-tools-wikipedia/README.md:11-19, llama-index-tools-seltz/README.md:15-22)。
主流工具的能力分组:
- 搜索/抓取类:
SeltzToolSpec.search(README.md:31-40)、ExaToolSpec的search/find_similar(README.md:5-7)、MetaphorToolSpec同名方法(README.md:5-7)、ParallelWebSystemsToolSpec.extract与search(README.md:20-55)。 - Wikipedia:
WikipediaToolSpec提供load_data与search_data(README.md:17-19)。 - 结构化网页抽取:
AgentQLRestAPIToolSpec.extract_web_data_with_rest_api返回 JSON(README.md:24-28);浏览器版本需配合 Playwright。 - 混合检索:
AirweaveToolSpec.advanced_search_collection支持temporal_relevance与retrieval_strategy(README.md:5-23)。 - 网页爬虫:
SpiderWebReader的mode="scrape"/mode="crawl"(README.md:18-39)。
ReAct 代理使用上述工具的系统提示词明确说明了"Thought/Action/Action Input"循环(system_header_template.md:5-19),意味着每个工具调用都会被包装为一次结构化推理步。
向量存储与知识图谱
Retriever 的物理后端由 Vector Store 集成承担。llama-index-vector-stores-wordlift 把数据写入 WordLift 的 Knowledge Graph,要求加载的 Document 携带 entity_id 元数据以维持链接数据语义(README.md:1-5)。这与 llama-index-readers-obsidian 已经产出 wikilinks/backlinks 元数据的做法(README.md:9-19)形成呼应:Readers 与 Vector Stores 通过统一的 metadata 协议进行对接。
端到端数据流
flowchart LR
A[异构数据源<br/>Web/Wiki/KB/Code/Vault] --> B[Reader<br/>Apify/Obsidian/Docling/...]
B --> C[Document 列表<br/>含统一 metadata]
C --> D[Index + Embedding]
D --> E[Retriever]
F[Tool Spec<br/>Seltz/Exa/AgentQL/...] --> G[Query Engine<br/>含 ReAct/路由]
E --> G
G --> H[Response Synthesizer]
H --> I[最终答案]配置与常见失败模式
- 必须显式提供解析器:
SnowKBReader不内置 HTML/DOCX 解析,若未通过custom_parsers注入会在导入/运行时报错(llama-index-readers-service-now/README.md:18-50)。 - 环境变量/凭据:
ApifyDataset需 Apify API token(llama-index-readers-apify/README.md:5-15);AgentQL需AGENTQL_API_KEY(llama-index-tools-agentql/README.md:13-19);SeltzToolSpec与AirweaveToolSpec同样以api_key构造(llama-index-tools-seltz/README.md:9-13, llama-index-tools-airweave/README.md:5-13)。 - 异步与浏览器依赖:
AgentQL浏览器工具仅支持异步并依赖 Playwright 实例(llama-index-tools-agentql/README.md:5-7)。 - Pydantic 兼容性:社区长期存在"默认使用 Pydantic v1 模型"导致与宿主应用(Pydantic v2,如 FastAPI)冲突的问题(#13477),自 v0.14 起核心逐步迁移到 v2 路径,使用自定义
pydantic.BaseModel子类时需注意序列化差异。 - 可观测性/治理:社区提出的
llamaindex-tealtiger等治理回调会在 *tool 调用前* 与 *query 执行前* 介入(#21882),这是把策略点插入上述 Query Engine 循环的典型示例。
See Also
- Data Connectors(Readers 总览)
- Vector Stores 集成目录
- Tools / Tool Spec 集成目录
- Agent Workflows(ReAct / FunctionAgent)
来源:https://github.com/run-llama/llama_index / 项目说明书
Agents, Workflows & Memory
LlamaIndex 的智能体层为 LLM 提供了"工具调用 + 推理"的能力,目前在仓库中通过 FunctionAgent 与 ReActAgent 两种入口暴露。FunctionAgent 直接依赖 LLM 原生的 function calling 能力,典型用法见 llama-index-tools-wikipedia/README.md、llama-index-to...
继续阅读本节完整说明和来源证据。
1. 智能体架构概览
LlamaIndex 的智能体层为 LLM 提供了"工具调用 + 推理"的能力,目前在仓库中通过 FunctionAgent 与 ReActAgent 两种入口暴露。FunctionAgent 直接依赖 LLM 原生的 function calling 能力,典型用法见 llama-index-tools-wikipedia/README.md、llama-index-tools-seltz/README.md 与 llama-index-tools-linkup-research/README.md,三处示例都展示了 FunctionAgent(tools=tool_spec.to_tool_list(), llm=OpenAI(...)) 的统一构造方式,并通过 await agent.run(...) 启动异步工作流。ReActAgent 则使用自然语言推理格式,模板固化在 llama-index-core/llama_index/core/agent/react/templates/system_header_template.md 中:模型必须按 Thought / Action / Action Input / Observation 的循环输出,并由 LlamaIndex 解析 Action Input 中的 JSON kwargs 后再分发到工具。
flowchart LR
U[用户 Query] --> A[FunctionAgent / ReActAgent]
A -->|to_tool_list| T[ToolSpec: Wikipedia / Seltz / Linkup / Parallel / AgentQL]
T -->|Document| R[Reader: Apify / Wikipedia / Docling / Confluence]
R -->|Vector Index| A
A -->|治理回调| M[Memory / Governance Handler]
M --> A
A --> Y[最终答案]2. 工具集成与 ToolSpec 模式
所有外部能力都以 ToolSpec 形式注入智能体,仓库中的 to_tool_list() 是统一入口。以 llama-index-tools-seltz/README.md 为例,SeltzToolSpec 仅暴露 search 一个函数,参数包括 query、max_documents(默认 10)、context 与 profile,返回 Document 列表;LinkupToolSpec(见 llama-index-tools-linkup-research/README.md)则通过 depth(standard/deep)与 output_type(searchResults/sourcedAnswer/structured)控制结果形态。AgentQL(见 llama-index-tools-agentql/README.md)强调"仅支持异步函数与 Playwright 浏览器 API",其 extract_web_data_from_browser 与 get_web_element_from_browser 必须配合 PlaywrightToolSpec 的 create_async_playwright_browser 才能工作。ParallelWebSystemsToolSpec(见 llama-index-tools-parallel-web-systems/README.md)内置了"失败返回空列表"的容错逻辑,使智能体在单次 API 失败时仍能继续运行——这与社区在 v0.14.16 中引入的 token-bucket 限流器(Add token-bucket rate limiter for LLM and embedding API calls)形成互补。
3. 数据读取器与上下文准备
Reader 负责把异构数据源转成 Document 列表,是智能体可消费的"长期记忆"载体。llama-index-readers-apify/README.md 给出最简模式:ApifyDataset("<token>").load_data(dataset_id=..., dataset_mapping_function=lambda item: Document(text=..., metadata={"url": ...})),由用户自定义映射函数决定字段抽取逻辑。llama-index-readers-wikipedia/README.md 演示了"按页面标题批量读取"的写法:reader.load_data(pages=["Page Title 1", ...]),输出的 Document 可直接送入 WikipediaToolSpec 的 load_data 工具,形成"读 → 检索 → 回答"的闭环。ServiceNow、Confluence、MarkItDown 等 Reader 则进一步支持自定义 custom_parsers 与回调函数,让企业级附件处理可注入项目级逻辑。
4. 记忆、治理与社区演进
v0.14.13 在 agent_workflows 中加入了 early_stopping_method 参数(release notes),用以控制智能体在循环中提前终止的策略;v0.14.12 增强了 MockFunctionCallingLLM 与 Async Tool Spec 支持(release notes),使工作流测试与异步工具链更稳定。在社区层面,#21880 提出了 Agent Magnet —— 一种"改 base URL 即获得行为记忆"的外部记忆层;#21882 提出了 TealTiger 治理回调,在工具调用与查询执行前做确定性策略评估;v0.14.15 引入 AgentMesh 信任层(release notes),与 v0.14.22 中的 0.2.0 升级(release notes)一起,构成"工具 → 治理 → 记忆"三位一体的演进方向:智能体先通过 FunctionAgent 调用工具,再由治理回调过滤高风险动作,最后将经验写入外部记忆层供下次会话检索。
See Also
- 社区外部工具包:Bocha Web Search ToolSpec(#21883)
- 信任层集成:llama-index-agent-agentmesh(v0.14.15+)
- 异步与限流:token-bucket rate limiter(v0.14.16)
- 数据接入:llama-index-readers-* 系列(Apify、Wikipedia、Docling 等)
来源:https://github.com/run-llama/llama_index / 项目说明书
LLM, Embedding & Multi-Modal Integrations
LlamaIndex 是一个用于构建检索增强生成(RAG)与代理(Agent)应用的数据框架,其核心能力来自大量可插拔的集成包。这些集成按照职责被组织在 llama-index-integrations/ 下的多个子目录中:LLM、Embedding、Reader(数据加载器)、Tool、Vector Store、Graph RAG、Callback、Multi-Modal...
继续阅读本节完整说明和来源证据。
LLM、Embedding 与多模态集成
概述与设计目标
LlamaIndex 是一个用于构建检索增强生成(RAG)与代理(Agent)应用的数据框架,其核心能力来自大量可插拔的集成包。这些集成按照职责被组织在 llama-index-integrations/ 下的多个子目录中:LLM、Embedding、Reader(数据加载器)、Tool、Vector Store、Graph RAG、Callback、Multi-Modal LLM 等。所有集成遵循统一的对接契约:实现抽象基类后即可被 Settings、FunctionAgent 等核心组件发现并使用。
在 v0.14.x 系列中,框架持续以"外部集成 + monorepo 内部集成"双轨方式扩展能力。例如 v0.14.15 引入了"basic operations for multimodal types"(v0.14.15),v0.14.16 增加了"token-bucket rate limiter for LLM and embedding API calls"(v0.14.16),这表明 LLM 与 Embedding 通道正在被纳入统一的速率治理与多模态扩展体系中。
flowchart LR
A[应用 / Agent] --> B[Tool Spec]
A --> C[LLM 集成]
A --> D[Embedding 集成]
A --> E[Multi-Modal LLM]
B --> F[Reader / 数据源]
C --> G[Settings]
D --> G
E --> G
F --> H[Vector Store]
H --> I[Graph RAG / 检索]LLM 与工具集成
LLM 集成包提供对话、函数调用、流式输出等能力。每个实现位于 llama-index-integrations/llms/<provider>/,并通过 from llama_index.llms.<provider> import ... 暴露给上层。Heroku Managed Inference 是一个典型示例:开发者提供 API Key 与推理 URL 后即可调用托管模型,集成包内置了对缺失 Key、URL 错误、模型未配置等常见问题的错误处理(llama-index-llms-heroku/README.md)。
工具(Tool)层是 LLM 与外部世界交互的桥梁。例如:
- Wikipedia Tool:提供
load_data(按页面加载)与search_data(搜索后加载匹配页)两个函数,可直接挂载到FunctionAgent(llama-index-tools-wikipedia/README.md)。 - Seltz Web Knowledge Tool:通过
search(query, max_documents, context, profile)拉取实时网页内容,返回Document列表(llama-index-tools-seltz/README.md)。 - Linkup Research Tool:支持
standard/deep两种搜索深度,以及searchResults、sourcedAnswer、structured三种输出类型,便于按场景切换成本与质量(llama-index-tools-linkup-research/README.md)。 - AgentQL Tool:基于 AgentQL 查询或自然语言描述从网页中提取结构化数据;其中两个浏览器函数需配合 Playwright 使用(llama-index-tools-agentql/README.md)。
社区中与 LLM/工具相关的需求集中在三点:① 端到端的本地化运行(issue #928),希望完全在本地 EC2 中使用 LlamaIndex;② 治理与安全,例如 issue #21882 提出的 TealTiger 回调处理器,希望在工具调用与查询执行前评估确定性安全策略;③ 第三方 ToolSpec 的外部分发(issue #21883),Bocha Web Search 集成包遵循 CONTRIBUTING.md 中"外部分发"路径而非并入 monorepo。
Embedding、Reader 与向量存储
Embedding 集成负责把文本/图像转为向量,而 Reader 集成负责把异构数据源转换为 Document 对象。两者协同后才进入向量存储与检索阶段。
Reader 生态覆盖了从本地文件、知识库到 SaaS 系统的多种来源:
| 集成包 | 数据源 | 关键能力 |
|---|---|---|
| Apify Reader | Apify Dataset | 通过 dataset_mapping_function 把每条记录映射为 Document |
| DocstringWalker | 本地代码目录 | 基于 AST 提取 docstring,节省喂给 LLM 的 token |
| Obsidian Reader | Obsidian Vault | 解析 Markdown、按标题分块、维护 wikilinks/backlinks 元数据 |
| LayoutIR Reader | PDF 等 | 基于中间表示保留多栏/表格结构,可选 GPU 加速 |
| MarkItDown Reader | 多格式 | 借助 MarkItDown 将 PPTX、DOCX、PDF、HTML 等转为 Markdown |
| Docling Reader | PDF/DOCX/HTML | 默认输出 Markdown,也可输出 Docling JSON 供专用 Node Parser 处理 |
| Confluence Reader | Confluence Space | 事件驱动处理页面与附件,支持 OAuth2 |
| ServiceNow KB Reader | ServiceNow KB | 自定义 HTML 解析器为必填项,支持按 sys_id 或编号检索 |
资料来源:llama-index-readers-apify/README.md、llama-index-readers-docstring-walker/README.md、llama-index-readers-obsidian/README.md、llama-index-readers-layoutir/README.md、llama-index-readers-markitdown/README.md、llama-index-readers-docling/README.md、llama-index-readers-confluence/README.md、llama-index-readers-service-now/README.md。
向量存储方面,WordLift 集成把 SEO 知识图谱作为向量库直接接入 LlamaIndex,添加节点时需要在 metadata 中附带 entity_id 以保持 Linked Data 完整性(llama-index-vector-stores-wordlift/README.md)。Graph RAG 方向,Cognee 集成提供 add、process_data、search、rag_search、get_related_nodes、visualize_graph 等方法,支持 SQLite/PostgreSQL、Neo4j、Qdrant 等多种后端,并可在浏览器中打开 D3.js 生成的知识图谱可视化(llama-index-graph-rag-cognee/README.md)。
多模态与社区关注点
多模态集成由 v0.14.15 起获得框架层支持("Support basic operations for multimodal types"),允许在节点与查询通道中同时承载文本、图像等多模态载荷。v0.14.16 引入的 token-bucket 限流器则统一保护 LLM 与 Embedding 的 API 调用,避免突发流量触发上游限速(v0.14.16)。
从社区反馈看,使用者最关心的问题集中在以下几类:
- 本地化与隐私:issue #928 询问如何结合 Alpaca 等本地模型在自有 EC2 上跑 LlamaIndex,说明 Embedding/LLM 的离线能力是落地关键。
- 云厂商模型覆盖:issue #7507 提议原生支持 Amazon Bedrock 的 LLM 与 Embedding;issue #16681 关注
llama-index-llms-bedrock-converse是否跟上 Claude 3.5 Sonnet V2。这两个诉求都体现了"广覆盖 LLM/Embedding 后端"的社区期待。 - 数据模型兼容性:issue #13477 希望默认改用 pydantic v2,以解决 LlamaIndex 旧版模型与 FastAPI 等新应用之间的冲突。
- 生成内容的边界:issue #1321 反映基于
SimpleVectorIndex在缺乏证据时仍会回答"什么是 AI"等通用问题——这与 LLM 的 grounding 行为、Embedding 的检索质量都直接相关,提示了多模态/检索增强策略需要进一步收紧。
选型与使用建议
- 构建 RAG 管线时:优先选择与 Reader → Embedding → Vector Store 一一对应的"全家桶"组合,例如 Docling + 本地 Embedding + WordLift 知识图谱,可同时获得版面保真与领域语义。
- 构建 Agent 时:把 Wikipedia、Seltz、Linkup、AgentQL 等 Tool 注册到
FunctionAgent.to_tool_list(),并按"低成本 → 高成本"选择depth/output_type等参数。 - 生产稳定性:在 v0.14.16+ 中启用 token-bucket 限流器以保护 LLM/Embedding API;通过回调/Instrumentation 层(如 issue #21882 提议的 TealTiger)插入确定性安全策略。
- 希望贡献新集成:按 issue #21883 推荐的"外部集成"路径发布独立 Python 包,并在
llama_index主仓库中只保留引用说明。
See Also
- Agent 与 Tool Spec 集成
- 向量存储与检索后端
- 回调与可观测性(Instrumentation)
- Graph RAG 与知识图谱
资料来源:llama-index-readers-apify/README.md、llama-index-readers-docstring-walker/README.md、llama-index-readers-obsidian/README.md、llama-index-readers-layoutir/README.md、llama-index-readers-markitdown/README.md、llama-index-readers-docling/README.md、llama-index-readers-confluence/README.md、llama-index-readers-service-now/README.md。
Observability, Instrumentation & Callbacks
在 LlamaIndex 中,可观测性(Observability) 由两条互补的子系统共同实现:传统的 Callback(回调) 系统与现代化的 Instrumentation(埋点/仪表化) 系统。前者面向高层钩子(如 LLM 响应、工具调用、检索事件)的轻量订阅;后者提供细粒度的强类型事件分发,便于接入 OpenTelemetry、Langfuse、AgentOps、...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述与设计目标
在 LlamaIndex 中,可观测性(Observability) 由两条互补的子系统共同实现:传统的 Callback(回调) 系统与现代化的 Instrumentation(埋点/仪表化) 系统。前者面向高层钩子(如 LLM 响应、工具调用、检索事件)的轻量订阅;后者提供细粒度的强类型事件分发,便于接入 OpenTelemetry、Langfuse、AgentOps、W&B 等第三方平台。两条路径通过全局 Dispatcher 解耦,使业务代码无需感知底层上报实现。资料来源:llama-index-core/llama_index/core/callbacks/__init__.py:1-30、llama-index-core/llama_index/core/instrumentation/dispatcher.py:1-40
在 v0.14 系列中,可观测能力被显著增强:v0.14.16 新增 LLM 与 Embedding 的 token-bucket 限流(v0.14.16 Release Notes),v0.14.12 引入异步 Tool Spec 事件支持(v0.14.12 Release Notes)。同时社区已出现第三方治理埋点(如 TealTiger #21882),证明该子系统是可扩展的安全与合规接入点。
回调系统(Callback System)
核心抽象
CallbackManager 是回调子系统的入口;它持有一组 BaseCallbackHandler 实例,并在框架关键节点触发 on_event_* 系列方法。资料来源:llama-index-core/llama_index/core/callbacks/base.py:1-80
最常用的内置实现包括:
| Handler | 用途 |
|---|---|
LlamaDebugHandler | 打印每条事件的耗时与载荷,便于本地调试 |
TokenCountingHandler | 累计 prompt / completion / embedding token 用量 |
WandbCallbackHandler | 将轨迹同步到 W&B(见 llama-index-callbacks-wandb) |
AgentOpsCallbackHandler | 上报至 AgentOps 平台 |
Token 计量
TokenCountingHandler 通过订阅 llm_token_count 与 embedding_token_count 事件聚合各模型调用开销,常用于成本看板与配额控制。资料来源:llama-index-core/llama_index/core/callbacks/token_counting.py:1-60
from llama_index.core.callbacks import CallbackManager, TokenCountingHandler
from llama_index.core import Settings
token_handler = TokenCountingHandler()
Settings.callback_manager = CallbackManager([token_handler])
# ... 执行查询 ...
print(token_handler.total_llm_token_count)
仪表化系统(Instrumentation)
Dispatcher 与事件流
InstrumentationDispatcher 维护一个进程级单例:组件在关键路径调用 dispatcher.event(EventType(...)),由 Dispatcher 路由到所有已注册的 EventHandler。该设计把"事件定义"与"处理逻辑"解耦,新增埋点无需修改业务代码。资料来源:llama-index-instrumentation/src/llama_index_instrumentation/dispatcher.py:1-90
LLM 事件示例
llama_index.core.instrumentation.events.llm 模块定义了 LLMStartEvent、LLMEndEvent、LLMStreamStartEvent 等强类型事件,承载 prompt、response、usage 等字段,供 OpenTelemetry 等 Exporter 直接映射为 Span。资料来源:llama-index-core/llama_index/core/instrumentation/events/llm.py:1-80
flowchart LR A[LLM/Agent/Retriever] -->|dispatcher.event| B(InstrumentationDispatcher) B --> C[EventHandler: OTel] B --> D[EventHandler: Langfuse] B --> E[EventHandler: Custom] F[CallbackManager] -->|on_event_*| G[Token/LlamaDebug/W&B]
注册自定义 Handler
from llama_index.core.instrumentation import get_dispatcher
from llama_index.core.instrumentation.event_handlers import BaseEventHandler
class MyHandler(BaseEventHandler):
def handle(self, event):
if "LLMEnd" in event.class_name():
print(event.response)
get_dispatcher().add_event_handler(MyHandler())
选型指引与常见误区
- 调试与轻量监控 → 优先使用
CallbackManager + LlamaDebugHandler/TokenCountingHandler,无额外依赖。 - 生产级 Tracing/可观测 → 使用
InstrumentationDispatcher+ 官方 Exporter(如llama-index-callbacks-agentops),事件粒度更细。 - 重复计量:同时挂载多个 Token 计数 Handler 时,应检查是否被重复累加——同一事件在两条子系统都会被触发。
- 异步路径:自 v0.14.12 起异步 Tool Spec 已纳入事件流,旧版回调若仅监听同步方法可能丢失事件(v0.14.12 Release Notes)。
- 限流观测:v0.14.16 引入的 token-bucket 限流也会发出对应事件,可与
TokenCountingHandler协同监控配额(v0.14.16 Release Notes)。
参见
- LlamaIndex 官方文档(Agent Workflows / Observability)
llama-index-callbacks-wandb、llama-index-callbacks-agentops集成包- Issue #21882:TealTiger 治理埋点提案
- Issue #21883:外部 ToolSpec 集成规范
来源:https://github.com/run-llama/llama_index / 项目说明书
Tools, Tool Specs, Extractors & Customization Patterns
LlamaIndex 是一个围绕大语言模型(LLM)构建数据框架与智能体(Agent)编排能力的开源项目。在其 v0.14.x 系列中(最新发布为 v0.14.22),项目通过统一的 ToolSpec 模式、Reader 读取器抽象 与 ReAct 智能体模板 提供可扩展的工具与定制化能力。任何第三方服务(如 Wikipedia、AgentQL、Seltz、Parallel...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 概览:LlamaIndex 中的工具与定制化体系
LlamaIndex 是一个围绕大语言模型(LLM)构建数据框架与智能体(Agent)编排能力的开源项目。在其 v0.14.x 系列中(最新发布为 v0.14.22),项目通过统一的 ToolSpec 模式、Reader 读取器抽象 与 ReAct 智能体模板 提供可扩展的工具与定制化能力。任何第三方服务(如 Wikipedia、AgentQL、Seltz、Parallel Web Systems、ServiceNow、Confluence)都可以通过 ToolSpec 接口封装成 Agent 可调用的工具,或者通过 Reader 抽象封装为数据加载器。
资料来源:llama-index-integrations/tools/llama-index-tools-wikipedia/README.md
项目本身支持将工具集成以两种形态发布:作为仓库内的 monorepo 包(如 llama-index-tools-wikipedia),或作为遵循 CONTRIBUTING.md 外部集成指南的独立 PyPI 包(如社区贡献的 llama-index-tools-bocha-search)。
2. ToolSpec 模式与工具生态
2.1 核心约定
所有官方与社区工具包都遵循同一个模式:实现一个 XxxToolSpec 类,并通过 to_tool_list() 方法将自身方法暴露为 Agent 可识别的工具列表。Wikipedia 工具是典型示例:
from llama_index.tools.wikipedia import WikipediaToolSpec
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI
tool_spec = WikipediaToolSpec()
agent = FunctionAgent(
tools=tool_spec.to_tool_list(), llm=OpenAI(model="gpt-4.1")
)
print(await agent.run("Who is Ben Afflecks spouse?"))
其内部暴露 load_data(按页加载)与 search_data(搜索后加载匹配页)两个工具方法。资料来源:llama-index-integrations/tools/llama-index-tools-wikipedia/README.md:10-25
2.2 生态示例
下表展示了几种典型 ToolSpec 及其能力差异(资料来源:各工具 README):
| 工具包 | 主要能力 | 认证方式 |
|---|---|---|
llama-index-tools-wikipedia | 维基百科搜索与页面加载 | 无需 API Key |
llama-index-tools-agentql | 通过 AgentQL 查询或自然语言提取结构化 Web 数据 | AGENTQL_API_KEY 环境变量 |
llama-index-tools-seltz | 基于 Seltz 的实时 Web 搜索 | SeltzToolSpec(api_key=...) |
llama-index-tools-parallel-web-systems | 面向目标的网页内容提取 | ParallelWebSystemsToolSpec(api_key=...) |
llama-index-tools-python-file | 从 Python 文件自动提取函数签名 | 仅传入文件路径 |
例如 Seltz 工具的参数化设计包含 query、max_documents、context、profile 等字段,便于在 Agent 中调用时进行细粒度控制。资料来源:llama-index-integrations/tools/llama-index-tools-seltz/README.md:20-35
Parallel Web Systems 工具则内置容错处理:API 调用失败时返回空列表,失败 URL 会以 error_type 元数据形式出现在结果中,使 Agent 可以降级继续。资料来源:llama-index-integrations/tools/llama-index-tools-parallel-web-systems/README.md:55-75
2.3 浏览器协同模式
部分工具(如 AgentQL)依赖 Playwright 浏览器实例:
from llama_index.tools.playwright.base import PlaywrightToolSpec
async_browser = await PlaywrightToolSpec.create_async_playwright_browser()
此时 extract_web_data_from_browser 与 get_web_element_from_browser 两个工具都必须在已激活的浏览器上下文中调用。资料来源:llama-index-integrations/tools/llama-index-tools-agentql/README.md:30-50
3. Function Tools 与 ReAct 智能体模板
3.1 从 Python 函数到 Tool
llama-index-tools-python-file 提供了一个独特的"代码自省"能力:它读取一个 .py 文件并自动提取所有函数名、参数与 docstring,将它们转换为 FunctionAgent 可调用的工具集。这为"自动从已有 Python 代码派生工具"提供了零样板路径。资料来源:llama-index-integrations/tools/llama-index-tools-python-file/README.md:5-15
类似地,llama-index-readers-docstring-walker 通过 Python 的 ast 模块遍历本地代码目录,仅提取 docstring 而不消耗 token 读取代码本身,将函数说明转换为 LlamaIndex Document,适合构建"代码伴侣"问答或自动文档生成。资料来源:llama-index-integrations/readers/llama-index-readers-docstring-walker/README.md:1-15
3.2 ReAct 提示词模板
Agent 之所以能够"工具选择 → 调用 → 观察 → 推理"循环,依赖于统一的 ReAct 提示词模板。模板要求模型以如下格式输出:
Thought: <推理>
Action: <tool name>
Action Input: <JSON kwargs>
并强调:必须始终以 Thought 开头、严禁用 markdown 代码块包裹整个响应、Action 与 Action Input 必须成对出现。资料来源:llama-index-core/llama_index/core/agent/react/templates/system_header_template.md:1-30
3.3 整体工具流转
下面用 Mermaid 图展示一个典型 Agent 调用 ToolSpec 的数据流:
flowchart LR
U[User Query] --> A[FunctionAgent]
A -->|ReAct 模板| L[LLM 推理]
L -->|Action: tool| T[ToolSpec.to_tool_list]
T -->|方法调用| API[外部服务/本地函数]
API -->|Observation| L
L -->|Final Answer| U4. Reader、Extractor 与定制化模式
4.1 Reader 读取器抽象
与 ToolSpec 并列的另一条扩展轴是 Reader(数据读取器)。它继承 BaseReader 并实现 load_data 方法,将异构数据源转为 Document 列表。Wikipedia Reader 是最简形式:
from llama_index.readers.wikipedia import WikipediaReader
reader = WikipediaReader()
documents = reader.load_data(pages=["Page Title 1", "Page Title 2"])
资料来源:llama-index-integrations/readers/llama-index-readers-wikipedia/README.md:10-20
更复杂的 Reader 通过元数据丰富文档内容:例如 ObsidianReader 从笔记中抽取 wikilinks 与 backlinks 列表并存入 metadata,便于后续做知识图谱关联。资料来源:llama-index-integrations/readers/llama-index-readers-obsidian/README.md:5-25
4.2 多格式与文档结构感知
llama-index-readers-markitdown 借助 Microsoft MarkItDown 把 PPTX、DOCX、PDF、HTML、CSV、ZIP 等统一转为 Markdown,简化了多源数据接入。资料来源:llama-index-integrations/readers/llama-index-readers-markitdown/README.md:1-15
llama-index-readers-docling 则更进一步,提供 Markdown 与 Docling 原生 JSON 两种导出模式;JSON 模式必须搭配 Docling Node Parser 才能正确解析。资料来源:llama-index-integrations/readers/llama-index-readers-docling/README.md:15-35
llama-index-readers-docugami 走另一条路线:它把文档解析为带有层级语义标签的 XML 树,并为每块 chunk 标注结构属性(标题、段落、表格等)与跨文档一致的语义标签(如合同中的"Landlord"或"Renewal Date"),适合长文档与高精度 QA 场景。资料来源:llama-index-integrations/readers/llama-index-readers-docugami/README.md:1-25
4.3 自定义解析器注入
对于企业系统 Reader(如 ServiceNow、Confluence),项目不内置具体文件解析器,而是要求用户提供继承 BaseReader 的自定义解析器:
class DocxParser(BaseReader):
def load_data(self, file_path, **kwargs):
result = self.markitdown.convert(source=file_path)
return [Document(text=result.markdown,
metadata={"file_path": str(file_path)})]
ConfluenceReader 与 SnowKBReader 通过 custom_parsers 字典接收用户为不同文件类型(DOCUMENT、PDF、HTML、CSV 等)注入的解析器。资料来源:llama-index-integrations/readers/llama-index-readers-service-now/README.md:30-55 与 llama-index-integrations/readers/llama-index-readers-confluence/README.md:10-30
ConfluenceReader 还提供两个回调钩子:
process_attachment_callback(media_type, file_size) -> (bool, reason):控制是否处理某个附件。process_document_callback(page_id) -> bool:控制是否处理某个页面。
资料来源:llama-index-integrations/readers/llama-index-readers-confluence/README.md:25-40
4.4 社区扩展与治理
社区近期围绕"工具与查询安全"与"自学习记忆"形成了多个新方向:通过 callback/instrumentation handler 在工具调用与查询执行前评估确定性安全策略(参考 issue #21882 的 TealTiger 集成),以及通过替换 base URL 即获得持久行为记忆的 Agent Magnet 集成提案(issue #21880)。这些都说明 LlamaIndex 的工具与定制化体系正在向"可观测 + 可治理 + 可记忆"的智能体基础设施演进。
5. 总结
LlamaIndex 通过统一的 ToolSpec 模式(to_tool_list)、ReAct 模板(标准化的 Thought/Action/Observation 协议)、Reader + BaseReader 抽象(异构数据源接入)、custom_parsers 与 callback 钩子(企业级定制)四条主线,为构建可扩展的 LLM 应用与智能体提供了完整的扩展点。开发新工具时只需遵循:实现 XxxToolSpec、暴露方法、提供必要的认证配置与 README 即可被 Agent 直接消费。
See Also
资料来源:llama-index-integrations/tools/llama-index-tools-wikipedia/README.md
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
可能增加新用户试用和生产接入成本。
Developers may fail before the first successful local run: feat: Governance instrumentation handler for tool/query security (TealTiger integration)
Upgrade or migration may change expected behavior: v0.14.12
Upgrade or migration may change expected behavior: v0.14.15
Pitfall Log / 踩坑日志
项目:run-llama/llama_index
摘要:发现 23 个潜在踩坑项,其中 1 个为 high/blocking;最高优先级:配置坑 - 来源证据:[Question]: How to make multi_agents have separate Memoreis while share the same Context?。
1. 配置坑 · 来源证据:[Question]: How to make multi_agents have separate Memoreis while share the same Context?
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:[Question]: How to make multi_agents have separate Memoreis while share the same Context?
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/run-llama/llama_index/issues/21888 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
2. 安装坑 · 失败模式:installation: feat: Governance instrumentation handler for tool/query security (TealTiger integration)
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this installation risk before relying on the project: feat: Governance instrumentation handler for tool/query security (TealTiger integration)
- 对用户的影响:Developers may fail before the first successful local run: feat: Governance instrumentation handler for tool/query security (TealTiger integration)
- 证据:failure_mode_cluster:github_issue | https://github.com/run-llama/llama_index/issues/21882 | feat: Governance instrumentation handler for tool/query security (TealTiger integration)
3. 安装坑 · 失败模式:installation: v0.14.12
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this installation risk before relying on the project: v0.14.12
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.12
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.12 | v0.14.12
4. 安装坑 · 失败模式:installation: v0.14.15
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this installation risk before relying on the project: v0.14.15
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.15
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.15 | v0.14.15
5. 安装坑 · 失败模式:installation: v0.14.19
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this installation risk before relying on the project: v0.14.19
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.19
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.19 | v0.14.19
6. 安装坑 · 失败模式:installation: v0.14.21
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this installation risk before relying on the project: v0.14.21
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.21
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.21 | v0.14.21
7. 安装坑 · 失败模式:installation: v0.14.22
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this installation risk before relying on the project: v0.14.22
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.22
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.22 | v0.14.22
8. 安装坑 · 来源证据:[Feature Request]: Add Agent Magnet as a self-learning memory integration
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:[Feature Request]: Add Agent Magnet as a self-learning memory integration
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/run-llama/llama_index/issues/21880 | 来源类型 github_issue 暴露的待验证使用条件。
9. 配置坑 · 失败模式:configuration: External Bocha Web Search ToolSpec package for LlamaIndex
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this configuration risk before relying on the project: External Bocha Web Search ToolSpec package for LlamaIndex
- 对用户的影响:Developers may misconfigure credentials, environment, or host setup: External Bocha Web Search ToolSpec package for LlamaIndex
- 证据:failure_mode_cluster:github_issue | https://github.com/run-llama/llama_index/issues/21883 | External Bocha Web Search ToolSpec package for LlamaIndex
10. 配置坑 · 失败模式:configuration: v0.14.13
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this configuration risk before relying on the project: v0.14.13
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.13
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.13 | v0.14.13
11. 配置坑 · 失败模式:configuration: v0.14.14
- 严重度:medium
- 证据强度:source_linked
- 发现:Developers should check this configuration risk before relying on the project: v0.14.14
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.14
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.14 | v0.14.14
12. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | github_repo:560704231 | https://github.com/run-llama/llama_index | README/documentation is current enough for a first validation pass.
13. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | github_repo:560704231 | https://github.com/run-llama/llama_index | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | github_repo:560704231 | https://github.com/run-llama/llama_index | no_demo; severity=medium
15. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | github_repo:560704231 | https://github.com/run-llama/llama_index | no_demo; severity=medium
16. 安全/权限坑 · 来源证据:External Bocha Web Search ToolSpec package for LlamaIndex
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:External Bocha Web Search ToolSpec package for LlamaIndex
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/run-llama/llama_index/issues/21883 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
17. 安全/权限坑 · 来源证据:feat: Governance instrumentation handler for tool/query security (TealTiger integration)
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:feat: Governance instrumentation handler for tool/query security (TealTiger integration)
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/run-llama/llama_index/issues/21882 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
18. 运行坑 · 失败模式:performance: [Feature Request]: Add Agent Magnet as a self-learning memory integration
- 严重度:low
- 证据强度:source_linked
- 发现:Developers should check this performance risk before relying on the project: [Feature Request]: Add Agent Magnet as a self-learning memory integration
- 对用户的影响:Developers may hit a documented source-backed failure mode: [Feature Request]: Add Agent Magnet as a self-learning memory integration
- 证据:failure_mode_cluster:github_issue | https://github.com/run-llama/llama_index/issues/21880 | [Feature Request]: Add Agent Magnet as a self-learning memory integration
19. 运行坑 · 失败模式:performance: v0.14.16
- 严重度:low
- 证据强度:source_linked
- 发现:Developers should check this performance risk before relying on the project: v0.14.16
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.16
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.16 | v0.14.16
20. 运行坑 · 失败模式:performance: v0.14.18
- 严重度:low
- 证据强度:source_linked
- 发现:Developers should check this performance risk before relying on the project: v0.14.18
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.18
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.18 | v0.14.18
21. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | github_repo:560704231 | https://github.com/run-llama/llama_index | issue_or_pr_quality=unknown
22. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | github_repo:560704231 | https://github.com/run-llama/llama_index | release_recency=unknown
23. 维护坑 · 失败模式:maintenance: v0.14.20
- 严重度:low
- 证据强度:source_linked
- 发现:Developers should check this maintenance risk before relying on the project: v0.14.20
- 对用户的影响:Upgrade or migration may change expected behavior: v0.14.20
- 证据:failure_mode_cluster:github_release | https://github.com/run-llama/llama_index/releases/tag/v0.14.20 | v0.14.20
来源:Doramagic 发现、验证与编译记录