Deprecated: Creation of dynamic property Yoast\Presenters\CommonArticlePresenter::$metaPropertyType is deprecated in /var/www/html/web/app/themes/tutortop-blog/Yoast/Presenters/CommonArticlePresenter.php on line 26

Deprecated: Creation of dynamic property Yoast\Presenters\CommonArticlePresenter::$metaPropertyType is deprecated in /var/www/html/web/app/themes/tutortop-blog/Yoast/Presenters/CommonArticlePresenter.php on line 26
Как создать ИИ-агента: пошаговое руководство и практические примеры
  • Блог
  • /
  • Статьи
  • /
  • Как создать ИИ агента: полное руководство с практическими примерами и пошаговой инструкцией
18.07.2025
133
18.5 мин

Как создать ИИ агента: полное руководство с практическими примерами и пошаговой инструкцией

Что такое ИИ-агент и почему он необходим вашему бизнесу

ИИ-агент — это автономная программная система, способная воспринимать окружающую среду, принимать решения и выполнять действия для достижения определенных целей без постоянного человеческого контроля. В отличие от простых чат-ботов, которые работают по заранее запрограммированным сценариям, ИИ-агенты обладают способностью к обучению и адаптации.

Как отмечает Эндрю Нг, основатель Coursera и бывший директор по ИИ в Google: «ИИ-агенты представляют собой следующий этап эволюции искусственного интеллекта. Они не просто отвечают на вопросы — они решают проблемы, планируют действия и выполняют сложные многоэтапные задачи».

Рекомендуем перед началом разработки ознакомиться с лучшими платформами для обучения — вот полезная подборка курсов по нейронным сетям, которая поможет лучше понять архитектуру и возможности ИИ-агентов.

Типы ИИ-агентов по архитектуре

Существует несколько основных типов ИИ-агентов, каждый из которых подходит для определенных задач:

  • Реактивные агенты — реагируют на текущее состояние среды без учета истории. Подходят для простых задач автоматизации.
  • Агенты с внутренним состоянием — сохраняют информацию о предыдущих взаимодействиях, что позволяет им принимать более обоснованные решения.
  • Целенаправленные агенты — работают для достижения конкретных целей, планируя последовательность действий.
  • Утилитарные агенты — оптимизируют свои действия для максимизации определенной функции полезности.
  • Обучающиеся агенты — улучшают свою производительность на основе опыта и обратной связи.

Определение целей и вариантов использования ИИ-агента

Прежде чем приступить к техническим аспектам создания агента, необходимо четко определить, какие задачи он будет решать и какую ценность принесет вашему бизнесу. Согласно исследованию Deloitte, 68% проектов по внедрению ИИ терпят неудачу из-за неправильно поставленных целей и завышенных ожиданий.

Популярные сценарии использования ИИ-агентов

Клиентский сервис и поддержка: ИИ-агенты могут обрабатывать до 80% стандартных запросов клиентов, работая 24/7 и обеспечивая мгновенные ответы. Компания H&M внедрила ИИ-агента для онлайн-консультаций по стилю, что увеличило конверсию на 25%.

Продажи и лидогенерация: Агенты могут квалифицировать лиды, назначать встречи и даже проводить предварительные презентации. Страховая компания Lemonade использует ИИ-агента Jim для обработки страховых случаев — 30% заявок обрабатываются автоматически за 3 секунды.

HR и подбор персонала: Автоматизация скрининга резюме, проведения первичных собеседований и ответов на вопросы сотрудников. Unilever сократил время найма на 75% благодаря ИИ-агентам для первичного отбора кандидатов.

Финансовый анализ и консультирование: Агенты могут анализировать финансовые данные, давать рекомендации по инвестициям и помогать в планировании бюджета.

Выбор архитектуры и технологического стека

Выбор правильной архитектуры критически важен для успеха проекта. Современные ИИ-агенты строятся на основе больших языковых моделей (LLM), но требуют дополнительных компонентов для обеспечения надежности и функциональности.

