当前位置: 首页 > news >正文

LlamaIndex 系列【4】入门案例(阿里云百炼适配)

文章目录

  • 1. 高层概念
    • 1.1 大语言模型(LLMs)
    • 1.2 智能体应用(Agentic Applications)
    • 1.3 智能体(Agents)
    • 1.4 检索增强生成(RAG)
    • 1.5 五大核心应用形态
  • 2. 安装与环境配置
    • 2.1 创建工程
    • 2.2 安装
      • 2.2.1 方式一:Pip 快速安装
      • 2.2.2 方式二:自定义按需安装
      • 2.2.3 方式三:源码编译安装
    • 2.3 环境配置
      • 2.3.1 使用 OpenAI
      • 2.3.2 使用阿里云百炼
  • 3. 入门实战教程(阿里云百炼)
    • 3.1 基础智能体:工具调用示例
    • 3.2 增加多轮对话记忆
    • 3.3 为智能体接入 RAG 检索能力
    • 3.4 RAG 索引持久化
    • 3.5 拓展方向
  • 小结

1. 高层概念

本节介绍构建大模型应用过程中反复出现的核心抽象。

1.1 大语言模型(LLMs)

LLM是催生LlamaIndex的基础技术。它是一类人工智能系统,能够理解、生成、处理自然语言;既可以依托训练数据作答,也能够使用查询阶段传入的外部数据进行回答。


1.2 智能体应用(Agentic Applications)

当大模型嵌入应用,用于决策、执行动作、与外部环境交互,这类应用统称为智能体应用

典型特征:

  • LLM增强:为模型挂载工具、记忆、动态提示词;
  • 提示词链式调用:多轮模型调用串行执行,上一轮输出作为下一轮输入;
  • 路由分发:依靠大模型判断程序下一步流转状态;
  • 并行执行:支持并发执行多条任务链路;
  • 分层编排:多层大模型协同调度下层任务;
  • 自省校验:模型校验前置结果,动态修正执行路径。

LlamaIndex中,通过Workflow编排任务与模型调用,实现各类智能体应用。


1.3 智能体(Agents)

智能体是「智能体应用」的具体实现实例。

智能体依托大模型、工具、记忆组件运行在推理循环中,半自主完成任务,标准运行流程:

  1. 接收用户消息;
  2. 结合历史对话、可用工具、用户输入,由LLM判断下一步动作;
  3. 按需调用一个或多个工具;
  4. 解析工具返回结果,持续决策;
  5. 终止执行后,向用户返回最终答案。

1.4 检索增强生成(RAG)

RAG是基于LlamaIndex构建私有数据应用的核心方案。

不需要微调大模型,而是在查询阶段向模型注入相关私有数据;框架先对数据建立索引,仅把检索得到的相关片段连同问题送入LLM,避免全量数据传入。


1.5 五大核心应用形态

LlamaIndex根据官方顶层设计,将数据增强型大模型应用归纳为五大核心应用形态,覆盖从基础RAG问答、文档信息抽取到复杂智能体编排的主流开发场景:

  1. Agents 智能体
    LLM驱动的自主决策程序,绑定各类工具与记忆组件,运行推理循环动态选择执行动作,无需固定流程,适合复杂开放式任务。
  2. Workflows 工作流
    事件驱动的通用编排底座,用于组织多阶段逻辑与LLM调用,所有智能体类应用均可基于Workflow实现,是框架底层核心抽象。
  3. 结构化数据提取
    依托Pydantic定义目标数据结构,从PDF、网页等非结构化文档中类型安全地提取标准化信息,广泛用于文档自动化处理。
  4. Query Engines 查询引擎
    端到端单次问答链路,标准RAG实现载体;接收自然语言查询,执行文档检索并返回答案与引用上下文,一问一答模式。
  5. Chat Engines 对话引擎
    面向多轮交互会话,自动维护历史对话上下文,支持连续来回问答,适用于聊天机器人场景。

2. 安装与环境配置

LlamaIndex采用命名空间分包架构

