Source code for langchain_community.agent_toolkits.openapi.toolkit
"""请求工具包。"""
from __future__ import annotations
from typing import Any, List
from langchain_core.language_models import BaseLanguageModel
from langchain_core.tools import BaseToolkit, Tool
from langchain_community.agent_toolkits.json.base import create_json_agent
from langchain_community.agent_toolkits.json.toolkit import JsonToolkit
from langchain_community.agent_toolkits.openapi.prompt import DESCRIPTION
from langchain_community.tools import BaseTool
from langchain_community.tools.json.tool import JsonSpec
from langchain_community.tools.requests.tool import (
RequestsDeleteTool,
RequestsGetTool,
RequestsPatchTool,
RequestsPostTool,
RequestsPutTool,
)
from langchain_community.utilities.requests import TextRequestsWrapper
[docs]class RequestsToolkit(BaseToolkit):
"""用于发起REST请求的工具包。
*安全提示*:此工具包包含用于向API发起GET、POST、PATCH、PUT和DELETE请求的工具。
在允许谁使用此工具包时要小心。如果向最终用户公开,请考虑用户将能够代表托管代码的服务器发起任意请求。例如,用户可以要求服务器发起对仅从服务器可访问的私有API的请求。
控制谁可以使用此工具包提交问题请求以及它具有什么网络访问权限。
有关更多信息,请参阅https://python.langchain.com/docs/security。"""
requests_wrapper: TextRequestsWrapper
allow_dangerous_requests: bool = False
"""允许危险请求。请查看文档以获取详细信息。"""
[docs] def get_tools(self) -> List[BaseTool]:
"""返回一个工具列表。"""
return [
RequestsGetTool(
requests_wrapper=self.requests_wrapper,
allow_dangerous_requests=self.allow_dangerous_requests,
),
RequestsPostTool(
requests_wrapper=self.requests_wrapper,
allow_dangerous_requests=self.allow_dangerous_requests,
),
RequestsPatchTool(
requests_wrapper=self.requests_wrapper,
allow_dangerous_requests=self.allow_dangerous_requests,
),
RequestsPutTool(
requests_wrapper=self.requests_wrapper,
allow_dangerous_requests=self.allow_dangerous_requests,
),
RequestsDeleteTool(
requests_wrapper=self.requests_wrapper,
allow_dangerous_requests=self.allow_dangerous_requests,
),
]
[docs]class OpenAPIToolkit(BaseToolkit):
"""与OpenAPI API进行交互的工具包。
*安全提示*:此工具包包含可以读取和修改服务状态的工具,例如通过创建、删除或更新、读取底层数据。
例如,此工具包可用于删除通过符合OpenAPI标准的API公开的数据。"""
json_agent: Any
requests_wrapper: TextRequestsWrapper
allow_dangerous_requests: bool = False
"""允许危险请求。请查看文档以获取详细信息。"""
[docs] def get_tools(self) -> List[BaseTool]:
"""获取工具包中的工具。"""
json_agent_tool = Tool(
name="json_explorer",
func=self.json_agent.run,
description=DESCRIPTION,
)
request_toolkit = RequestsToolkit(
requests_wrapper=self.requests_wrapper,
allow_dangerous_requests=self.allow_dangerous_requests,
)
return [*request_toolkit.get_tools(), json_agent_tool]
[docs] @classmethod
def from_llm(
cls,
llm: BaseLanguageModel,
json_spec: JsonSpec,
requests_wrapper: TextRequestsWrapper,
allow_dangerous_requests: bool = False,
**kwargs: Any,
) -> OpenAPIToolkit:
"""从llm创建json代理,然后初始化。"""
json_agent = create_json_agent(llm, JsonToolkit(spec=json_spec), **kwargs)
return cls(
json_agent=json_agent,
requests_wrapper=requests_wrapper,
allow_dangerous_requests=allow_dangerous_requests,
)