引言
在现代应用程序开发中,API(应用程序编程接口)扮演着至关重要的角色。OpenAPI(前身为Swagger)规范提供了一种标准化的方式来描述RESTful API。尽管API为开发者提供了强大的功能接口,但利用这些API来解决复杂问题并非易事。在这篇文章中,我们将探讨如何使用OpenAPI规范构建智能代理,利用分层规划策略实现复杂的API调用。
主要内容
分层规划代理
我们将使用一种称为分层规划的策略。这种策略在机器人技术中很常见,并且最近在大语言模型(LLMs)与机器人技术的结合中也有所应用。分层规划的核心思想是将任务分解为多个步骤,以形成连贯的代理行为并节省资源。
代理设计
- 计划器(Planner):负责选择需要调用的API端点。
- 控制器(Controller):负责如何调用这些API端点。
收集OpenAPI规范数据
我们可以从以下存储库中下载OpenAPI规范:APIs-guru/openapi-directory
import os
import yaml
!wget https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml -O openai_openapi.yaml
# 下载一些示例API规范
!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
减少API规范
使用reduce_openapi_spec方法,可以将复杂的API规范简化。
from langchain_community.agent_toolkits.openapi.spec import reduce_openapi_spec
with open("openai_openapi.yaml") as f:
raw_openai_api_spec = yaml.load(f, Loader=yaml.Loader)
openai_api_spec = reduce_openapi_spec(raw_openai_api_spec)
代码示例
以下是使用Spotify API的示例代码,通过分层规划代理实现创建播放列表:
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) # 使用API代理服务提高访问稳定性
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,
)
user_query = (
"create a playlist with the first song from 'Kind of Blue' and name it 'Machine Blues'."
)
spotify_agent.invoke(user_query)
常见问题和解决方案
网络限制
由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。
安全性
启用allow_dangerous_requests=True可能导致不安全的请求调用。在使用时要确保API规范的安全性。
总结和进一步学习资源
本文讨论了如何构建一个能够消费任意OpenAPI的智能代理。利用分层规划策略来应对复杂任务,可以让代理更高效地工作。要深入了解,可以参考以下资源:
参考资料
- OpenAPI Specification
- Langchain Documentation
- Spotify API
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---