2.1 创建工程

Python版本:>=3.10,<4.0

2.2 安装

2.2.1 方式一:Pip 快速安装

执行pip install llama-index安装基础启动包;各类第三方集成组件可按需单独安装。所有集成清单可查阅 LlamaHub。

pipinstallllama-index

基础包包含:

  • llama-index-core
  • llama-index-llms-openai
  • llama-index-embeddings-openai
  • llama-index-readers-file

注意:llama-index-core内置NLTKtiktoken资源文件,规避运行时网络下载。

安装完成:


2.2.2 方式二:自定义按需安装

不使用OpenAI、追求轻量化部署时,可以单独指定依赖。

示例:Ollama本地模型 +HuggingFace Embedding

pipinstallllama-index-core llama-index-readers-file llama-index-llms-ollama llama-index-embeddings-huggingface

2.2.3 方式三:源码编译安装

gitclone https://github.com/run-llama/llama_index.git
  1. 安装poetry环境管理工具
poetry selfaddpoetry-plugin-shell poetry shell
  1. 安装核心库
pipinstall-ellama-index-core

3.(可选)全套开发、文档依赖

poetryinstall--withdev,docs
  1. 按需本地安装各类集成包
pipinstall-ellama-index-integrations/readers/llama-index-readers-file pipinstall-ellama-index-integrations/llms/llama-index-ollama

2.3 环境配置

2.3.1 使用 OpenAI

没有OpenAI Key的话后面可以使用OpenAILike接入

框架默认使用gpt-3.5-turbo生成文本,text-embedding-ada-002实现向量检索。

必须配置环境变量OPENAI_API_KEY

# MacOS/LinuxexportOPENAI_API_KEY=你的密钥# WindowssetOPENAI_API_KEY=你的密钥

兼容OpenAI协议的第三方接口,可使用OpenAILike系列类接入。


2.3.2 使用阿里云百炼

阿里云百炼平台一般有免费额度,这里搭配通义千问两套模型:

  • qwen3.8-max:百万上下文旗舰多模态生成模型,承担检索结果综合推理、问答生成、Agent任务编排。
  • qwen3.7-text-embedding:新一代超长文本向量模型,最大支持131072 token输入,负责文档切片语义向量化与相似度检索。

3. 入门实战教程(阿里云百炼)

前置条件:完成环境安装。想要纯本地模型运行,可以查阅官方本地模型教程。


3.1 基础智能体:工具调用示例

安装依赖并配置百练密钥(在阿里云百炼控制台获取API Key):

pipinstallllama-index-core llama-index-llms-openai-like llama-index-embeddings-openai-like]# Linux/Mac:exportDASHSCOPE_API_KEY=sk-xxx# CMD 命令行: set DASHSCOPE_API_KEY=sk-xxxx# Windows PowerShell: $env:DASHSCOPE_API_KEY="sk-xxx"

更推荐使用.env文件,不受终端、启动方式影响,项目根目录新建.env文件:

DASHSCOPE_API_KEY=sk-3

需要再安装python-dotenv

pip install python-dotenv

创建starter.py,实现具备乘法计算工具的智能体。LLM通过OpenAILike
接入百练的OpenAI兼容端点:

importasyncioimportosfromdotenvimportload_dotenvfromllama_index.core.agent.workflowimportFunctionAgentfromllama_index.llms.openai_likeimportOpenAILike# 加载 DASHSCOPE_API_KEYload_dotenv()api_key=os.environ["DASHSCOPE_API_KEY"]# 接入阿里云百炼(OpenAI 兼容模式)llm=OpenAILike(model="qwen3.8-max",# 支持 function calling 的通义千问模型api_key=api_key,api_base="https://ws-jfb8j8mx0n7e2k6a.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",is_chat_model=True,# qwen 系列均为 chat 模型,务必设为 Trueis_function_calling_model=True,# ← 加这一行)# 定义计算器工具defmultiply(a:float,b:float)->float:"""两个数字相乘"""returna*b# 构建智能体agent=FunctionAgent(tools=[multiply],llm=llm,system_prompt="你是助手,可以完成两个数字相乘计算。",)asyncdefmain():response=awaitagent.run("1234 * 4567 等于多少?")print(str(response))if__name__=="__main__":asyncio.run(main())