КомпонентОткрытые решенияКоммерческие решенияСложность интеграцииСтоимость
Языковая модельLlama 2, Mistral, Phi-3GPT-4, Claude, GeminiСредняяНизкая/Высокая
Фреймворк агентовLangGraph, CrewAI, AutoGenMicrosoft Copilot StudioВысокаяНизкая/Средняя
Векторная БДChroma, FAISS, WeaviatePinecone, Azure AI SearchСредняяНизкая/Высокая
Инструменты интеграцииLangChain Tools, Custom APIsZapier, Microsoft Power PlatformВысокаяНизкая/Средняя
Интерфейс пользователяStreamlit, Gradio, ReactMicrosoft Teams, Slack AppsСредняяНизкая/Низкая

Рекомендации по выбору технологий

Для начинающих проектов рекомендуется комбинация OpenAI GPT-4 в качестве основной модели с фреймворком LangGraph для управления агентом. Эта связка обеспечивает баланс между функциональностью и простотой внедрения.

Если бюджет ограничен, можно использовать Llama 2 70B модель через Hugging Face или локальное развертывание. По данным тестирования Stanford HAI, Llama 2 70B показывает результаты сопоставимые с GPT-3.5 на большинстве задач, но требует значительных вычислительных ресурсов.

Пошаговое руководство: создание ИИ-агента с LangGraph и OpenAI

Рассмотрим создание практического ИИ-агента для автоматизации клиентской поддержки интернет-магазина. Этот агент сможет отвечать на вопросы о товарах, статусе заказов и политике возврата.

Шаг 1: Подготовка окружения и установка зависимостей

Начнем с создания виртуального окружения и установки необходимых библиотек:

# Создание виртуального окружения
python -m venv venv
source venv/bin/activate # для Linux/Mac
# или
venv\Scripts\activate # для Windows

# Установка зависимостей
pip install langchain langgraph openai chromadb streamlit python-dotenv pandas

Шаг 2: Настройка базовой архитектуры агента

Создаем основной файл агента с определением состояний и переходов:

import os
from typing import TypedDict, List
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langgraph.graph import StateGraph, END
from dotenv import load_dotenv

load_dotenv()

class AgentState(TypedDict):
messages: List[str]
current_step: str
user_query: str
context: str
response: str

# Инициализация LLM
llm = ChatOpenAI(
model="gpt-4-turbo-preview",
temperature=0.3,
openai_api_key=os.getenv("OPENAI_API_KEY")
)

def classify_query(state: AgentState):
"""Классификация пользовательского запроса"""
classification_prompt = ChatPromptTemplate.from_messages([
("system", """Ты — система классификации запросов для интернет-магазина.
Определи категорию запроса:
- product_info: вопросы о товарах
- order_status: вопросы о заказах
- return_policy: вопросы о возврате
- general: общие вопросы

Отвечай только названием категории."""),
("user", "{query}")
])

chain = classification_prompt | llm
result = chain.invoke({"query": state["user_query"]})

state["current_step"] = result.content.strip()
return state

Шаг 3: Создание специализированных обработчиков

Каждый тип запроса требует специализированной обработки с доступом к соответствующим данным:

def handle_product_info(state: AgentState):
"""Обработка вопросов о товарах"""
product_prompt = ChatPromptTemplate.from_messages([
("system", """Ты — консультант интернет-магазина электроники.
Используй следующую информацию о товарах: {context}

Правила ответа:
- Будь дружелюбным и профессиональным
- Предоставляй точную информацию
- Если информации недостаточно, честно скажи об этом
- Предлагай альтернативы при необходимости"""),
("user", "{query}")
])

# В реальном проекте здесь был бы поиск по векторной БД
context = "База данных товаров: iPhone 15 Pro - 999$, Samsung Galaxy S24 - 899$..."

chain = product_prompt | llm
result = chain.invoke({
"query": state["user_query"],
"context": context
})

state["response"] = result.content
return state

def handle_order_status(state: AgentState):
"""Обработка вопросов о статусе заказа"""
order_prompt = ChatPromptTemplate.from_messages([
("system", """Ты — помощник по отслеживанию заказов.
Для получения информации о заказе требуется номер заказа.
Если пользователь не предоставил номер, вежливо попроси его."""),
("user", "{query}")
])

chain = order_prompt | llm
result = chain.invoke({"query": state["user_query"]})

state["response"] = result.content
return state

Шаг 4: Сборка графа состояний

LangGraph использует концепцию графа состояний для управления потоком выполнения агента:

# Создание графа
workflow = StateGraph(AgentState)

