Руководство по созданию асинхронного помощника по билетам на основе ИИ
В этом руководстве мы создадим помощника по билетам, использующего ИИ, с помощью библиотеки PydanticAI. Мы определим правила данных с помощью моделей Pydantic v2, сохраним билеты в базе данных SQLite и сгенерируем уникальные идентификаторы с помощью модуля uuid. Два агента, один для создания билетов и один для проверки статуса, будут использовать Google Gemini для интерпретации ваших запросов на естественном языке и вызова функций нашей базы данных.
Установка необходимых библиотек
Сначала обновите ваш pip и установите PydanticAI:
!pip install --upgrade pip !pip install pydantic-ai
Настройка API ключа
Проверьте, установлен ли переменная окружения GEMINI_API_KEY. Если нет, введите ваш ключ API Google Gemini:
if "GEMINI_API_KEY" not in os.environ:
os.environ["GEMINI_API_KEY"] = getpass("Введите ваш ключ API Google Gemini: ")
Установка дополнительных пакетов
Установите пакет nest_asyncio, который позволяет использовать асинхронные функции в средах, таких как Colab:
!pip install nest_asyncio
Создание базы данных
Настройте базу данных SQLite в памяти и определите таблицу для билетов:
conn = sqlite3.connect(":memory:")
conn.execute("""
CREATE TABLE tickets (
ticket_id TEXT PRIMARY KEY,
summary TEXT NOT NULL,
severity TEXT NOT NULL,
department TEXT NOT NULL,
status TEXT NOT NULL
)
""")
conn.commit()
Определение зависимостей и моделей
Создайте класс зависимостей для передачи соединения с базой данных и определите модели для вывода:
@dataclass
class TicketingDependencies:
db: sqlite3.Connection
class CreateTicketOutput(BaseModel):
ticket_id: str = Field(..., description="Уникальный идентификатор билета")
summary: str = Field(..., description="Краткое описание проблемы")
severity: Literal["low", "medium", "high"] = Field(..., description="Уровень срочности")
department: str = Field(..., description="Ответственный отдел")
status: Literal["open"] = Field("open", description="Начальный статус билета")
class TicketStatusOutput(BaseModel):
ticket_id: str = Field(..., description="Уникальный идентификатор билета")
status: Literal["open", "in_progress", "resolved"] = Field(..., description="Текущий статус билета")
Создание агента для создания билетов
Создайте агента, который будет регистрировать новые билеты:
create_agent = Agent(
"google-gla:gemini-2.0-flash",
deps_type=TicketingDependencies,
output_type=CreateTicketOutput,
system_prompt="Вы помощник по билетам. Используйте инструмент `create_ticket` для регистрации новых проблем."
)
@create_agent.async
def create_ticket(ctx: RunContext[TicketingDependencies], summary: str, severity: Literal["low", "medium", "high"], department: str) -> CreateTicketOutput:
tid = str(uuid.uuid4())
ctx.deps.db.execute("INSERT INTO tickets VALUES (?,?,?,?,?)", (tid, summary, severity, department, "open"))
ctx.deps.db.commit()
return CreateTicketOutput(ticket_id=tid, summary=summary, severity=severity, department=department, status="open")
Создание агента для проверки статуса билетов
Создайте агента, который будет проверять статус билетов:
status_agent = Agent(
"google-gla:gemini-2.0-flash",
deps_type=TicketingDependencies,
output_type=TicketStatusOutput,
system_prompt="Вы помощник по билетам. Используйте инструмент `get_ticket_status` для получения текущего статуса."
)
@status_agent.async
def get_ticket_status(ctx: RunContext[TicketingDependencies], ticket_id: str) -> TicketStatusOutput:
cur = ctx.deps.db.execute("SELECT status FROM tickets WHERE ticket_id = ?", (ticket_id,))
row = cur.fetchone()
if not row:
raise ValueError(f"Билет с ID {ticket_id!r} не найден!")
return TicketStatusOutput(ticket_id=ticket_id, status=row[0])
Использование агентов
Создайте новый билет и проверьте его статус:
deps = TicketingDependencies(db=conn)
create_result = await create_agent("Мой принтер на 3-м этаже показывает ошибку зажима бумаги.", deps=deps)
print("Созданный билет →", create_result.json(indent=2))
status_result = await status_agent(f"Какой статус у билета {create_result.ticket_id}? ", deps=deps)
print("Статус билета →", status_result.json(indent=2))
Заключение
Вы узнали, как использовать Agentic AI и PydanticAI для автоматизации процесса обслуживания, от регистрации новой проблемы до получения ее текущего статуса. Использование Pydantic v2 обеспечивает соответствие каждой записи определенной схеме, а SQLite предоставляет легкий бэкенд, который легко заменить на любую другую базу данных.

Практические рекомендации
- Ищите процессы, которые можно автоматизировать, и моменты взаимодействия с клиентами, где ИИ может добавить наибольшую ценность.
- Определите важные ключевые показатели эффективности (KPI), чтобы убедиться, что ваши инвестиции в ИИ приносят положительный результат.
- Выбирайте инструменты, которые соответствуют вашим потребностям и позволяют настраивать их под ваши цели.
- Начните с небольшого проекта, собирайте данные о его эффективности и постепенно расширяйте использование ИИ в вашей работе.
Если вам нужна помощь в управлении ИИ в бизнесе, свяжитесь с нами по адресу hello@itinai.ru. Чтобы быть в курсе последних новостей ИИ, подписывайтесь на наш Telegram.
Посмотрите практический пример решения на основе ИИ: продажный бот, предназначенный для автоматизации взаимодействия с клиентами круглосуточно и управления взаимодействиями на всех этапах клиентского пути.


















