104 lines
2.6 KiB
Markdown
104 lines
2.6 KiB
Markdown
# Хранение и загрузка промптов
|
|
|
|
---
|
|
|
|
## Загрузчик (PromptLoader)
|
|
|
|
```python
|
|
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`
|
|
|
|
```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`
|
|
|
|
```markdown
|
|
# Бизнес-аналитик
|
|
|
|
**Провайдер:** Yandex GPT
|
|
**Температура:** 0.5
|
|
**Макс. токенов:** 3000
|
|
|
|
## Prompt Template
|
|
```
|
|
Ты — бизнес-аналитик.
|
|
Проанализируй идею и оцени:
|
|
1. Целевую аудиторию
|
|
2. ROI
|
|
3. Сроки реализации
|
|
...
|
|
```
|
|
```
|
|
|
|
---
|
|
|
|
## [ASK]
|
|
|
|
- Какой формат использовать по умолчанию? (рекомендация: YAML + MD fallback)
|
|
- Нужна ли валидация placeholder'ов в промптах? (да, {...} должны быть заменены)
|
|
- Нужна ли версионирование промптов? (да, через git — каждый промпт MD/YAML файл)
|