# Добавление узлов
workflow.add_node("classify", classify_query)
workflow.add_node("product_info", handle_product_info)
workflow.add_node("order_status", handle_order_status)
workflow.add_node("return_policy", handle_return_policy)
workflow.add_node("general", handle_general)

# Определение маршрутизации
def route_query(state: AgentState):
step = state["current_step"]
if step == "product_info":
return "product_info"
elif step == "order_status":
return "order_status"
elif step == "return_policy":
return "return_policy"
else:
return "general"

# Настройка переходов
workflow.set_entry_point("classify")
workflow.add_conditional_edges(
"classify",
route_query,
{
"product_info": "product_info",
"order_status": "order_status",
"return_policy": "return_policy",
"general": "general"
}
)

# Все узлы ведут к завершению
workflow.add_edge("product_info", END)
workflow.add_edge("order_status", END)
workflow.add_edge("return_policy", END)
workflow.add_edge("general", END)

# Компиляция графа
app = workflow.compile()

Шаг 5: Создание пользовательского интерфейса

Используем Streamlit для создания простого веб-интерфейса:

import streamlit as st

def main():
st.title("? ИИ-Консультант интернет-магазина")
st.write("Задайте вопрос о товарах, заказах или политике возврата")

# Инициализация истории чата
if "messages" not in st.session_state:
st.session_state.messages = []

# Отображение истории
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])

# Поле ввода
if prompt := st.chat_input("Ваш вопрос"):
# Добавление сообщения пользователя
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)

# Обработка агентом
with st.chat_message("assistant"):
with st.spinner("Обрабатываю запрос..."):
initial_state = {
"messages": [],
"current_step": "",
"user_query": prompt,
"context": "",
"response": ""
}

result = app.invoke(initial_state)
response = result["response"]

st.markdown(response)
st.session_state.messages.append({
"role": "assistant",
"content": response
})

if __name__ == "__main__":
main()

Интеграция с внешними системами и API

Реальные ИИ-агенты должны взаимодействовать с внешними системами: CRM, базами данных, платежными системами, системами учета. Это превращает их из простых чат-ботов в полноценных цифровых помощников.

Женщина работает с ИИ

Создание инструментов для агента

LangGraph позволяет создавать инструменты (tools), которые агент может использовать для выполнения конкретных действий:

from langchain.tools import BaseTool
from typing import Optional
import requests

class OrderLookupTool(BaseTool):
name = "order_lookup"
description = "Поиск информации о заказе по номеру"

def _run(self, order_id: str) -> str:
"""Поиск заказа в системе"""
try:
# В реальном проекте здесь был бы API-вызов к системе заказов
api_url = f"https://api.yourstore.com/orders/{order_id}"
headers = {"Authorization": f"Bearer {os.getenv('STORE_API_KEY')}"}

response = requests.get(api_url, headers=headers)

if response.status_code == 200:
order_data = response.json()
return f"""
Заказ #{order_id}:
Статус: {order_data['status']}
Товары: {', '.join(order_data['items'])}
Сумма: {order_data['total']}
Дата доставки: {order_data['delivery_date']}
"""
else:
return f"Заказ с номером {order_id} не найден"

except Exception as e:
return f"Ошибка при поиске заказа: {str(e)}"

async def _arun(self, order_id: str) -> str:
"""Асинхронная версия"""
return self._run(order_id)

class InventoryCheckTool(BaseTool):
name = "inventory_check"
description = "Проверка наличия товара на складе"

def _run(self, product_name: str) -> str:
"""Проверка остатков"""
# Мокаем API-вызов к системе складского учета
inventory_data = {
"iPhone 15 Pro": {"available": 15, "price": 999},
"Samsung Galaxy S24": {"available": 8, "price": 899},
"MacBook Air M3": {"available": 3, "price": 1299}
}

product = inventory_data.get(product_name)
if product:
if product["available"] > 0:
return f"{product_name}: в наличии {product['available']} шт., цена {product['price']}$"
else:
return f"{product_name}: временно отсутствует"
else:
return f"Товар {product_name} не найден в каталоге"

Обучение и оптимизация агента

Создание агента — это только начало. Настоящая ценность появляется при непрерывном обучении и оптимизации на основе реальных данных взаимодействий с пользователями.

Система мониторинга и аналитики

