2026年6月26日 2 分钟阅读

用自然语言描述排班难题?VibeSolve 实战:Plain English 秒变 Timefold 优化求解器

tinyash 0 条评论

在日常开发中,”优化排班””路径规划””资源调度”这类问题听起来就像数学竞赛题。学校需要给教师排课,物流公司需要规划配送路线,医院需要安排护士班次……这类问题统称为约束求解(Constraint Satisfaction),传统做法要么写复杂的数学公式,要么购买昂贵的企业级求解器。

今天介绍一个开源项目 VibeSolve,它能让你用纯自然语言描述优化问题,然后自动生成完整的 Java + Timefold 求解器项目——包含领域模型、约束条件、REST API、测试用例,并通过 Docker 自动验证编译和运行的正确性。

安装与准备

VibeSolve 是 Python CLI 工具,15 行命令以内就能跑起来:

git clone https://github.com/vibesolve/vibesolve.git
cd vibesolve
conda create -n vibesolve python=3.11 -y
conda activate vibesolve
pip install -e .
cp .env.example .env.local

依赖只有三项:Python 3.11+、Docker 20+(用于自动验证)、一个 LLM API Key(默认 OpenAI,支持 Anthropic Claude)。Docker 用于编译和运行生成的 Java 项目,VibeSolve 会在首次运行时自动构建验证镜像。

实战场景 1:学校排课(入门级)

VibeSolve 内置了一个学校排课示例,一行命令即可体验完整流程:

vibesolve run

整个流程是这样的:VibeSolve 读取描述文件 → 7 个 specialized LLM Agent 级联执行(解析→建模→约束→IO→集成→Review→Fix)→ 生成完整的 Maven 项目 → 在 Docker 中 mvn compile 验证 → 输出最终项目到 results/run_/

生成的目录结构包含:

results/run_20260626_123456/
├── pom.xml
├── src/main/java/
│   ├── domain/          # 领域模型(Lesson, Teacher, Room 等类)
│   ├── solver/          # ConstraintProvider 约束实现
│   └── rest/            # REST API 端点
├── src/test/java/       # 测试用例
└── docker-run.sh        # 一键容器启动脚本

第一次运行约 1-2 分钟(主要是 7 个 Agent 的 LLM 调用和 Docker 编译)。你可以看到每个 Agent 的输出日志,了解 pipeline 的进展。

实战场景 2:用自己的问题文件(进阶)

排课只是 Timefold 最经典的应用场景。VibeSolve 真正的能力在于——你可以写自己的问题描述,用纯文本文件提交给它。

创建一个 user_input/my-shift-scheduling.txt

I run a small clinic with 5 doctors and 10 nurses. 
We open 8am to 8pm, 7 days a week. 
Each shift is 8 hours: morning (8-4), evening (4-12).
A doctor must be present during all opening hours. 
At least 2 nurses per shift. 
No one works more than 5 days in a row. 
Weekend shifts are split equally among staff. 
Nurses prefer not to switch between morning and evening shifts on consecutive days.

然后运行:

vibesolve run user_input/my-shift-scheduling.txt

VibeSolve 的 Parser Agent 会先解析这段文字,提取出:

  • 实体(Doctor、Nurse、Shift、Slot)
  • 硬约束(必须有医生在场、每班至少 2 名护士)
  • 软约束(连续两天不换班次)
  • 数据范围(5 名医生、10 名护士、16 小时/天、7 天/周)

如果你想在代码生成前人工检查解析结果,使用 --user-validate 标志:

vibesolve run user_input/my-shift-scheduling.txt --user-validate

它会先输出一个 Plain-Language 的 ProblemSpec 摘要让你确认,确认无误后才进入后续 Agent 流程。这是我们实际使用中最实用的功能——避免 AI 误解你的意图

实战场景 3:批量求解 + 结果服务化(完整方案)

真正生产环境中,你不会只解决一个问题——你可能需要为一周的每一天生成不同的排班方案,或者为一个部门生成排班后验证合理性。

VibeSolve 的 batch 命令支持批量处理 user_input/ 目录下的所有 .txt 文件:

ls user_input/

vibesolve batch --workers 5

--serve 标志还可以在生成的项目中包含 Dockerfile 和启动脚本,方便直接部署为 REST 服务:

vibesolve run user_input/standby-rotation.txt --serve

生成的 docker-run.sh 包含完整的容器启动命令,运行后即可通过 REST API 调用求解器:

POST /api/solve
GET /api/solution

如果你想使用 Anthropic Claude 而非 OpenAI,只需传一个参数:

vibesolve run --provider claude

VibeSolve 的 config.yaml 中为每个 Agent 配置了独立的模型和推理强度——Parser 和 Model Builder 用轻量模型(gpt-5-mini),Fixer 用最强模型(gpt-5-mini,但配置 high reasoning effort),因为修复错误的推理复杂度最高。

最佳实践

  1. 先写约束再写实体:问题描述中,约束条件比实体定义更重要。VibeSolve 的 Parser Agent 对约束的描述更敏感,先列约束能让 Model Builder 生成更精确的领域模型。
  1. 使用 --user-validate 调试:前几次运行建议加上这个标志。它像是一个”中间检查点”——在 AI 进入昂贵的代码生成阶段之前确认方向正确。避免生成 500 行代码后才发现”哦,它理解错了我的需求”。
  1. 描述要具体但要避免过度约束:Timefold 是优化求解器,不是规则引擎。为每个约束加”必须”会导致无解。使用”优先””尽量””如果可以”等软约束表述。VibeSolve 会把约束自动分类为 hard/medium/soft。
  1. Docker 镜像只需构建一次:首次运行时会自动构建验证镜像,后续运行直接复用。如果修改了 Dockerfile,手动 docker build -t timefold-validator docker/ 重建即可。
  1. 多 Provider 利用价格差:Parser 和 Model Builder 这类简单任务可以用 OpenAI 的 mini 模型(便宜快速);Fixer 等复杂推理任务切到 Claude 或使用 high reasoning effort。config.yaml 支持每个 Agent 独立配置 provider 和模型。

总结

VibeSolve 把”约束求解”这件事的门槛降到了”你只要会写字”。它不是一个通用的代码生成器——它的定位非常精准:Plain English → Timefold 求解器项目。如果你的工作中涉及到排班、调度、路径规划、资源分配、装箱等优化问题,VibeSolve 是目前最直接的开源选择(MIT 许可)。15 分钟装好,20 行描述跑通第一个原型——这就是今天 AI 辅助开发的实际水平。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。