无论是构建 AI 应用还是自动化处理复杂任务,让 AI 智能体正确调用数据和工具都可能是一件不容易的事。简单的 AI 系统在需要推理、检索信息或处理跨数据源任务时往往力不从心。LlamaIndex 智能体通过将 AI 模型与工具、数据和检索系统连接起来,让这些任务的处理更加高效。阅读本文,了解如何构建和部署 LlamaIndex 智能体工作流,打造更智能、更灵活的 AI 应用。
什么是 LlamaIndex 智能体?
LlamaIndex 智能体是一种可以对任务进行推理,并决定完成任务所需步骤的 AI 系统。它能够将一个复杂的请求拆解成更小的任务,选择合适的工具,并在需要时使用外部数据。智能体还能记住之前的步骤,并利用检索到的信息来改进回复。这使它们能够处理超出简单问答范畴的任务。
LlamaIndex 智能体是如何工作的?
LlamaIndex 智能体让 LLM 应用不再局限于简单的问答,而是能够对任务进行推理、选择工具,并完成多步骤的工作流。智能体不遵循固定的流程,而是根据用户目标和可用能力,动态决定需要采取哪些行动。
一个典型的 LlamaIndex 智能体工作流大致遵循以下流程:
User request
↓
Understand the task
↓
Select tools
↓
Execute actions
↓
Process results
↓
Return final response理解用户目标
当智能体收到一个请求时,底层的 LLM 会分析任务、可用上下文以及已连接的工具,以确定最合适的处理方式。
对于简单的查询,智能体可以直接生成回复。对于复杂的任务,它可以将请求拆解成更小的步骤,并判断需要执行哪些操作。
选择并使用工具
工具让智能体的能力不再局限于 LLM 本身。LlamaIndex 智能体可以通过 FunctionTool 和 QueryEngineTool 等工具,连接自定义的 Python 函数、查询引擎、API、数据库和检索系统。
例如,智能体可以使用搜索工具来收集信息,使用数据库工具来检索记录,或使用自定义函数来执行计算。
通过智能体循环执行任务
在选定工具之后,智能体会执行相应操作,观察结果,并决定下一步该做什么。这种“推理—行动”循环使智能体能够处理需要多次操作的复杂工作流。
Reason → Act → Observe → Repeat如果任务尚未完成,智能体可以继续调用工具或调整方案,直到生成最终答案。
管理上下文和工作流
LlamaIndex 智能体在整个执行过程中会保留相关上下文,这有助于它们管理多步骤任务,并利用先前步骤的结果。对于更复杂的应用,开发者可以使用工作流和多智能体架构来协调多个智能体,让每个智能体负责特定的角色或任务。
例如:
Research Agent
↓
Analysis Agent
↓
Writing Agent这使得 LlamaIndex react 智能体适用于 AI 研究助手、企业知识系统和自动化数据工作流等应用场景。
LlamaIndex 智能体的核心组成部分
LlamaIndex 多智能体将多个组件结合在一起,把 LLM 转变为一个能够推理、调用外部函数并保持上下文的系统。每个组件承担不同的职责,但它们协同工作,帮助智能体更有效地处理任务。以下是其中一些核心组件:
LLM:智能体的推理引擎
LLM 作为主要的推理引擎,负责解读用户请求并决定接下来该做什么。它可以分析可用的上下文,并判断是直接给出答案,还是调用工具。LlamaIndex 支持不同的 LLM 提供商,让开发者可以根据应用需求选择模型。因此,LLM 掌控着智能体的决策和回复生成过程。
工具:拓展智能体能力
工具让智能体能够执行超出文本生成范畴的操作。它们可以是简单的 Python 函数,也可以是用于对接 API、查询引擎和其他外部服务的专用工具。智能体会根据用户请求,决定使用哪个工具,并提供所需的输入。工具的运行结果随后会被加入对话中,供智能体在下一步使用。
记忆:保持上下文
记忆功能让 LlamaIndex 智能体在完成任务的过程中保留相关信息。默认情况下,智能体使用 ChatMemoryBuffer,在执行过程中保留可用的对话历史。开发者也可以自定义记忆配置,例如根据应用需求设置 token 上限。这有助于智能体保持上下文,并处理需要多个步骤的任务。
LlamaIndex 智能体的类型
LlamaIndex 根据所需的推理程度、工具使用方式和控制力,提供了不同类型的智能体来处理任务。让我们来看看主要的类型以及它们之间的区别:
| 智能体类型 | 工作原理 | 核心特性 | 最佳使用场景 |
|---|---|---|---|
| FunctionAgent | 利用现代 LLM 的函数调用能力,根据用户请求选择并执行预定义的工具。 | 原生工具调用 结构化输入输出 可靠的工具执行 实现简单 | AI 助手 业务自动化工作流 基于 API 的应用 任务型智能体 |
| ReActAgent | 采用推理 + 行动的方式,智能体针对任务进行迭代推理、执行操作、观察结果,直到任务完成。 | 逐步推理 动态选择工具 处理多步骤任务 灵活解决问题 | 研究助手 复杂问答 数据探索 开放式工作流 |
| CodeActAgent | 当基于代码的推理更有效时,允许智能体通过生成并执行代码来解决任务。 | 代码生成与执行 编程式问题求解 适用于计算类任务 | 数据分析 科研工作流 编程助手 |
| 多智能体系统 | 由多个专业化智能体协作,彼此分派任务,共同完成复杂的工作流程。 | 智能体协作 任务分派 角色专精 可扩展的工作流 | 自动化研究流水线 企业工作流 复杂业务流程 |
这些智能体让开发者可以根据不同的任务和工作流灵活选择合适的方式。选定智能体类型之后,下一步就是将其连接到一个能够支撑其推理和工具使用能力的 LLM 后端。接下来,我们来看看如何使用 LlamaIndex 和 Kimi API 构建 AI 智能体。
如何使用 LlamaIndex 和 Kimi API 构建 AI 智能体?
将 LlamaIndex 连接到 LLM API,可以为智能体提供理解请求、选择正确行动所需的推理能力。以下步骤展示了如何使用 LlamaIndex 和 Kimi API 搭建 AI 智能体,从配置模型到运行智能体的全过程:
第一步:前提条件
开始之前,请确保满足以下条件:
已安装 Python 3.9+
已在月之暗面开放平台获取有效的 Kimi API Key
对 LlamaIndex 智能体和 RAG 概念有基本了解
第 2 步:安装依赖
原示例使用的是 llama-index-llms-ollama。请将其替换为 llama-index-llms-openai,以连接到 Kimi 的兼容 OpenAI API。同时保留 HuggingFace 嵌入包,用于本地免费嵌入。
pip install llama-index llama-index-llms-openai llama-index-embeddings-huggingface第 3 步:配置环境变量
使用环境变量安全地存储你的 Kimi API Key,不要将其硬编码在脚本中。
export KIMI_API_KEY = "your-kimi-api-key-here"在 Windows(PowerShell)上:
$env:KIMI_API_KEY = "your-kimi-api-key-here"第 4 步:使用 Kimi API 创建基础智能体
创建一个名为 starter_kimi.py 的文件。它会将 Ollama LLM 替换为 Kimi,同时保留相同的智能体逻辑和工具定义。
from llama_index.core.agent.workflow import FunctionAgent; import os
from llama_index.llms.openai import OpenAI; import asyncio
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings
# Configure global settings
Settings.llm = OpenAI(
model="kimi-latest", # Or: kimi-k2, kimi-k2.5, etc.
api_key=os.getenv("KIMI_API_KEY"),
api_base="https://api.moonshot.ai/v1",
temperature=0.3,
request_timeout=120.0,
)
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-base-en-v1.5"
)
# Define a calculator tool
def multiply(a: float, b: float) -> float:
"""Useful for multiplying two numbers."""
return a * b
# Create the agent
agent = FunctionAgent(
tools=[multiply],
llm=Settings.llm,
system_prompt="You are a helpful assistant that can multiply two numbers.",
)
async def main():
response = await agent.run("What is 1234 * 4567?")
print(str(response))
if __name__ == "__main__":
asyncio.run(main())运行脚本:
python starter_kimi.py预期输出:
The answer to 1234 * 4567 is 5635678.第 5 步:添加聊天历史(上下文)
要支持多轮对话,请传入一个 Context 对象。智能体将在多次调用之间保留记忆。
from llama_index.core.workflow import Context
# Create context
ctx = Context(agent)
# Run agent with context
response = await agent.run("My name is Logan", ctx=ctx)
print(response)
response = await agent.run("What is my name?", ctx=ctx)
print(response)第 6 步:使用 Kimi API 添加 RAG 能力
为智能体增加文档检索能力。嵌入步骤仍在本地进行,而生成则通过 Kimi 完成。
准备示例数据
mkdir data
wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt -O data/paul_graham_essay.txt完整的支持 RAG 的智能体脚本
创建 starter_kimi_rag.py:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings; import os
from llama_index.core.agent.workflow import AgentWorkflow; import asyncio
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# Global settings
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-base-en-v1.5")
Settings.llm = OpenAI(
model="kimi-k3",
api_key=os.getenv("KIMI_API_KEY"),
api_base="https://api.moonshot.ai/v1",
temperature=0.3,
)
# Load documents and build index
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
# Define tools
def multiply(a: float, b: float) -> float:
"""Useful for multiplying two numbers."""
return a * b
async def search_documents(query: str) -> str:
"""Useful for answering natural language questions about Paul Graham's essay."""
response = await query_engine.aquery(query)
return str(response)
# Create enhanced agent
agent = AgentWorkflow.from_tools_or_functions(
[multiply, search_documents],
llm=Settings.llm,
system_prompt="""You are a helpful assistant that can perform calculations
and search through documents to answer questions.""",
)
async def main():
response = await agent.run(
"What did the author do in college? Also, what's 7 * 8?"
)
print(response)
if __name__ == "__main__":
asyncio.run(main())运行脚本:
python starter_kimi_rag.pypython starter_kimi_rag.py第 7 步:持久化 RAG 索引
为避免每次运行都重新处理文档,请将向量索引持久化到磁盘。
# Save the index
index.storage_context.persist("storage")
# Later, load the index
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)
query_engine = index.as_query_engine()# Save the index
index.storage_context.persist("storage")
# Later, load the index
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)
query_engine = index.as_query_engine()故障排除
在配置智能体的过程中,如果遇到问题,常见的几类问题可能会影响身份验证、连接、包安装或嵌入速度。下表列出了最常见的错误及其解决方法,帮助你快速排查配置问题:
| 问题 | 原因 | 解决方案 |
|---|---|---|
AuthenticationError | API 密钥无效或缺失 | 确认 KIMI_API_KEY 已正确导出 |
Connection timeout | 到 api.moonshot.ai 的网络延迟 | 将 request_timeout 提高到 300.0 或更高 |
ModuleNotFoundError | 缺少相应的包 | 重新运行 pip install llama-index-llms-openai |
| 在 CPU 上进行嵌入计算速度较慢 | Hugging Face 模型运行在 CPU 上 | 使用更小的模型或启用 GPU 加速 |
使用 Kimi API 的优势
一旦智能体连接成功并正常运行,LlamaIndex 与 Kimi API 的组合就能为构建高性能 AI 应用带来诸多实际优势。以下是在 LlamaIndex 智能体中使用 Kimi API 的一些主要优势:
构建更智能的 AI 智能体: Kimi API 凭借出色的语言理解和推理能力增强 LlamaIndex 智能体,帮助智能体更有效地选择工具、处理信息和完成任务。
提升数据检索与分析能力: 结合 LlamaIndex 的数据框架,Kimi 可以处理私有文档和知识库,生成更准确、更贴合上下文的回答。
实现灵活的 AI 工作流: LlamaIndex 将智能体与工具、API 和查询引擎连接起来,而 Kimi 提供决定何时以及如何使用这些能力所需的智能。
支持复杂的 AI 应用: 凭借长上下文理解和智能体能力,Kimi API 与 LlamaIndex 的组合适用于构建研究助手、知识智能体和文档分析应用。
LlamaIndex 智能体的实际应用场景
LlamaIndex 智能体可用于各类需要 AI 进行推理、获取信息并采取行动的任务。它们能够将大语言模型与工具和数据连接起来,因此在研究、商业、数据分析和客户支持等领域都有广泛用途。以下是一些实际应用场景:
AI 研究助手
AI 研究助手可以检索文档、获取相关信息,并帮助解答复杂问题。它能将一项研究任务拆解为若干小步骤,并在需要时调用不同的工具。这使得分析大量信息、准备详细回答变得更加容易。
企业知识智能体
企业知识智能体可以将员工与内部文档、数据库和知识库连接起来。它能检索相关的公司信息,并基于现有业务数据给出答案。这有助于员工更快地获取信息,而不必手动在多个系统中查找。
数据分析智能体
数据分析智能体可以处理数据集,并利用工具对信息进行处理、分析和解读。它能执行计算、发现规律,并以简单易懂的方式解释结果。这使其在报告生成、数据探索和业务分析等任务中十分实用。
客服智能体
客服智能体可以访问产品信息、常见问题解答和支持资源,以回应客户的问题。它可以使用工具检索相关细节,并根据可用的上下文处理请求。这有助于自动化日常支持任务,同时提供更快、更一致的响应。
结语
LlamaIndex 智能体提供了一种切实可行的方式来构建能够推理、使用工具并处理相关信息的 AI 系统。它们的灵活性使其适用于构建超越简单对话的应用程序。借助合适的 LLM 后端,这些智能体可以适配不同的任务和工作流程。用 Kimi API 搭配 LlamaIndex,构建并测试你自己的 AI 智能体。探索 Kimi,看看你能用它创造出什么。