一、技术背景
大模型智能体(Agent)通过与外部工具的结合,可以突破纯文本处理的限制,实现更强大的功能交互。本教程将以天气查询为例,演示如何通过swarm框架实现智能体与OpenWeather API的对接。
OpenWeather注册及API key获取方法
为了能够调用OpenWeather服务,和OpenAI的API使用过程类似,我们首先需要先注册OpenWeather账号,并获取OpenWeather API Key。这里需要注意的是,对于大多数在线服务的API来说,都需要通过API key来进行身份验证,尽管OpenWeather相对更加Open,有非常多的免费使用的次数,但身份验证仍然是必要的防止API被滥用的有效手段。OpenWeather API key获取流程如下:
- Step 1.登录OpenWeather官网并点击Sign—>create account完成注册。该网站无需魔法即可直接登录,可以使用国内邮箱或者QQ邮箱均可进行注册,官网地址为:https://openweathermap.org/
- Step 2.获取API-key:注册完成后,即可在API keys页面查看当前账户的API key:
完成注册后,就会有一个已经激活的API-key。和OpenAI一样,OpenWeather的API key也创建多个。
二、实现步骤
步骤1:创建工具函数
def get_weather(loc):
"""
查询即时天气函数
:param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
:return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\
返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
"""
# Step 1.构建请求
url = "https://api.openweathermap.org/data/2.5/weather"
# Step 2.设置查询参数
params = {
"q": loc,
"appid": open_weather_key, # 输入API key
"units": "metric", # 使用摄氏度而不是华氏度
"lang": "zh_cn" # 输出语言为简体中文
}
# Step 3.发送GET请求
response = requests.get(url, params=params)
# Step 4.解析响应
data = response.json()
return json.dumps(data)
步骤2:构建智能体
agent = Agent(
name = "查询天气小助手",
instructions = "如果用户问的是有关天气问题,请调用查询天气函数,根据相应内容回答。其他情况请正常回答",
functions = [get_weather],
model = "deepseek-chat"
)
完整代码:
import os
from openai import OpenAI
from swarm import Swarm, Agent
from IPython.display import Markdown, display
import swarm
import requests
import json
client = OpenAI(api_key="your_api_key", base_url="https://api.deepseek.com")
open_weather_key = "your_api_key"
def get_weather(loc):
"""
查询即时天气函数
:param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
:return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\
返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
"""
# Step 1.构建请求
url = "https://api.openweathermap.org/data/2.5/weather"
# Step 2.设置查询参数
params = {
"q": loc,
"appid": open_weather_key, # 输入API key
"units": "metric", # 使用摄氏度而不是华氏度
"lang": "zh_cn" # 输出语言为简体中文
}
# Step 3.发送GET请求
response = requests.get(url, params=params)
# Step 4.解析响应
data = response.json()
return json.dumps(data)
swarm_client = Swarm(client)
question = input("您好,有什么问题您可以随时向我咨询")
agent = Agent(
name = "查询天气小助手",
instructions = "如果用户问的是有关天气问题,请调用查询天气函数,根据相应内容回答。其他情况请正常回答",
functions = [get_weather],
model = "deepseek-chat"
)
response = swarm_client.run(
agent = agent,
messages = [{"role":"user","content":question}]
)
print(response.messages)
三、原理解析
智能体通过分析用户输入的语义特征,结合instruction中的触发规则,决定是否调用注册函数。
functions=[get_weather, get_stock, get_news],
...
)
四、结语
通过本教程,您可以快速掌握智能体调用外部工具的核心方法。实际开发中可根据业务需求扩展更多工具类型,建议从简单场景入手逐步构建复杂的智能服务系统。