GraphQL
GraphQL is a query language for APIs and a runtime for executing those queries against your data.
GraphQLprovides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.
通过在提供给 Agent 的工具列表中包含一个 BaseGraphQLTool,您可以赋予您的 Agent 根据任何需求从 GraphQL API 查询数据的能力。
本 Jupyter Notebook 演示了如何将 GraphQLAPIWrapper 组件与 Agent 一起使用。
在本示例中,我们将使用以下端点提供的公共 Star Wars GraphQL API:https://swapi-graphql.netlify.app/graphql。
首先,您需要安装 httpx 和 gql 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.
现在,让我们使用指定的 Star Wars 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)
API 参考:create_react_agent
现在,我们可以使用 Agent 对 Star Wars GraphQL API 运行查询。让我们要求 Agent 列出所有 Star Wars 电影及其上映日期。
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()
================================[1m Human Message [0m=================================
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
}
}
}
}
}
==================================[1m Ai Message [0m==================================
Tool Calls:
query_graphql (call_tN5A0dBbfOMewuw8Yy13bYpW)
Call ID: call_tN5A0dBbfOMewuw8Yy13bYpW
Args:
tool_input: query { allFilms { films { title } } }
=================================[1m Tool Message [0m=================================
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}"
==================================[1m Ai Message [0m==================================
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!