Отраслевые сценарии применения ИИ-агентов
Разные предметные области предъявляют к агентам разные требования и характеристики.
Благодаря настройке под предметную область агенты могут предоставлять более профессиональные услуги.
Кодовый агент
Кодовый агент — одна из самых успешных областей применения агентов.
Способен понимать кодовые базы, писать новый код и отлаживать проблемы.
Основные возможности
Автодополнение кода: Прогнозировать следующий фрагмент кода на основе контекста.
Генерация кода: Генерировать код на основе описаний на естественном языке.
Ревью кода: Выявлять проблемы и улучшения в коде.
Локализация ошибок: Анализировать сообщения об ошибках и находить первопричину проблем.
Рефакторинг кода: Предлагать и применять рекомендации по оптимизации кода.
Типичные системы
| Система | Компания-разработчик | Особенности |
|---|---|---|
| GitHub Copilot | GitHub/OpenAI | В основном автодополнение кода, предложения в реальном времени |
| Claude Code | Anthropic | Ассистент командной строки, глубокое понимание кода |
| Devin | Познание | Автономное программирование, выполнение задач от начала до конца |
| Cursor | Cursor | ИИ-редактор кода, глубокая интеграция с IDE |
Примеры реализации кода
Реализация агента Text2SQL
"""
Агент Text2SQL
Преобразование естественного языка в SQL-запросы
"""
def __init__(self, llm, schema):
self.llm = llm
# Информация о схеме базы данных
self.schema = schema
def convert(self, question):
"""
Преобразовать задачи на естественном языке в SQL
:param question: вопрос на естественном языке
:return: SQL-запрос
"""
prompt = f"""
Вы эксперт по SQL.
Схема базы данных:
{self.schema}
Правила:
1. Генерируйте только SELECT-запросы (INSERT/UPDATE/DELETE не поддерживаются)
2. Используйте осмысленные псевдонимы таблиц
3. Добавляйте необходимые условия JOIN
4. Используйте понятные псевдонимы столбцов
Вопрос: {question}
Пожалуйста, сгенерируйте соответствующий SQL-запрос.
"""
sql = self.llm.generate(prompt)
# Проверка безопасности
return self.sanitize(sql)
def sanitize(self, sql):
"""
Проверка безопасности SQL
Убедитесь, что опасные операции не включены
"""
# Проверка на нижний регистр
sql_lower = sql.lower().strip()
# Проверьте, что он содержит только SELECT
forbidden_keywords = [
"insert", "update", "delete", "drop",
"create", "alter", "truncate", "exec",
"execute", "grant", "revoke"
]
for keyword in forbidden_keywords:
if keyword in sql_lower:
raise ValueError(f"Запрещённые ключевые слова: {keyword}")
return sql
def execute(self, question, db_connection):
"""
Выполнить запрос Text2SQL
"""
sql = self.convert(question)
cursor = db_connection.cursor()
cursor.execute(sql)
results = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
return {"columns": columns, "rows": results}
Агент анализа данных
Агент анализа данных может понимать требования к данным, выполнять запросы и создавать аналитические отчёты.
Позволяет нетехническим пользователям выполнять сложный анализ данных.
Основные возможности
Понимание данных: Понимать структуру базы данных и смысл данных.
Генерация запросов: Text2SQL, преобразование естественного языка в запросы.
Визуализация: Генерировать предложения по диаграммам и конфигурации.
Генерация отчётов: Анализировать результаты и генерировать отчёты на естественном языке.
Реализация кода
Реализация агента анализа данных
"""
Агент анализа данных
Понимать требования к данным, выполнять анализ, генерировать отчёты
"""
def __init__(self, llm, db_connection, chart_generator):
self.llm = llm
self.db = db_connection
self.chart_generator = chart_generator
def analyze(self, request):
"""
Обрабатывать запросы на анализ данных
"""
# Шаг 1: Понять требования к анализу
intent = self.parse_intent(request)
# Шаг 2: Сгенерировать запрос
query = self.generate_query(intent)
# Шаг 3: Выполнить запрос
data = self.execute_query(query)
# Шаг 4: Анализ данных
analysis = self.perform_analysis(data, intent)
# Шаг 5: Генерация предложений по визуализации
charts = self.suggest_charts(analysis)
# Шаг 6: Генерация отчёта
report = self.generate_report(analysis, charts)
return {
"intent": intent,
"query": query,
"data": data,
"analysis": analysis,
"charts": charts,
"report": report
}
def parse_intent(self, request):
"""Разобрать намерение пользователя"""
prompt = f"""
Проанализируйте следующий запрос данных и извлеките ключевую информацию:
Запрос: {request}
Пожалуйста, извлеките:
1. Цель анализа (сравнение, тренд, распределение и т. д.)
2. Задействованные таблицы и поля
3. Временной диапазон (если есть)
4. Условия фильтрации (если есть)
"""
return self.llm.generate(prompt)
def generate_query(self, intent):
"""Сгенерировать SQL-запрос"""
prompt = f"""
Сгенерируйте SQL-запрос на основе следующего намерения:
{intent}
Схема базы данных:
{self.get_schema()}
"""
return self.llm.generate(prompt)
def execute_query(self, query):
"""Выполнить запрос"""
cursor = self.db.cursor()
cursor.execute(query)
columns = [desc[0] for desc in cursor.description]
rows = cursor.fetchall()
return {"columns": columns, "rows": rows}
def perform_analysis(self, data, intent):
"""Выполнить анализ данных"""
# Упрощённая реализация
import statistics
rows = data["rows"]
columns = data["columns"]
analysis = {
"row_count": len(rows),
"summary": {}
}
# Вычислить статистику для числовых столбцов
for i, col in enumerate(columns):
if self.is_numeric(rows, i):
values = [row[i] for row in rows if row[i] is not None]
if values:
analysis["summary"][col] = {
"min": min(values),
"max": max(values),
"avg": statistics.mean(values),
"median": statistics.median(значения)
}
return analysis
def suggest_charts(self, analysis):
"""Рекомендовать диаграммы визуализации"""
suggestions = []
# Рекомендовать диаграммы на основе типа анализа
if "trend" in str(analysis).lower():
suggestions.append({
"type": "line",
"description": "Линейная диаграмма, подходит для отображения тенденций"
})
if "comparison" in str(analysis).lower():
suggestions.append({
"type": "bar",
"description": "Столбчатая диаграмма, подходит для сравнения категорий"
})
suggestions.append({
"type": "table",
"description": "Таблица данных, показывающая подробные данные"
})
return suggestions
def generate_report(self, analysis, charts):
"""Сгенерировать отчет об анализе"""
prompt = f"""
На основе следующих результатов анализа сгенерируйте отчет на естественном языке:
Результаты анализа:
{analysis}
Рекомендуемая диаграмма:
{charts}
Пожалуйста, сгенерируйте понятный отчет об анализе.
"""
return self.llm.generate(prompt)
Агент службы поддержки клиентов
Агенту службы поддержки клиентов необходимо вести многоходовые диалоги, понимать намерения пользователя и предоставлять точные ответы.
Это один из наиболее широко применяемых сценариев ИИ.
Основные возможности
Распознавание намерений: Понять, что хочет сделать пользователь.
Заполнение слотов: Извлечение ключевой информации (время, местоположение и т. д.).
Отслеживание состояния диалога: Управление контекстом многоходового диалога.
Генерация ответов: Генерировать естественные и профессиональные ответы.
Реализация кода
Реализация агента службы поддержки клиентов
"""
Агент службы поддержки клиентов
Обрабатывать запросы пользователей и обеспечивать сервисную поддержку
"""
def __init__(self, llm, knowledge_base, dialogue_manager):
self.llm = llm
# База знаний
self.knowledge_base = knowledge_base
# Менеджер диалога
self.dialogue_manager = dialogue_manager
def handle(self, user_input, session_id):
"""
Обработать сообщения пользователя
"""
# Получить историю диалога
history = self.dialogue_manager.get_history(session_id)
# Распознать намерение пользователя
intent = self.recognize_intent(user_input, history)
# Обработать на основе намерения
if intent.type == "greeting":
response = self.handle_greeting()
elif intent.type == "inquiry":
response = self.handle_inquiry(intent)
elif intent.type == "complaint":
response = self.handle_complaint(intent)
elif intent.type == "order_status":
response = self.handle_order_status(intent)
elif intent.type == "refund":
response = self.handle_refund(intent)
else:
response = self.handle_general(user_input)
# Обновить историю диалога
self.dialogue_manager.add_message(
session_id,
{"role": "user", "content": user_input}
)
self.dialogue_manager.add_message(
session_id,
{"role": "assistant", "content": response}
)
return response
def recognize_intent(self, text, history):
"""Распознать намерение пользователя"""
prompt = f"""
Проанализировать сообщения пользователя и определить тип намерения.
Текущее сообщение: {text}
История диалога:
{history}
Типы намерений:
- greeting: Приветствие
- inquiry: Задать вопросы
- complaint: Жалоба
- order_status: Проверить заказ
- refund: Возврат
- goodbye: Прощание
Пожалуйста, выведите тип намерения и уверенность.
"""
result = self.llm.generate(prompt)
return Intent.parse(result)
def handle_inquiry(self, intent):
"""Обработать запрос"""
# Извлечь релевантное содержимое из базы знаний
relevant_docs = self.knowledge_base.search(intent.query)
if relevant_docs:
# Если есть релевантные документы, отвечайте на основе документов
prompt = f"""
Ответьте на вопрос пользователя на основе следующего документа.
Документ:
{relevant_docs}
Вопрос: {intent.query}
"""
return self.llm.generate(prompt)
else:
# Нет соответствующих документов, передать человеку или записать
return "Мне нужно разобраться в этом вопросе подробнее. Пожалуйста, подождите, пока я проверю для вас."
class Intent:
"""Намерение пользователя"""
def __init__(self, type, query, confidence):
self.type = type
self.query = query
self.confidence = confidence
@classmethod
def parse(cls, text):
"""Разбор текста намерения"""
# Упрощённая реализация
return cls(type="inquiry", query=text, confidence=0.9)
Исследовательский агент
Исследовательский агент может автономно проводить углублённые исследования, собирать и обобщать информацию.
Имитирует стиль работы исследователей-людей.
Основные возможности
Планирование поиска: Сформулировать план сбора информации.
Сбор из нескольких источников: Собирать информацию из нескольких источников.
Проверка информации: Перекрёстно проверять точность информации.
Генерация отчёта: Синтезировать информацию для создания структурированных отчётов.
Реализация кода
Реализация исследовательского агента
"""
Исследовательский агент
Автономно проводить глубокое исследование и генерировать отчёты
"""
def __init__(self, search_tools, llm):
# Список инструментов поиска
self.search_tools = search_tools
self.llm = llm
def research(self, topic, depth=3):
"""
Выполнить задачу исследования
:param topic: Тема исследования
:param depth: Глубина исследования (количество раундов поиска)
"""
# Шаг 1: Создать план исследования
plan = self.create_research_plan(topic, depth)
# Шаг 2: Выполнить несколько раундов поиска
findings = []
for phase in plan.phases:
# Поиск в нескольких направлениях параллельно
phase_results = self.search_phase(phase)
findings.extend(phase_results)
# Синтезировать текущие findings
synthesis = self.synthesize(findings)
findings.append({
"type": "synthesis",
"content": synthesis,
"phase": phase.number
})
# Шаг 3: Сгенерировать итоговый отчёт
report = self.generate_report(findings)
return {
"topic": topic,
"plan": plan,
"findings": findings,
"report": report
}
def create_research_plan(self, topic, depth):
"""Создать план исследования"""
prompt = f"""
Создайте подробный план для следующей темы исследования:
Тема: {topic}
Глубина: {depth}
Пожалуйста, составьте план:
1. Ключевые направления, которые необходимо исследовать (3-5)
2. Основные вопросы, на которые нужно ответить для каждого направления
3. Рекомендации по источникам информации
"""
return ResearchPlan.parse(self.llm.generate(prompt))
def search_phase(self, phase):
"""Выполнить один этап поиска"""
results = []
for query in phase.queries:
# Использовать инструменты поиска для поиска
for tool in self.search_tools:
search_results = tool.search(query)
results.extend(search_results)
return results
def synthesize(self, findings):
"""Обобщение результатов"""
prompt = f"""
Обобщите следующие результаты исследования и извлеките ключевую информацию:
Список результатов:
{findings}
Пожалуйста, извлеките:
1. Основные выводы
2. Доказательства, подтверждающие выводы
3. Существующие спорные вопросы или неопределённости
4. Вопросы, требующие дальнейшего исследования
"""
return self.llm.generate(prompt)
def generate_report(self, findings):
"""Создать итоговый отчёт"""
prompt = f"""
Создайте структурированный отчёт на основе следующих результатов исследования:
Результаты исследования:
{findings}
Требования к отчёту:
1. Краткое резюме
2. Введение и предыстория
3. Ключевые выводы (по подтемам)
4. Выводы и рекомендации
5. Источники
Пожалуйста, сгенерируйте полный отчёт.
"""
return self.llm.generate(prompt)
class ResearchPlan:
"""План исследования"""
@classmethod
def parse(cls, text):
"""Разбор текста плана"""
# Упрощённая реализация
return cls(phases=[
ResearchPhase(number=1, queries=["Связанная тема 1"], goals=["Понять основные концепции"]),
ResearchPhase(number=2, queries=["Связанная тема 2"], goals=["Углублённый анализ"]),
])
def __init__(self, phases):
self.phases = phases
class ResearchPhase:
"""Фаза исследования"""
def __init__(self, number, queries, goals):
self.number = number
self.queries = queries
self.goals = goals
Другие вертикальные приложения
RPA + агент
Сочетание RPA (Robotic Process Automation) и агента.
Это позволяет автоматизировать более сложные бизнес-процессы.
Агент наделяет RPA возможностями интеллектуального принятия решений.
Игровой NPC-агент
NPC (неигровые персонажи) агенты в играх.
Они могут вести динамичный диалог, генерировать сюжет и отыгрывать роли.
Создают более реалистичный игровой опыт.
Агент научных исследований
ИИ для науки преображает научные исследования.
Обзор литературы: Автоматически читать и обобщать большое количество статей.
Планирование эксперимента: Предлагать экспериментальные планы и гипотезы.
Анализ данных: Обрабатывать экспериментальные данные и выявлять закономерности.
Написание статей: Помогать в написании научных статей.
Краткое содержание главы
В этой главе представлены применения Агента в различных вертикальных областях.
Агент по кодуПомогает в программировании и повышает эффективность разработки.
Агент анализа данныхПозволяет нетехническим специалистам также анализировать данные.
Агент по обслуживанию клиентовОбеспечивает интеллектуальное обслуживание клиентов.
Исследовательский агентАвтономно проводит углублённые исследования.
Существуют также другие сценарии, такие как RPA+Agent, игровые NPC и агенты для научных исследований.
Агенты в вертикальных доменах должны настраиваться с учётом предметных знаний.
Выбор правильных сценариев и точек входа — залог успешного внедрения.
Другие расширения