概要
随着人工智能技术的发展,特别是在自然语言处理领域,OpenAI推出了一种新的API——函数智能体(Functions Agent),它允许模型智能地选择何时调用外部函数,并传递正确的参数。这种技术相比传统的文本补全或聊天API,在返回有效和有用的函数调用方面更为可靠。本文将详细介绍如何使用OpenAI函数智能体,并通过一个具体的例子来演示其实现过程。
实现步骤
安装必要的库
首先,确保安装了openai和tavily-python库,因为LangChain软件包会在内部调用它们。
pip install openai tavily-python
初始化模型
接着,初始化您的模型实例,并指定API密钥和API基础URL。
from langchain_openai import ChatOpenAI
openai_api_key = "EMPTY" # 用实际的API密钥替换
openai_api_base = "http://127.0.0.1:1234/v1"
model = ChatOpenAI(
openai_api_key=openai_api_key,
openai_api_base=openai_api_base,
temperature=0.3,
)
创建工具
定义一个工具类,例如Weather,它包含获取天气数据的功能。
from langchain.tools import BaseTool
import requests
from typing import Any
class Weather(BaseTool):
name = "weather"
description = "根据城市获取天气数据"
def __init__(self):
super().__init__()
def get_weather(self, location):
api_key = "SKcA5FGgmLvN7faJi" # 用实际的API密钥替换
url = f"https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={location}&language=zh-Hans&unit=c"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
weather = {
'description': data['results'][0]["now"]["text"],
'temperature': data['results'][0]["now"]["temperature"]
}
return weather
else:
raise Exception(f"失败接收天气信息:{response.status_code}")
def _run(self, para):
return self.get_weather(para)
创建工具实例
创建一个Weather工具实例,并使用它来获取天气数据。
weather_tool = Weather()
print(weather_tool.run({"para": "广州"}))
创建OpenAI Functions Agent
使用LangChain提供的工具和模型来创建一个OpenAI Functions Agent。
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain import hub
# 获取要使用的提示模板
prompt = hub.pull("hwchase17/openai-functions-agent")
# 创建工具列表
tools = [weather_tool]
# 构建OpenAI Functions Agent
agent = create_openai_functions_agent(model, tools, prompt)
调用代理执行器
最后,通过调用invoke方法来测试代理执行器的功能。
result = agent_executor.invoke({"input": "今天广州的天气"})
print(result)
示例输出
当您询问今天的天气时,代理执行器将调用天气工具,并返回结果:
{
"input": "今天广州的天气",
"output": "很抱歉,我无法实时查询最新的天气信息。请访问可靠的天气网站或使用气象应用程序来获取最新、最准确的天气预报。"
}
小结
通过本文,我们了解了如何使用OpenAI函数智能体来创建一个能够根据输入动态调用函数的智能代理。这个过程不仅增强了代理的功能性,还提高了其智能水平。希望这篇博客能够帮助你更好地理解和应用OpenAI函数智能体,以提升你的项目的智能化程度。