Skip to main content
Open In ColabOpen on GitHub

GraphQL

GraphQL 是一种用于API的查询语言,并且是一种在您的数据上执行这些查询的运行时。GraphQL 提供了对您 API 中的数据完整且易于理解的描述,赋予客户端权力以获取他们确切所需且不多于所要的数据,使得随着时间的推移更容易演进 API,并启用强大的开发者工具。

通过在提供给代理的工具列表中包含一个BaseGraphQLTool,您可以授予您的代理查询GraphQL API数据以满足您任何需求的能力。

此 Jupyter 笔记本演示了如何使用 GraphQLAPIWrapper 组件与智能体一起工作。

在本例中,我们将使用以下端点处的公共Star Wars GraphQL API: https://swapi-graphql.netlify.app/graphql

首先,您需要安装 httpxgql Python 软件包。

pip install httpx gql > /dev/null
Note: you may need to restart the kernel to use updated packages.
%pip install --upgrade --quiet  langchain-community
Note: you may need to restart the kernel to use updated packages.

现在,让我们使用指定的星球大战API端点创建一个BaseGraphQLTool实例,并初始化一个Agent。

import os

os.environ["OPENAI_API_KEY"] = ""
from langchain.agents import load_tools

tools = load_tools(
["graphql"],
graphql_endpoint="https://swapi-graphql.netlify.app/graphql",
)
API 参考:load_tools
from langgraph.prebuilt import create_react_agent

agent = create_react_agent("openai:gpt-4.1-mini", tools)

现在,我们可以使用代理来运行查询以访问星球大战GraphQL API。让我们让代理列出所有的星球大战电影及其上映日期。

graphql_fields = """allFilms {
films {
title
director
releaseDate
speciesConnection {
species {
name
classification
homeworld {
name
}
}
}
}
}

"""

suffix = "Search for the titles of all the stawars films stored in the graphql database that has this schema "

input_message = {
"role": "user",
"content": suffix + graphql_fields,
}

for step in agent.stream(
{"messages": [input_message]},
stream_mode="values",
):
step["messages"][-1].pretty_print()
================================ Human Message =================================

Search for the titles of all the stawars films stored in the graphql database that has this schema allFilms {
films {
title
director
releaseDate
speciesConnection {
species {
name
classification
homeworld {
name
}
}
}
}
}


================================== Ai Message ==================================
Tool Calls:
query_graphql (call_tN5A0dBbfOMewuw8Yy13bYpW)
Call ID: call_tN5A0dBbfOMewuw8Yy13bYpW
Args:
tool_input: query { allFilms { films { title } } }
================================= Tool Message =================================
Name: query_graphql

"{\n \"allFilms\": {\n \"films\": [\n {\n \"title\": \"A New Hope\"\n },\n {\n \"title\": \"The Empire Strikes Back\"\n },\n {\n \"title\": \"Return of the Jedi\"\n },\n {\n \"title\": \"The Phantom Menace\"\n },\n {\n \"title\": \"Attack of the Clones\"\n },\n {\n \"title\": \"Revenge of the Sith\"\n }\n ]\n }\n}"
================================== Ai Message ==================================

The titles of all the Star Wars films stored in the database are:
1. A New Hope
2. The Empire Strikes Back
3. Return of the Jedi
4. The Phantom Menace
5. Attack of the Clones
6. Revenge of the Sith

If you would like more information about any of these films, please let me know!