> ## Documentation Index
> Fetch the complete documentation index at: https://ikun.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 拥有知识的代理

本示例展示了如何创建一个 AI 烹饪助手，它结合了来自精选食谱数据库的知识和网络搜索功能。该代理使用真实的泰国食谱的 PDF 知识库，并在需要时可以用网络搜索来补充这些信息。

可尝试的示例提示：

* "如何制作正宗的泰式炒河粉？"
* "红咖喱和绿咖喱有什么区别？"
* "你能解释一下南姜是什么，以及可能的替代品吗？"
* "讲讲冬阴功汤的历史"
* "制作泰国罗勒鸡（Pad Kra Pao）需要哪些必备食材？"
* "制作泰式香料酱的必备食材有哪些？"

## 代码

```python agent_with_knowledge.py theme={null}
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)
```

## 用法

<Steps>
  <Snippet file="create-venv-step.mdx" />

  <Step title="安装库">
    ```bash theme={null}
    pip install openai lancedb tantivy pypdf duckduckgo-search agno
    ```
  </Step>

  <Step title="运行代理">
    ```bash theme={null}
    python agent_with_knowledge.py
    ```
  </Step>
</Steps>
