Initial commit: VoIdeaAI - voice-first AI idea assistant
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# Хранение и загрузка промптов
|
||||
|
||||
---
|
||||
|
||||
## Загрузчик (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 файл)
|
||||
Reference in New Issue
Block a user