feat: 增加 screen_id 参数以支持针对特定屏幕的工具执行,优化大屏控制逻辑
This commit is contained in:
+10
-10
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user