以编程方式使用文档

这将帮助您开始使用 OpenApiToolkit OpenAPI 工具包. OpenApiToolkit 现在位于 @langchain/classic。有关迁移详情,请参阅 LangChain v1 迁移指南.

OpenAPIToolkit 可以访问以下工具:

名称描述
requests_get通往互联网的门户。当您需要从网站获取特定内容时使用。输入应为 URL 字符串(即 "www.google.com")。输出将是 GET 请求的文本响应。
requests_post当您想向网站 POST 时使用。输入应该是包含两个键的 json 字符串:"url" 和 "data"。"url" 的值应该是字符串,"data" 的值应该是您想作为 JSON body POST 到 URL 的键值对字典。请注意,在 json 字符串中始终使用双引号。输出将是 POST 请求的文本响应。
json_explorerCan be used to answer questions about the openapi spec for the API. Always use this tool before trying to make a request. Example inputs to this tool: 'What are the required query parameters for a GET request to the /bar endpoint?' 'What are the required parameters in the request body for a POST request to the /foo endpoint?' Always give this tool a specific question.

设置

此工具包需要一个 OpenAPI 规范文件。LangChain.js 仓库在 目录中有一个 examples 目录。您可以使用此文件来测试工具包。

如果您想从单个工具的运行中获得自动追踪,您还可以通过取消下面的注释来设置您的 LangSmith API 密钥:

process.env.LANGSMITH_TRACING="true"
process.env.LANGSMITH_API_KEY="your-api-key"

安装

此工具包位于 langchain package:

npm install langchain @langchain/core
yarn add langchain @langchain/core
pnpm add langchain @langchain/core

实例化

现在我们可以实例化工具包。首先,我们需要定义我们想在工具包中使用的 LLM。

// @lc-docs-hide-cell

const llm = new ChatOpenAI({
  model: "gpt-5.4-mini",
  temperature: 0,
})
// Load & convert the OpenAPI spec from YAML to JSON.
const yamlFile = fs.readFileSync("../../../../../examples/openai_openapi.yaml", "utf8");
const data = yaml.load(yamlFile) as JsonObject;
if (!data) {
  throw new Error("Failed to load OpenAPI spec");
}

// Define headers for the API requests.
const headers = {
  "Content-Type": "application/json",
  Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
};

const toolkit = new OpenApiToolkit(new JsonSpec(data), llm, headers);

工具

查看可用工具:

const tools = toolkit.getTools();

console.log(tools.map((tool) => ({
  name: tool.name,
  description: tool.description,
})))
[
  {
    name: 'requests_get',
    description: 'A portal to the internet. Use this when you need to get specific content from a website.\n' +
      '  Input should be a url string (i.e. "https://www.google.com"). The output will be the text response of the GET request.'
  },
  {
    name: 'requests_post',
    description: 'Use this when you want to POST to a website.\n' +
      '  Input should be a json string with two keys: "url" and "data".\n' +
      '  The value of "url" should be a string, and the value of "data" should be a dictionary of\n' +
      '  key-value pairs you want to POST to the url as a JSON body.\n' +
      '  Be careful to always use double quotes for strings in the json string\n' +
      '  The output will be the text response of the POST request.'
  },
  {
    name: 'json_explorer',
    description: '\n' +
      'Can be used to answer questions about the openapi spec for the API. Always use this tool before trying to make a request. \n' +
      'Example inputs to this tool: \n' +
      "    'What are the required query parameters for a GET request to the /bar endpoint?'\n" +
      "    'What are the required parameters in the request body for a POST request to the /foo endpoint?'\n" +
      'Always give this tool a specific question.'
  }
]

在代理中使用

首先,确保您已安装 LangGraph:

npm install @langchain/langgraph
yarn add @langchain/langgraph
pnpm add @langchain/langgraph
const agentExecutor = createAgent({ llm, tools });
const exampleQuery = "Make a POST request to openai /chat/completions. The prompt should be 'tell me a joke.'. Ensure you use the model 'gpt-5.4-mini'."

const stream = await agentExecutor.streamEvents(
  { messages: [["user", exampleQuery]] },
  { version: "v3" },
);

for await (const snapshot of stream.values) {
  const lastMsg = snapshot.messages[snapshot.messages.length - 1];
  if (lastMsg.tool_calls?.length) {
    console.dir(lastMsg.tool_calls, { depth: null });
  } else if (lastMsg.content) {
    console.log(lastMsg.content);
  }
}
[
  {
    name: 'requests_post',
    args: {
      input: '{"url":"https://api.openai.com/v1/chat/completions","data":{"model":"gpt-5.4-mini","messages":[{"role":"user","content":"tell me a joke."}]}}'
    },
    type: 'tool_call',
    id: 'call_1HqyZrbYgKFwQRfAtsZA2uL5'
  }
]
{
  "id": "chatcmpl-9t36IIuRCs0WGMEy69HUqPcKvOc1w",
  "object": "chat.completion",
  "created": 1722906986,
  "model": "gpt-5.4-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Why don't skeletons fight each other? \n\nThey don't have the guts!"
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 15,
    "total_tokens": 27
  },
  "system_fingerprint": "fp_48196bc67a"
}

Here's a joke for you:

**Why don't skeletons fight each other?**
They don't have the guts!

API 参考

目前没有专用的 API 参考页面用于 OpenApiToolkit in @langchain/classic。有关实现详情,请参阅 OpenApiToolkit 源代码位于 langchainjs.