Pi Agent: Extension Basics

最終更新:2026-08-31

--- title: "拡張機能の基本" description: "Pi Agentの拡張メカニズムを学び、拡張のアーキテクチャ、ライフサイクル、開発フローを理解します。" order: 14 lang: ja

拡張機能はPi Agentを「そこそこ」から「すごい」へ変える——他人のものを使うもよし、自分で公開するもよし。


1. 拡張機能とは

拡張機能はPi Agentのプラグインメカニズムで、以下が可能です:

TEXT 📖 参照専用
拡張機能の構造
├── manifest.yaml    -> メタデータ(名前、バージョン、依存関係)
├── tools/          -> ツール定義
├── skills/         -> スキル定義
├── providers/      -> プロバイダーアダプター
├── hooks/          -> フック関数
└── templates/      -> プロンプトテンプレート

2. 拡張機能のインストール

(1) 公式リポジトリから

BASH
pi-agent ext install github-tools
pi-agent ext install database-query

(2) Gitリポジトリから

BASH
pi-agent ext install git+https://github.com/user/pi-ext-custom.git

(3) ローカルディレクトリから

BASH
pi-agent ext install ./my_extension

(4) 拡張機能の管理

BASH
pi-agent ext list
pi-agent ext update github-tools
pi-agent ext remove github-tools

3. 拡張機能の作成

(1) スキャフォールド

BASH
pi-agent ext create my_extension

(2) manifest.yaml

YAML
name: my_extension
version: "1.0.0"
description: "私のカスタム拡張機能"
author: "Alice"
min_pi_agent_version: "0.8.0"

dependencies:
  - requests>=2.28.0

tools:
  - tools/my_tool.py

skills:
  - skills/my_skill.yaml

entry_point: hooks.py

(3) ツールの定義

PYTHON
# tools/my_tool.py
from pi_agent import tool

@tool(
    name="weather_query",
    description="Query weather for a city",
    parameters={
        "city": {"type": "string", "description": "City name"},
        "unit": {"type": "string", "enum": ["celsius", "fahrenheit"], "default": "celsius"}
    }
)
def weather_query(city: str, unit: str = "celsius") -> dict:
    import requests
    resp = requests.get(f"https://wttr.in/{city}?format=j1")
    data = resp.json()
    temp = data["current_condition"][0]["temp_C"]
    if unit == "fahrenheit":
        temp = int(temp) * 9 // 5 + 32
    return {"city": city, "temperature": temp, "unit": unit}

4. 拡張機能のライフサイクル

(1) フック関数

PYTHON
# hooks.py
from pi_agent import ExtensionHook

class MyExtension(ExtensionHook):
    def on_load(self, agent):
        print(f"Loaded my_extension for {agent.name}")

    def on_tool_call(self, agent, tool_name, params):
        print(f"Tool called: {tool_name}")

    def on_tool_result(self, agent, tool_name, result):
        print(f"Tool result: {tool_name}")

    def on_error(self, agent, error):
        print(f"Error: {error}")

    def on_unload(self, agent):
        print("my_extension unloaded")

5. 拡張機能の公開

(1) パッケージ化

BASH
pi-agent ext package my_extension
# my_extension-1.0.0.tar.gz を生成

(2) 公式リポジトリに公開

BASH
pi-agent ext publish my_extension

(3) PyPIに公開

BASH
cd my_extension
python -m build
twine upload dist/*

❓ よくある質問

Q 拡張機能とスキルの違いは?
A スキルは単一の能力単位(プロンプト+ツールの組み合わせ)です。拡張機能は完全なプラグインパッケージ(複数のツール、スキル、プロバイダー、フック)です。
Q 拡張機能の依存関係は?
A manifest.yamlのdependenciesで宣言します。Pi Agentが自動的に解決・インストールします。
Q 拡張機能のセキュリティレビューは?
A 公式リポジトリの拡張機能はレビュー済みです。サードパーティの拡張機能は自己責任で評価してください。まずサンドボックスでテストしましょう。

📖 まとめ


📝 練習問題

  1. 基礎(難易度:⭐): 公式拡張機能をインストールし、そのツールを使用してください。
  2. 中級(難易度:⭐⭐): ツールとスキルを含むシンプルな天気照会拡張機能を作成してください。
  3. 上級(難易度:⭐⭐⭐): ツール、スキル、フック、ユニットテストを含む完全な拡張機能を作成してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%