首页
/ LlamaIndex本地大模型入门教程:从基础助手到RAG应用开发

LlamaIndex本地大模型入门教程:从基础助手到RAG应用开发

2026-02-03 04:34:10作者:郜逊炳

前言

LlamaIndex是一个强大的框架,用于构建基于大语言模型(LLM)的智能助手和检索增强生成(RAG)应用。本教程将指导你如何在本地环境中使用LlamaIndex构建功能丰富的AI助手,无需依赖云服务。

环境准备

硬件要求

建议使用至少32GB内存的机器运行本教程中的示例,特别是当使用较大的模型如llama3.1 8B时。

软件安装

首先需要安装必要的Python包:

pip install llama-index-llms-ollama llama-index-embeddings-huggingface

这些包提供了与Ollama本地LLM服务和HuggingFace嵌入模型的集成。

基础助手开发

让我们从一个简单的数学计算助手开始,这个助手能够执行乘法运算。

创建基础助手

import asyncio
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.ollama import Ollama

# 定义乘法工具函数
def multiply(a: float, b: float) -> float:
    """用于两个数字相乘"""
    return a * b

# 创建工作流
agent = FunctionAgent(
    tools=[multiply],
    llm=Ollama(model="llama3.1", request_timeout=360.0),
    system_prompt="你是一个能够进行乘法运算的助手",
)

async def main():
    response = await agent.run("1234乘以4567等于多少?")
    print(str(response))

if __name__ == "__main__":
    asyncio.run(main())

工作原理

  1. 助手接收问题:"1234乘以4567等于多少?"
  2. LLM分析问题并选择适当的工具(multiply)
  3. 提取参数并调用工具
  4. 将工具返回的结果整合到最终响应中

添加对话记忆

为了让助手能够记住上下文,我们可以使用Context对象:

from llama_index.core.workflow import Context

ctx = Context(agent)
await agent.run("我叫张三", ctx=ctx)
response = await agent.run("我的名字是什么?", ctx=ctx)
print(response)  # 将输出"你的名字是张三"

增强助手能力:添加RAG功能

现在,我们将为助手添加检索增强生成(RAG)能力,使其能够从文档中获取信息。

准备数据

首先下载示例文档:

mkdir data
wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt -O data/paul_graham_essay.txt

构建RAG助手

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding

# 配置全局设置
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-base-en-v1.5")
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)

# 创建文档索引
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

# 定义文档搜索工具
async def search_documents(query: str) -> str:
    """用于回答关于Paul Graham个人文章的自然语言问题"""
    response = await query_engine.aquery(query)
    return str(response)

# 创建增强版助手
agent = AgentWorkflow.from_tools_or_functions(
    [multiply, search_documents],
    llm=Settings.llm,
    system_prompt="你是一个既能进行数学计算又能从文档中查找信息的助手",
)

# 测试助手
async def main():
    response = await agent.run(
        "作者在大学做了什么?另外,7乘以8等于多少?"
    )
    print(response)

持久化索引

为了避免每次启动都重新处理文档,可以将索引保存到本地:

# 保存索引
index.storage_context.persist("storage")

# 加载索引
from llama_index.core import StorageContext, load_index_from_storage

storage_context = StorageContext.from_defaults(persist_dir="storage")
index = load_index_from_storage(storage_context)

进阶方向

掌握了基础功能后,你可以进一步探索:

  1. 添加更多工具扩展助手能力
  2. 尝试不同的本地LLM模型
  3. 通过系统提示词定制助手行为
  4. 实现流式响应
  5. 构建多助手协作系统

结语

本教程展示了如何使用LlamaIndex在本地环境中构建功能丰富的AI助手。从基础计算功能到复杂的文档检索能力,LlamaIndex提供了灵活的工具集来满足各种应用场景。随着对框架的深入理解,你可以开发出更加强大和定制化的AI应用。

登录后查看全文
热门项目推荐
相关项目推荐