bootstrap
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
from ai import prompts
|
||||
from ai.assistant import AssistantError, AssistantService
|
||||
|
||||
__all__ = ["AssistantService", "AssistantError", "prompts"]
|
||||
@@ -0,0 +1,56 @@
|
||||
import json
|
||||
|
||||
from ai import prompts
|
||||
from cashflow_model import FinancialModel
|
||||
from engine.forecast import ForecastService
|
||||
|
||||
|
||||
class AssistantError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class AssistantService:
|
||||
def __init__(self, model: FinancialModel):
|
||||
self.model = model
|
||||
|
||||
def analyze(self, months: int = 12) -> dict:
|
||||
forecast_service = ForecastService(self.model)
|
||||
forecast_result = forecast_service.forecast_cashflow(months)
|
||||
summary = forecast_service.summary(months)
|
||||
|
||||
prompt = prompts.format_context(
|
||||
model_json=json.dumps(self.model.to_dict(), indent=2, ensure_ascii=False),
|
||||
forecast_json=json.dumps(forecast_result, indent=2, ensure_ascii=False),
|
||||
months=months,
|
||||
)
|
||||
|
||||
return {
|
||||
"prompt": prompt,
|
||||
"summary": summary,
|
||||
"forecast": forecast_result,
|
||||
"ai_response": None,
|
||||
}
|
||||
|
||||
def advice(self, question: str, months: int = 12) -> dict:
|
||||
forecast_service = ForecastService(self.model)
|
||||
forecast_result = forecast_service.forecast_cashflow(months)
|
||||
|
||||
prompt = prompts.ADVICE_PROMPT.format(
|
||||
model_json=json.dumps(self.model.to_dict(), indent=2, ensure_ascii=False),
|
||||
forecast_json=json.dumps(forecast_result, indent=2, ensure_ascii=False),
|
||||
question=question,
|
||||
)
|
||||
|
||||
return {
|
||||
"prompt": prompt,
|
||||
"ai_response": None,
|
||||
}
|
||||
|
||||
def compare_scenarios(self, scenarios_json: str) -> dict:
|
||||
prompt = prompts.SCENARIO_COMPARISON_PROMPT.format(
|
||||
scenarios_json=scenarios_json,
|
||||
)
|
||||
return {
|
||||
"prompt": prompt,
|
||||
"ai_response": None,
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
ANALYZE_PROMPT = """
|
||||
Ты — финансовый AI-ассистент. Проанализируй финансовую модель пользователя.
|
||||
|
||||
### Модель (JSON):
|
||||
{model_json}
|
||||
|
||||
### Прогноз на {months} месяцев:
|
||||
{forecast_json}
|
||||
|
||||
Дай анализ по пунктам:
|
||||
1. Общее финансовое состояние
|
||||
2. Тренд денежного потока (рост/падение)
|
||||
3. Достаточность ликвидности
|
||||
4. Рекомендации по улучшению
|
||||
"""
|
||||
|
||||
ADVICE_PROMPT = """
|
||||
Ты — финансовый AI-ассистент. Дай персональные рекомендации.
|
||||
|
||||
### Модель:
|
||||
{model_json}
|
||||
|
||||
### Прогноз:
|
||||
{forecast_json}
|
||||
|
||||
Вопрос пользователя: {question}
|
||||
|
||||
Ответь как опытный финансовый консультант.
|
||||
"""
|
||||
|
||||
SCENARIO_COMPARISON_PROMPT = """
|
||||
Ты — финансовый AI-ассистент. Сравни сценарии прогноза.
|
||||
|
||||
### Результаты сценариев:
|
||||
{scenarios_json}
|
||||
|
||||
Дай рекомендацию: какой сценарий наиболее вероятен и почему.
|
||||
"""
|
||||
|
||||
|
||||
def format_context(model_json: str, forecast_json: str, months: int = 12) -> str:
|
||||
return ANALYZE_PROMPT.format(
|
||||
model_json=model_json,
|
||||
forecast_json=forecast_json,
|
||||
months=months,
|
||||
)
|
||||
Reference in New Issue
Block a user