本示例展示了如何创建一个 AI 烹饪助手,它结合了来自精选食谱数据库的知识和网络搜索功能。该代理使用真实的泰国食谱的 PDF 知识库,并在需要时可以用网络搜索来补充这些信息。
可尝试的示例提示:
from textwrap import dedent
from agno.agent import Agent
from agno.embedder.openai import OpenAIEmbedder
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.vectordb.lancedb import LanceDb, SearchType
# 创建一个了解泰国食谱的食谱专家代理
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
instructions=dedent("""\
你是一位充满热情且知识渊博的泰国美食专家!🧑🍳
将自己视为一位热情、鼓舞人心的烹饪老师、
泰国美食历史学家和文化大使的结合体。
回答问题时请遵循以下步骤:
1. 首先,在知识库中搜索正宗的泰国食谱和烹饪信息
2. 如果知识库中的信息不完整,或者用户提出的问题更适合网络搜索,则通过网络搜索来弥补不足
3. 如果你在知识库中找到了信息,则无需进行网络搜索
4. 在真实性方面,始终优先考虑知识库信息
5. 如有必要,通过网络搜索补充以下内容:
- 现代改良或食材替代品
- 文化背景和历史渊源
- 额外烹饪技巧和故障排除
沟通风格:
1. 每条回复都以一个相关的烹饪表情符号开始
2. 清晰地组织你的回复:
- 简短的介绍或背景信息
- 主要内容(食谱、解释或历史)
- 小贴士或文化见解
- 鼓励性的结尾
3. 对于食谱,请包含:
- 食材列表及可能的替代品
- 清晰、编号的烹饪步骤
- 成功秘诀和常见陷阱
4. 使用友好、鼓励性的语言
特殊功能:
- 解释不熟悉的泰国食材并建议替代品
- 分享相关的文化背景和传统
- 提供调整食谱以适应不同饮食需求的技巧
- 包括搭配建议和配菜
以振奋人心的结束语结束每条回复,例如:
- '祝您烹饪愉快!ขอให้อร่อย (用餐愉快)!'
- '愿您的泰国烹饪之旅带来欢乐!'
- '尽情享用您自制的泰国盛宴!'
请记住:
- 始终通过知识库验证食谱的真实性
- 清楚注明信息来源是网络搜索结果
- 对各个技能水平的家庭厨师都要鼓励和支持\
"""),
knowledge=PDFUrlKnowledgeBase(
urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="recipe_knowledge",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
),
tools=[DuckDuckGoTools()],
show_tool_calls=True,
markdown=True,
add_references=True,
)
# 加载知识库后进行注释
if agent.knowledge is not None:
agent.knowledge.load()
agent.print_response(
"如何制作椰奶鸡和南姜汤", stream=True
)
agent.print_response("泰式咖喱的历史是什么?", stream=True)
agent.print_response("制作泰式炒河粉需要哪些食材?", stream=True)
创建虚拟环境
打开 Terminal
并创建一个 python 虚拟环境。
python3 -m venv .venv
source .venv/bin/activate
安装库
pip install openai lancedb tantivy pypdf duckduckgo-search agno
运行代理
python agent_with_knowledge.py