feat: Review-Agent (Multi-Agent-Kommunikation)
- Session hat optionalen ReviewAgentId + MaxReviewIterations - Nach end_turn des Worker-Agents wird der Review-Agent aufgerufen - Review-Agent bekommt Worker-Konversation als Kontext + kann Tools nutzen - [APPROVED] in Review-Antwort → fertig, sonst Feedback an Worker - Worker korrigiert und wird erneut reviewed (max N Runden) - SSE-Events: review_start, review_text, review_tool_use, review_feedback, review_approved - Chat-UI: Review-Phase als eigene Bubble mit Header, Text, Status - Session-Page: Review-Agent-Picker (gleicher Agent-Card-Helper) - Dashboard: Review-Agent-Badge auf Session-Cards - DB-Migration: review_agent_id, max_review_iterations auf sessions
This commit is contained in:
1 parent
2598656f1c
commit
5fe3f8ac87
12 files changed
+619
-18
No files matched your search
+38
-1
@@ -106,6 +106,42 @@ public class ChatService
|
||||
if (!string.IsNullOrWhiteSpace(systemPromptText))
|
||||
systemPrompt.Add(new { type = "text", text = systemPromptText });
|
||||
|
||||
// Review-Agent vorbereiten (falls konfiguriert)
|
||||
ReviewContext reviewContext = null;
|
||||
if (!string.IsNullOrEmpty(session.ReviewAgentId))
|
||||
{
|
||||
var reviewAgent = await _db.GetAgent(session.ReviewAgentId);
|
||||
if (reviewAgent != null)
|
||||
{
|
||||
var reviewModelId = ResolveModelId(reviewAgent.Model);
|
||||
var reviewMarked = await _db.GetMarkedMessages(sessionId);
|
||||
var reviewMemDir = _memoryService.GetAgentMemoryDir(reviewAgent.AgentId);
|
||||
var reviewSkills = await _db.GetAgentSkills(reviewAgent.AgentId);
|
||||
var reviewWorkspace = workspace; // gleicher Workspace wie Worker
|
||||
var reviewSystemText = SystemPromptBuilder.Build(
|
||||
reviewAgent, session, reviewMarked, _memoryService, reviewMemDir,
|
||||
reviewSkills, _skillService, userPersona: user?.GetEffectivePersona(),
|
||||
resolvedWorkspace: reviewWorkspace);
|
||||
|
||||
var reviewPrompt = new List<object>();
|
||||
if (!string.IsNullOrWhiteSpace(reviewSystemText))
|
||||
reviewPrompt.Add(new { type = "text", text = reviewSystemText });
|
||||
|
||||
reviewContext = new ReviewContext
|
||||
{
|
||||
ModelId = reviewModelId,
|
||||
SystemPrompt = reviewPrompt,
|
||||
AgentId = reviewAgent.AgentId,
|
||||
Workspace = reviewWorkspace,
|
||||
UseMemory = reviewAgent.UseMemory,
|
||||
WebSearchVersion = reviewAgent.WebSearchVersion,
|
||||
ToolChoice = reviewAgent.ToolChoice ?? "any",
|
||||
MaxReviewIterations = session.MaxReviewIterations > 0 ? session.MaxReviewIterations : 3,
|
||||
Agent = reviewAgent
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return new ChatContext
|
||||
{
|
||||
ChainId = chainId,
|
||||
@@ -120,7 +156,8 @@ public class ChatService
|
||||
WebSearchVersion = agent.WebSearchVersion,
|
||||
MaxIterations = maxIterations,
|
||||
Agent = agent,
|
||||
Session = session
|
||||
Session = session,
|
||||
Review = reviewContext
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user