fix: support vision prompt modes
This commit is contained in:
@@ -49,7 +49,7 @@ class WorkflowAgentStage:
|
||||
if stage.vision_enabled:
|
||||
stage_prompt = (
|
||||
f"{stage_prompt}\n\n[视觉能力]\n"
|
||||
f"{vision_system_hint(stage.vision_focus_prompt)}"
|
||||
f"{vision_system_hint(stage.vision_prompt_mode, stage.vision_prompt)}"
|
||||
)
|
||||
instruction = (
|
||||
EDGE_TOOL_STAGE_INSTRUCTION
|
||||
@@ -112,7 +112,8 @@ class WorkflowAgentStage:
|
||||
{
|
||||
"enabled": stage.vision_enabled,
|
||||
"vision_model_resource_id": stage.vision_model_resource_id,
|
||||
"vision_focus_prompt": stage.vision_focus_prompt,
|
||||
"vision_prompt_mode": stage.vision_prompt_mode,
|
||||
"vision_prompt": stage.vision_prompt,
|
||||
"llm_resource_id": stage.llm_resource_id,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -34,8 +34,9 @@ from services.vision import (
|
||||
VISION_TOOL_NAME,
|
||||
analyze_image_with_vision_model,
|
||||
config_with_vision_resource,
|
||||
resolve_vision_question,
|
||||
vision_system_hint,
|
||||
vision_tool_description,
|
||||
vision_tool_schema_parts,
|
||||
)
|
||||
from services.workflow.agent import EDGE_TOOL_STAGE_INSTRUCTION
|
||||
from services.workflow.models import WorkflowRuntimeState, WorkflowStatus
|
||||
@@ -414,7 +415,10 @@ class WorkflowRealtimeController:
|
||||
f"[工作流执行规则]\n{EDGE_TOOL_STAGE_INSTRUCTION}"
|
||||
)
|
||||
if stage.vision_enabled:
|
||||
prompt = f"{prompt}\n{vision_system_hint(stage.vision_focus_prompt)}"
|
||||
prompt = (
|
||||
f"{prompt}\n"
|
||||
f"{vision_system_hint(stage.vision_prompt_mode, stage.vision_prompt)}"
|
||||
)
|
||||
return prompt
|
||||
|
||||
def _build_agent_tools(self, node_id: str) -> list[RealtimeTool]:
|
||||
@@ -573,10 +577,15 @@ class WorkflowRealtimeController:
|
||||
{"status": "stale", "message": "当前 Agent 已经切换。"},
|
||||
continue_response=False,
|
||||
)
|
||||
question = str(arguments.get("question") or "").strip()
|
||||
if not question:
|
||||
try:
|
||||
question = resolve_vision_question(
|
||||
stage.vision_prompt_mode,
|
||||
stage.vision_prompt,
|
||||
arguments,
|
||||
)
|
||||
except ValueError as exc:
|
||||
return RealtimeToolResult(
|
||||
{"status": "error", "message": "视觉问题为空"}
|
||||
{"status": "error", "message": str(exc)}
|
||||
)
|
||||
if self._runtime.capture_image is None:
|
||||
return RealtimeToolResult(
|
||||
@@ -605,7 +614,6 @@ class WorkflowRealtimeController:
|
||||
|
||||
try:
|
||||
if vision_cfg is not None:
|
||||
vision_cfg.vision_focus_prompt = stage.vision_focus_prompt
|
||||
observation = await analyze_image_with_vision_model(
|
||||
vision_cfg,
|
||||
frame,
|
||||
@@ -634,17 +642,16 @@ class WorkflowRealtimeController:
|
||||
}
|
||||
)
|
||||
|
||||
description, properties, required = vision_tool_schema_parts(
|
||||
stage.vision_prompt_mode,
|
||||
stage.vision_prompt,
|
||||
)
|
||||
return (
|
||||
RealtimeTool(
|
||||
name=VISION_TOOL_NAME,
|
||||
description=vision_tool_description(stage.vision_focus_prompt),
|
||||
properties={
|
||||
"question": {
|
||||
"type": "string",
|
||||
"description": "需要根据当前画面判断的具体问题",
|
||||
}
|
||||
},
|
||||
required=("question",),
|
||||
description=description,
|
||||
properties=properties,
|
||||
required=tuple(required),
|
||||
),
|
||||
handler,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user