Conversación continua: historial como mensajes user/assistant reales
El agenticSystem ahora es conversacional — recuerda lo dicho en mensajes anteriores de la misma sesión. - engine.py: direct_response guarda en task_history con formato "User: X → Agent: Y" - context/engine.py: _build_messages() reconstruye el task_history como pares user/assistant reales en el array de messages, antes del mensaje actual. El modelo ve una conversación completa. - base.py: planner/reviewer no emiten AGENT_DELTA al frontend (su output es interno, no para el usuario) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -541,9 +541,29 @@ class ContextEngine:
|
||||
else:
|
||||
user_content = "Awaiting task assignment."
|
||||
|
||||
messages: list[dict[str, Any]] = [{"role": "user", "content": user_content}]
|
||||
messages: list[dict[str, Any]] = []
|
||||
|
||||
# Append real conversation (assistant messages + tool results)
|
||||
# Include previous task exchanges as conversation history
|
||||
# (so the model remembers what was said in earlier turns)
|
||||
for entry in session.task_history[-10:]:
|
||||
summary = entry.get("summary", "")
|
||||
objective = entry.get("objective", "")
|
||||
if summary.startswith("User: "):
|
||||
# Direct response format: "User: X → Agent: Y"
|
||||
parts = summary.split(" → Agent: ", 1)
|
||||
user_msg = objective or parts[0].replace("User: ", "", 1)
|
||||
agent_msg = parts[1] if len(parts) > 1 else summary
|
||||
messages.append({"role": "user", "content": user_msg})
|
||||
messages.append({"role": "assistant", "content": agent_msg})
|
||||
elif objective:
|
||||
# Task with tools — include as compact exchange
|
||||
messages.append({"role": "user", "content": objective})
|
||||
messages.append({"role": "assistant", "content": summary[:500] if summary else "Tarea completada."})
|
||||
|
||||
# Current user message
|
||||
messages.append({"role": "user", "content": user_content})
|
||||
|
||||
# Append real conversation (assistant messages + tool results from current step)
|
||||
if conversation:
|
||||
messages.extend(conversation)
|
||||
|
||||
|
||||
@@ -123,6 +123,23 @@ class OrchestratorEngine:
|
||||
# Direct response — no plan needed (saludo, pregunta simple)
|
||||
if isinstance(plan_result, str):
|
||||
logger.info("Planner returned direct response for task %s", task.task_id)
|
||||
|
||||
# Save to task history so conversation context is preserved
|
||||
session.task_history.append({
|
||||
"task_id": task.task_id,
|
||||
"objective": message,
|
||||
"status": "completed",
|
||||
"steps": 0,
|
||||
"facts": [],
|
||||
"key_data": {},
|
||||
"tools_used": [],
|
||||
"artifacts_count": 0,
|
||||
"summary": f"User: {message[:200]} → Agent: {plan_result[:200]}",
|
||||
"review": "",
|
||||
})
|
||||
if len(session.task_history) > 20:
|
||||
session.task_history = session.task_history[-20:]
|
||||
|
||||
task.status = TaskStatus.COMPLETED
|
||||
session.complete_task()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user