mcpField
H
Hayhooks

Hayhooks

ローカル
deepset-ai.github.ioAI・エージェント1562 週間前に更新

Hayhooks について

Hayhooksは、HaystackのパイプラインやエージェントをREST、OpenAI互換チャット、MCPツール、A2Aインターフェースとして提供する開発者向けツールです。Redisによるチェックポイント保存と実行トレースにも対応します。

主な機能

  1. 01パイプラインとエージェントをREST APIとしてデプロイ
  2. 02OpenAI互換のチャットエンドポイントを提供
  3. 03MCPツールとA2Aエージェントを公開
  4. 04Redisのチェックポイントで長時間処理を再開
  5. 05実行状況とコンポーネントのトレースを確認

活用シーン

  1. 01Haystackパイプラインを型付きHTTPエンドポイントとして公開
  2. 02チャットインターフェースにストリーミング応答を提供
  3. 03MCPクライアントからパイプラインやエージェントを呼び出す
  4. 04処理を人間の承認待ちにし、再起動後に再開

MCP 対応

MCPサーバーを起動し、Haystackのパイプラインやエージェントをツールとして公開できます。CursorやClaude DesktopなどのMCPクライアントが利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

README の画像

Hayhooks

Haystack のパイプラインとエージェントを API として提供します。

REST API、OpenAI 互換チャット、MCP ツール、A2A エージェントに対応し、永続的な実行とトレース機能を組み込んでいます。

PyPI - Version PyPI - Python Version Docker image release Tests

ドキュメント · クイックスタート · ダッシュボード · 永続的な実行

パイプラインとエージェントを提供する

パイプラインまたはエージェントをラップする Python コードを記述します。必要なインターフェースと実行時機能を選択できます。

  • REST API。 Python ラッパーまたは YAML パイプラインを、OpenAPI ドキュメント、ファイルアップロード、カスタムルートに対応した、型付け済みで検証可能なエンドポイントとしてデプロイできます。
  • OpenAI 互換 API。 ストリーミング対応の Chat Completions および Responses エンドポイントを提供します。Open WebUI に接続するか、組み込みの Chainlit UI を使用できます。
  • MCP サポート。 パイプラインとエージェントを、Cursor、Claude Desktop、その他の Model Context Protocol クライアント向けのツールとして公開する MCP サーバーを実行できます。
  • A2A サポート。 チャット対応のパイプラインとエージェントを Agent2Agent プロトコル経由で公開できます。エージェントの検出とタスクの委任に使うエージェントカードも生成されます。
  • 永続的な実行。 長時間実行する処理を Redis にチェックポイントとして保存し、人間による承認を待機したり、失敗時に再試行したり、再起動後に復旧したりできます。
  • トレースと可観測性。 ターミナルダッシュボードで実行内容とコンポーネントのトレースを確認するか、hayhooks[tracing] を使ってスパンを OpenTelemetry バックエンドにエクスポートできます。

ターミナルダッシュボード

ターミナルでデプロイ状況を確認し、実行を追跡し、処理の遅いコンポーネントを見つけることができます。

5件のデプロイと、選択したリサーチエージェントの状態を表示する Hayhooks ターミナルダッシュボード

デモデータを使用した実際のターミナル UI です。 ダッシュボードを見る。

クイックスタート

Haystack エージェントを、型付けされた HTTP エンドポイント経由で提供します。Python 3.10~3.14 と OpenAI API キーが必要です。

インストールして起動する

Python 環境に Hayhooks をインストールし、サーバーを起動する前に API キーを設定します。

pip install hayhooks
export OPENAI_API_KEY="your-api-key"
hayhooks run

サーバーは起動したままにしてください。以下のコマンドは別のターミナルで実行します。

エージェントを作成する

my_agent_dir という名前のディレクトリを作成し、次の内容を my_agent_dir/pipeline_wrapper.py として保存します。

from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIResponsesChatGenerator
from haystack.dataclasses import ChatMessage
from haystack.tools import tool

from hayhooks import BasePipelineWrapper


@tool
def search(query: str) -> str:
    """Search the knowledge base."""
    return f"This is a demo tool."


class PipelineWrapper(BasePipelineWrapper):
    def setup(self) -> None:
        self.pipeline = Agent(
            chat_generator=OpenAIResponsesChatGenerator(model="gpt-4o-mini"),
            tools=[search],
        )

    async def run_api_async(self, question: str) -> str:
        result = await self.pipeline.run_async(messages=[ChatMessage.from_user(question)])
        return result["last_message"].text

Hayhooks はメソッドの型ヒントを使ってリクエストを検証し、API スキーマを生成します。

デプロイと実行
hayhooks pipeline deploy-files -n my_agent ./my_agent_dir
curl http://localhost:1416/my_agent/run \
  -H 'Content-Type: application/json' \
  -d '{"question": "What can you do?"}'

応答にはエージェントの回答が含まれます。API ドキュメントを開いて、エンドポイントを確認し、試してみてください。

ストリーミングチャットを追加する

run_chat_completion_async を実装して、OpenAI 互換の Chat Completions API を通じてエージェントを公開します。

pipeline_wrapper.py の先頭に、次のインポートを追加します。

from collections.abc import AsyncGenerator
from hayhooks import async_streaming_generator

