Ludwig LLM 驱动配置生成:用自然语言描述任务,自动产出经过校验的模型配置
【免费下载链接】ludwigLow-code framework for building custom LLMs, neural networks, and other AI models项目地址: https://gitcode.com/gh_mirrors/lu/ludwig
导读
Ludwig 的配置生成(Config Generation)功能允许你用一句普通英语描述机器学习任务,就能拿到一份经过 Ludwig Pydantic Schema 严格校验的完整配置。LLM(Claude 或 GPT)负责理解你的描述、把列名映射为 Ludwig 特征类型、挑选合适的模型架构与 combiner,最终输出可直接交给LudwigModel训练的配置字典。本文基于 examples/llm_config_generation/README.md 展开,结合仓库源码 ludwig/config_generation.py 与配套脚本 generate_and_train.py,带你从环境准备、API 调用到 CLI 脚本实战,并深入解读其"Schema 上下文 + LLM 生成 + 严格校验"的实现原理。
这个功能解决什么问题
Ludwig 采用声明式配置驱动训练,一个典型的 ECD 模型配置需要手工编写input_features、output_features、combiner、trainer等结构。对于不熟悉 Ludwig YAML Schema 的新用户,或需要快速验证想法的场景,手写配置既容易出错又费时。配置生成功能把这一过程交给 LLM:
- LLM 理解你的自然语言描述,将列名映射为 Ludwig 特征类型(number、category、binary、text 等);
- LLM 依据任务选择模型架构,包括 combiner 类型(concat、transformer、ft_transformer、tabnet 等)与 encoder;
- 生成结果在到达你的代码之前,先通过 Ludwig 的 Pydantic Schema 校验,保证配置合法可用。
从源码实现看,generate_config的核心流程(ludwig/config_generation.py)依次为:构建 Schema 上下文 → 组装提示词 → 调用 LLM → 解析 JSON → 用ModelConfig.from_dict严格校验并返回规范化配置。
这个功能特别适合三类场景:
- 新手入门:不熟悉 Ludwig YAML Schema,希望快速得到一个可运行的起点配置;
- 快速原型验证:用一句话描述任务,检查生成的配置、按需微调后直接训练;
- 多任务问题:用文字同时描述多个输出(例如"同时做分类和回归"),往往比手写 YAML 更直观。
前置条件与依赖安装
使用该功能需要至少一个受支持后端的 API Key:
| 后端 | 环境变量 |
|---|---|
| Anthropic(Claude) | ANTHROPIC_API_KEY |
| OpenAI(GPT) | OPENAI_API_KEY |
库会自动从环境变量读取密钥,你也可以在调用时显式传入api_key=。安装依赖:
pip install "ludwig>=0.14" anthropic # 使用 Claude # 或者 pip install "ludwig>=0.14" openai # 使用 GPT注意:原文档说明该功能依赖 PR #4092 合入或
ludwig>=0.14。当前仓库中该模块已存在(ludwig/config_generation.py),并在 ludwig/cli.py 注册为ludwig generate_config子命令,属于可用的稳定功能;若你使用旧版本 Ludwig 出现ImportError,请先升级版本。
快速开始:Python API 调用
使用 Claude
import os import yaml from ludwig.config_generation import generate_config config = generate_config( "I have customer data with age, income, and purchase history. " "I want to predict churn (binary) and lifetime value (number).", model="claude-sonnet-4-20250514", # api_key 默认从 ANTHROPIC_API_KEY 读取 validate=True, ) print(yaml.dump(config, default_flow_style=False))使用 OpenAI
config = generate_config( "Predict apartment rent price from sqft, bedrooms, and neighborhood.", model="gpt-4o", validate=True, )后端自动选择机制:源码根据模型名是否以"claude"或包含"gpt"自动选择后端。具体来说,generate_config 的实现 先尝试导入anthropic并使用 Claude Messages API;若anthropic未安装,则回退到openai的 Chat Completions API(若"gpt"不在模型名中则默认使用gpt-4);两个包都未安装时会抛出提示安装的ImportError。
函数签名与参数说明
generate_config的函数签名(源码定义):
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
task_description | str | 必填 | 自然语言任务描述,如 "I have customer data with age, income... predict churn (binary)" |
model | str | "claude-sonnet-4-20250514" | LLM 模型名,Claude 系列以claude开头,OpenAI 系列以gpt开头 |
api_key | str | None | None | 后端 API Key;为None时从ANTHROPIC_API_KEY/OPENAI_API_KEY环境变量读取 |
validate | bool | True | 是否用 Ludwig Pydantic Schema 校验生成的配置 |
返回值为合法的 Ludwig 配置字典。当validate=True且校验失败时,抛出ValueError(包含具体的 Schema 校验错误信息,便于你修正描述后重试)。
配置生成内部原理
理解内部原理有助于你写出更好的任务描述、排查异常。整个流程分为四步:
1. 构建 Schema 上下文(get_ludwig_schema_context)
get_ludwig_schema_context 从ludwig.schema.model_types.ecd.ECDModelConfig提取紧凑的 JSON Schema 描述,作为 LLM 的"领域知识"注入提示词。上下文包含:
- 全部输入特征类型:number、category、binary、text、image、audio、sequence、set、vector、timeseries、date、h3、bag;
- 全部输出特征类型:number、category、binary、text、sequence、set、vector;
- combiner 类型清单:concat、transformer、ft_transformer、cross_attention、perceiver、gated_fusion、tabnet、tabtransformer、comparator、project_aggregate、sequence、sequence_concat;
- 各特征类型的encoder 候选(如 number 的 passthrough/dense/ple/periodic,text 的 auto_transformer/bert/gpt2/parallel_cnn/rnn/transformer 等);
- loss_balancing 策略:none、log_transform、uncertainty、famo、gradnorm、nash_mtl、pareto_mtl;
- trainer 与 quality preset 说明(medium_quality / high_quality / best_quality);
- 一个示例配置,引导 LLM 输出格式。
2. 组装提示词
generate_config 将上述 Schema 上下文与你的任务描述拼装成提示词,明确要求 LLM:"你是 Ludwig ML 框架专家,只输出合法 JSON(不要 markdown、不要解释),配置必须包含 input_features / output_features / combiner / trainer,并根据任务选择适当的特征类型、encoder 与 combiner。"
3. 调用 LLM 并解析 JSON
LLM 返回后,代码先剥离可能包裹的 markdown 代码块(```首尾行),再用json.loads解析;解析失败会抛出包含原始响应的ValueError,方便你排查模型输出异常。
4. 严格校验(validate=True)
解析出的字典交给ludwig.schema.model_types.base.ModelConfig.from_dict(源码)执行完整校验与规范化:
- 若配置中声明了
preset,会先应用 ludwig/presets.py 中的质量预设(用户配置优先); - 自动升级旧版配置到最新版本;
- ECD 模型若未显式指定 combiner 且输入特征 ≥ 3 个,默认使用
ft_transformercombiner(源码注释说明这是为了更好的精度); - 对特征名、tied / dependent 特征名做清洗(
get_sanitized_feature_name); - 合并默认值、执行 JSON Schema 检查,最后用 Pydantic 反序列化为配置对象;
- 校验通过后返回
validated.to_dict(),即一份被完全填充默认值的规范化配置。
这意味着你在代码里拿到的配置一定可以通过 Ludwig 的 Schema 校验,可以直接喂给LudwigModel训练。
命令行使用:ludwig generate_config
除了 Python API,该功能还提供了 CLI 入口。CLI 在 ludwig/cli.py 中注册为generate_config子命令,实际实现位于 cli_generate_config。
# 直接传描述 ludwig generate_config "predict house price from bedrooms, sqft, and location" # 指定模型 ludwig generate_config --model gpt-4o "classify email sentiment as positive, neutral, or negative" # 将结果写入文件 ludwig generate_config "predict churn (binary) from customer data" -o config.yaml # 跳过校验(不推荐) ludwig generate_config "predict churn" --no-validateCLI 参数一览:
| 参数 | 说明 |
|---|---|
description(位置参数) | 自然语言任务描述;缺省时从 stdin 读取(提示 "Enter your ML task description (Ctrl+D when done):") |
--model | LLM 模型名,默认claude-sonnet-4-20250514 |
--api_key | 显式指定 API Key,默认从环境变量读取 |
--output/-o | 输出文件路径,未指定时打印到 stdout |
--no-validate | 跳过配置校验 |
独立脚本实战:generate_and_train.py
仓库提供了开箱即用的独立脚本 examples/llm_config_generation/generate_and_train.py,流程为"描述任务 → 生成并打印配置 → 询问是否训练 → 构建合成数据 → 用 Ludwig 训练并输出验证指标"。
# 使用内置默认任务(客户流失二分类) python generate_and_train.py # 传入自定义描述 python generate_and_train.py "predict house price from bedrooms, sqft, location" # 指定 LLM 模型 python generate_and_train.py --model gpt-4o "classify email sentiment as positive, neutral, or negative" # 只生成配置,不训练 python generate_and_train.py --no-train # 指定合成数据行数(默认 200) python generate_and_train.py --rows 500 "predict churn from customer data"脚本关键行为:
- 内置默认任务:客户数据
age (integer)、annual_income (float)、num_purchases (integer)、days_since_last_purchase (integer),预测churn (binary: 0 or 1),默认模型claude-sonnet-4-20250514(脚本定义); - 导入保护:脚本在
try/except中导入ludwig.config_generation,若导入失败会打印版本要求提示并退出,方便诊断; - 合成数据生成:
build_synthetic_dataframe根据生成的配置 Schema 构造 DataFrame——number 列取uniform(0,100),category 列在 A/B/C 中取样,binary 列为 True/False,text 列由固定词表随机拼接 4~12 个词(实现),确保特征列与生成配置一一对应; - 训练流程:确认后把 DataFrame 写入临时 CSV,用
LudwigModel(config=config)训练,训练完成后打印每个输出特征在验证集上的数值型指标,最后清理临时文件。
任务描述撰写技巧
原文档总结了五条实战经验,结合 example_description.txt 的示例可以看得更具体:
- 明确列出列名:"age, income, and purchase_count" 比 "some user features" 可操作性强得多;
- 指明目标与类型:"predict churn (binary)" 或 "predict revenue (continuous number)";
- 提到模态:"text product description and tabular price, category" 帮助 LLM 选择正确的 encoder;
- 给出大致数据量:"~50k rows" 让 LLM 建议合适的模型复杂度;
- 显式描述多输出任务:"simultaneously predict price (regression) and category (classification)"。
一个高质量描述示例
仓库自带的 example_description.txt 给出了面向 UCI Adult Census Income 数据集的完整描述模板,值得参考:
I have a tabular dataset from UCI Adult Census Income with the following columns:
- age (number)
- workclass (category)
- education (category, ordered from preschool through doctorate)
- education-num (number, 1-16)
- marital-status (category)
- occupation (category, 14 unique values)
- relationship (category)
- race (category)
- sex (binary: Male / Female)
- capital-gain (number, heavily skewed, mostly zero)
- capital-loss (number, similar to capital-gain)
- hours-per-week (number, 1-99)
- native-country (category, high cardinality ~40 classes)
The target column is "income" (binary: >50K or <=50K). The dataset has about 48k rows. Training should be reasonably fast — prefer the medium_quality preset. Use the concat combiner with two FC layers. Use AdamW with a learning-rate scheduler.
这个示例展示了如何把数据集的列名、类型、取值范围、基数、偏态分布、数据量、预设偏好与架构诉求全部编码进描述中。LLM 据此可生成与 presets.py 中medium_quality(concat combiner、2 个 FC 层、output_size 128、epochs 50、early_stop 5、batch_size 256)一致的配置,再配合 AdamW 优化器与学习率调度器。可以说,描述写得越具体,生成的配置越接近你手工调优的结果。
配套文件与更多资源
examples/llm_config_generation/目录包含:
| 文件 | 说明 |
|---|---|
README.md | 本文对应的官方文档 |
llm_config_generation.ipynb | 交互式演练 Notebook |
generate_and_train.py | 独立 CLI 脚本:描述任务 → 确认 → 训练 |
example_description.txt | 高质量任务描述示例(Adult Census Income) |
想深入了解底层 Schema 的读者可以继续阅读:
- 配置生成入口与实现:ludwig/config_generation.py
- CLI 子命令注册:ludwig/cli.py
- 校验核心
ModelConfig.from_dict:ludwig/schema/model_types/base.py - 质量预设定义:ludwig/presets.py
小结
Ludwig 的 LLM 驱动配置生成把"读懂 Ludwig Schema"这一学习成本从用户转移给了 LLM:你只需描述清楚任务、列、目标类型与数据规模,就能得到一份经过严格校验、可直接训练的配置。它既适合快速原型验证,也适合多任务与不熟悉 Schema 的入门场景。如果生成的配置与预期有出入,可以调整任务描述(补全列类型、数据规模、架构偏好)重新生成,或直接编辑输出结果后交给LudwigModel——校验保证了你拿到的每一份配置都是合法起点。
【免费下载链接】ludwigLow-code framework for building custom LLMs, neural networks, and other AI models项目地址: https://gitcode.com/gh_mirrors/lu/ludwig
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考