Каждое взаимодействие с агентом должно логироваться и анализироваться. Основные метрики для отслеживания:

  • Точность ответов — процент корректных ответов агента
  • Время отклика — среднее время генерации ответа
  • Уровень эскалации — процент случаев передачи человеку
  • Удовлетворенность пользователей — рейтинги и отзывы
  • Стоимость за взаимодействие — затраты на API-вызовы
import logging
from datetime import datetime
import json

class AgentLogger:
    def __init__(self):
        logging.basicConfig(
            filename='agent_interactions.log',
            level=logging.INFO,
            format='%(asctime)s - %(message)s'
        )
        self.logger = logging.getLogger('agent_logger')
    
    def log_interaction(self, user_query, agent_response, 
                       processing_time, classification, tools_used):
        interaction_data = {
            "timestamp": datetime.now().isoformat(),
            "user_query": user_query,
            "agent_response": agent_response,
            "processing_time": processing_time,
            "classification": classification,
            "tools_used": tools_used,
            "session_id": self.get_session_id()
        }
        
        self.logger.info(json.dumps(interaction_data, ensure_ascii=False))
    
    def log_error(self, error_message, context):
        error_data = {
            "timestamp": datetime.now().isoformat(),
            "error": error_message,
            "context": context,
            "type": "error"
        }
        
        self.logger.error(json.dumps(error_data, ensure_ascii=False))

Методы улучшения производительности

1. Fine-tuning на доменных данных: Используйте накопленные диалоги для дообучения модели на специфике вашего бизнеса. OpenAI предоставляет API для fine-tuning GPT-3.5, что может улучшить качество ответов на 15-25%.

2. Retrieval-Augmented Generation (RAG): Интеграция с векторной базой знаний позволяет агенту использовать актуальную информацию без переобучения модели.

3. Динамическое промптирование: Адаптация промптов на основе контекста диалога и профиля пользователя.

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter

class KnowledgeBase:
def __init__(self):
self.embeddings = OpenAIEmbeddings()
self.vectorstore = None
self.load_knowledge_base()

def load_knowledge_base(self):
"""Загрузка базы знаний"""
documents = self.load_documents() # FAQ, инструкции, каталог товаров

text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)

chunks = text_splitter.split_documents(documents)

self.vectorstore = Chroma.from_documents(
documents=chunks,
embedding=self.embeddings,
persist_directory="./knowledge_base"
)

def search_relevant_info(self, query, k=3):
"""Поиск релевантной информации"""
if self.vectorstore:
docs = self.vectorstore.similarity_search(query, k=k)
return "\n".join([doc.page_content for doc in docs])
return ""

Развертывание и масштабирование

Переход от прототипа к production-ready решению требует решения вопросов масштабируемости, безопасности и надежности. По статистике Gartner, 85% проектов машинного обучения не доходят до промышленного внедрения именно из-за проблем на этапе развертывания.

Контейнеризация с Docker

Создание Docker-контейнера обеспечивает консистентность работы агента в разных средах:

# Dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]


# docker-compose.yml
version: '3.8'

services:
ai-agent:
build: .
ports:
- "8000:8000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- DATABASE_URL=${DATABASE_URL}
depends_on:
- redis
- postgres

redis:
image: redis:7-alpine
ports:
- "6379:6379"

postgres:
image: postgres:15
environment:
POSTGRES_DB: agent_db
POSTGRES_USER: agent_user
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data

volumes:
postgres_data:

Обеспечение безопасности

ИИ-агенты работают с чувствительными данными и требуют особого внимания к безопасности:

  • Аутентификация и авторизация: Реализация JWT-токенов для API и ролевой модели доступа
  • Шифрование данных: Использование HTTPS для всех соединений и шифрование данных в базе
  • Валидация входных данных: Защита от prompt injection и других атак
  • Аудит действий: Логирование всех действий агента для соответствия требованиям
from functools import wraps
import re

