跳到主要内容
Open In ColabOpen on GitHub

Passio NutritionAI

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

定义工具

我们首先需要创建 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]

创建 Agent

现在我们已经定义了工具,我们可以创建 Agent。我们将使用 OpenAI Functions Agent - 有关此类 Agent 以及其他选项的更多信息,请参阅本指南

首先,我们选择要指导 Agent 的 LLM。

from langchain_openai import ChatOpenAI

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

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

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、提示和工具初始化 Agent。Agent 负责接收输入并决定要采取的操作。至关重要的是,Agent 不会执行这些操作 - 这由 AgentExecutor(下一步)完成。有关如何考虑这些组件的更多信息,请参阅我们的概念指南

from langchain.agents import create_openai_functions_agent

agent = create_openai_functions_agent(llm, tools, prompt)

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

from langchain.agents import AgentExecutor

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

运行 Agent

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

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?"
}
)

结论

结束了!在这个快速入门中,我们介绍了如何创建一个简单的 Agent,该 Agent 能够将食物营养信息融入到其答案中。Agent 是一个复杂的主题,有很多东西要学习!


此页面是否对您有帮助?