控制台输出:

1234×4567=**5,635,678**

执行流程:用户问题 + 工具描述传入LLM-> 模型选择工具并填充参数 -> 执行函数 -> 整合结果生成回答。

框架推荐使用异步写法,提升应用并发性能。
FunctionAgent要求模型支持原生function calling,百练的qwen-plus/qwen-max/qwen-turbo均支持。


3.2 增加多轮对话记忆

依靠Context对象持久化会话上下文,实现连续对话。同一个ctx上的多次
run()共享对话记忆;不传ctx则每次都是全新会话。

新建memory.py

importasyncioimportosfromdotenvimportload_dotenvfromllama_index.core.agent.workflowimportFunctionAgentfromllama_index.core.workflowimportContextfromllama_index.llms.openai_likeimportOpenAILike load_dotenv()llm=OpenAILike(model="qwen-plus",# 百炼模型;专属端点替换 model 即可api_key=os.environ["DASHSCOPE_API_KEY"],api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",# 参数名是 api_base,传 base_url 会被静默忽略!is_chat_model=True,is_function_calling_model=True,)defmultiply(a:float,b:float)->float:"""两个数字相乘"""returna*b agent=FunctionAgent(tools=[multiply],llm=llm,system_prompt="你是助手,可以完成两个数字相乘计算。",)asyncdefmain():# Context 持久化会话上下文:同一个 ctx 上的多次 run 共享记忆ctx=Context(agent)response=awaitagent.run("我叫Logan",ctx=ctx)print("第1轮:",str(response))# 同一个 ctx 再问 -- 能答出名字,说明记忆生效response=awaitagent.run("我的名字是什么?",ctx=ctx)print("第2轮:",str(response))# 记忆与工具调用可以共存response=awaitagent.run("我叫Logan,12乘以12等于多少?",ctx=ctx)print("第3轮:",str(response))# 对照组:不传 ctx 是全新会话,不记得之前说过的话response=awaitagent.run("我的名字是什么?")print("无ctx对照:",str(response))if__name__=="__main__":asyncio.run(main())

执行效果:

1:你好,Logan!很高兴认识你。 第2:你的名字是 Logan! ← 记忆生效 第3:Logan,12乘以12等于144! ← 记忆与工具调用共存 无ctx对照:我并不知道您的名字...← 不传 ctx 即失忆

Context内部维护会话的memory(对话历史)与state,跨run()保留;
多智能体场景下还可作为共享黑板传递结构化状态。


3.3 为智能体接入 RAG 检索能力

准备测试文档:

mkdirdatawgethttps://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt-Odata/paul_graham_essay.txt# 若网络不通,放任意 .txt 文件到 data 目录即可

注意RAG需要embedding模型。若不配置,框架默认回退到OpenAI并报错,
必须同时把embedding也切到百炼(text-embedding-v31024维,中英文)。

完整代码:

importasyncioimportosfromdotenvimportload_dotenvfromllama_index.coreimportVectorStoreIndex,SimpleDirectoryReader,Settingsfromllama_index.core.agent.workflowimportFunctionAgentfromllama_index.embeddings.openai_likeimportOpenAILikeEmbeddingfromllama_index.llms.openai_likeimportOpenAILike load_dotenv()API_KEY=os.environ["DASHSCOPE_API_KEY"]API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1"# LLM 与 embedding 均接入百炼Settings.llm=OpenAILike(model="qwen-plus",api_key=API_KEY,api_base=API_BASE,# ← 参数名是 api_baseis_chat_model=True,is_function_calling_model=True,# ← FunctionAgent 必需)Settings.embed_model=OpenAILikeEmbedding(model_name="text-embedding-v3",api_key=API_KEY,api_base=API_BASE,# ← embedding 同样是 api_base)# 构建RAG查询引擎(自动使用 Settings 中的模型)documents=SimpleDirectoryReader("data").load_data()index=VectorStoreIndex.from_documents(documents,show_progress=True)query_engine=index.as_query_engine()defmultiply(a:float,b:float)->float:"""两个数字相乘"""returna*basyncdefsearch_documents(query:str)->str:"""检索Paul Graham随笔文档"""response=awaitquery_engine.aquery(query)returnstr(response)agent=FunctionAgent(tools=[multiply,search_documents],llm=Settings.llm,system_prompt="你可以进行数学计算,也可以检索文档回答问题。",)asyncdefmain():response=awaitagent.run("作者大学时期做了什么?7乘以8等于多少?")print(response)if__name__=="__main__":asyncio.run(main())

智能体会自动判断何时调用计算工具、何时检索文档。执行效果:

Applying transformations:100%|██████████|1/1[00:00<00:00,3.13it/s]Generating embeddings:100%|██████████|22/22[00:02<00:00,8.44it/s]**关于作者大学时期做了什么:**作者大学时原本打算学习哲学,因为他认为哲学研究的是更根本、更宏大的真理。但上了哲学课程后,他觉得这些课程很无聊,于是转向了人工智能方向。激发他对人工智能兴趣的主要有两件事:1.海因莱因的小说《The Moonisa Harsh Mistress》中出现的智能计算机 Mike;2.一部 PBS 纪录片,展示了 Terry Winograd 使用 SHRDLU 系统。**关于数学计算:**7×8=**56**

3.4 RAG 索引持久化

避免每次启动重复解析文档。推荐"有缓存则加载、无则构建并保存"的模式:

importasyncioimportosfrompathlibimportPathfromdotenvimportload_dotenvfromllama_index.coreimport(Settings,SimpleDirectoryReader,StorageContext,VectorStoreIndex,load_index_from_storage,)fromllama_index.embeddings.openai_likeimportOpenAILikeEmbeddingfromllama_index.llms.openai_likeimportOpenAILike load_dotenv()API_KEY=os.environ["DASHSCOPE_API_KEY"]API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1"# 注意:即使加载已持久化的索引,查询时仍要用 embed_model 向量化问题,# 所以 LLM 与 embedding 的配置不能省Settings.llm=OpenAILike(model="qwen-plus",api_key=API_KEY,api_base=API_BASE,is_chat_model=True,is_function_calling_model=True,)Settings.embed_model=OpenAILikeEmbedding(model_name="text-embedding-v3",api_key=API_KEY,api_base=API_BASE,)PERSIST_DIR="./storage"ifPath(PERSIST_DIR).exists()andany(Path(PERSIST_DIR).iterdir()):print(">> 检测到已持久化的索引,直接加载(跳过文档解析)...")storage_context=StorageContext.from_defaults(persist_dir=PERSIST_DIR)index=load_index_from_storage(storage_context)else:print(">> 首次运行:解析文档并构建索引...")documents=SimpleDirectoryReader("data").load_data()index=VectorStoreIndex.from_documents(documents,show_progress=True)index.storage_context.persist(persist_dir=PERSIST_DIR)# 持久化保存print(f">> 索引已保存到{PERSIST_DIR}")query_engine=index.as_query_engine()asyncdefmain():response=awaitquery_engine.aquery("作者大学时期做了什么?")print(response)if__name__=="__main__":asyncio.run(main())

storage/目录包含五个文件(以75KB文档实测为例):

文件大小内容
docstore.json137KB文档库:data(分块文本)、metadata(节点元数据)、ref_doc_info(分块与源文档的溯源关系)
index_store.json2KB索引结构:IndexDict等,记录“哪些节点属于哪个索引”及节点与向量的映射
default__vector_store.json501KB向量数据(体积最大):embedding_dict(文本向量)、text_id_to_ref_doc_id(向量→源文档映射)、metadata_dict
graph_store.json18B知识图谱存储。本例未建图索引,为默认初始化的空壳
image__vector_store.json72B图像向量存储。本例无图像内容,为空壳

加载时load_index_from_storage会把这些JSON还原为内存中的
DocumentStore/IndexStore/SimpleVectorStore,跳过解析文档与
embedding计算两个昂贵步骤;查询时仍会调用Settings.embed_model
对问题做向量化,因此embedding配置不能省。

加载时也别忘了 embedding 配置:查询要把问题向量化才能检索,
所以Settings.embed_model在加载路径同样必需,省掉会在查询时报错。

如果使用第三方向量数据库,可以直接从向量存储重建索引:
index = VectorStoreIndex.from_vector_store(vector_store)
注意向量维度需与百练text-embedding-v31024 维对齐。

文档越大、解析与embedding成本越高,持久化收益越大。


3.5 拓展方向

本文仅展示LlamaIndex基础能力,基于框架还可以继续探索:

  1. 扩展更多自定义工具;
  2. 切换各类开源/闭源大模型;
  3. 通过系统提示词定制智能体行为;
  4. 开启流式输出;
  5. 搭建人机交互工作流;
  6. 实现多智能体协同系统。

小结

很多开发者把LlamaIndex简单等同于RAG框架,但从官方定义可以看出:RAG 只是「上下文增强」的子集

LlamaIndex的顶层目标是构建各类上下文增强型大模型应用,涵盖问答、文档提取、智能体、事件驱动工作流等场景。理解这套顶层设计,才能跳出Demo,设计出可落地的生产级应用。


http://www.cnnetsun.cn/news/4160493.html

相关文章:

  • Java求职Day51:Spring Boot整合与JVM调优实战
  • Arcface-PyTorch 完整实操:5 步搞定人脸识别模型训练与 LFW 评估
  • OpenAI暂停Astra训练警示:AI前沿训练中的网络风险与安全实践
  • 贪心算法与组合编码实战:从双数极值配对到卡牌状态压缩
  • 容度升维方法论(CDEM)深化——与六种经典方法论的对比、哲学根基与未来演化
  • 基于SpringBoot的毕业设计选题系统:从需求到部署的全栈实战
  • CLion中Makefile项目自动化构建:编译前清理与编译后复制配置指南
  • 车载安卓Framework开发核心技术与面试指南
  • HsMod炉石插件快速上手指南:三步安装,讲透加速、皮肤与Web面板
  • 5分钟同步上云:Nextcloud桌面客户端新手配置指南
  • 2026年7月辽源市新房价格深度分析报告
  • 稳态耦合智能体:从内在驱动到亲社会行为的AI架构革新
  • AI编程助手ABTest:行为驱动测试框架构建与评估实践
  • 从零到一 | CV转多模态大模型 | week22 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(二)
  • AI Native 时代, IC 人的自我修养
  • 2026年Java面试核心考点与云原生趋势解析
  • 从零安装 lm-sensors 硬件监控的完整实战
  • future/promise并发模型:从内存布局到跨语言实践
  • Marketch:从Sketch设计稿直接量出间距和CSS尺寸的顺手工具
  • RAG 评测体系完整指南
  • 边缘AI时事:PTZ摄像机的边缘算力是怎么来的?
  • Vue3 Ant Design 中后台模板教程:5分钟跑通 vue3-antd-admin
  • 重试机制应用
  • Linux服务器CPU使用率100%排查:从top命令到jstack与perf的完整实战指南
  • 把 Kafka 当队列用,丢了 0.3% 的消息:Kafka 与 RocketMQ 在可靠性、顺序、事务上的 4 笔真实账
  • KMS_VL_ALL_AIO 本地KMS快速激活指南:从零到一,一个批处理搞定 Windows 和 Office 激活
  • ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解
  • `import fnmatch` 是 Python 中导入标准库模块 `fnmatch` 的语句
  • 主题公园移动供电案例:从环球影城场景,看户外频繁插拔工况下工业连接器选型思路
  • 读懂eas.json:expo-react-native-cicd中dev、prod-apk、prod-aab三大构建Profile配置详解