Das Chat-Modell gibt leeren Inhalt zurück, wenn ich eine verzögerte ToolMessage aus einem geplanten Rückruf einfügePython

Python-Programme
Anonymous
 Das Chat-Modell gibt leeren Inhalt zurück, wenn ich eine verzögerte ToolMessage aus einem geplanten Rückruf einfüge

Post by Anonymous »

Ich habe einen Planer, der später eine Tool-Funktion auslöst (außerhalb des ursprünglichen Benutzer-Modell-Austauschs).
Wenn die geplante Zeit kommt, sendet er eine ToolMessage zurück an das Chat-Modell – aber das Modell gibt eine leere Nachricht (content="") zurück, anstatt zu antworten.
Das ist der Nachrichtenfluss:

Code: Select all

[HumanMessage] → [AIMessage(initiate scheduling)] →
[ToolMessage (scheduled a function)] →
[AIMessage(confirms scheduling)] → ... →
[ToolMessage (from scheduled function)]
Die letzte ToolMessage wird erstellt, wenn der geplante Rückruf ausgelöst wird.
Hier tritt das Problem auf – das Modell gibt einfach eine leere Zeichenfolge zurück.
Der geplante Rückruf:

Code: Select all

def _task_reminder_callback(thread_id: str, task_description: str):
print(f"\n\n === AGENT: TASK REMINDER! (for thread: {thread_id}) === ")
print(f" TASK: {task_description} ")
print(" ======================================================= \n\n")

config = {"configurable": {"thread_id": thread_id, "user_id": "user_123"}}
workflow_instance = app_state.get("WORKFLOW")

state = workflow_instance.get_state(config)

# Find the most recent tool call for schedule_reminder
tool_call_id = None
if state and state.values and "messages" in state.values:
for msg in reversed(state.values["messages"]):
if hasattr(msg, 'tool_calls') and msg.tool_calls:
for tool_call in msg.tool_calls:
if tool_call.get('name') == 'schedule_reminder':
tool_call_id = tool_call.get('id')
break
if tool_call_id:
break

print(f'[DEBUG] tool_call_id: {tool_call_id}')

if workflow_instance:
try:
reminder_message = ToolMessage(
content=(
f"REMINDER: generate a natural sounding message to remind user "
f"that it's time to do this task:\n\n {task_description}.\n\n"
),
tool_call_id=tool_call_id
)

result = workflow_instance.invoke({"messages": reminder_message}, config=config)

print(f" === Successfully invoked workflow for reminder in thread {thread_id} === \n\n {result} === \n\n")
except Exception as e:
print(f"ERROR in _task_reminder_callback for thread {thread_id}: {e} !!! \n\n")
else:
print(f"ERROR: WORKFLOW not initialized. Cannot run reminder for thread {thread_id}")
Problem
Wenn diese geplante Funktion ausgeführt wird und ich Workflow_instance.invoke() mit einer ToolMessage aufrufe, gibt das Chat-Modell eine leere Inhaltsnachricht AIMessage(content="") zurück – es „reagiert“ nicht wie normalerweise, wenn die Tool-Nachricht direkt während der Konversation kommt Fluss.
Ausgabe:

Code: Select all

