Skip to main content

GraphQL工具

This Jupyter Notebook演示了如何使用BaseGraphQLTool组件与Agent一起使用。

GraphQL是一种用于API的查询语言,也是执行这些查询的运行时。GraphQL提供了对API中数据的完整和可理解的描述,使客户端能够精确地获取所需的数据,使API的演化更加容易,并提供强大的开发者工具。

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

在此示例中,我们将使用公共的Star Wars GraphQL API,该API位于以下端点:https://swapi-graphql.netlify.app/.netlify/functions/index。

首先,您需要安装httpx和gql Python包。

pip install httpx gql > /dev/null

现在,让我们使用指定的Star Wars API端点创建一个BaseGraphQLTool实例,并使用该工具初始化一个Agent。

from langchain import OpenAI
from langchain.agents import load_tools, initialize_agent, AgentType
from langchain.utilities import GraphQLAPIWrapper

llm = OpenAI(temperature=0)

tools = load_tools(
["graphql"],
graphql_endpoint="https://swapi-graphql.netlify.app/.netlify/functions/index",
)

agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)

现在,我们可以使用Agent来对Star Wars GraphQL API运行查询。让我们要求Agent列出所有Star Wars电影及其发布日期。

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

"""

suffix = "在graphql数据库中搜索存储的所有星球大战电影的标题,该数据库具有此模式"


agent.run(suffix + graphql_fields)
    

> 进入新的AgentExecutor链...
我需要查询graphql数据库以获取所有星球大战电影的标题
动作:query_graphql
动作输入:query { allFilms { films { title } } }
观察结果:"{\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}"
思考:我现在知道了所有星球大战电影的标题
最终答案:所有星球大战电影的标题是:A New Hope, The Empire Strikes Back, Return of the Jedi, The Phantom Menace, Attack of the Clones和Revenge of the Sith。

> 完成链。





'所有星球大战电影的标题是:A New Hope, The Empire Strikes Back, Return of the Jedi, The Phantom Menace, Attack of the Clones和Revenge of the Sith。'