2.6 KiB
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
Ты — бизнес-аналитик. Проанализируй идею и оцени:
- Целевую аудиторию
- ROI
- Сроки реализации ...
[ASK]
- Какой формат использовать по умолчанию? (рекомендация: YAML + MD fallback)
- Нужна ли валидация placeholder'ов в промптах? (да, {...} должны быть заменены)
- Нужна ли версионирование промптов? (да, через git — каждый промпт MD/YAML файл)