Files
voidea/template/docs/agent-prompts/storage.md
T

2.6 KiB

Хранение и загрузка промптов


Загрузчик (PromptLoader)

from pathlib import Path
import yaml, re

AGENT_SPECS_DIR = Path("docs/specs/agents")
AGENT_PROMPTS_YAML = Path("docs/agent_prompts.yaml")

def get_prompt_config(role: str) -> dict | None:
    """Get prompt config for a role."""
    # 1. Пробуем YAML
    config = _load_from_yaml(role)
    if config:
        return config
    # 2. Пробуем MD
    return _load_from_spec(role)

def _load_from_yaml(role: str) -> dict | None:
    """Load from docs/agent_prompts.yaml."""
    if not AGENT_PROMPTS_YAML.exists():
        return None
    data = yaml.safe_load(AGENT_PROMPTS_YAML.read_text(encoding="utf-8"))
    return data.get(role) if data else None

def _load_from_spec(role: str) -> dict | None:
    """Load from docs/specs/agents/<role>.md."""
    spec_path = AGENT_SPECS_DIR / f"{role}.md"
    if not spec_path.exists():
        return None
    content = spec_path.read_text(encoding="utf-8")
    match = re.search(r"## Prompt Template\n+```\n(.+?)\n```", content, re.DOTALL)
    if not match:
        return None
    return {
        "system_prompt": match.group(1).strip(),
        "provider": "yandex_gpt",
        "temperature": 0.7,
        "max_tokens": 2000,
    }

Пример YAML-файла

docs/agent_prompts.yaml

coordinator:
  system_prompt: "Ты — координатор..."
  provider: yandex_gpt
  temperature: 0.7
  max_tokens: 2000

business_analyst:
  system_prompt: "Ты — бизнес-аналитик..."
  provider: yandex_gpt
  temperature: 0.5
  max_tokens: 3000

legal_expert:
  system_prompt: "Ты — юрист..."
  provider: gigachat  # Для юридических вопросов
  temperature: 0.3
  max_tokens: 3000

Пример MD-файла

docs/specs/agents/business_analyst.md

# Бизнес-аналитик

**Провайдер:** Yandex GPT
**Температура:** 0.5
**Макс. токенов:** 3000

## Prompt Template

Ты — бизнес-аналитик. Проанализируй идею и оцени:

  1. Целевую аудиторию
  2. ROI
  3. Сроки реализации ...

[ASK]

  • Какой формат использовать по умолчанию? (рекомендация: YAML + MD fallback)
  • Нужна ли валидация placeholder'ов в промптах? (да, {...} должны быть заменены)
  • Нужна ли версионирование промптов? (да, через git — каждый промпт MD/YAML файл)