关于 glin
glin 是本地 MCP 服务,可让 AI Agent 在 CSV 或 Excel 数据上训练并使用可解释分类器。它基于 Explainable Boosting Machine 给出预测,并提供由模型加性结构得出的精确特征原因,而非 SHAP 或 LIME 近似值。
主要功能
- 01在 CSV 或 Excel 上训练分类器
- 02预测单个或多个案例
- 03提供精确的加性特征解释
- 04用留出数据评估模型
- 05调整模型超参数
- 06保存并管理本地模型
适用场景
- 01分类销售线索或客户流失
- 02依据模型预测确定案例优先级
- 03查看影响模型结果的因素
MCP 相关
glin 通过 stdio 运行,向 MCP 客户端提供模型训练、预测、解释、调优和管理工具。数据与保存的模型均保留在本地。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
glin
☕ 如果 glin 对你有用,并且你想帮助维护它,可以请我喝杯咖啡。
glin 可以让你的 AI Agent 在你的数据上训练分类器并使用它。你可以将 glin 安装到 Claude Code、Claude Desktop 或 Cursor 等 Agent 中,然后用自然语言与 Agent 对话。Agent 会训练模型、进行预测并解释预测结果。你无需编写代码。
glin 会在 CSV 或 Excel 文件上训练可解释提升机(EBM)。每个预测都会附带导致该预测的各项特征的精确分解。这个分解来自模型的加性结构,并非 SHAP 或 LIME 的近似结果。
glin 是一个 MCP 服务。它在你的机器上运行,并通过 stdio 与 Agent 通信。你的数据和模型都保存在本地。
更新日志: CHANGELOG.md 列出了每个版本的更改。
案例研究:10 万条销售线索的细分。Claude 搭配 glin,正确划分了 71% 的新线索。仅使用 Claude 时,正确率为 33%。在提示词中提供 1,000 条已标注线索时,Claude 的正确率为 60%,并且使用的 token 多出 6.7 倍。
glin 的工作原理
- 你向 Agent 提供数据文件和要预测的列。
- Agent 调用 glin。glin 会检查数据、训练模型,并将其保存在
~/.glin/models/<name>/。 - glin 会在未用于训练的行上测试模型。Agent 会告诉你模型的效果如何。
- 你询问新的案例。Agent 会将每个案例发送给模型,并获取预测结果及其精确原因。
- 你询问哪些因素影响结果。Agent 会从模型中读取相关信息。
保存的模型会一直可用。你可以在新的对话中再次使用它。
你可以向 Agent 提出的问题
- “在
~/data/leads.csv上训练一个预测converted的分类器,并将其命名为leads_v1。” - “这 3 笔交易中,我应该优先处理哪一笔?”Agent 会将每笔交易发送给模型,并给出原因。
- “这个模型中的哪些因素会影响客户流失?”
- “调整模型,并告诉我它的实际效果如何。”
- “我有哪些模型?”
- “删除模型
leads_v1。”
目录
安装
你的 MCP 客户端会使用 uvx 启动 glin。uvx 会下载 PyPI 软件包 glin-ml 并将其保存在缓存中。请勿使用 pip 安装 glin。(PyPI 上的名称 glin 属于一个无关项目。)
所有客户端都请执行步骤 1,然后为你的客户端执行步骤 2。
步骤 1:安装 uv 并下载 glin
-
安装
uv。使用以下命令之一:# macOS and Linux curl -LsSf https://astral.sh/uv/install.sh | sh # macOS with Homebrew brew install uv # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" -
打开一个新终端。
-
运行此命令:
uvx --from 'glin-ml[excel]>=0.1.5' glin --version命令会显示
glin-ml 0.1.5或更高版本。首次运行时,会将 glin 及其库下载到缓存中。这可能需要约一分钟。
不要跳过步骤 1.3。 某些客户端会停止未能在 30 秒内启动的服务。Claude Code 就是其中之一。缓存填充后,glin 只需几秒即可启动。
步骤 2:将 glin 添加到客户端
为以下客户端之一执行相应步骤:
Claude Code,使用插件(推荐)
该插件会添加 glin MCP 服务和一项技能。此技能会告知 Agent 何时以及如何构建、调优、使用模型进行预测和解释模型。该插件支持 Excel。
-
启动 Claude Code。
-
添加 glin marketplace:
/plugin marketplace add AkashChatterjee/glin -
安装插件:
/plugin install glin@glin-marketplace -
如果 Claude Code 提示你重启,请重启。
-
运行
/mcp。确认列表中显示 glin 服务已连接。
该插件会启动 uvx --from 'glin-ml[excel]>=0.1.5' glin serve。插件文件位于 .claude-plugin/marketplace.json 和 plugins/glin/。
Claude Code,不使用插件
如果只想添加 MCP 服务而不添加技能,请使用此选项。
-
在终端中运行此命令:
claude mcp add --scope user glin -- uvx --from 'glin-ml[excel]>=0.1.5' glin serve--scope user会使 glin 在你的所有项目中可用。若只想将 glin 添加到当前项目,请移除--scope user。 -
启动 Claude Code。
-
运行
/mcp。确认列表中显示 glin 服务已连接。
Claude Desktop
-
打开 Claude Desktop。
-
打开 设置 > 开发者,然后点击 编辑配置。这会打开文件
claude_desktop_config.json:- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
将
glin条目添加到mcpServers中。如果文件中还有其他服务,请保留它们:{ "mcpServers": { "glin": { "command": "uvx", "args": ["--from", "glin-ml[excel]>=0.1.5", "glin", "serve"] } } } -
保存文件。
-
完全退出 Claude Desktop,然后重新启动。在 macOS 上,仅关闭窗口是不够的。
-
确认新聊天的工具菜单中显示 glin 工具。
如果 Claude Desktop 找不到 uvx(例如出现 spawn uvx ENOENT),请使用完整路径。运行 which uvx(macOS 和 Linux)或 where uvx(Windows),并将结果填入 "command"。
Cursor 和其他 MCP 客户端
-
打开客户端的 MCP 配置文件:
- Cursor:适用于所有项目的
~/.cursor/mcp.json,或某个项目中的.cursor/mcp.json。 - 其他客户端:请参阅客户端文档。
- Cursor:适用于所有项目的
-
添加与 Claude Desktop 中相同的
glin条目:{ "mcpServers": { "glin": { "command": "uvx", "args": ["--from", "glin-ml[excel]>=0.1.5", "glin", "serve"] } } } -
保存文件并重启客户端。
-
确认客户端显示 glin 是已启用的 MCP 服务。
如果客户端找不到 uvx,请像 Claude Desktop 一样,在 "command" 中填写 uvx 的完整路径。
带注册表搜索功能的客户端
glin 已列入官方 MCP 注册表,条目为 io.github.AkashChatterjee/glin。注册表是元数据目录,不是安装程序。MCP 市场和一些客户端会读取它,并在服务列表中显示 glin。例如,VS Code 会从 GitHub MCP Registry 安装服务。
- 在客户端中搜索服务列表,查找
glin。 - 安装条目
io.github.AkashChatterjee/glin。 - 确认客户端显示 glin 是已启用的 MCP 服务。
注册表条目以 uvx glin-ml serve 启动,不包含 excel extra。注册表格式没有用于填写 extras 的字段。要读取 Excel 文件,请改用Cursor 和其他 MCP 客户端中的步骤。如果你的客户端不支持注册表搜索,也请使用这些步骤。
安装选项
- 仅 CSV: 如果你不使用 Excel 文件,可以从参数中移除
[excel]。 - 服务标志: 将
--allow-dir等标志放在参数中的serve之后。请参阅服务标志。 - 更新 glin: 运行
uvx --refresh --from 'glin-ml[excel]>=0.1.5' glin --version。然后重启客户端。 - 已安装的副本: 若要使用通过
uv tool install 'glin-ml[excel]'或pipx install 'glin-ml[excel]'安装的副本,请将"command"设置为glin,并将"args"设置为["serve"]。你必须自行更新此副本,例如运行uv tool upgrade glin-ml。
在 Agent 中使用 glin
安装 glin 后,用日常语言与 Agent 对话。Agent 会选择 glin 工具。你不需要知道工具名称。本节介绍你可以提出哪些要求,以及会得到什么结果。有关确切的工具参数,请参阅 MCP 工具。
训练模型
向 Agent 提供一个数据文件和要预测的列:
“在
~/data/churn.csv上训练一个预测churn的分类器。将其命名为churn_v1。”
Agent 会调用 train_model。glin 会检查数据、准备各列并训练模型。然后,glin 会返回:
- 保留和删除的特征,以及每项对应的原因;
- 警告,例如可能泄漏目标值的列;
- 留出集上的测试结果:模型未参与训练的 20% 行。
测试结果包括 log_loss、baseline_log_loss(仅根据类别占比做出的猜测)、train_log_loss、accuracy、balanced_accuracy 和 roc_auc。有用的模型,其 log_loss 会明显低于 baseline_log_loss。
如果要谨慎构建模型,请让 Agent 使用 build_classifier 提示词。此提示词会指导 Agent 清理数据、移除泄漏、调优模型并报告真实性能。请参阅 MCP 提示词。
如果已存在同名模型,训练将失败。若要替换模型(例如使用新数据),请让 Agent 使用 overwrite=True 重新训练。
获取预测
针对一个或多个案例提问。提供你已知的值:
“季度末前我有 3 笔商机需要确定优先级:Northwind Systems($42k,Opportunity 阶段,来源为推荐,联系人是 VP,负责人是 Carla Nguyen,记录了 8 次联系)、Summit Retail Group($8k,仍处于 Lead 阶段,来源为付费社交媒体,负责人是 Brian Kessler),以及 Anchor Nonprofit($3k,仍处于 Lead 阶段,负责人是 Frank Suarez,尚未记录任何活动)。用 deal_predictor_v1 处理它们,告诉我应该优先处理哪一笔。”
Agent 会为每笔商机调用一次 predict。它会给出带有原因的排序结果:
| 商机 | 赢单概率 | 原因 |
|---|---|---|
| Northwind Systems | 69% | Opportunity 阶段、推荐来源和 VP 联系人都有利于它。$42k 的商机金额是唯一的不利因素。 |
| Summit Retail Group | 35% | 它仍处于 Lead 阶段,且来源是付费社交媒体。这两点都是明显的不利因素,没有任何有利因素抵消。 |
| Anchor Nonprofit | 34% | 尚未记录任何活动,且仍处于 Lead 阶段。记录中没有任何有利因素。 |
每项预测都有一份审计。审计会给出每个特征的得分,所有得分相加恰好等于概率。glin 会在每项预测中检查这个总和(additivity_verified)。
一些重要说明:
- 未提供的值对模型来说是缺失值,而不是平均值。
- 使用训练数据中的类别,例如
Lead、Opportunity和Customer。其他拼写对模型来说都是新类别。 - 如果模型在训练中未见过某些值,例如新类别或超出训练范围的数字,glin 会发出警告。此类预测的可靠性较低。
解释模型
询问哪些因素会影响结果:
“是什么因素导致
churn_v1中的客户流失?”
Agent 会调用 explain_model。glin 会直接从模型中读取答案,不会抽样生成预测。结果会提供:
- 按影响程度排序的每个特征,以及其中来自交互作用的部分;
- 重要术语,包括特征对,以及它们在总量中的占比;
- 对于二元目标,会列出每个特征中推动预测趋向各类别的值或类别。
调优模型
让 Agent 调优模型:
“调优
churn_v1,并告诉我它的实际效果如何。”
tune_model_hyperparameters 提示词会为 Agent 提供一套安全流程:
- 训练基线模型。
- 每次试验更改一到两个设置。所有试验使用相同的留出行。
- 使用其他随机种子检查噪声。
- 试验约 10 次后停止,或在收益较小时停止。优先选择更简单的设置。
- 使用所有行训练最终模型。
Agent 可以通过 list_hyperparameters 获取所有设置及其默认值和取值范围。glin 会拒绝未知设置和超出范围的值。
分组留出
来自同一州、地区、客户、站点或用户的行往往很相似。随机留出会导致指标过于乐观。在一个实际案例中,模型在随机留出数据上的准确率为 82%,AUC 为 0.89;而在模型未见过的州上,准确率为 63%,AUC 为 0.77。
如果数据中有这样的列,请让 Agent 按该列进行留出:
“在
~/data/districts.csv上训练,预测high_stunting,并按state留出。”
Agent 会传入 holdout_group_column="state"。然后,glin 会将整个组放入留出集。测试结果因此会显示模型在未见过的组上的表现。当存在这样的列时,提示词会告诉 Agent 使用此选项。
- glin 会将大约 20% 的行(
holdout_fraction)放入留出集。它会尝试 25 种组顺序,并保留类别占比最接近完整数据的那一种。 - 文本值会忽略大小写和首尾空格进行分组。因此,
"S06"和"s06 "属于同一组。空白文本、nan和none都是缺失值。缺失值属于同一组。 - 该列仍会作为特征。留出集中的组在预测时属于未见过的类别。
- 如果该列不存在或是目标列、组数少于 5、某个组的行数超过一半、所有组都太大而无法留出,或者划分后有类别缺失,glin 就会报错停止。
管理模型
- **列出模型:**询问“我有哪些模型?”Agent 会调用
list_models。 - **查看模型:**询问“
churn_v1需要什么输入?”Agent 会调用inspect_model。结果会按类型列出特征(数值型、类别型和日期型)、已删除的列、目标类别、设置和测试结果。 - **删除模型:**询问“删除模型
churn_v1。”Agent 会调用delete_model。删除操作不可撤销。你也可以自行删除~/.glin/models/中的文件夹。
**模型名称:**新模型名称长度为 1 到 64 个字符。只能使用字母、数字、-、_ 和 .。名称不能以 . 开头。若要使用或删除模型,其名称必须是 ~/.glin/models/ 中的一个文件夹名称。glin 会确保模型名称无法读取、写入或删除此文件夹之外的文件。
你的数据
glin 可以读取的文件
Agent 会向 glin 提供文件路径(csv_path)。glin 会自行读取文件,因此 Agent 不会将数据复制到聊天中。csv_path 支持 .csv、.xlsx 和 .xls 文件。
glin 只会读取位于允许文件夹中的文件。默认情况下,允许的文件夹包括:
- 你的主文件夹;
- 客户端启动服务的文件夹,但该文件夹不能是
/,也不能是你的主文件夹的父文件夹。
Claude Desktop 在 macOS 上会从 / 启动服务。此时只有你的主文件夹是允许的。Claude Code 会从项目文件夹启动服务,因此该文件夹也会被允许。若要使用其他位置的数据,例如 /Volumes/data,请使用 --allow-dir。请参阅服务端标志。
其他规则:
- 文件不得超过 200 MB。若要更改此限制,请使用
--max-file-mb。 - glin 会跟随路径中的符号链接和
..。实际路径必须位于允许的文件夹中。 - glin 不会读取文件夹、设备或扩展名不同的文件。错误消息不会显示文件内容。
- 对于聊天中的小型表格,Agent 可以发送 CSV 文本(
csv_content)。仅对小型数据使用此方式,因为数据会经过聊天。
文件夹规则有两项已知限制:允许文件夹中的硬链接会指向并读取该文件夹之外的文件。如果路径在检查和读取之间发生变化,glin 会读取新文件。因此,不要允许其他用户或进程可以写入的文件夹。
Excel 文件
glin 可直接在 Excel 工作表上训练,包括含有标题行、合并表头和脚注的工作表。Excel 支持需要安装 excel 扩展。上面的安装步骤已包含该扩展。
如果知道工作表名称和表头行,请告诉 Agent:
“在
~/data/report.xlsx的Data 2023工作表上训练一个分类器,表头行为 3-4,预测outcome。”
Agent 会将 sheet 和 header_rows 传给 train_model。适用以下规则:
- **工作表:**可以指定名称或位置(1 表示第一个工作表)。如果工作簿只有一个工作表,则无需指定
sheet。如果工作簿有多个工作表,glin 会报错并列出这些工作表。如果只有一个名称匹配,glin 会忽略名称的大小写和首尾空格。 - **表头行:**使用 Excel 中的行号,例如
4、"3-4"、"3,4"或[3, 4]。如果未指定,glin 会查找表头行,并跳过其上方的标题行。如果表头不明确,glin 会停止并要求提供header_rows。glin 不会猜测。 - **多行表头:**glin 会将多行合并为每列的一个名称,例如
2023 - sales。合并标签下方的空白单元格会沿用左侧的标签。重名会依次加上_2、_3等后缀。表头中的日期会转换为 ISO 日期,例如2024-01-01。 - **脚注:**glin 会移除工作表末尾的脚注行,并发出警告,列出这些行的行号。脚注行不含数字,且以
Source、Note、Footnote、*、†、‡或©开头,或者是由 6 个或更多单词组成的句子。 - **公式:**glin 使用公式已保存的结果。请先在电子表格应用中计算并保存文件。
- **空行和空列:**glin 会将其移除。
结果会显示工作表、表头行以及 glin 读取的行数。对于 CSV 文件,sheet 和 header_rows 会导致错误。
数据检查
训练前,glin 会检查数据。严重问题会导致训练停止并显示明确的错误。轻微问题会显示警告,但训练会继续。
- 数据至少需要 20 行。
- 目标至少需要 2 个类别。glin 会移除目标值为空的行,并发出警告。
- glin 训练的是分类器,而非回归模型。数值目标的取值超过 20 个时会发出警告:每个取值都会成为单独的类别。请将目标划分为几个区间,或改用其他目标。
- 数值目标有 3 到 20 个取值时(例如 1 到 5 的评分),会发出警告。模型会忽略取值之间的顺序。请减少区间数量,或使用是/否阈值。
- 上述两项检查也适用于保存数字的文本目标,例如
"1"到"5"。 - 文本目标的取值超过 20 个时会发出警告。每个类别都需要有足够多的行。
glin 如何读取列
glin 会在训练前处理每一列。在预测时也使用相同的规则。
| 数据 | glin 的处理方式 |
|---|---|
| 数字,含缺失值 | glin 将其作为数字处理。缺失值会被分到单独的区间。 |
| 以文本形式存储的数字,含空白值 | 如果至少 80% 的值是数字,glin 会将该列转换为数字。其他值会变为缺失值。 |
货币符号和千位分隔符($1,234.56、€1.234,56、USD 100、Rs. 100) | glin 会去掉货币符号和代码。只有当该列包含明确的欧洲格式数值(例如 1.234,56 或 12,5)时,才会将逗号识别为小数分隔符。普通的 1,234 表示一千二百三十四。如果某个值同时包含两种分隔符,最后出现的分隔符就是小数分隔符。如果一列中混用了两种格式,glin 会按美国格式读取并发出警告。 |
负数(-5、−5、(1,234)、1234-) | glin 会将 Unicode 负号、括号和末尾的负号识别为负数。 |
百分数(44.98%) | glin 会去掉 %。数值仍以百分点表示:44.98% 会变为 44.98。 |
无穷大(inf、-inf) | glin 会将其设为缺失值并发出警告。 |
缺失值代码(SUPP、NE、NP、z、*、..) | 在数值列中,glin 会将这些代码设为缺失值。大小写和两端空格不影响识别。要使用其他代码,请提供 suppression_codes。如果数值列中包含其他简短代码(例如 x),glin 会将其设为缺失值并发出警告。如果未知代码超过该列的 20%,该列会变为文本列,警告会建议添加相应代码。glin 不会将 <5 和 — 作为代码,因为它们可能是真实值。 |
| 文本类别,最多 250 个值 | glin 会将每个值作为一个类别处理,不区分大小写并忽略两端空格。预测时出现新值会被视为新类别,并发出警告。 |
| 真/假 | glin 会将其分别作为 0 和 1 处理。 |
| 日期和时间戳 | glin 会将其拆分为日期组成部分。请参阅日期和时间戳。 |
日期和时间戳
glin 会自动识别日期列。至少 80% 的值必须是完整日期,例如 2024-03-06、2024-03-06 14:30:00、03/06/2024、6 Mar 2024 或 Mar 6, 2024。
- 日期组成部分: glin 会从每个日期列生成以下特征:
<col>__year、<col>__month(jan至dec)、<col>__day_of_week(mon至sun)、<col>__hour和<col>__days_since_start。days_since_start计算从训练数据中最早日期起经过的天数。 - 未使用的组成部分: 如果某个组成部分没有变化,glin 会将其移除,例如对于不含时间的日期会移除
__hour。 - 日期和月份的顺序: glin 会根据值判断是
dd/mm还是mm/dd。如果无法从值中判断顺序,glin 会优先按月份在前解析并发出警告。使用 ISO 日期(YYYY-MM-DD)可避免这种情况。 - 时区: glin 会将带时区的时间转换为 UTC。
- 非日期值: 这些值会变为缺失值,并触发警告。
- 预测: 请提供原始日期,例如
"2024-03-06"。如果日期超出训练范围、不是日期或无法确定日和月的顺序,glin 会发出警告。警告会显示 glin 使用的日期(parsed_as)。
glin 不使用的列
glin 会在训练前移除以下列。结果会列出每个被移除的列及其原因。
| 数据 | glin 的处理方式 |
|---|---|
| 只有一个取值的列 | glin 会将其移除。 |
| 标识符(行号、连续 ID、UUID、哈希值) | 对于超过 50 行的数据,如果某列包含互不相同的整数,且这些数字填满一个范围(例如从 1 到 N),或者列名包含 ID 相关词(id、idx、key、uuid、guid、pk 或名称 index),glin 就会移除该列。它还会移除取值中超过 95% 都不相同的文本列。差距较大且不均匀的互异数值(例如薪资)会保留为数值。 |
| 取值超过 250 个的文本,例如自由文本 | glin 会将其移除。glin 不处理自然语言。 |
| 单元格中的列表或 JSON | glin 不会读取其中的内容,而是将整个单元格作为一个文本值处理。 |
以数字存储的日期(2024、20240306、纪元秒数) | glin 会将其作为数字而非日期处理。如果这些值表示日期,请将其转换为日期文本。 |
目标泄漏检查
如果某列直接给出了答案,就会造成目标泄漏。这种情况常见于有人根据该列(例如使用阈值)生成目标值。包含此类列的模型在测试中表现会非常好,但并不实用。
完成准备后,glin 会逐一检查每个特征。如果某个特征单独预测目标的平衡准确率达到 99% 或更高,glin 就会发出 Possible target leakage 警告。警告会显示证据,例如 > 62.5 -> 'yes' 或 {p, q} -> 'ok'。训练会继续。Agent 会询问你如何处理每条警告。如果预测时无法获知该值,请移除该列并重新训练。
- glin 会查找阈值、区间和类别映射。它还会查找映射到类别的数值编码(20 个取值或更少),以及映射到某个类别的缺失值。
- glin 会通过日期部分检查日期列。
- 为避免误报,每条规则至少需要 5 行数据。glin 会忽略行数少于 10 的类别,并跳过行数少于 30 的数据。
- glin 最多使用 20,000 行进行检查,并且最多报告 10 列。
参考
MCP 工具
所有工具都带有 MCP 注解。train_model 和 delete_model 标记为有破坏性,因为它们可能替换或删除模型。其他工具均为只读。因此,客户端可以自动运行只读工具,并在运行其他工具前询问你。
train_model(target_column, model_name, csv_path=None, csv_content=None, overwrite=False, hyperparameters=None, holdout_fraction=0.2, holdout_group_column=None, suppression_codes=None, sheet=None, header_rows=None)用于训练并保存模型。- 提供
csv_path或csv_content,但不要同时提供两者。 holdout_fraction=0会使用所有行进行训练,且不提供测试结果。hyperparameters接受 EBM 设置,例如{"interactions": 0}。请参阅list_hyperparameters。- 结果包含
rows_read、target_classes、features_kept、features_dropped、date_columns、warnings、hyperparameters、training_rows、training_seconds、terms和evaluation。对于 Excel 文件,结果还包含sheet和header_rows。 - 当
holdout_fraction=0时,evaluation为null。分组留出还会添加holdout_groups和train_groups。
- 提供
predict(model_name, features, top_n=10)返回预测类别、概率和审计信息:base_logit是截距。contributions给出每个项的分数,并按从高到低排列。- 对于二元目标,分数是
score_class(target_classes中的第二个类别)的对数几率。正分数会推动预测趋向score_class。对于多类别目标,每个项都有score_by_class。 - 如果分数加总后等于模型概率,则
additivity_verified为 true。 - 类别值保留目标的数据类型,例如
1。概率字典的键始终是文本,例如"1"。 warnings列出模型未见过的输入:unseen_category、out_of_range、unparseable_number、unparseable_date、ambiguous_date_format和date_order_mismatch。missing_features列出缺失或为空的输入。
explain_model(model_name, top_n=15, include_shapes=True)返回特征排名、排名靠前的项,以及二元目标中每个特征的形状。inspect_model(model_name)返回按类型(numeric、categorical和date)分类的特征、已删除的列、目标类别、设置和测试结果。对于每个日期列,它会给出日期部分,以及days_since_start的起始日期。list_models()列出所有已保存的模型。list_hyperparameters()列出每项 EBM 设置的类型、默认值、取值范围和影响。delete_model(model_name)永久删除模型。结果包含model_name、deleted和path。
MCP 提示词
提示词是为 Agent 准备好的指令。在大多数客户端中,你可以在提示词菜单中选择它们。Claude Desktop 会在附加项(+)菜单中显示这些提示词。
build_classifier(csv_path, target_column, model_name)执行完整流程:检查并清理数据、移除泄漏、使用固定留出进行调优(预算约为 10 次试验)、使用所有行进行训练,并报告预期性能。tune_model_hyperparameters(model_name, target_column)提供 调优模型 中所述的调优流程,并附带当前设置表。prepare_csv_for_training(target_column)提供训练前的数据检查清单:文件问题、目标选择,以及 glin 对列会做什么和不会做什么。
所有参数均为可选。glin 会根据当前默认值生成提示词,因此提示词与代码保持一致。
服务端标志
将这些标志放在客户端配置参数中的 serve 之后,例如 ["--from", "glin-ml[excel]>=0.1.5", "glin", "serve", "--allow-dir", "/Volumes/data"]。
| 标志 | 作用 |
|---|---|
--allow-dir DIR | 允许 csv_path 读取 DIR 中的文件。可以多次使用此标志。它会替换默认文件夹。如果 DIR 是 /,glin 会向 stderr 输出警告。 |
--max-file-mb MB | 设置 csv_path 读取的最大文件大小。默认值为 200。 |
glin --version 会显示版本。glin serve 只向 stdout 写入 MCP 消息,并向 stderr 写入日志消息。
案例研究
10 万条销售线索的细分 使用 glin 处理带有已知规则的合成 CRM 数据。由于规则已知,该研究可以将每项预测和解释与真实情况进行对照检查。
- 使用 glin 的 Claude 将 71% 的新线索划分到了正确的细分。对于这些线索,可能达到的最高分为 68%。
- 单独使用 Claude 的准确率为 33%。在提示词中加入 1,000 条已标注线索后,Claude 的准确率达到 60%,每条线索使用 83,000 个 token。使用 glin 时,Claude 使用约 12,500 个 token。
- 对于同一条线索,glin 在每个新会话中都会给出相同的答案。
- glin 学到的影响与真实影响一致(相关系数为 0.97 至 1.00)。
印度各县的儿童发育迟缓情况(NFHS-5) 使用 glin 处理真实的公开数据。glin 模型可以预测某个县的儿童发育迟缓率是否偏高,并准确说明每项预测的原因。
开发
从此仓库的克隆副本安装可编辑版本:
git clone https://github.com/AkashChatterjee/glin.git
cd glin
pip install -e ".[dev]" # also installs the Excel libraries, and xlwt to build .xls test files
pytest
要在 MCP 客户端中试用此检出副本,请将 "command" 设置为环境中的 glin 程序(例如 /path/to/glin/.venv/bin/glin),并将 "args" 设置为 ["serve"]。
- glin 兼容
mcpPython SDK 1.x 和 2.x(mcp>=1.21.1,<3)。要测试其中一个版本,可添加约束,例如pip install -e ".[dev]" "mcp>=2,<3"。 Tests工作流(.github/workflows/test.yml)会在每个拉取请求以及每次推送到main时运行。它使用 Python 3.10 和 3.12 搭配最新的 mcp 1.x 和 2.x,以及 Python 3.10 搭配mcp==1.21.1。- 数据规则位于
glin/validation.py和glin/preprocessor.py。EBM 设置位于glin/hyperparameters.py。可在此处添加或更改设置。 - 在 Python 中,
EBMTabularPreprocessor接受suppression_codes和date_parse_threshold。列名不是文本的 DataFrame(例如列名为0)会获得文本列名(例如"0")。
发布(维护者)
只有 Publish to PyPI GitHub Actions 工作流(.github/workflows/publish.yml)会将版本发布到 PyPI。任何人都不会从本地计算机上传。请勿使用 twine upload、uv publish 或个人 API 令牌。 要发布,请推送格式为 vX.Y.Z 的标签:
git tag vX.Y.Z
git push origin vX.Y.Z
工作流会先运行 Tests 工作流(与拉取请求使用相同的矩阵)。如果测试失败,工作流会停止,不会发布。然后它会构建 sdist 和 wheel,并检查两者是否都带有标签对应的版本。随后,它会以该确切版本将它们作为 glin-ml 发布到 PyPI,并根据 CHANGELOG.md 创建 GitHub Release。
hatch-vcs会根据 git 标签推导软件包版本。pyproject.toml中没有固定版本,因此发布前无需升级软件包版本。插件和注册表文件各自有自己的版本(参见发布步骤)。- 未打标签的本地构建会获得类似
0.1.4.dev1+g3fa91a0的开发版本。没有 git 元数据的源代码树会报告0.0.0。 glin.__version__会读取已安装软件包的元数据。- 工作流会忽略与
vX.Y.Z不匹配的标签。 - PyPI 会拒绝上传已存在版本号的文件。要修复有问题的发布,请打一个新版本标签。
发布步骤
所有者在每次发布时执行以下步骤:
- 在
CHANGELOG.md中,将[Unreleased]下的条目移至新的标题## [X.Y.Z] - YYYY-MM-DD下,并在文件末尾添加比较链接。使用gh issue list --milestone vX.Y.Z --state closed核对这些条目。 - 在
server.json(version和packages[0].version)以及plugins/glin/.claude-plugin/plugin.json(version)中设置发布版本。如果插件需要适配此次新发布,还要修改plugins/glin/.mcp.json中的最低版本,以及 安装 中的命令和配置。将这些更改合并到main。 - 为此次发布打标签并推送标签:
git tag vX.Y.Z和git push origin vX.Y.Z。 - 在 GitHub Actions 中,打开
Publish to PyPI运行并批准pypi环境。只有获得批准后,上传步骤才会开始。 - 如果
CHANGELOG.md中没有该版本对应的部分,或者server.json或plugin.json中的版本与标签不同,工作流会在开始时停止。如果一切正确,则会发布到 PyPI。随后,它会根据CHANGELOG.md中该版本的部分创建 GitHub Release。此外,mcp-registry作业还会发布到 MCP Registry(参见发布到 MCP Registry)。 - 检查 PyPI 上是否已有新版本,以及 GitHub Release 是否已创建。
- 检查 MCP Registry 中的条目。新版本必须显示
isLatest: true:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.AkashChatterjee/glin"
如果 mcp-registry 作业失败,请使用发布到 MCP Registry 中的手动备用流程。
要将变更日志与已合并的拉取请求进行比较,请在 GitHub 上打开一个草稿发布,并点击“Generate release notes”。.github/release.yml 会按标签对拉取请求进行分组。
一次性设置,确保这是唯一的发布途径
该工作流通过 PyPI 可信发布(OIDC)进行发布。这也会使本地上传无法进行。
- **PyPI →
glin-ml项目 → Publishing:**为所有者AkashChatterjee、仓库glin、工作流publish.yml和环境pypi添加一个可信发布者。 - **PyPI → Account settings → API tokens:**删除所有可以上传
glin-ml的 API 令牌。不要创建新令牌。在没有令牌且启用双重身份验证(2FA)的情况下,唯一可以用于发布的凭据就是工作流的短期 OIDC 身份。同时检查项目的协作者,并移除不需要上传权限的人员。 - **GitHub → Settings → Rules → Rulesets:**为
v*添加标签规则集。限制可创建标签的人员,并禁止删除或移动标签。符合条件的新标签会启动一次发布。 - **GitHub → Settings → Environments →
pypi:**添加必需的审核者。每次发布都必须先经过人工批准,上传步骤才会运行。
发布到 MCP Registry
注册表仅保存元数据。它会检查 PyPI 软件包的 README 中是否包含 mcp-name: io.github.AkashChatterjee/glin 这一行。README 将这一行作为隐藏注释。
publish.yml 中的 mcp-registry 作业会发布到注册表。它在 publish 作业之后运行,因此版本会先发布到 PyPI。该作业会执行以下步骤:
- 检查
server.json中的version和packages[0].version,以及plugins/glin/.claude-plugin/plugin.json中的version,是否与去掉v前缀后的标签一致。build作业也会执行相同检查,因此如果不匹配,会在上传到 PyPI 前终止运行。检查脚本位于.github/scripts/check-versions.sh。 - 下载固定版本的
mcp-publisher(Linux、amd64),并检查其 SHA-256。版本号位于publish.yml中的MCP_PUBLISHER_VERSION。修改版本时,也要将MCP_PUBLISHER_SHA256改为该版本对应的registry_<version>_checksums.txt文件中的值。 - 使用
mcp-publisher login github-oidc登录。该作业具有id-token: write权限。GitHub 中不会存储任何密钥或令牌。 - 运行
mcp-publisher publish。上传后,PyPI CDN 可能会延迟一分钟或更久,导致注册表无法看到新版本。如果命令失败,作业会等待 60 秒后重试,最多总共尝试 5 次。 - 查询注册表;如果标签对应的版本没有以
isLatest: true列出,则作业会失败。
注册表会拒绝已存在的版本。如果作业在注册表接受该版本后失败,不要再次运行。请改为检查列表。
手动备用方案
如果作业无法发布,请设置 server.json 中的版本,并在版本已发布到 PyPI 后,从仓库根目录运行以下命令:
mcp-publisher login github
mcp-publisher publish
然后使用发布步骤中的 curl 命令检查列表。
检查发布版本
如需检查构建产物但不发布,请在本地运行 uv build 并检查 dist/。切勿上传。发布后,请通过全新安装确认公开软件包能够正常工作:
uvx --refresh --from 'glin-ml==X.Y.Z' glin --version
uvx --from 'glin-ml==X.Y.Z' glin serve --help
用已发布的版本替换 X.Y.Z。第一条命令必须显示该版本。指定版本也可以避免 uvx 使用通过 uv tool install 安装的旧副本。然后从 MCP 客户端启动服务,请 Agent 训练一个小型模型,再使用 delete_model 删除它。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。