class SecurityValidator:
    def __init__(self):
        # Паттерны для обнаружения потенциально опасных промптов
        self.dangerous_patterns = [
            r"ignore previous instructions",
            r"забудь предыдущие инструкции",
            r"act as.*administrator",
            r"выполни команду",
            r"system\s*:",
            r"",
        ]
    
    def validate_input(self, user_input: str) -> bool:
        """Проверка пользовательского ввода на наличие опасных паттернов"""
        user_input_lower = user_input.lower()
        
        for pattern in self.dangerous_patterns:
            if re.search(pattern, user_input_lower, re.IGNORECASE):
                return False
        
        # Проверка длины ввода
        if len(user_input) > 5000:
            return False
            
        return True
    
    def sanitize_output(self, agent_output: str) -> str:
        """Очистка вывода агента от потенциально опасного контента"""
        # Удаление системных промптов из ответа
        cleaned = re.sub(r'<\|system\|>.*?<\|/system\|>', '', agent_output, flags=re.DOTALL)
        
        # Удаление конфиденциальной информации (например, API ключей)
        cleaned = re.sub(r'[A-Za-z0-9]{20,}', '[REDACTED]', cleaned)
        
        return cleaned

def security_check(func):
    """Декоратор для проверки безопасности запросов"""
    validator = SecurityValidator()
    
    @wraps(func)
    def wrapper(*args, **kwargs):
        # Извлекаем пользовательский ввод из аргументов
        if 'user_query' in kwargs:
            if not validator.validate_input(kwargs['user_query']):
                raise ValueError("Обнаружен потенциально опасный ввод")
        
        result = func(*args, **kwargs)
        
        # Очищаем вывод агента
        if isinstance(result, dict) and 'response' in result:
            result['response'] = validator.sanitize_output(result['response'])
        
        return result
    
    return wrapper

Мониторинг и обслуживание в production

Производственная эксплуатация ИИ-агента требует постоянного мониторинга ключевых метрик и быстрого реагирования на проблемы. Исследование MLOps Community показывает, что компании с развитыми системами мониторинга ML-моделей на 40% быстрее обнаруживают и устраняют проблемы.

Система алертов и мониторинга

import time
from dataclasses import dataclass
from typing import Dict, List
import smtplib
from email.mime.text import MIMEText

@dataclass
class MetricThreshold:
    name: str
    max_value: float
    min_value: float = 0
    window_minutes: int = 5

class AgentMonitor:
    def __init__(self):
        self.metrics = {}
        self.thresholds = {
            'response_time': MetricThreshold('response_time', 5.0),
            'error_rate': MetricThreshold('error_rate', 0.05),
            'token_usage': MetricThreshold('token_usage', 10000),
            'user_satisfaction': MetricThreshold('user_satisfaction', 10.0, 3.5)
        }
        
    def track_metric(self, metric_name: str, value: float):
        """Отслеживание метрики"""
        current_time = time.time()
        
        if metric_name not in self.metrics:
            self.metrics[metric_name] = []
        
        self.metrics[metric_name].append({
            'timestamp': current_time,
            'value': value
        })
        
        # Очистка старых данных (старше 1 часа)
        cutoff_time = current_time - 3600
        self.metrics[metric_name] = [
            m for m in self.metrics[metric_name] 
            if m['timestamp'] > cutoff_time
        ]
        
        # Проверка превышения порогов
        self.check_thresholds(metric_name)
    
    def check_thresholds(self, metric_name: str):
        """Проверка превышения пороговых значений"""
        if metric_name not in self.thresholds:
            return
        
        threshold = self.thresholds[metric_name]
        recent_values = self.get_recent_values(metric_name, threshold.window_minutes)
        
        if not recent_values:
            return
        
        avg_value = sum(recent_values) / len(recent_values)
        
        if avg_value > threshold.max_value or avg_value < threshold.min_value:
            self.send_alert(metric_name, avg_value, threshold)
    
    def send_alert(self, metric_name: str, value: float, threshold: MetricThreshold):
        """Отправка уведомления о превышении порога"""
        message = f"""
        ALERT: Метрика {metric_name} превысила пороговое значение
        
        Текущее значение: {value:.2f}
        Максимальный порог: {threshold.max_value}
        Минимальный порог: {threshold.min_value}
        Временное окно: {threshold.window_minutes} минут
        
        Требуется немедленная проверка системы.
        """
        
        # Отправка email (упрощенная версия)
        print(f"ALERT: {message}")
        
        # В реальном проекте здесь была бы интеграция с системами уведомлений
        # например, Slack, Telegram, PagerDuty

Оцените статью

4.8 5 (13 оценок)
Хочу изучать нейронные сети!
Специально для вас мы собрали отдельную подборку лучших онлайн-курсов по нейронным сетям на рынке и сравнили их по цене, продолжительности и отзывам студентов.
Изучить нейронные сети