79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
"""AI Steward Service - 主动式 AI 管家核心服务。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import ast
|
|
import json
|
|
import os
|
|
import re
|
|
import time
|
|
from typing import Any, Dict, List
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from ...core.logging import get_logger
|
|
from ...core.database import get_db
|
|
from ...models import CognitiveConflict, Project, ProjectSignalLink, Signal, TruthNode
|
|
from ...utils.project_members import ensure_project_default_members
|
|
from ...utils.sequence import ensure_project_id_sequence
|
|
from ...utils.title import compact_title
|
|
from ..adaptive_rag_service import AdaptiveRAGService
|
|
from ..llm_service import LLMService
|
|
from ..signal.signal_source_orchestration import SignalSourceOrchestrationService
|
|
from ..task_persistence_core import (
|
|
build_task_create_draft,
|
|
normalize_skill_names,
|
|
persist_task,
|
|
resolve_skill_tag_ids_by_names,
|
|
)
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
def _env_float(name: str, default: float) -> float:
|
|
raw = os.getenv(name)
|
|
if raw is None:
|
|
return float(default)
|
|
try:
|
|
return float(str(raw).strip())
|
|
except Exception:
|
|
return float(default)
|
|
|
|
|
|
def _env_int(name: str, default: int) -> int:
|
|
raw = os.getenv(name)
|
|
if raw is None:
|
|
return int(default)
|
|
try:
|
|
return int(str(raw).strip())
|
|
except Exception:
|
|
return int(default)
|
|
|
|
|
|
PROJECT_CREATION_DRAFT_TIMEOUT_SECONDS = max(
|
|
8.0,
|
|
_env_float("AI_STEWARD_PROJECT_CREATION_STEP_TIMEOUT_SECONDS", 180.0),
|
|
)
|
|
PROJECT_CREATION_STEP_INITIAL_MAX_TOKENS = max(
|
|
256,
|
|
_env_int("AI_STEWARD_PROJECT_CREATION_STEP_INITIAL_MAX_TOKENS", 2_200),
|
|
)
|
|
PROJECT_CREATION_STEP_MAX_TOKENS = max(
|
|
PROJECT_CREATION_STEP_INITIAL_MAX_TOKENS,
|
|
_env_int("AI_STEWARD_PROJECT_CREATION_STEP_MAX_TOKENS", 100_000),
|
|
)
|
|
PROJECT_CREATION_STEP_RETRY_COUNT = max(
|
|
0,
|
|
_env_int("AI_STEWARD_PROJECT_CREATION_STEP_RETRY_COUNT", 1),
|
|
)
|
|
PROJECT_CREATION_JSON_PARSE_RETRY_COUNT = max(
|
|
0,
|
|
_env_int("AI_STEWARD_PROJECT_CREATION_JSON_PARSE_RETRY_COUNT", 1),
|
|
)
|
|
PROJECT_CREATION_TASK_CHAIN_TIMEOUT_SECONDS = max(
|
|
PROJECT_CREATION_DRAFT_TIMEOUT_SECONDS,
|
|
_env_float("AI_STEWARD_PROJECT_CREATION_TASK_CHAIN_TIMEOUT_SECONDS", 60.0),
|
|
)
|
|
PROJECT_CREATION_SERIAL_DRAFT_STEPS = _env_int("AI_STEWARD_PROJECT_CREATION_SERIAL_DRAFT_STEPS", 1) == 1
|