Подготовка окружения
# Терминал (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).
Задание
- Часть А — проектирование (ДЗ из лекции). Предложите идею простого агента для задачи из веб-разработки или повседневной жизни. Опишите цель, инструменты и как он работает (шаги). Оформите в
agent_idea.md. - Часть Б — практика. Соберите рабочего агента с памятью: инструмент поиска (Tavily) + один свой инструмент (функция). Проверьте, что агент: (1) помнит факт из первого сообщения; (2) вызывает ваш инструмент на подходящий вопрос.
- Прикрепите скриншот вывода (видны шаги
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): точка останова в вашей функции-инструменте — убедитесь, что агент её вызывает.
Связь с разделами
- Компоненты и ReAct — 📖 Теория
- Сборка и инструменты — 🔖 Справочник / 💻 Примеры
- Современный стек и подводные камни — ⚖️ Старый vs Новый / 🐛 Ошибки