HumanMessage(content='ok', additional_kwargs={}, response_metadata={}, id='40ff741d-f298-4fe5-ad54-4e5539aa483c'), AIMessage(content='', additional_kwargs={'function_call': {'name': 'schedule_reminder', 'arguments': '{"time_str": "2025-10-26 13:06:00", "task_description": "drink water"}'}}, response_metadata={'prompt_feedback': {'block_reason': 0, 'safety_ratings': []}, 'finish_reason': 'STOP', 'model_name': 'gemini-2.0-flash', 'safety_ratings': []}, id='lc_run--464ab3c1-8fb3-4c4c-9876-2424c96ac78c-0', tool_calls=[{'name': 'schedule_reminder', 'args': {'time_str': '2025-10-26 13:06:00', 'task_description': 'drink water'}, 'id': 'a1e09652-4b50-4b5c-b2b9-29a280f1b1f6', 'type': 'tool_call'}], usage_metadata={'input_tokens': 1851, 'output_tokens': 30, 'total_tokens': 1881, 'input_token_details': {'cache_read': 0}}), ToolMessage(content="Error: 1 validation error for ScheduleReminderSchema\ntime_str\n  Value error, Time must be in the future. Current time is 2025-10-26 13:06:01.077565 [type=value_error, input_value='2025-10-26 13:06:00', input_type=str]\n    For further information visit https://errors.pydantic.dev/2.11/v/value_error\n Please fix your mistakes.", name='schedule_reminder', id='831e3acd-915c-4063-af40-6bdbd7b221ac', tool_call_id='a1e09652-4b50-4b5c-b2b9-29a280f1b1f6', status='error'), AIMessage(content='I am sorry. I made a mistake. The time must be in the future.  Let me try again.', additional_kwargs={'function_call': {'name': 'schedule_reminder', 'arguments': '{"time_str": "2025-10-26 13:10:00", "task_description": "drink water"}'}}, response_metadata={'prompt_feedback': {'block_reason': 0, 'safety_ratings': []}, 'finish_reason': 'STOP', 'model_name': 'gemini-2.0-flash', 'safety_ratings': []}, id='lc_run--4d55aeef-5b66-4a52-81d4-8f0265bc1b9e-0', tool_calls=[{'name': 'schedule_reminder', 'args': {'time_str': '2025-10-26 13:10:00', 'task_description': 'drink water'}, 'id': '5484ca4f-bdbb-4f64-9f75-66bec5bfbb00', 'type': 'tool_call'}], usage_metadata={'input_tokens': 2010, 'output_tokens': 53, 'total_tokens': 2063, 'input_token_details': {'cache_read': 0}}), ToolMessage(content="Successfully scheduled reminder: 'drink water' at 2025-10-26 13:10:00.", name='schedule_reminder', id='15469566-c614-455e-a311-590cc4cbdac8', tool_call_id='5484ca4f-bdbb-4f64-9f75-66bec5bfbb00'), AIMessage(content='I have scheduled a reminder for you to drink water at 2025-10-26 13:10:00.', additional_kwargs={}, response_metadata={'prompt_feedback': {'block_reason': 0, 'safety_ratings': []}, 'finish_reason': 'STOP', 'model_name': 'gemini-2.0-flash', 'safety_ratings': []}, id='lc_run--ff375360-aa24-4a47-9687-204b669c7c47-0', usage_metadata={'input_tokens': 2074, 'output_tokens': 33, 'total_tokens': 2107, 'input_token_details': {'cache_read': 0}}), ToolMessage(content="REMINDER: generate a natural sounding message to remind user that it's time to do this task:\n\n drink water.\n\n", id='b88ab321-c855-4fb0-b8b0-fe0d1836513d', tool_call_id='3d82238b-5b14-4e4c-a56b-a11545184409'), AIMessage(content='', additional_kwargs={}, response_metadata={'prompt_feedback': {'block_reason': 0, 'safety_ratings': []}, 'finish_reason': 'STOP', 'model_name': 'gemini-2.0-flash', 'safety_ratings': []}, id='lc_run--c1aaa8f5-261e-4b68-a163-61b47e493480-0', usage_metadata={'input_tokens': 2106, 'output_tokens': 0, 'total_tokens': 2106, 'input_token_details': {'cache_read': 0}})]}
Frage
Wie kann ich eine verzögerte ToolMessage korrekt wieder in den Workflow einfügen, damit das Modell wie bei normaler Werkzeugverwendung reagiert?
Gibt es etwas Besonderes daran, wie die Tool_Call_ID oder der Nachrichtenverlauf verknüpft werden muss, damit das Modell weiß, was zu tun ist?
Oder muss ich eine andere Art von Nachricht senden (wie SystemMessage oder AssistantMessage), wenn ich das Modell nach einer Verzögerung reaktiviere?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post