3.6 KiB
3.6 KiB
Round 88:对话指定数据包与排产算法
目标
让用户可以用一条自然语言指令同时指定数据来源和算法,例如:
使用 Optimize synthetic debug V1 数据,用 EDD 算法生成排产方案
也支持指定本机目录里的文件:
使用 D:\aps-data 目录下的 orders.xlsx 数据用 EDD 算法生成排产方案
系统应解析出 dataPackRef、engine=OPTIMIZE 和 sortMode=EDD,从已登记的数据包加载完整世界,再通过现有柔性闭环流程生成方案。
设计
- 已登记数据包使用
server/state/packs.py的通用注册表解析,不增加某个客户或某个文件的专用 loader。目录/文件指令复用analyze_project_deep的通用 Excel/CSV/SQL 读取器;路径不存在时不回退到旧世界。 - 对话解析器识别 Optimize 算法及 EDD/SPT/PRIORITY/FIFO/LPT/CR/ATC 等排产规则,并保留原有未点名算法时的默认行为。
_run_flex在明确指定数据包时替换当前会话世界、重置 ID 计数器并记录所选包;随后把算法交给现有run_flex_schedule(..., engine_type="OPTIMIZE"),不复制调度逻辑。- 结果块增加数据包和算法证据,文本明确显示“使用哪个数据包、哪个算法、生成多少虚拟产线/工单”。
实施范围
server/state/packs.py:包别名和通用引用解析。server/agent_core/intent.py:数据包引用、算法槽位和自然语言参数。server/aps_domain/workflow.py:加载包、重置计数器、结果证据和未找到包的错误提示。server/data/packs/optimize-simulation-v1.json:补充可读 aliases(仅包元数据)。tests/golden/test_optimize_chat_data_selection.py:解析和端到端柔性排产验证。
验收标准
- 指令
使用 Optimize synthetic debug V1 数据,用 EDD 算法生成排产方案命中flex.schedule,参数包含dataPackRef、engine=OPTIMIZE、sortMode=EDD。 - 指令
使用 D:\\aps-data 目录下的 orders.xlsx 数据用 EDD 算法生成排产方案命中flex.schedule,参数包含dataDir、dataFile、dataPath、engine=OPTIMIZE、sortMode=EDD。 - 在干净会话中执行后得到
FEASIBLE、10 条虚拟产线、72 条工单,结果块能看到数据包名称和算法。 - 未知数据包不会创建排产版本,并返回可用数据包提示。
- 不存在的目录或文件不会使用当前旧数据排产,而是直接返回路径错误。
- 普通“生成一版柔性排产方案”仍走原来的 CLOSED_LOOP 默认路径。
验证命令
pytest -q tests/golden/test_optimize_chat_data_selection.py tests/golden/test_optimize_chat_trigger.py tests/golden/test_optimize_simulation_world_pack.py tests/golden/test_optimize_engine.py
再使用独立 APS_HOME 启动后端和前端,通过 /api/chat 发送上述完整中文指令,检查 SSE 中的 intent 参数、FEASIBLE 结果及 10/72 统计。
风险与边界
- 数据包选择是显式的会话世界替换,只允许来自注册表的路径;本轮不开放任意路径加载。
- 规则名由 Optimize 适配器支持的 dispatch rule 白名单约束,未知算法不会被静默当成 EDD。
- 当前轮次只在
round/88-chat-data-algorithm-selection验证;完成后停在合并前,等待用户确认是否合并到codex/integrate-optimize。
计划审计
PLAN AUDIT: PASS
Blocking issues: none
Clarification needed: none
Non-blocking improvements: 后续可再把算法白名单从代码抽到能力描述接口;目录导入仍沿用现有 P2 确认流程的审计策略。