🏠 Домашнее задание

← К оглавлению урока

⚡ Что сдать

  • Из лекции: идея агента — цель, инструменты, как работает
  • Практика: рабочий агент с поиском и своим инструментом + скриншот

Подготовка окружения

# Терминал (Windows PowerShell)
python -m venv venv
venv\Scripts\Activate.ps1
pip install langgraph langchain-google-genai langchain-community python-dotenv
pip freeze > requirements.txt

Ключи в .env: GEMINI_API_KEY (из Google AI Studio) и TAVILY_API_KEY (из tavily.com).

Задание

  1. Часть А — проектирование (ДЗ из лекции). Предложите идею простого агента для задачи из веб-разработки или повседневной жизни. Опишите цель, инструменты и как он работает (шаги). Оформите в agent_idea.md.
  2. Часть Б — практика. Соберите рабочего агента с памятью: инструмент поиска (Tavily) + один свой инструмент (функция). Проверьте, что агент: (1) помнит факт из первого сообщения; (2) вызывает ваш инструмент на подходящий вопрос.
  3. Прикрепите скриншот вывода (видны шаги stream и финальные ответы).

Структура проекта

ai-lesson-06/
├── .env             # GEMINI_API_KEY=... TAVILY_API_KEY=... (в .gitignore!)
├── .gitignore       # .env, venv/
├── agent.py         # часть Б: агент с поиском и своим инструментом
├── agent_idea.md    # часть А: описание идеи агента
└── requirements.txt

Каркас решения (часть Б)

# agent.py
import os
from datetime import datetime
from dotenv import load_dotenv
from langchain_core.tools import Tool
from langchain_core.messages import HumanMessage
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent

load_dotenv()
os.environ["GOOGLE_API_KEY"] = os.getenv("GEMINI_API_KEY")
os.environ["TAVILY_API_KEY"] = os.getenv("TAVILY_API_KEY")

llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash")
search = TavilySearchResults(max_results=2)

def my_tool(*args, **kwargs):
    return datetime.now().isoformat()      # замените на свою логику

date_tool = Tool(name="Datetime", func=my_tool,
                 description="Returns current datetime in ISO format.")

agent = create_react_agent(llm, [search, date_tool],
                           checkpointer=MemorySaver())
config = {"configurable": {"thread_id": "hw6"}}

for q in ["hi im bob from berlin", "whats the date today?",
          "whats the weather where I live?"]:
    for step in agent.stream({"messages": [HumanMessage(content=q)]},
                             config, stream_mode="values"):
        step["messages"][-1].pretty_print()

Проверка в VS Code

  • Терминал: python agent.py — в выводе видны рассуждения и вызовы инструментов.
  • Память: на вопрос «где я живу» агент должен вспомнить Берлин из первого сообщения.
  • Свой инструмент: на вопрос про дату должен вызваться Datetime, а не поиск.
  • Отладка (F5): точка останова в вашей функции-инструменте — убедитесь, что агент её вызывает.

Связь с разделами