提交 fbb895f8 authored 作者: 陈泽健's avatar 陈泽健

fix(element-locate): 始终调用 Claude CLI 进行元素定位,不再依赖置信度判断

- 去掉置信度 < 0.6 的条件判断,每次定位都调用宿主机 Claude CLI
- Claude 返回结果与关键词算法重复时,提升置信度并标记为 Claude 确认
- 降低 Claude 结果采纳阈值为 0.3,确保有效结果不被丢弃
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 b2854e30
......@@ -197,31 +197,36 @@ def build_locator_candidates(step_description: str, elements: list, page_title:
candidates.sort(key=lambda x: x['confidence'], reverse=True)
# 如果最高置信度不足 0.6,通过 SSH 调用宿主机上的 ai_locate_worker.py
# 让宿主机直接用 Playwright 访问页面获取真实元素 + Claude CLI 分析
needs_claude = not candidates or candidates[0]['confidence'] < 0.6
if needs_claude:
logger.info("关键词算法置信度不足,调用宿主机 ai_locate_worker.py...")
claude_result = call_claude_code_via_ssh(step_description, page_url)
if claude_result and claude_result.get('locator_type') and claude_result.get('locator_value'):
confidence = claude_result.get('confidence', 0.8)
if confidence > 0.5:
is_duplicate = any(c['locator_value'] == claude_result['locator_value'] for c in candidates)
if not is_duplicate:
candidates.insert(0, {
'locator_type': claude_result['locator_type'],
'locator_value': claude_result['locator_value'],
'confidence': confidence,
'element_info': {'tag': '', 'type': '', 'placeholder': '', 'text': '', 'id': ''},
'_claude_reason': claude_result.get('reason', '')
})
logger.info(f"Claude Code 匹配: {claude_result['locator_value']} (置信度: {confidence})")
else:
logger.info("Claude Code 结果与已有候选重复,跳过")
# 始终调用宿主机上的 ai_locate_worker.py,让 Claude CLI 进行精确匹配
# 不再依赖置信度判断,确保每次都使用 Claude Code 能力
logger.info("调用宿主机 ai_locate_worker.py 进行 Claude CLI 精确匹配...")
claude_result = call_claude_code_via_ssh(step_description, page_url)
if claude_result and claude_result.get('locator_type') and claude_result.get('locator_value'):
confidence = claude_result.get('confidence', 0.8)
if confidence > 0.3: # 降低阈值,只要 Claude 返回有效结果就采纳
# 检查是否与已有候选重复
existing_values = [c['locator_value'] for c in candidates]
if claude_result['locator_value'] not in existing_values:
candidates.insert(0, {
'locator_type': claude_result['locator_type'],
'locator_value': claude_result['locator_value'],
'confidence': confidence,
'element_info': {'tag': '', 'type': '', 'placeholder': '', 'text': '', 'id': ''},
'_claude_reason': claude_result.get('reason', 'Claude Code 分析匹配')
})
logger.info(f"Claude Code 匹配: {claude_result['locator_value']} (置信度: {confidence})")
else:
logger.info(f"Claude Code 置信度不足: {confidence}")
# 如果重复,提升该候选的置信度
for c in candidates:
if c['locator_value'] == claude_result['locator_value']:
c['confidence'] = max(c['confidence'], confidence)
c['_claude_reason'] = claude_result.get('reason', 'Claude Code 确认')
break
logger.info(f"Claude Code 确认已有候选: {claude_result['locator_value']}")
else:
logger.info("Claude Code 未返回有效结果")
logger.info(f"Claude Code 置信度过低: {confidence}")
else:
logger.warning("Claude Code 未返回有效结果,使用关键词算法候选")
return candidates[:5]
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论