Розробка AI-агента для фінансового аналізу

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка AI-агента для фінансового аналізу
Складний
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка AI-агентів для фінансового аналізу

AI-агент фінансового аналізу обробляє фінансові дані, формує аналітичні висновки, розраховує показники та генерує звіти. Комбінація Text-to-SQL для доступу до даних, Code Interpreter для розрахунків та LLM для інтерпретації дозволяє агенту відповідати на складні аналітичні питання без участі фінансового аналітика.

Ключові інструменти фінансового агента

from openai import OpenAI
from pydantic import BaseModel
from typing import Literal, Optional
import pandas as pd
import json

client = OpenAI()

financial_tools = [
    {
        "type": "function",
        "function": {
            "name": "query_financial_database",
            "description": "Запит до фінансової бази даних (виручка, витрати, бюджет, факт)",
            "parameters": {
                "type": "object",
                "properties": {
                    "sql_query": {"type": "string"},
                    "description": {"type": "string"},
                },
                "required": ["sql_query"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "calculate_financial_metrics",
            "description": "Розраховуємо фінансові показники",
            "parameters": {
                "type": "object",
                "properties": {
                    "metric": {
                        "type": "string",
                        "enum": ["EBITDA", "ROE", "ROA", "ROIC", "NPV", "IRR", "payback_period",
                                 "gross_margin", "operating_margin", "net_margin", "current_ratio",
                                 "debt_to_equity", "working_capital"]
                    },
                    "input_data": {"type": "object"},
                },
                "required": ["metric", "input_data"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "build_financial_model",
            "description": "Побудуємо фінансову модель (DCF, бюджет, P&L прогноз)",
            "parameters": {
                "type": "object",
                "properties": {
                    "model_type": {"type": "string", "enum": ["dcf", "budget_variance", "pnl_forecast"]},
                    "parameters": {"type": "object"},
                },
                "required": ["model_type", "parameters"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "generate_financial_report",
            "description": "Сформуємо фінансовий звіт",
            "parameters": {
                "type": "object",
                "properties": {
                    "report_type": {"type": "string"},
                    "period": {"type": "string"},
                    "data": {"type": "object"},
                },
                "required": ["report_type", "period"]
            }
        }
    },
]

def calculate_financial_metrics(metric: str, input_data: dict) -> str:
    """Точний розрахунок фінансових показників"""

    calculators = {
        "EBITDA": lambda d: d["revenue"] - d["cogs"] - d["opex"] + d.get("da", 0),
        "gross_margin": lambda d: (d["revenue"] - d["cogs"]) / d["revenue"] * 100,
        "operating_margin": lambda d: d["ebit"] / d["revenue"] * 100,
        "ROE": lambda d: d["net_income"] / d["equity"] * 100,
        "ROA": lambda d: d["net_income"] / d["total_assets"] * 100,
        "current_ratio": lambda d: d["current_assets"] / d["current_liabilities"],
        "debt_to_equity": lambda d: d["total_debt"] / d["equity"],
    }

    calculator = calculators.get(metric)
    if not calculator:
        return f"Metric {metric} not implemented"

    try:
        result = calculator(input_data)
        return json.dumps({
            "metric": metric,
            "result": round(result, 4),
            "unit": "%" if metric in ["gross_margin", "operating_margin", "ROE", "ROA"] else "x",
        })
    except KeyError as e:
        return f"Missing required field: {e}"
    except ZeroDivisionError:
        return "Division by zero: check denominator values"

Агент аналізу план-факт

FINANCIAL_ANALYST_PROMPT = """Ти — фінансовий аналітик CFO-рівня.

Твої завдання:
1. Аналізувати фінансові дані точно та методологічно коректно
2. Використовуй інструменти для розрахунків — ніколи не рахуй в голові
3. При відхиленнях план/факт — виявляй причини (ефект ціни, ефект обсягу, мікс)
4. Давай конкретні рекомендації, а не абстрактні спостереження
5. Вказуй на аномалії та потенційні ризики

Методологія:
- При аналізі P&L розбивай відхилення на цінові та обсягові
- При оцінці ефективності порівнюй з標standard бенчмарками індустрії
- При прогнозах — вказуй інтервал впевненості та ключові припущення"""

def financial_analysis_agent(question: str, context_data: dict = None) -> str:
    messages = [
        {"role": "system", "content": FINANCIAL_ANALYST_PROMPT},
        {"role": "user", "content": question},
    ]

    if context_data:
        messages.insert(1, {
            "role": "system",
            "content": f"Контекст даних:\n{json.dumps(context_data, indent=2)}"
        })

    # Агентний цикл
    for _ in range(8):
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=messages,
            tools=financial_tools,
        )

        msg = response.choices[0].message
        messages.append(msg)

        if not msg.tool_calls:
            return msg.content

        for tool_call in msg.tool_calls:
            tool_name = tool_call.function.name
            tool_args = json.loads(tool_call.function.arguments)
            result = execute_financial_tool(tool_name, tool_args)
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": result,
            })

Практичний кейс: аналіз план-факт виробничої компанії

Завдання: щомісячний аналіз план-факт P&L з розбивкою по продуктовим лінійкам та регіонам. Раніше займав 2 дні фінансового аналітика.

Дані: PostgreSQL, 8 таблиць (actual_pnl, budget_pnl, products, regions, cost_centers...).

Приклад взаємодії:

Запит: "Проаналізуй виконання бюджету по виручці за март 2026. Вияви причини відхилень."

Агент:

  1. query_financial_database — план vs факт по продуктам
  2. calculate_financial_metrics — відсоток виконання по кожній лінійці
  3. query_financial_database — обсяги та ціни для price/volume decomposition
  4. build_financial_model — дані waterfall chart
  5. Інтерпретація: "Загальне відхилення -8.3M (-4.2%). Основні фактори: Скорочення продажів продукту А (-5.1M, обсяговий ефект), частково компенсовано зростанням цін на продукт Б (+2.1M, цінний ефект). Центральний регіон — один з перевиконанням (+1.8M), Урал — найбільше відставання (-6.2M)..."

Результати:

  • Час підготовки щомісячного звіту: 2 дні → 3.5 години
  • Охоплення показників: ідентично
  • Якість інтерпретацій (оцінка CFO): 4.1/5.0

Ключова проблема: агент добре рахує, але інтерпретації іноді занадто обережні. Регулюється через систем-промпт.

Автоматичне виявлення аномалій

def detect_anomalies_in_data(financial_data: pd.DataFrame) -> list[dict]:
    """Статистичне виявлення аномалій перед передачею в LLM"""

    anomalies = []

    for column in financial_data.select_dtypes(include="number").columns:
        mean = financial_data[column].mean()
        std = financial_data[column].std()
        z_scores = (financial_data[column] - mean) / std

        outliers = financial_data[abs(z_scores) > 2.5]
        if not outliers.empty:
            for idx, row in outliers.iterrows():
                anomalies.append({
                    "column": column,
                    "value": row[column],
                    "z_score": round(z_scores[idx], 2),
                    "period": str(idx),
                })

    return anomalies

Часовий розклад

  • Проектування фінансового агента: 1 тиждень
  • Розробка інструментів та SQL-шару: 2–3 тижні
  • Інтеграція з ERP/1C: 2–3 тижні
  • Верифікація розрахунків з фінансистами: 2 тижні
  • Всього: 7–10 тижнів