Skip to content

Mathskillverse/skill-copt-linear-program

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

以 COPT 线性规划 Skill 为例

通过拆解"COPT 线性规划 Skill",你将掌握:

  1. Skill 的核心组成:一份好的 Skill 包含哪些文件?
  2. 设计流程:从需求分析到落地实现
  3. 关键决策点:何时提问?何时假设?边界在哪里?
  4. 最佳实践:如何让 Skill 既专业又易用?

一、什么是 AI4Math Skill?

1.1 Skill 的定义

Skill = 一个让 AI 能够专业、可靠地解决某一类数学问题的"能力包"

它包含:

  • 领域知识:如何建模、如何求解、如何解释
  • 工具链:调用哪些求解器/库
  • 交互规范:如何与用户沟通、何时提问
  • 边界意识:知道能做什么、不能做什么

1.2 为什么需要 Skill?

场景 没有 Skill 有 Skill
用户提问模糊 AI 可能胡乱猜测 AI 知道如何澄清
涉及专业工具 AI 可能不会调用 AI 按规范调用求解器
结果需要解释 AI 只给数字 AI 给出业务含义
超出范围的问题 AI 可能硬撑 AI 明确告知边界

二、Skill 设计方法论

2.1 设计流程图

┌─────────────────────────────────────────────────────────┐
│                    需求分析                              │
│  • 解决什么问题?  • 目标用户是谁?  • 输入输出是什么?    │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                    能力边界定义                          │
│  • 能做什么?  • 不能做什么?  • 何时需要澄清?           │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                    技术选型                              │
│  • 选用什么求解器/库?  • 如何集成?  • 依赖是什么?       │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                    交互设计                              │
│  • 处理哪些输入形式?  • 输出模板是什么?  • 歧义如何处理? │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│                    文档与示例                            │
│  • README  • 参考示例  • 快速上手指南                       │
└─────────────────────────────────────────────────────────┘

三、案例:设计一个线性规划 Skill

3.1 需求分析

Q1:解决什么问题?

帮助用户求解线性规划(LP)问题

Q2:目标用户是谁?

  • 运筹学学生:做作业、学习建模
  • 业务分析师:生产计划、资源分配
  • 研究者:快速验证想法

Q3:输入输出是什么?

  • 输入:自然语言描述 或 矩阵/JSON 格式
  • 输出:求解状态、最优值、变量取值、结果解释

3.2 能力边界定义

能做什么(In Scope)

✅ 连续变量的线性规划(LP)
✅ 最大化或最小化目标
✅ 线性不等式约束(≤)
✅ 线性等式约束(=)
✅ 变量上下界

不能做什么(Out of Scope)

❌ 整数规划(需要 MILP)
❌ 非线性目标(如 x₁·x₂)
❌ 逻辑蕴含(需要 Big-M 建模)
❌ 随机规划

关键决策

当用户提出整数问题时,明确告知超出范围,而不是偷偷松弛成连续变量求解。

3.3 技术选型

求解器选择

候选 优势 劣势
COPT 国产、免费学术授权、Python 接口友好 需要配置 License
Gurobi 业界标准 学术授权申请流程
CBC 完全开源 性能较弱
scipy.optimize 无需额外安装 功能受限、文档混乱

最终选择:COPT(兼顾性能与可获取性)

依赖管理

import coptpy as cp
from coptpy import COPT
import numpy as np

3.4 交互设计

两条输入路径

                    用户输入
                      │
         ┌────────────┴────────────┐
         │                         │
         ▼                         ▼
   ┌─────────┐             ┌─────────────┐
   │ 自然语言 │             │  矩阵/JSON  │
   └────┬────┘             └──────┬──────┘
        │                         │
        ▼                         │
  ┌─────────────┐                 │
  │ 1. 重述题意 │                 │
  │ 2. 符号化   │                 │
  │ 3. 数值化   │ ────────────────┘
  │ 4. 求解     │
  │ 5. 解释结果 │
  └──────┬──────┘
         │
         ▼
    输出结果

输出模板

### 问题重述
...

### 符号化模型
- 决策变量:...
- 目标函数:...
- 约束:...

### 数值化(可选)
- c: ...
- A_ub / b_ub: ...

### 求解结果
- status: ...
- objective: ...
- x: ...

### 结果解释
...

歧义处理策略

歧义点 处理方式
目标是 max 还是 min? 提问或根据上下文推断(利润→max,成本→min)
"不超过"是≤还是≥? 明确规则:"不超过"=≤,"不少于"=≥
是否允许分数解? 默认连续 LP;若明确整数要求→告知超出范围
非负约束? 物理量默认≥0,但需在变量表中写明假设

四、文件结构组织

4.1 推荐结构

copt-linear-program/
├── SKILL.md                  # Skill 说明书(核心文档)
├── scripts/
│   └── solve_lp.py           # 求解器封装脚本
└── reference/
    ├── matrix-json-examples.md     # 矩阵格式示例
    └── natural-language-examples.md # 自然语言示例

4.2 各文件职责

文件 读者 内容
SKILL.md AI + 用户 技能使用说明、交互规范、边界定义
scripts/solve_lp.py 开发者 实际求解逻辑
reference/*.md 用户 + AI 示例库,供 Few-shot 学习

五、SKILL.md 的核心要素

5.1 必须包含的章节

# 标题:一句话说明这个 Skill 做什么

## 适用场景
- 列举 3-5 类典型问题
- 给出简短例子

## Quick Start(先做这个)
- 一个检查清单,AI 按步骤执行

## 执行流程
- 路径判断:用户给的是什么类型输入?
- 流程图:不同输入走不同分支

## 输出模板
- AI 回答的标准格式

## 歧义与澄清
- 何时提问?何时假设?
- 常见歧义列表及处理策略

## 范围与边界
- 能做什么
- 不能做什么
- 超出范围时如何告知用户

## 技术细节
- 依赖
- 接口说明
- 错误处理

## 示例
- 端到端示例(输入→输出)

5.2 关键设计点

设计点 1:路径判断

用户输入可能是自然语言,也可能是矩阵。不要默认要求用户先整理成矩阵——这是反用户的。

设计点 2:输出模板

统一输出格式让 AI 的回答结构清晰、可预测

设计点 3:边界声明

明确写出"不能做什么"比什么都重要。AI 需要知道何时说"这个我做不了"。

设计点 4:错误解释

求解失败时,给出可操作的诊断

  • INFEASIBLE → 约束矛盾,检查不等号方向
  • UNBOUNDED → 缺少必要约束,检查是否漏了非负

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages