跳到主要内容
Open In ColabOpen on GitHub

Passio NutritionAI

为了更好地理解 NutritionAI 如何为您的代理提供超级食物营养能力,让我们构建一个可以通过 Passio NutritionAI 查找该信息的代理。

定义工具

我们首先需要创建Passio NutritionAI 工具

Passio Nutrition AI

LangChain 中有一个内置工具,可以轻松使用 Passio NutritionAI 来查找食物营养事实。请注意,这需要一个 API 密钥——他们提供免费套餐。

创建 API 密钥后,您需要将其导出为

export NUTRITIONAI_SUBSCRIPTION_KEY="..."

... 或者通过其他方式(例如 dotenv 包)将其提供给您的 Python 环境。您也可以通过构造函数调用显式控制密钥。

from dotenv import load_dotenv
from langchain_core.utils import get_from_env

load_dotenv()

nutritionai_subscription_key = get_from_env(
"nutritionai_subscription_key", "NUTRITIONAI_SUBSCRIPTION_KEY"
)
API 参考:get_from_env
from langchain_community.tools.passio_nutrition_ai import NutritionAI
from langchain_community.utilities.passio_nutrition_ai import NutritionAIAPI
nutritionai_search = NutritionAI(api_wrapper=NutritionAIAPI())
nutritionai_search.invoke("chicken tikka masala")
nutritionai_search.invoke("Schnuck Markets sliced pepper jack cheese")

工具

现在我们有了这个工具,我们可以创建一个将在下游使用的工具列表。

tools = [nutritionai_search]

创建智能体

定义好工具后,我们就可以创建代理了。我们将使用 OpenAI Functions 代理——有关此类代理以及其他选项的更多信息,请参阅本指南

首先,我们选择想要指导代理的 LLM。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
API 参考:ChatOpenAI

接下来,我们选择要用于指导代理的提示。

from langchain import hub

# Get the prompt to use - you can modify this!
prompt = hub.pull("hwchase17/openai-functions-agent")
prompt.messages
API 参考:hub
[SystemMessagePromptTemplate(prompt=PromptTemplate(input_variables=[], template='You are a helpful assistant')),
MessagesPlaceholder(variable_name='chat_history', optional=True),
HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['input'], template='{input}')),
MessagesPlaceholder(variable_name='agent_scratchpad')]

现在,我们可以使用 LLM、提示和工具来初始化代理。代理负责接收输入并决定要采取的行动。至关重要的是,代理不执行这些行动——这由 AgentExecutor(下一步)完成。有关如何理解这些组件的更多信息,请参阅我们的概念指南

from langchain.agents import create_openai_functions_agent

agent = create_openai_functions_agent(llm, tools, prompt)

最后,我们将代理(大脑)与 AgentExecutor(它将重复调用代理并执行工具)中的工具结合起来。有关如何理解这些组件的更多信息,请参阅我们的概念指南

from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
API 参考:AgentExecutor

运行智能体

现在我们可以在一些查询上运行代理了!请注意,目前这些都是无状态查询(它不会记住之前的交互)。

agent_executor.invoke({"input": "hi!"})


> Entering new AgentExecutor chain...
Hello! How can I assist you today?

> Finished chain.
{'input': 'hi!', 'output': 'Hello! How can I assist you today?'}
agent_executor.invoke({"input": "how many calories are in a slice pepperoni pizza?"})

如果我们想自动跟踪这些消息,可以将其封装在 RunnableWithMessageHistory 中。有关如何使用它的更多信息,请参阅本指南

agent_executor.invoke(
{"input": "I had bacon and eggs for breakfast. How many calories is that?"}
)
agent_executor.invoke(
{
"input": "I had sliced pepper jack cheese for a snack. How much protein did I have?"
}
)
agent_executor.invoke(
{
"input": "I had sliced colby cheese for a snack. Give me calories for this Schnuck Markets product."
}
)
agent_executor.invoke(
{
"input": "I had chicken tikka masala for dinner. how much calories, protein, and fat did I have with default quantity?"
}
)

总结

大功告成!在这个快速入门中,我们介绍了如何创建一个简单的代理,它能够将食物营养信息整合到其答案中。代理是一个复杂的话题,还有很多东西需要学习!