跳到主要內容
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
API 參考文件:NutritionAI | 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?"
}
)

結論

結束了!在這個快速入門中,我們介紹了如何建立一個簡單的代理程式,能夠將食物營養資訊納入其答案中。代理程式是一個複雜的主題,還有很多東西要學習!


此頁面是否對您有幫助?