Logo
Section 1 / 4

在LlamaIndex中构建AI智能体:单智能体系统

学习如何使用 LlamaIndex 构建单智能体 AI 系统。

导入

在LlamaIndex中构建AI智能体:单智能体系统

学习如何使用 LlamaIndex 构建单智能体 AI 系统。

LlamaIndex 将构建智能代理作为其框架的核心功能之一。

LlamaIndex 的 FunctionAgent 作为控制器,通过大语言模型解析用户查询,调用合适的工具,并返回智能化响应。

导入所需库

1from llama_index.llms.groq import Groq 2from llama_index.core.agent.workflow import FunctionAgent 3from llama_index.core.tools import FunctionTool 4import random

初始化大语言模型(LLM)

1llm = Groq(model="llama3-70b-8192", api_key="{{GROQ_API_KEY}}")

定义查询订单状态的函数

1def get_order_status(order_id: str) -> str: 2 status = random.choice(["已发货", "运输中", "已送达", "处理中"]) 3 return f"订单 {order_id} 当前状态为 {status}。"

定义处理退货请求的函数

1def process_return(item_id: str) -> str: 2 return f"商品 {item_id} 的退货请求已发起。"

定义产品搜索函数

1def search_products(category: str, max_price: float) -> str: 2 sample_products = { 3 "laptop": ["Laptop A - $900", "Laptop B - $850", "Laptop C - $999"], 4 "phone": ["Phone X - $700", "Phone Y - $650", "Phone Z - $800"], 5 } 6 products = sample_products.get(category.lower(), []) 7 filtered_products = [p for p in products if float(p.split("$")[-1]) <= max_price] 8 return f"找到的产品:{', '.join(filtered_products)}" if filtered_products else "未找到符合条件的产品。"

将函数转换为 FunctionTool 工具

1order_status_tool = FunctionTool.from_defaults(fn=get_order_status) 2return_tool = FunctionTool.from_defaults(fn=process_return) 3search_tool = FunctionTool.from_defaults(fn=search_products)

创建 FunctionAgent

1agent = FunctionAgent( 2 name="CustomerSupportAgent", 3 description="用于处理客户支持查询的AI助手。", 4 system_prompt="你是一个乐于助人的助手,能够查询订单状态、处理退货请求以及搜索产品。在搜索时,请从用户问题中提取产品类别和价格信息,并调用相应工具。", 5 llm=llm, 6 tools=[order_status_tool, return_tool, search_tool], 7)

定义用户查询语句

1queries = [ 2 "我的订单在哪?订单号:12345", 3 "我能退货吗?商品编号:ABC987", 4 "帮我找一台1000美元以下的笔记本电脑。" 5]

异步运行代理

1import asyncio 2 3async def run_agent(): 4 for query in queries: 5 response = await agent.run(user_msg=query) 6 print(f"用户:{query}\n代理:{response}\n") 7 8# 执行异步函数 9asyncio.run(run_agent())
1from llama_index.core.agent.workflow import FunctionAgent 2from llama_index.core.tools import FunctionTool 3from llama_index.llms.groq import Groq 4import random 5import asyncio 6 7# 初始化大语言模型 8llm = Groq(model="llama3-70b-8192", api_key="{{GROQ_API_KEY}}") 9# 查询订单状态的工具 10def get_order_status(order_id: str) -> str: 11 status = random.choice(["已发货", "运输中", "已送达", "处理中"]) 12 return f"订单 {order_id} 当前状态为 {status}。" 13 14# 处理退货的工具 15def process_return(item_id: str) -> str: 16 return f"商品 {item_id} 的退货请求已发起。" 17 18# 搜索产品的工具 19def search_products(category: str, max_price: float) -> str: 20 sample_products = { 21 "laptop": ["Laptop A - $900", "Laptop B - $850", "Laptop C - $999"], 22 "phone": ["Phone X - $700", "Phone Y - $650", "Phone Z - $800"], 23 } 24 products = sample_products.get(category.lower(), []) 25 filtered_products = [p for p in products if float(p.split("$")[-1]) <= max_price] 26 return f"找到的产品:{', '.join(filtered_products)}" if filtered_products else "未找到符合条件的产品。" 27 28# 定义工具 29order_status_tool = FunctionTool.from_defaults(fn=get_order_status) 30return_tool = FunctionTool.from_defaults(fn=process_return) 31search_tool = FunctionTool.from_defaults(fn=search_products) 32# 创建包含多个工具的代理 33agent = FunctionAgent( 34 name="CustomerSupportAgent", 35 description="用于处理客户支持查询的AI助手。", 36 system_prompt="你是一个乐于助人的助手,能够查询订单状态、处理退货请求以及搜索产品。在搜索时,请从用户问题中提取产品类别和价格信息,并调用相应工具。", 37 llm=llm, 38 tools=[order_status_tool, return_tool, search_tool], 39 ) 40 41async def run_agent(): 42 for query in queries: 43 response = await agent.run(user_msg=query) 44 print(f"用户:{query}\n代理:{response}\n") 45 46# 示例查询 47queries = [ 48 "我的订单在哪?订单号:12345", 49 "我能退货吗?商品编号:ABC987", 50 "找一台1000美元以下的笔记本电脑。" 51] 52# 运行异步函数 53asyncio.run(run_agent())

示例输出

从大语言模型中提取结构化输出

在LlamaIndex中构建AI智能体:多智能体系统