LlamaIndex 基础 01 - 认识 llamaindex
本文从 Llamaindex 的代码结构,理解 Llamaindex 构建 rag 应用的步骤
不考虑其他细节, Llamaindex 快速构建 rag 应用的步骤如下:
graph LR
A(加载文件夹数据documents=SimpleDirectoryReader) --> B(构建索引index=VectorStoreIndex.from_documents);
B --> C(生成查询引擎query_engine=index.as_query_engine);
1 | from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings |
Loading files: 100%|██████████| 41/41 [00:00<00:00, 355.91 file/s]
Parsing nodes: 100%|██████████| 41/41 [00:00<00:00, 425.54 it/s]
Generating embeddings: 100%|██████████| 127/127 [00:07<00:00, 17.04 it/s]
根据提供的信息,关羽并没有被捕或被擒。相反,他一路上经历了许多战斗和挑战,并最终到达了汝南与刘备重逢。因此,文中没有提到关羽被捕的情节。
1 | response = query_engine.query("刘备如何将诸葛亮收入麾下?") |
为了将诸葛亮收至麾下,刘备做了充分的准备。第二年春天,他精心挑选了一个好日子,沐浴更衣后再次前往隆中拜访。关羽劝阻他不要去,但张飞提议用绳子直接把诸葛亮捆来。刘备对此非常生气,并训斥了张飞一番,最终决定坚持自己的想法。
到达隆中的草堂后,刘备轻手轻脚地敲门并请童子通报自己。待孔明午睡醒来后,刘备在台阶下耐心等候。见到孔明后,他表现出极大的诚意和真挚的情感,恳请诸葛亮出山相助共谋大业。最终,被刘备的真诚所打动,诸葛亮决定答应邀请,加入刘备阵营,并被任命为军师,负责指挥军队。
在 LlamaIndex 库中,通过上述代码片段可以看出其模块化和分层的设计思路:
- Prompt 层:这个层级主要包含了构建查询或处理数据时所需的各种提示模板。通过使用
prompts
模块中的相关类和方法,用户可以定制化查询的表达方式。 - Reader 层:这一层负责从不同的数据源(如文件、数据库等)中读取内容。
readers
模块提供了多种具体的实现,用于处理不同格式的数据输入。 - Index 层:这里的组件专注于创建和维护索引结构。通过
indices
模块中的类,可以构建针对特定查询优化的索引数据结构。 - Retriever 层:此层负责从构建好的索引中检索相关信息。通过使用
retrievers
模块提供的工具,可以根据具体的查询需求高效地进行信息提取。 - Query Engine 层:这一层级提供了执行复杂查询的功能。通过
query_engine
模块,可以定义和运行复杂的查询逻辑,并得到相应的结果。 - Agent 层:该层实现了对话代理或智能助手的功能。它能够理解用户输入并生成合适的响应,结合了前面几层的功能来提供交互式的服务。
- Workflow 层:最后,这一层级提供了处理更复杂工作流的方法和工具,可以将上述各层组件组合起来以实现更为复杂的任务自动化流程。
每一层都通过模块化的方式进行组织,并且这些模块之间有清晰的接口定义,使得用户或开发者可以根据具体需求灵活选择使用哪些功能。
1 | from llama_index.core import prompts |
[‘BasePromptTemplate’, ‘ChatPromptTemplate’, ‘LangchainPromptTemplate’, ‘Prompt’, ‘PromptTemplate’, ‘PromptType’, ‘SelectorPromptTemplate’]
1 | from llama_index.core import readers |
[‘FileSystemReaderMixin’, ‘ReaderConfig’, ‘SimpleDirectoryReader’, ‘StringIterableReader’]
1 | from llama_index.core import indices |
[‘DocumentSummaryIndex’, ‘EmptyIndex’, ‘GPTDocumentSummaryIndex’, ‘GPTEmptyIndex’, ‘GPTKeywordTableIndex’, ‘GPTListIndex’, ‘GPTPandasIndex’, ‘GPTRAKEKeywordTableIndex’, ‘GPTSQLStructStoreIndex’, ‘GPTSimpleKeywordTableIndex’, ‘GPTTreeIndex’, ‘GPTVectorStoreIndex’, ‘KeywordTableIndex’, ‘KnowledgeGraphIndex’, ‘ListIndex’, ‘MultiModalVectorStoreIndex’, ‘PandasIndex’, ‘PropertyGraphIndex’, ‘RAKEKeywordTableIndex’, ‘SQLStructStoreIndex’, ‘SimpleKeywordTableIndex’, ‘SummaryIndex’, ‘TreeIndex’, ‘VectorStoreIndex’]
1 | from llama_index.core import retrievers |
[‘AutoMergingRetriever’, ‘BaseImageRetriever’, ‘BasePGRetriever’, ‘BaseRetriever’, ‘CustomPGRetriever’, ‘CypherTemplateRetriever’, ‘EmptyIndexRetriever’, ‘KGTableRetriever’, ‘KeywordTableSimpleRetriever’, ‘KnowledgeGraphRAGRetriever’, ‘LLMSynonymRetriever’, ‘ListIndexEmbeddingRetriever’, ‘ListIndexRetriever’, ‘NLSQLRetriever’, ‘PGRetriever’, ‘QueryFusionRetriever’, ‘RecursiveRetriever’, ‘RouterRetriever’, ‘SQLRetriever’, ‘SummaryIndexEmbeddingRetriever’, ‘SummaryIndexLLMRetriever’, ‘SummaryIndexRetriever’, ‘TextToCypherRetriever’, ‘TransformRetriever’, ‘TreeAllLeafRetriever’, ‘TreeRootRetriever’, ‘TreeSelectLeafEmbeddingRetriever’, ‘TreeSelectLeafRetriever’, ‘VectorContextRetriever’, ‘VectorIndexAutoRetriever’, ‘VectorIndexRetriever’]
1 | from llama_index.core import query_engine |
[‘BaseQueryEngine’, ‘CitationQueryEngine’, ‘CogniswitchQueryEngine’, ‘ComposableGraphQueryEngine’, ‘CustomQueryEngine’, ‘FLAREInstructQueryEngine’, ‘JSONalyzeQueryEngine’, ‘KnowledgeGraphQueryEngine’, ‘MultiStepQueryEngine’, ‘NLSQLTableQueryEngine’, ‘PGVectorSQLQueryEngine’, ‘PandasQueryEngine’, ‘RetrieverQueryEngine’, ‘RetrieverRouterQueryEngine’, ‘RetryGuidelineQueryEngine’, ‘RetryQueryEngine’, ‘RetrySourceQueryEngine’, ‘RouterQueryEngine’, ‘SQLAutoVectorQueryEngine’, ‘SQLJoinQueryEngine’, ‘SQLTableRetrieverQueryEngine’, ‘SimpleMultiModalQueryEngine’, ‘SubQuestionQueryEngine’, ‘ToolRetrieverRouterQueryEngine’, ‘TransformQueryEngine’]
1 | from llama_index.core import agent |
[‘AgentChatResponse’, ‘AgentRunner’, ‘CustomSimpleAgentWorker’, ‘FnAgentWorker’, ‘FunctionCallingAgent’, ‘FunctionCallingAgentWorker’, ‘MultimodalReActAgentWorker’, ‘ParallelAgentRunner’, ‘QueryPipelineAgentWorker’, ‘ReActAgent’, ‘ReActAgentWorker’, ‘StructuredPlannerAgent’]
1 | from llama_index.core import workflow |
[‘Workflow’, ‘WorkflowCheckpointer’, ‘WorkflowRuntimeError’, ‘WorkflowTimeoutError’, ‘WorkflowValidationError’]