mcpField
G
gut

gut

本地服务
gutpy.devAI 与智能体72 周前更新

关于 gut

gut 是一个 Python 库和 MCP 服务,使用小模型进行是非、分类和评分等类型化判断。它可以返回 UNSURE,将不确定的情况交由人工处理。

主要功能

  1. 01进行是非、类别和评分判断
  2. 02标记不确定结果供人工审核
  3. 03批量处理多个条目
  4. 04配置多种模型后端
  5. 05通过命令行筛选条目

适用场景

  1. 01标记可能的垃圾评论
  2. 02将工单分派给合适团队
  3. 03按紧急程度排列请求
  4. 04审核大量文件或搜索结果

MCP 相关

可选的 gutfeel-mcp 软件包提供 MCP 服务,让 Agent 使用 gut 的判断能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kungie-gut": {
"command": "uvx",
"args": [
"gutfeel-mcp"
],
"env": {
"TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>",
"GUT_BACKEND": "<GUT_BACKEND>",
"GUT_MODEL": "<GUT_MODEL>",
"GUT_BASE_URL": "<GUT_BASE_URL>",
"OPENROUTER_API_KEY": "<OPENROUTER_API_KEY>"
}
}
}
}
启动命令uvx gutfeel-mcp
需要配置的环境变量
TYPESAFE_API_KEY密钥Key for TypeSafe's Jev, the model asked by default when it is set
GUT_BACKENDAnother model: openrouter, ollaya, clm, ollama, openai, openai-decisions, zeroshot or transformers
GUT_MODELThe model to ask; required for ollaya, ollama and openai
GUT_BASE_URLThe server's URL, for ollaya, ollama and openai
OPENROUTER_API_KEY密钥Key for Jev through OpenRouter, with GUT_BACKEND=openrouter

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypigutfeel-mcp0.8.2

工具

4

收录的工具列表 · 更新于 2 周前

参数类型必填说明
leanany否不确定时不允许选择“倾向于”的方向。
stakesany否模型必须达到的确信程度,答案才算有效。需要 ask_human。
subjectstring是要判断的文本:电子邮件、评论或差异内容。
questionstring是关于文本的简短断言,例如 "asks for a refund"。不是开放式问题。
ask_humanboolean否允许模型无法判断时返回结果 `unsure`。默认关闭。

详细介绍

gut

PyPI CI Downloads Glama MCP server

用一行 Python 做出判断——为 Jev 打造,也能在任何小模型上运行。

在浏览器中试用 → 网站会在页面中运行 gut 的本地模型:无需密钥,无需服务端。

你的代码总会遇到一些并非逻辑判断的问题:这条评论是垃圾信息吗?这张工单归哪个团队负责?有多紧急?Agent 的任务完成了吗? 过去只有三种办法:

  • 正则表达式和关键词规则——免费且即时,但只要换种说法就会出错。
  • 前沿大模型——什么都能理解,但每次调用要花好几秒和几分钱,还得解析生成的文本。
  • 训练分类器——运行成本低,但前提是你已有标注数据、流程和整整一周时间。

现在有第四种办法:专为这类问题打造的小模型。 TypeSafe AI 的 Jev 可以直接回答有类型的问题——给出「是」的概率、选项分布或量表评分——无需生成或解析内容,且只按输入计费。gut 围绕它构建,让它只需一行代码:

import gut

gut.configure(backend=gut.JevBackend())   # or just set TYPESAFE_API_KEY

if gut.likely(comment, "is spam"):
    hide(comment)

无需提示词,无需解析,无需阈值——调用处也无需指定模型名称。

三个问题

gut.likely(ticket, "is a bug report")                      # yes / no
gut.classify(ticket, Team)                                 # which one — an Enum
gut.rate(ticket, ["can wait", "this week", "right now"])   # how much

知道自己何时不知道

正则表达式从不犹豫,大模型也一样。gut 可以:

match gut.likely(email, "the customer threatens to cancel", ask_human=True):
    case gut.YES:    escalate(email)
    case gut.NO:     auto_reply(email)
    case gut.UNSURE: send_to_a_person(email)

用文字说明要多谨慎——lean="yes"、stakes="high"——gut 会自行计算阈值。

千种对象,一行代码

spam = gut.each(comments).likely("is spam")     # one decision per comment, in order
teams = gut.each(tickets).classify(Team)

Jev 会并发处理请求,本地模型会批量运行,并且不会重复询问已缓存的内容。@gut.semantic 对同一对象的多个问题也能做到这一点。

首选 Jev,兼容任意模型

Jev 是 gut 专为其设计的模型,但并非唯一选择:模型通过配置指定,同一行代码也能原样运行在以下任意模型上。

gut.configure(backend=gut.JevBackend())                            # TypeSafe AI's Jev
gut.configure(backend=gut.JevBackend.openrouter())                 # Jev, through OpenRouter
gut.configure(backend=gut.JevBackend.ollaya("winnow:e4b"))         # open decision model, Ollaya
gut.configure(backend=gut.ZeroShotBackend())                       # NLI model, on your CPU
gut.configure(backend=gut.TransformersBackend("Qwen/Qwen3-0.6B"))  # small LLM, on your machine
gut.configure(backend=gut.OpenAICompatibleBackend(                 # Ollama, vLLM, llama.cpp
    "qwen2.5:1.5b", base_url="http://localhost:11434/v1"))
gut.configure(backend=gut.OpenAICompatibleBackend("gpt-4.1-nano")) # OpenAI
gut.configure(backend=gut.OpenAIDecisionsBackend())                # OpenAI's Decisions API

也可以同时使用多个模型。Cascade 会先询问成本最低的模型,只将它不确定的内容交给下一个模型:

gut.configure(backend=gut.Cascade(
    gut.ZeroShotBackend(),   # free and local: settles the obvious
    gut.JevBackend(),        # sees only what the first could not
))

每个答案都是模型自身给出的概率,绝非从文本中解析而来;decision.model 会指出给出答案的模型。你自己的模型也可以作为后端:了解如何编写。

安装

pip install "gutfeel[jev]"           # + JevBackend: TypeSafe, OpenRouter or Ollaya
pip install "gutfeel[local]"         # + ZeroShotBackend and TransformersBackend (PyTorch)
pip install gutfeel                  # core: any OpenAI-compatible server; FakeBackend for tests
pip install gutfeel-mcp             # + the MCP server, gutfeel-mcp

PyPI 上的包名是 gutfeel(gut 已被占用);导入方式为 import gut。手边没有模型?gut.FakeBackend(answers={"is spam": 0.97}) 可以从固定测试数据中返回答案,供测试使用。

从 Shell 使用,以及用于 Agent

大模型负责思考,小模型负责快速判断。使用 gut 的 Agent 可以通过一条命令判断一千个文件、提交记录或搜索结果,而不必逐一阅读:

git ls-files | gut filter "retries failed requests" --read-files --max-cost 0.50
claude mcp add gut --env TYPESAFE_API_KEY=your-key -- uvx gutfeel-mcp   # MCP Registry: io.github.Kungie/gut
npx skills add Kungie/gut --skill gut     # teaches a coding agent when to reach for it

文档

文档,每个主题各占一页:快速入门 · 后端 · 了解何时不知道 · 一次提出所有问题 · 异步 · 精确成本 · 缓存与可观测性 · 命令行 · MCP 服务 · 坦诚说明局限。examples/ 中的代码会在每个后端上运行。

状态与许可证

Pre-1.0,Apache-2.0。本文档中的每个代码块都会在测试套件中运行 · 参与贡献

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。