次のメソッドを PipelineWrapper 内に追加します。

    async def run_chat_completion_async(
        self, model: str, messages: list[dict], body: dict
    ) -> AsyncGenerator[str, None]:
        return async_streaming_generator(
            pipeline=self.pipeline,
            pipeline_run_args={
                "messages": [ChatMessage.from_openai_dict_format(m) for m in messages],
            },
        )

ラッパーを再デプロイし、ストリーミング応答をリクエストします。

hayhooks pipeline deploy-files -n my_agent ./my_agent_dir --overwrite
curl -N http://localhost:1416/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "my_agent",
    "messages": [{"role": "user", "content": "What can you do?"}],
    "stream": true
  }'

応答はサーバー送信イベントとして届きます。Open WebUI に接続するか、組み込み Chainlit UI を使ってエージェントとチャットします。

ダッシュボードで実行を確認する

macOS または Linux では、サーバーと同じ OS アカウントで、2 つ目のターミナルからダッシュボードを開きます。

pip install "hayhooks[tui]"
hayhooks dashboard

実行には e、トレースには v を押し、詳細を表示するには Enter を押します。ローカルでのキャプチャはデフォルトで有効です。最近の通常の実行は、サーバーが再起動するか、バッファから削除されるまで利用できます。

Windows またはリモートアクセスの場合は、ダッシュボード接続ガイドに従ってください。外部の OpenTelemetry バックエンドにスパンをエクスポートするには、トレーシングと OpenTelemetry を参照してください。

永続実行

リクエストの存続期間を超えて処理を実行します。Hayhooks はパイプラインとエージェントを Redis にチェックポイントとして保存するため、再起動後に別のワーカーが処理を再開できます。

人間の承認を得るために実行を一時停止したり、失敗を再試行したり、任意のレプリカから出力ストリームに再接続したりできます。

stateDiagram-v2
    direction LR
    [*] --> queued: submit (202)
    queued --> running: worker claims
    running --> waiting: suspend for a human
    waiting --> queued: resume
    running --> queued: retry or crash recovery
    running --> completed
    running --> failed
    running --> canceled
人間の承認を得てエージェントを実行する

この例では、デモ用の検索ツールを呼び出す前に承認を待ちます。ラッパーを pipelines/research_agent/pipeline_wrapper.py として保存します。

from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIResponsesChatGenerator
from haystack.dataclasses import ChatMessage
from haystack.tools import tool
from pydantic import BaseModel

from hayhooks import BasePipelineWrapper, DurableContext


@tool
def search(query: str) -> str:
    """Search the knowledge base."""
    return f"Hayhooks serves Haystack pipelines and agents; results for {query!r}."


class Task(BaseModel):
    question: str


class Approval(BaseModel):
    approved: bool


class Report(BaseModel):
    answer: str


class PipelineWrapper(BasePipelineWrapper):
    durable_revision = "research-agent-v1"  # compatibility key for persisted inputs and checkpoints
    durable_resume_model = Approval  # typed input for human-in-the-loop waits

    def setup(self) -> None:
        generator = OpenAIResponsesChatGenerator(model="gpt-4o-mini")
        self.pipeline = Agent(chat_generator=generator, tools=[search])

    async def run_durable_async(self, context: DurableContext, task: Task) -> Report:
        # Persist the wait in Redis so a worker serving this revision can resume it.
        if not context.state.get("approved"):
            decision = context.resume_input  # consumed on first read
            if decision is None:
                await context.suspend({"kind": "approval", "message": f"Research {task.question!r}?"})
            if not Approval.model_validate(decision).approved:
                raise ValueError("research was rejected")
            context.state["approved"] = True

        # Agent state is checkpointed after tool calls: recovery continues the loop.
        result = await context.run_agent_async(messages=[ChatMessage.from_user(task.question)])
        return Report(answer=result["last_message"].text)

クイックスタートサーバーがまだ実行中の場合は停止します。追加パッケージをインストールし、Redis を起動して、永続モードでパイプラインディレクトリを提供します。

pip install "hayhooks[durable]"
docker run -d -p 6379:6379 redis
export OPENAI_API_KEY="your-api-key"
HAYHOOKS_DURABLE_MODE=true hayhooks run --pipelines-dir ./pipelines

2 つ目のターミナルで、実行を送信します。

curl -i http://localhost:1416/research_agent/run-durable \
  -H 'Content-Type: application/json' -d '{"question": "What does Hayhooks do?"}'

サーバーは実行 ID とリンクを含む 202 Accepted を返します。以下の EXECUTION_ID をその ID に置き換えて、実行のステータスを確認します。

curl http://localhost:1416/research_agent/executions/EXECUTION_ID

ステータスが waiting のときに、復旧をテストできます。サーバーを停止し、同じコマンドで再起動してください。再起動後も待機状態は保持されます。

復旧には、同じリビジョンを提供するワーカーが必要です。互換性のない変更をデプロイするときは、処理が完了するまで古いリビジョンを稼働させてください。リビジョンの互換性を参照してください。

実行を承認し、出力を追跡します。

curl -X POST http://localhost:1416/research_agent/executions/EXECUTION_ID/resume \
  -H 'Content-Type: application/json' -d '{"approved": true}'

curl -N http://localhost:1416/research_agent/executions/EXECUTION_ID/stream

チェックポイントの動作については永続実行ガイドを、デプロイと復旧については運用ガイドをお読みください。同じエンジンを任意の FastAPI アプリに組み込むこともできます。

次のステップ

コミュニティとサポート

Hayhooks は deepset チームによって積極的にメンテナンスされています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。