Ludwig LLM 驱动配置生成:用自然语言描述任务,自动产出经过校验的模型配置
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 严格校验的完整配置。LLMClaude 或 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 的新用户或需要快速验证想法的场景手写配置既容易出错又费时。配置生成功能把这一过程交给 LLMLLM 理解你的自然语言描述将列名映射为 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后端环境变量AnthropicClaudeANTHROPIC_API_KEYOpenAIGPTOPENAI_API_KEY库会自动从环境变量读取密钥你也可以在调用时显式传入api_key。安装依赖pip install ludwig0.14 anthropic # 使用 Claude # 或者 pip install ludwig0.14 openai # 使用 GPT注意原文档说明该功能依赖 PR #4092 合入或ludwig0.14。当前仓库中该模块已存在ludwig/config_generation.py并在 ludwig/cli.py 注册为ludwig generate_config子命令属于可用的稳定功能若你使用旧版本 Ludwig 出现ImportError请先升级版本。快速开始Python API 调用使用 Claudeimport 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)., modelclaude-sonnet-4-20250514, # api_key 默认从 ANTHROPIC_API_KEY 读取 validateTrue, ) print(yaml.dump(config, default_flow_styleFalse))使用 OpenAIconfig generate_config( Predict apartment rent price from sqft, bedrooms, and neighborhood., modelgpt-4o, validateTrue, )后端自动选择机制源码根据模型名是否以claude或包含gpt自动选择后端。具体来说generate_config 的实现 先尝试导入anthropic并使用 Claude Messages API若anthropic未安装则回退到openai的 Chat Completions API若gpt不在模型名中则默认使用gpt-4两个包都未安装时会抛出提示安装的ImportError。函数签名与参数说明generate_config的函数签名源码定义参数类型默认值说明task_descriptionstr必填自然语言任务描述如 I have customer data with age, income... predict churn (binary)modelstrclaude-sonnet-4-20250514LLM 模型名Claude 系列以claude开头OpenAI 系列以gpt开头api_keystr | NoneNone后端 API Key为None时从ANTHROPIC_API_KEY/OPENAI_API_KEY环境变量读取validateboolTrue是否用 Ludwig Pydantic Schema 校验生成的配置返回值为合法的 Ludwig 配置字典。当validateTrue且校验失败时抛出ValueError包含具体的 Schema 校验错误信息便于你修正描述后重试。配置生成内部原理理解内部原理有助于你写出更好的任务描述、排查异常。整个流程分为四步1. 构建 Schema 上下文get_ludwig_schema_contextget_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、vectorcombiner 类型清单concat、transformer、ft_transformer、cross_attention、perceiver、gated_fusion、tabnet、tabtransformer、comparator、project_aggregate、sequence、sequence_concat各特征类型的encoder 候选如 number 的 passthrough/dense/ple/periodictext 的 auto_transformer/bert/gpt2/parallel_cnn/rnn/transformer 等loss_balancing 策略none、log_transform、uncertainty、famo、gradnorm、nash_mtl、pareto_mtltrainer 与 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 并解析 JSONLLM 返回后代码先剥离可能包裹的 markdown 代码块首尾行再用json.loads解析解析失败会抛出包含原始响应的ValueError方便你排查模型输出异常。4. 严格校验validateTrue解析出的字典交给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 (CtrlD when done):--modelLLM 模型名默认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/Falsetext 列由固定词表随机拼接 412 个词实现确保特征列与生成配置一一对应训练流程确认后把 DataFrame 写入临时 CSV用LudwigModel(configconfig)训练训练完成后打印每个输出特征在验证集上的数值型指标最后清理临时文件。任务描述撰写技巧原文档总结了五条实战经验结合 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_qualityconcat 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交互式演练 Notebookgenerate_and_train.py独立 CLI 脚本描述任务 → 确认 → 训练example_description.txt高质量任务描述示例Adult Census Income想深入了解底层 Schema 的读者可以继续阅读配置生成入口与实现ludwig/config_generation.pyCLI 子命令注册ludwig/cli.py校验核心ModelConfig.from_dictludwig/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),仅供参考