Initial commit: VoIdeaAI - voice-first AI idea assistant

This commit is contained in:
2026-05-13 12:51:42 +03:00
commit 688d043dad
421 changed files with 47915 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# Управление промптами агентов
## Принцип
Промпты — это код. Они версионируются, хранятся в репозитории и проходят code review. Никаких hardcoded промптов в Python-коде.
## Где хранить
В VoIdea используется **два формата** с fallback:
| Формат | Расположение | Назначение |
|--------|-------------|------------|
| YAML | `docs/agent_prompts.yaml` | Настройки провайдера, температуры, токенов |
| Markdown | `docs/specs/agents/<role>.md` | Детальные промпты с примерами |
`PromptLoader` пробует YAML первым, если не нашёл — падает на MD-спецификацию.
## Структура YAML
```yaml
coordinator:
provider: yandex_gpt # yandex_gpt | gigachat
temperature: 0.7 # 0.0-1.0
max_tokens: 2000 # макс. длина ответа
```
## Структура MD
```markdown
# Роль
**Провайдер:** Yandex GPT
**Температура:** 0.7
**Макс. токенов:** 2000
## Prompt Template
```
Ты — {role}. Описание.
```
```
+50
View File
@@ -0,0 +1,50 @@
# Паттерны промптов
## 1. System + User разделение
```python
system_prompt = "Ты — бизнес-аналитик. Анализируй идеи."
user_prompt = f"Название: {idea.title}\nОписание: {idea.content}"
full_prompt = f"{system_prompt}\n\n{user_prompt}"
```
Используется: `AIProvider.format_prompt()`
## 2. Structured output
```python
system_prompt = """
Ты — финансовый консультант.
Ответ верни ТОЛЬКО в формате JSON:
{
"roi": число,
"risk_level": "low|medium|high",
"recommendations": [строка, ...]
}
"""
```
## 3. Few-shot (примеры)
```python
system_prompt = """
Ты — UI-дизайнер. Анализируй интерфейс.
Пример хорошего анализа:
Интерфейс: Экран входа
Проблема: Кнопка "Забыли пароль" не видна
Рекомендация: Высокий приоритет
Теперь проанализируй:
"""
```
## Параметры
| Параметр | Значение | Когда |
|----------|----------|-------|
| `temperature: 0.1-0.3` | Низкая | Юридические, финансовые |
| `temperature: 0.5-0.7` | Средняя | Стандартный анализ |
| `temperature: 0.8-1.0` | Высокая | Мозговой штурм |
| `max_tokens: 500` | Короткий | Классификация |
| `max_tokens: 4000` | Длинный | Детальный анализ |
+48
View File
@@ -0,0 +1,48 @@
# Хранение и загрузка промптов
## Загрузчик (PromptLoader)
```python
# app/integrations/ai/prompt_loader.py
def get_prompt_config(role: str) -> dict | None:
# 1. Пробуем YAML (docs/agent_prompts.yaml)
config = load_prompt_from_yaml(role)
if config:
return config
# 2. Пробуем MD (docs/specs/agents/<role>.md)
return load_prompt_from_spec(role)
```
## Порядок загрузки
1. `docs/agent_prompts.yaml` — если существует, ищет роль по ключу
2. `docs/specs/agents/<role>.md` — если YAML не дал результата, парсит MD
## Пример YAML-файла
```yaml
# docs/agent_prompts.yaml
coordinator:
provider: yandex_gpt
temperature: 0.7
max_tokens: 2000
business_analyst:
provider: yandex_gpt
temperature: 0.5
max_tokens: 3000
```
## Пример MD-файла
```markdown
# docs/specs/agents/business_analyst.md
**Провайдер:** Yandex GPT
**Температура:** 0.5
## Prompt Template
```
Ты — бизнес-аналитик. Проанализируй идею...
```
```
@@ -0,0 +1,19 @@
# {Role Name}
**Провайдер:** {yandex_gpt | gigachat}
**Температура:** {0.1-1.0}
**Макс. токенов:** {500-4000}
## Описание
{Краткое описание роли AI-агента}
## Prompt Template
```text
Ты — {role_name}. {описание}.
{инструкции}
{формат ответа}
```
@@ -0,0 +1,14 @@
# Шаблон промпта в YAML
# Используйте как основу для нового AI-агента
role_name:
system_prompt: |
Ты — {role_name}. {описание роли}.
{инструкции}
{формат ответа}
provider: yandex_gpt # или gigachat
temperature: 0.7 # 0.1-1.0
max_tokens: 2000 # макс. длина
model: "" # опционально: конкретная модель