feat: 增加 screen_id 参数以支持针对特定屏幕的工具执行,优化大屏控制逻辑

This commit is contained in:
Pine
2026-08-19 14:28:10 +08:00
parent e72442dae0
commit 3688d5d0b1
7 changed files with 52 additions and 42 deletions
+10 -10
View File
@@ -135,32 +135,32 @@ def _chat_once(messages, with_tools=True):
return json.loads(resp.read().decode("utf-8"))
def _fallback(messages):
def _fallback(messages, screen_id=""):
"""DashScope 不可用时回退本地规则引擎"""
from .ai_tools import run_chat as rule_run
result = rule_run(messages)
# 规则引擎产出的工具同样执行(MQTT 广播),并汇总发布结果
_, all_ok = _exec_all(result.get("tools", []))
# 规则引擎产出的工具同样执行(MQTT 广播,带发起屏幕),并汇总发布结果
_, all_ok = _exec_all(result.get("tools", []), screen_id)
result["model"] = "rule-engine"
result["mqtt_published"] = all_ok
return result
def _exec_all(tools):
"""执行工具列表,返回 (results, all_ok)"""
def _exec_all(tools, screen_id=""):
"""执行工具列表(带发起屏幕 screen_id,工具结果只发到该屏),返回 (results, all_ok)"""
from .ai_tools import run_tools
results, all_ok = run_tools(tools)
results, all_ok = run_tools(tools, screen_id)
return results, all_ok
def run_chat(messages):
def run_chat(messages, screen_id=""):
"""入口:{reply, tools, model}
tools 已在后端执行(MQTT 广播),返回值供请求端本地同步执行"""
tools 已在后端执行(MQTT 广播,带发起屏幕 screen_id),返回值供请求端本地同步执行"""
if not settings.DASHSCOPE_API_KEY:
log.warning("未配置 DASHSCOPE_API_KEY,使用本地规则引擎")
return _fallback(messages)
return _fallback(messages, screen_id)
# 注入园区知识库(标准资料口径):按用户 query 检索命中段落动态注入,
# 替代原 1200 字截断全量注入(避免尾部知识丢失)。无命中时回退 brief()。
@@ -226,7 +226,7 @@ def run_chat(messages):
"content": json.dumps({"ok": True}, ensure_ascii=False),
})
# 工具执行(MQTT 广播),并汇总发布结果
results, all_ok = _exec_all(executed)
results, all_ok = _exec_all(executed, screen_id)
log.info("llm: 工具执行结果 %s", results)
for t in executed:
log.info("llm: 执行 %s %s", t["type"], json.dumps(t["params"], ensure_ascii=False))