技术背景介绍
在现代软件开发中,API的使用变得越来越普遍。而通过OpenAPI/Swagger规范,我们能更好地对API进行文档化、测试和甚至自动化交互。在AI和大规模语言模型(LLMs)结合的背景下,OpenAPI代理可以自动处理复杂的用户请求,通过自动调用多个API步骤来完成任务。
核心原理解析
本文将探讨如何通过一种分层规划的方式实现API代理。在这种方法中,"规划器"负责决定调用哪些API端点,而"控制器"负责具体的调用细节。这种方法有助于在处理大规模API规范时,保持代理行为的一致性,并为用户查询提供多步骤的解决方案。
代码实现演示
以下是一个使用Spotify API进行分层规划的示例。我们首先需要收集和简化Spotify API的OpenAPI规范:
import os
import yaml
import spotipy.util as util
from langchain.requests import RequestsWrapper
from langchain_community.agent_toolkits.openapi.spec import reduce_openapi_spec
# 下载并加载OpenAPI规范
!wget https://raw.githubusercontent.com/APIs-guru/openapi-directory/main/APIs/spotify.com/1.0.0/openapi.yaml -O spotify_openapi.yaml
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)
# 设置Spotify API认证
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)
# 创建OpenAPI agent
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 = "make me a playlist with the first song from kind of blue. call it machine blues."
spotify_agent.invoke(user_query)
应用场景分析
这种分层规划代理特别适用于需要多个API协调工作以实现复杂任务的场景。例如,通过自动生成播放列表、分析音乐偏好、甚至是跨平台的信息综合,开发者可以实现无缝的用户体验。
实践建议
- 安全性:在设置
allow_dangerous_requests=True
时一定要确保API安全,以防止不必要的请求。 - 性能优化:考虑到调用链的长短,尽量对API调用进行优化,以节省模型的Token。
- 测试:在大规模应用之前,需对API代理的每个关键步骤进行严谨测试,防止意外错误。
如果遇到问题欢迎在评论区交流。
—END—