Files
LocalAgent/docs/P1-03_optimization.md
Mimikko-zeus 8a538bb950 feat: refactor API key configuration and enhance application initialization
- Renamed `check_environment` to `check_api_key_configured` for clarity, simplifying the API key validation logic.
- Removed the blocking behavior of the API key check during application startup, allowing the app to run while providing a prompt for configuration.
- Updated `LocalAgentApp` to accept an `api_configured` parameter, enabling conditional messaging for API key setup.
- Enhanced the `SandboxRunner` to support backup management and improved execution result handling with detailed metrics.
- Integrated data governance strategies into the `HistoryManager`, ensuring compliance and improved data management.
- Added privacy settings and metrics tracking across various components to enhance user experience and application safety.
2026-02-27 14:32:30 +08:00

287 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P1-03 相似任务匹配优化方案
## 问题概述
**问题标题**: 相似任务匹配过粗,误复用概率高
**问题类型**: 业务规则/交互体验
**所在位置**: history/manager.py:219, history/manager.py:232, app/agent.py:374
### 原问题描述
仅用简单关键词 Jaccard 相似度,无法区分关键参数差异(格式、目录、命名规则),容易"看起来相似但目标不同"。
### 影响分析
- 错误输出
- 用户误操作
- 对复用能力失去信任
---
## 优化方案
### 1. 结构化任务特征提取 (`history/task_features.py`)
#### 核心改进
将简单的关键词匹配升级为**多维度结构化特征提取**
**提取的特征维度**:
- **文件格式** (.txt, .csv, .json 等) - 权重 15%
- **目录路径** (D:/photos, C:/documents 等) - 权重 15% (关键)
- **文件名** - 权重隐含在关键词中
- **命名规则** (按日期、按序号、按前缀等) - 权重 15%
- **操作类型** (重命名、转换、批量处理等) - 权重 20% (关键)
- **数量信息** (100个、所有、批量) - 权重 10%
- **约束条件** (如果、当、满足等) - 权重 5%
- **基础关键词** - 权重 20%
#### 示例对比
**场景 1: 高度相似(仅目录不同)**
```
当前: 将 D:/photos 目录下的所有 .jpg 图片按日期重命名
历史: 将 C:/images 目录下的所有 .jpg 图片按日期重命名
相似度: 77% (旧方法可能 90%+)
差异: 目录路径 [关键差异]
```
**场景 2: 看似相似实则不同(操作类型不同)**
```
当前: 将 D:/photos 目录下的所有 .jpg 图片转换为 .png
历史: 将 D:/photos 目录下的所有 .jpg 图片按日期重命名
相似度: 32.5% (旧方法可能 70%+)
差异:
- 文件格式 [重要]: 当前=.png, 历史=(无)
- 命名规则 [重要]: 当前=(无), 历史=按日期
- 操作类型 [关键]: 当前=转换, 历史=重命名
```
**场景 3: 数量差异**
```
当前: 批量转换 100 个 .docx 文件为 .pdf
历史: 批量转换所有 .docx 文件为 .pdf
相似度: 85.33%
差异: 数量 [一般]: 当前=100个, 历史=所有
```
---
### 2. 差异分级与可视化 (`ui/reuse_confirm_dialog.py`)
#### 差异重要性分级
- **critical (关键)**: 操作类型、目录路径 - 红色标记
- **high (重要)**: 文件格式、命名规则 - 橙色标记
- **medium (一般)**: 数量、约束条件 - 蓝色标记
- **low (次要)**: 其他细节 - 灰色标记
#### 新的确认对话框
替换原有的简单 `messagebox.askyesno`,提供:
- **相似度百分比显示** (带颜色编码)
- **差异列表** (分类、分级、对比显示)
- **当前值 vs 历史值** 的清晰对比
- **关键差异统计** (如 "2 关键, 3 重要")
- **可滚动界面** (支持多个差异项)
---
### 3. 度量指标收集 (`history/reuse_metrics.py`)
#### 收集的指标
按照建议的度量指标实现:
**复用行为指标**:
- `total_offered`: 复用建议提供次数
- `total_accepted`: 用户接受次数
- `total_rejected`: 用户拒绝次数
- `acceptance_rate`: 接受率 = accepted / offered
- `rejection_rate`: 拒绝率 = rejected / offered
**复用质量指标**:
- `total_executed`: 复用后执行次数
- `success_rate`: 复用后成功率
- `failure_rate`: 复用后失败率
- `rollback_rate`: 复用后回滚率
**特征统计**:
- `avg_similarity`: 平均相似度
- `avg_differences`: 平均差异数量
- `avg_critical_differences`: 平均关键差异数量
#### 数据持久化
所有指标保存在 `workspace/reuse_metrics.json`,包含:
- 时间戳
- 原始任务 ID
- 新任务 ID
- 相似度分数
- 用户操作 (offered/accepted/rejected/executed/rollback)
- 差异统计
- 执行结果
---
### 4. 集成到主流程 (`app/agent.py`)
#### 修改点 1: `_handle_execution` 方法
```python
# 使用增强匹配获取详细信息
result = self.history.find_similar_success(user_input, return_details=True)
if result:
similar_record, similarity_score, differences = result
# 记录指标
metrics.record_reuse_offered(...)
# 显示增强对话框
show_reuse_confirm_dialog(
similarity_score=similarity_score,
differences=differences,
on_confirm=...,
on_reject=...
)
```
#### 修改点 2: `_on_execution_complete` 方法
```python
# 如果是复用任务,记录执行结果
if self.current_task.get('is_reuse'):
metrics.record_reuse_execution(
original_task_id=...,
new_task_id=result.task_id,
success=result.success
)
```
---
## 技术实现细节
### 特征提取算法
**文件格式提取**:
```python
FILE_FORMAT_PATTERN = r'\.(txt|csv|json|xml|xlsx?|docx?|pdf|png|jpe?g|...)'
```
**目录路径提取** (支持 Windows 和 Unix):
```python
DIR_PATH_PATTERN = r'(?:[a-zA-Z]:\\[\w\\\s\u4e00-\u9fa5.-]+|/[\w/\s\u4e00-\u9fa5.-]+|...)'
```
**操作类型识别** (关键词映射):
```python
OPERATION_KEYWORDS = {
'重命名': ['重命名', '改名', '命名', '更名'],
'转换': ['转换', '转为', '转成', '变成'],
'批量处理': ['批量', '批处理', '一次性'],
...
}
```
### 相似度计算
**加权多维度评分**:
```python
total_score = (
keyword_sim * 0.2 +
format_sim * 0.15 +
dir_sim * 0.15 +
naming_sim * 0.15 +
operation_sim * 0.2 +
quantity_sim * 0.1 +
constraint_sim * 0.05
)
```
---
## 测试结果
运行 `tests/test_task_features.py` 验证:
**场景 1**: 仅目录不同 → 相似度 77% (合理,有关键差异)
**场景 2**: 操作类型不同 → 相似度 32.5% (正确降低)
**场景 3**: 完全不同任务 → 相似度 15% (正确识别)
**场景 4**: 仅数量不同 → 相似度 85.33% (合理,非关键差异)
**边界情况**: 完全相同 → 100%, 空输入 → 100%
---
## 预期效果
### 优化前
- 简单 Jaccard 相似度
- 无差异提示
- 用户盲目复用
- 高误操作率
### 优化后
- 多维度结构化匹配
- 清晰的差异对比
- 知情决策
- 降低误复用率
### 度量指标预期改善
- **复用确认放弃率**: 对于有关键差异的任务,用户会更多选择"生成新代码"
- **复用后失败率**: 下降 (因为用户看到差异后会更谨慎)
- **复用后回滚率**: 下降 (减少误操作)
- **用户信任度**: 提升 (透明的差异展示)
---
## 文件清单
### 新增文件
1. `history/task_features.py` - 任务特征提取与匹配核心模块
2. `history/reuse_metrics.py` - 复用度量指标收集模块
3. `ui/reuse_confirm_dialog.py` - 增强的复用确认对话框
4. `tests/test_task_features.py` - 测试用例
### 修改文件
1. `history/manager.py` - 增强 `find_similar_success` 方法
2. `app/agent.py` - 集成新的匹配逻辑和指标收集
---
## 使用示例
### 查看复用统计
```python
from history.reuse_metrics import get_reuse_metrics
metrics = get_reuse_metrics(workspace_path)
stats = metrics.get_statistics()
print(f"接受率: {stats['acceptance_rate']:.1%}")
print(f"成功率: {stats['success_rate']:.1%}")
print(f"平均相似度: {stats['avg_similarity']:.1%}")
```
### 手动测试匹配
```python
from history.task_features import get_task_matcher
matcher = get_task_matcher()
score, diffs = matcher.calculate_similarity(
"将 D:/photos 下的 .jpg 按日期重命名",
"将 C:/images 下的 .jpg 按日期重命名"
)
print(f"相似度: {score:.1%}")
for diff in diffs:
print(f"{diff.category}: {diff.current_value} vs {diff.history_value}")
```
---
## 后续优化建议
1. **机器学习优化**: 根据用户的接受/拒绝行为,动态调整各维度权重
2. **智能阈值**: 根据差异重要性动态调整相似度阈值
3. **差异解释**: 使用 LLM 生成自然语言的差异说明
4. **A/B 测试**: 对比优化前后的用户行为数据
---
## 总结
本次优化通过**结构化特征提取**、**差异可视化**和**度量指标收集**三个方面,从根本上解决了相似任务匹配过粗的问题。用户现在可以清楚地看到任务之间的关键差异,做出更明智的复用决策,从而提升系统的可信度和用户体验。