143 lines
6.6 KiB
Markdown
143 lines
6.6 KiB
Markdown
# Multi-Agent Today's Tasks System - Implementation Plan
|
|
|
|
**Date**: 2025-03-01
|
|
**Status**: Architecture Plan
|
|
**Target System**: Today's Tasks Workflow (Multi-Agent Committee)
|
|
|
|
---
|
|
|
|
## 📋 Executive Summary
|
|
|
|
This document outlines the implementation plan for transforming the "Today's Tasks" system from a single-prompt generator into a **Multi-Agent "Committee" Architecture**.
|
|
|
|
Instead of a generic LLM generating tasks, we will leverage our existing specialized agents (`StrategyArchitect`, `ContentStrategist`, `SEOOptimization`, etc.) to **propose high-value, context-aware tasks** based on their specific domain knowledge. A central "Manager" (Orchestrator) will then consolidate, prioritize, and deduplicate these proposals into a cohesive daily plan.
|
|
|
|
We will also introduce a **Self-Learning Task Memory** using `txtai` to ensure the system learns from user behavior (acceptances/rejections) and avoids redundant suggestions.
|
|
|
|
---
|
|
|
|
## 🏗️ Architecture: The "Committee" Model
|
|
|
|
### 1. Agent Roles & Responsibilities
|
|
|
|
Each agent will act as a "Department Head," submitting daily proposals for their specific pillar.
|
|
|
|
| Workflow Pillar | Owner Agent | Data Sources | Proposal Type Example |
|
|
| :--- | :--- | :--- | :--- |
|
|
| **PLAN** | `StrategyArchitectAgent` | Content Pillars, Strategy Doc | "Review 'AI Trends' pillar strategy - engagement dropped 10%." |
|
|
| **GENERATE** | `ContentStrategyAgent` | Content Gaps, Trends | "Draft a blog post on 'Vector Search' (High Opportunity Gap)." |
|
|
| **PUBLISH** | `SocialAmplificationAgent` | Audience Activity, Calendar | "Schedule your 'Weekly Recap' thread for 10 AM (Peak Audience)." |
|
|
| **ANALYZE** | `SEOOptimizationAgent` | GSC, Site Health, Rankings | "Fix 3 broken links on your pricing page to recover link equity." |
|
|
| **ENGAGE** | `SocialAmplificationAgent` | Social Mentions, Comments | "Reply to 3 unanswered comments on your latest LinkedIn post." |
|
|
| **REMARKET** | `CompetitorResponseAgent` | Competitor Activity | "Competitor X posted about [Topic]. Create a counter-narrative Reel." |
|
|
|
|
### 2. The Workflow (Daily Cycle)
|
|
|
|
1. **Morning Briefing (Parallel)**: `TodayWorkflowManager` polls all agents via `propose_daily_tasks(context)`.
|
|
2. **Aggregation**: Manager collects raw proposals (~10-15 tasks).
|
|
3. **Intelligence Filter (Self-Learning)**:
|
|
* Check `TaskMemoryIndex` (txtai).
|
|
* Filter out tasks similar to previously **Rejected** tasks.
|
|
* Deprioritize tasks similar to recently **Completed** tasks.
|
|
4. **Consolidation**: Deduplicate overlapping ideas (e.g., SEO & Content agents both suggesting the same topic).
|
|
5. **Final Selection**: Select top 1-3 tasks per pillar based on user goals (e.g., "Growth" mode = more Publish/Remarket tasks).
|
|
|
|
---
|
|
|
|
## 🚀 Implementation Phases
|
|
|
|
### Phase 1: Agent Interface Standardization (The "Voice")
|
|
**Objective**: Give every agent the ability to speak the "Task Proposal" language.
|
|
**Status**: ✅ Completed
|
|
|
|
* **Task 1.1**: Define `TaskProposal` schema (Pydantic model). ✅
|
|
* Fields: `title`, `description`, `pillar`, `priority`, `reasoning`, `estimated_time`, `action_type`.
|
|
* **Task 1.2**: Update `BaseALwrityAgent` with abstract `propose_daily_tasks(context: Dict) -> List[TaskProposal]`. ✅
|
|
* **Task 1.3**: Implement `propose_daily_tasks` in all specialized agents. ✅
|
|
* *StrategyArchitect*: Logic to check pillar health.
|
|
* *ContentStrategist*: Logic to check content gaps.
|
|
* *SEOAgent*: Logic to check GSC alerts/errors.
|
|
* *SocialAmplification*: Logic for publish/engage.
|
|
* *CompetitorResponse*: Logic for monitoring.
|
|
|
|
### Phase 2: The Manager (The "Orchestrator")
|
|
**Objective**: Build the backend service that coordinates the committee.
|
|
**Status**: ✅ Completed
|
|
|
|
* **Task 2.1**: Refactor `TodayWorkflowGenerator` in `today_workflow_service.py`. ✅
|
|
* Replace single-prompt generation with `gather_agent_proposals()`.
|
|
* Implement `asyncio.gather` for parallel agent execution (performance critical).
|
|
* **Task 2.2**: Implement `consolidate_proposals()` logic. ✅
|
|
* Use a lightweight LLM call to merge/rank the raw list if needed, or deterministic logic for speed.
|
|
* **Task 2.3**: Connect to Frontend. ✅
|
|
* Ensure the API response matches the existing `TodayTask` frontend interface.
|
|
|
|
### Phase 3: Self-Learning Memory (The "Brain")
|
|
**Objective**: Stop the system from nagging users about things they hate or just did.
|
|
**Status**: ✅ Completed
|
|
|
|
* **Task 3.1**: Create `TaskHistory` model in DB. ✅
|
|
* Store: `task_vector_id`, `original_text`, `status` (completed/rejected/skipped), `user_feedback`.
|
|
* **Task 3.2**: Implement `TaskMemoryService` using `txtai`. ✅
|
|
* Index tasks with metadata.
|
|
* Implement `is_redundant_or_rejected(proposal_text)` check.
|
|
* **Task 3.3**: Wire feedback loop. ✅
|
|
* When user clicks "Dismiss" or "Complete" in frontend, update the `txtai` index.
|
|
|
|
### Phase 4: UI Feedback & Transparency
|
|
**Objective**: Show the user *why* a task was suggested.
|
|
|
|
* **Task 4.1**: Update Frontend `TodayTask` card.
|
|
* Add "Suggested by [Agent Name]" badge.
|
|
* Add "Why?" tooltip (e.g., "Because Competitor X did Y").
|
|
* **Task 4.2**: Add "Train my Agents" feedback.
|
|
* "Don't show this again" vs "Not today".
|
|
|
|
---
|
|
|
|
## 📊 Data Models
|
|
|
|
### 1. TaskProposal (Backend)
|
|
```python
|
|
class TaskProposal(BaseModel):
|
|
title: str
|
|
description: str
|
|
pillar_id: str # plan, generate, publish, analyze, engage, remarket
|
|
priority: str # high, medium, low
|
|
estimated_time: int # minutes
|
|
source_agent: str # e.g., "SEOOptimizationAgent"
|
|
reasoning: str # "Detected 404 error spike"
|
|
context_data: Optional[Dict] # e.g., {"url": "..."}
|
|
```
|
|
|
|
### 2. TaskMemoryDocument (txtai)
|
|
```json
|
|
{
|
|
"id": "uuid",
|
|
"text": "Write a blog post about AI Trends",
|
|
"embedding": [vector],
|
|
"tags": ["generate", "content_strategy"],
|
|
"user_id": "123",
|
|
"status": "rejected",
|
|
"last_updated": "2024-03-01T10:00:00Z"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Technical Considerations
|
|
|
|
* **Performance**: Calling 6 agents + LLMs in parallel can be slow.
|
|
* *Mitigation*: Set strict timeouts (e.g., 5s) per agent. Use "Lite" logic for proposals (e.g., check DB/Cache instead of live crawling) where possible.
|
|
* **Fallback**: If agents time out or fail, fall back to the `_fallback_tasks` template currently in place.
|
|
* **Token Usage**: Summarize context before sending to agents to minimize input tokens.
|
|
|
|
---
|
|
|
|
## 📅 Execution Timeline
|
|
|
|
1. **Day 1**: Phase 1 (Interfaces & 2 core agents).
|
|
2. **Day 2**: Phase 2 (Orchestrator wiring).
|
|
3. **Day 3**: Phase 3 (txtai Memory integration).
|
|
4. **Day 4**: Phase 1 completion (remaining agents) & Phase 4 (UI polish).
|