AI 智能体就是可以根据当前环境进行推理,并根据处理结果进行下一步的操作。简单来说 AI 智能体可以与外界环境进行交互,并根据结果执行更复杂的操作。本文将通过llamaIndex 实现一个简单的 Agent 实时获取数据,由于大模型是通过静态数据进行训练的,没有实时获取数据的能力,只能通过 FunctionCall 调用外部 API 获取数据并进行处理。
在 llamaIndex 框架中对 FunctionCall 进行了抽象和包装,开发者只需要调用对应的 API 进行模型设置以及 FunctionTool 设置。本例中,模型采用 Ollama Qwen2:7B,通过 API 获取天气,获取摄氏度之后再转为华氏度。运行本例,需要在本地安装 Ollama 并下载 Qwen2:7B 模型。
import json
from typing import Sequence, List
from llama_index.core.llms import ChatMessage
from llama_index.core.tools import BaseTool, FunctionTool
from llama_index.core.agent import ReActAgent
from llama_index.llms.ollama import Ollama
from llama_index.core import Settings
import nest_asyncio
import requests
nest_asyncio.apply()
llm = Ollama(model="qwen2:7b", request_timeout=120.0)
Settings.llm = llm
def celsius_to_fahrenheit(celsius):
'''将摄氏度装维华氏度,输入摄氏度返回华氏度'''
return (celsius * 9/5) + 32
def get_weather(city):
"""获取某城市的天气并返回摄氏度"""
latitude = 39.9042
longitude = 116.4074
url = "https://api.open-meteo.com/v1/forecast"
params = {
"latitude": latitude,
"longitude": longitude,
"current_weather": True
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
current_temperature = data["current_weather"]["temperature"]
return current_temperature
else:
return None
weather_tool = FunctionTool.from_defaults(fn=get_weather)
celsius_to_fahrenheit_tool = FunctionTool.from_defaults(fn=celsius_to_fahrenheit)
agent = ReActAgent.from_tools(
[celsius_to_fahrenheit_tool, weather_tool],
llm=llm,
verbose=True,
)
response = agent.chat(" 通过 api 获取北京天气,华氏度和摄氏度? 请列出详细步骤 ")
截图中是运行结果,可以看到 Agent 推理的详细步骤。
总结
llamaIndex 进行 Agent 开发非常简单,几行代码就可以接入完成,上面的这个例子相对简单,在项目的业务场景中,需要提供更复杂的 API,为了减少幻觉,还需要与 RAG 进行结合,从而达到更好的结果。