fix(audit): 第五轮审计修复 — 反思LLM分析、语义路由、并行执行、错误中文化
- P2: 反思引擎接入 LLM 深度行为分析 (analyze_patterns_with_llm) - P3-M6: 语义路由 RuntimeLlmIntentDriver 真实 LLM 匹配 - P3-L1: V2 Pipeline execute_parallel 改用 buffer_unordered 真正并行 - P3-S10: Rust 用户可见错误提示统一中文化 累计修复 27 项,完成度 ~72% → ~78%
This commit is contained in:
@@ -763,6 +763,7 @@ pub struct PipelineCandidateInfo {
|
||||
#[tauri::command]
|
||||
pub async fn route_intent(
|
||||
state: State<'_, Arc<PipelineState>>,
|
||||
kernel_state: State<'_, KernelState>,
|
||||
user_input: String,
|
||||
) -> Result<RouteResultResponse, String> {
|
||||
use zclaw_pipeline::{TriggerParser, Trigger, TriggerParam, compile_trigger};
|
||||
@@ -859,6 +860,54 @@ pub async fn route_intent(
|
||||
});
|
||||
}
|
||||
|
||||
// Semantic match via LLM (if kernel is initialized)
|
||||
let triggers = parser.triggers();
|
||||
if !triggers.is_empty() {
|
||||
let llm_driver = {
|
||||
let kernel_lock = kernel_state.lock().await;
|
||||
kernel_lock.as_ref().map(|k| k.driver())
|
||||
};
|
||||
|
||||
if let Some(driver) = llm_driver {
|
||||
use zclaw_pipeline::{RuntimeLlmIntentDriver, LlmIntentDriver};
|
||||
let intent_driver = RuntimeLlmIntentDriver::new(driver);
|
||||
|
||||
if let Some(result) = intent_driver.semantic_match(&user_input, &triggers).await {
|
||||
tracing::debug!(
|
||||
"[route_intent] Semantic match: pipeline={}, confidence={}",
|
||||
result.pipeline_id, result.confidence
|
||||
);
|
||||
|
||||
let trigger = parser.get_trigger(&result.pipeline_id);
|
||||
let mode = "auto".to_string();
|
||||
|
||||
let missing_params: Vec<MissingParamInfo> = trigger
|
||||
.map(|t| {
|
||||
t.param_defs.iter()
|
||||
.filter(|p| p.required && !result.params.contains_key(&p.name) && p.default.is_none())
|
||||
.map(|p| MissingParamInfo {
|
||||
name: p.name.clone(),
|
||||
label: p.label.clone(),
|
||||
param_type: p.param_type.clone(),
|
||||
required: p.required,
|
||||
default: p.default.clone(),
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
.unwrap_or_default();
|
||||
|
||||
return Ok(RouteResultResponse::Matched {
|
||||
pipeline_id: result.pipeline_id,
|
||||
display_name: trigger.and_then(|t| t.display_name.clone()),
|
||||
mode,
|
||||
params: result.params,
|
||||
confidence: result.confidence,
|
||||
missing_params,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// No match - return suggestions
|
||||
let suggestions: Vec<PipelineCandidateInfo> = parser.triggers()
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user