gut について
gutは、小規模モデルで二択・分類・評価などの型付き判定を行うPythonライブラリ兼MCPサーバーです。判定不能をUNSUREとして返し、不確かなケースを人に回せます。
主な機能
- 01二択・分類・評価の判定
- 02不確かな結果を人の確認に回す
- 03複数項目の判定を一括処理
- 04複数のモデルバックエンドを設定
- 05コマンドラインで項目を絞り込み
活用シーン
- 01スパムの可能性があるコメントを判定
- 02チケットを適切なチームに振り分け
- 03緊急度に応じて依頼を優先順位付け
- 04大量のファイルや検索結果を確認
MCP 対応
オプションのgutfeel-mcpパッケージがMCPサーバーを提供し、エージェントからgutの判定機能を利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx gutfeel-mcpTYPESAFE_API_KEYシークレットKey for TypeSafe's Jev, the model asked by default when it is setGUT_BACKENDAnother model: openrouter, ollaya, clm, ollama, openai, openai-decisions, zeroshot or transformersGUT_MODELThe model to ask; required for ollaya, ollama and openaiGUT_BASE_URLThe server's URL, for ollaya, ollama and openaiOPENROUTER_API_KEYシークレットKey for Jev through OpenRouter, with GUT_BACKEND=openrouterローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| lean | any | いいえ | 確信が持てない場合に、どちらに誤るべきかを指定することはできません。 |
| stakes | any | いいえ | 回答が有効と見なされるために必要なモデルの確信度。ask_human が必要です。 |
| subject | string | はい | 判定するテキスト:メール、コメント、差分など。 |
| question | string | はい | テキストについての短い主張。例:"asks for a refund"。自由回答形式の質問ではありません。 |
| ask_human | boolean | いいえ | モデルが判定できない場合に、結果として `unsure` を返すことを許可します。デフォルトではオフです。 |
詳細
Jev 向けに開発され、どんな小型モデルでも動く、Python の 1 行で実現する判断。
ブラウザーで試す → サイトでは gut のローカルモデルをページ内で実行します。キーもサーバーも必要ありません。
コードでは、ロジックでは解決できない問題に何度も直面します。このコメントはスパム? このチケットの担当チームは? どれくらい緊急? エージェントのタスクは完了した? これまでは、答えは3つでした。
- 正規表現とキーワードルール — 無料ですぐに使えますが、言い回しが少し変わるだけで間違えます。
- 最先端の LLM — 何でも理解しますが、1回の呼び出しに数秒と数セントがかかり、解析する文章も返します。
- 分類器のトレーニング — ラベル付きデータとパイプラインを用意し、1週間かければ、実行コストを抑えられます。
4つ目の選択肢があります。まさにこうした質問のために作られた小型モデルです。 TypeSafe AI の
Jev は、型付きの質問に直接回答します。はい/いいえの確率、選択肢ごとの分布、スケール上のスコアなどを返し、生成や解析は不要で、入力分のみ課金されます。gut はこれを基盤に構築され、1行のコードで使えます。
import gut
gut.configure(backend=gut.JevBackend()) # or just set TYPESAFE_API_KEY
if gut.likely(comment, "is spam"):
hide(comment)
プロンプトも解析も閾値も不要で、呼び出し箇所でモデルを指定する必要もありません。
3つの質問
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
わからないときは、それを認識します
正規表現はためらいません。LLM も同じです。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 が閾値を算出します。
1000件の対象を、1行で
spam = gut.each(comments).likely("is spam") # one decision per comment, in order
teams = gut.each(tickets).classify(Team)
Jev は同時リクエストを処理し、ローカルモデルはバッチ処理を行い、すでにキャッシュ済みの項目が再び問い合わせられることはありません。@gut.semantic を使えば、1つの対象に関する複数の質問にも同様に対応できます。
まずは 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}) を使うと、テスト用のフィクスチャから回答できます。
シェルから、そしてエージェント向け
大きなモデルが考え、小さなモデルが素早く判断します。gut を使うエージェントなら、ファイル、コミット、検索結果を1つずつ自分で読む代わりに、1つのコマンドで1000件を判定できます。
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
ドキュメント
**ドキュメント**では、各アイデアを1ページずつ解説しています:はじめに · バックエンド · わからないときの判断 · すべてを一度に質問する · 非同期処理 · 正確なコスト · キャッシュとオブザーバビリティ · コマンドライン · MCP サーバー · 誠実な制限事項。examples/では、すべてのバックエンドで同じコードを実行できます。
ステータスとライセンス
1.0 以前、Apache-2.0。ドキュメント内のすべてのコードブロックはテストスイートで実行されます · コントリビューション
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。