爆速＆超軽量！話題のAIエージェントライブラリ『Agno』をclineで簡単に開発・コーディング

## はじめに

最近話題のAIエージェントライブラリ『Agno』。速度とメモリ効率が抜群との謳い文句。しかし、ドキュメントが英語中心でよくわからない？。安心してください！この記事では、英語が苦手でもストレスなくAgnoのドキュメントを理解し、手軽にAIエージェントを開発・コーディングする方法を簡単に解説します。(方法が簡単という意味じゃなくて、簡単な解説ですいません)

## Agnoをclineで攻略！苦手な英語ドキュメントも簡単理解

Agnoはまだまだ日本語での情報が少なく、英語のドキュメントを読み解くのは難しいですよね。そこで活躍するのが、AIアシスタント『cline』です。

以下の手順で簡単にセットアップできます。

1. Agnoのドキュメントを公式サイトからダウンロードします。（利用規約などを確認してくださいね！）
2. HTML形式のドキュメントをMarkdownに変換して、余計な情報を削除します。
3. `.clinerule`ファイルを作成して、clineがドキュメントを参照できるようにします。

具体的には、以下のように記述します。

```text:.clinerule
AIエージェントライブラリのagnoのドキュメントは、ローカルディレクトリdocs/docs.agno.com/にあります。agnoのコーディングの時に参照してください。
```

これだけで、Agnoのドキュメントをclineが読み解いてくれるようになります。

試しに、Agnoのクラス構成をclineに質問してみましょう。

```text
agno.agent.agent.Agentのコンストラクタの引数を全部解説したドキュメントをつくって
```

clineがしっかりと日本語の解説ドキュメントを作ってくれました！すごくよく解かる！！

![Screenshot from 2025-03-15 13-29-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734397/1321deda-b367-4e7a-85d6-27b3c2c66b8f.png)


## Agnoで作る！cline頼りの簡単AIエージェント作成法

さらに、clineを使えばAgnoのサンプルコード作成も簡単です。以下の指示をclineに入力するだけで、基本的なチャットボットを作成できます。

```text
agnoを使って基本的なチャットボットを作って。ファイル名はsamplebot.py
```

clineはAgnoのドキュメントを参照しながら、正確なコードを生成してくれます。非常に便利ですね！

![Screenshot from 2025-03-15 13-39-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3734397/66fe4eaf-1968-49a3-98b9-0f9f623a8d4c.png)


## まとめ

Agnoとclineを組み合わせることで、英語ドキュメントへの苦手意識を克服し、効率よくAIエージェント開発を進めることができます。ぜひあなたもclineを使ってAgnoを試してみてください！

感想や質問はコメント欄でお待ちしています。



参考までに、作ってもらったドキュメントも貼っておきますね。

# Agentクラスのコンストラクタパラメータ解説

## 基本設定

### モデルと識別子
- `model` (Optional[Model]): エージェントが使用する言語モデル
- `name` (Optional[str]): エージェントの名前
- `agent_id` (Optional[str]): エージェントのUUID (未設定の場合は自動生成)
- `agent_data` (Optional[Dict[str, Any]]): エージェントに関連付けられたメタデータ

### プロンプト設定
- `description` (Optional[str]): システムメッセージの先頭に追加されるエージェントの説明
- `goal` (Optional[str]): タスクの目標
- `instructions` (Optional[Union[str, List[str], Callable]]): エージェントへの指示リスト
- `expected_output` (Optional[str]): エージェントから期待される出力形式
- `introduction` (Optional[str]): 実行開始時にチャット履歴に追加される自己紹介文
- `markdown` (bool): True の場合、出力をマークダウン形式で整形する指示を追加 (デフォルト: False)

## セッション管理

### セッション設定
- `session_id` (Optional[str]): セッションUUID (未設定の場合は自動生成)
- `session_name` (Optional[str]): セッション名
- `session_state` (Optional[Dict[str, Any]]): セッション状態（データベースに永続化）

### ユーザー情報
- `user_id` (Optional[str]): エージェントと対話するユーザーのID
- `user_data` (Optional[Dict[str, Any]]): ユーザーに関連付けられたメタデータ

## 拡張機能

### ツール
- `tools` (Optional[List[Union[Toolkit, Callable, Function]]]): モデルに提供されるツールのリスト
- `show_tool_calls` (bool): ツール呼び出しをエージェントのレスポンスに表示 (デフォルト: False)
- `tool_call_limit` (Optional[int]): 許可される最大ツール呼び出し回数
- `tool_choice` (Optional[Union[str, Dict[str, Any]]]): モデルが呼び出すツールの制御

### 知識とメモリ
- `knowledge` (Optional[AgentKnowledge]): エージェントの知識ベース
- `memory` (Optional[AgentMemory]): エージェントのメモリ
- `storage` (Optional[AgentStorage]): エージェントのストレージ
- `add_references` (bool): 知識ベースからの参照をユーザープロンプトに追加 (デフォルト: False)
- `references_format` (Literal["json", "yaml"]): 参照のフォーマット (デフォルト: "json")

### チーム機能
- `team` (Optional[List[Agent]]): このエージェントがタスクを移譲できるエージェントチーム
- `team_data` (Optional[Dict[str, Any]]): チームメンバー間で共有されるデータ
- `role` (Optional[str]): チームにおけるエージェントの役割
- `respond_directly` (bool): True の場合、メンバーエージェントがユーザーに直接応答 (デフォルト: False)

## システムメッセージ設定

### メッセージ制御
- `system_message` (Optional[Union[str, Callable, Message]]): システムメッセージを文字列または関数として提供
- `system_message_role` (str): システムメッセージの役割 (デフォルト: "system")
- `create_default_system_message` (bool): True の場合、エージェント設定から既定のシステムメッセージを作成 (デフォルト: True)
- `user_message` (Optional[Union[List, Dict, str, Callable, Message]]): ユーザーメッセージの設定
- `user_message_role` (str): ユーザーメッセージの役割 (デフォルト: "user")

### 履歴と状態
- `add_history_to_messages` (bool): チャット履歴をメッセージに追加 (デフォルト: False)
- `num_history_responses` (int): 追加する履歴レスポンスの数 (デフォルト: 3)
- `add_state_in_messages` (bool): セッション状態変数をメッセージに追加 (デフォルト: False)

## エラー処理とモニタリング

### リトライ設定
- `retries` (int): 試行回数 (デフォルト: 0)
- `delay_between_retries` (int): リトライ間の遅延秒数 (デフォルト: 1)
- `exponential_backoff` (bool): True の場合、リトライ間の遅延を指数関数的に増加 (デフォルト: False)

### デバッグと監視
- `debug_mode` (bool): デバッグログを有効化 (デフォルト: False)
- `monitoring` (bool): agno.comでのエージェント情報のモニタリングを有効化 (デフォルト: False)
- `telemetry` (bool): 最小限のテレメトリログを有効化 (デフォルト: True)

## 出力制御

### レスポンス設定
- `response_model` (Optional[Type[BaseModel]]): レスポンスをPydanticモデルとして取得
- `parse_response` (bool): True の場合、レスポンスをresponse_modelに変換 (デフォルト: True)
- `structured_outputs` (bool): サポートされている場合、モデル強制の構造化出力を使用 (デフォルト: False)
- `save_response_to_file` (Optional[str]): レスポンスをファイルに保存
- `stream` (Optional[bool]): エージェントからのレスポンスをストリーミング
- `stream_intermediate_steps` (bool): エージェントからの中間ステップをストリーミング (デフォルト: False)

# Agentクラスのメソッド解説

## 基本実行メソッド

### run関連
- `run(input_str: str, **kwargs) -> str`
  - 説明: エージェントにタスクを実行させる基本メソッド
  - 引数: 
    - input_str: 実行するタスクの説明や指示
    - kwargs: 追加のパラメータ（stream、response_modelなど）
  - 戻り値: エージェントからの応答文字列

- `arun(input_str: str, **kwargs) -> str`
  - 説明: runの非同期バージョン
  - 引数: runと同じ
  - 戻り値: エージェントからの応答文字列（非同期）

### レスポンス出力
- `print_response(input_str: str, **kwargs) -> None`
  - 説明: エージェントの応答を直接コンソールに出力
  - 引数: 
    - input_str: 実行するタスクの説明や指示
    - kwargs: 追加のパラメータ（stream、response_modelなど）

- `get_response(input_str: str, **kwargs) -> Dict`
  - 説明: エージェントの応答を辞書形式で取得
  - 引数: runと同じ
  - 戻り値: 応答内容とメタデータを含む辞書

## セッション管理

### 状態管理
- `save_state() -> None`
  - 説明: 現在のセッション状態を保存
  
- `load_state() -> None`
  - 説明: 保存されたセッション状態を読み込み

### 履歴管理
- `add_to_history(message: Union[str, Dict]) -> None`
  - 説明: チャット履歴にメッセージを追加
  - 引数: 追加するメッセージ（文字列または辞書）

- `clear_history() -> None`
  - 説明: チャット履歴をクリア

## ツールと知識管理

### ツール操作
- `add_tool(tool: Union[Toolkit, Callable, Function]) -> None`
  - 説明: エージェントに新しいツールを追加
  - 引数: 追加するツール

- `remove_tool(tool_name: str) -> None`
  - 説明: 指定した名前のツールを削除
  - 引数: 削除するツールの名前

### 知識操作
- `add_knowledge(knowledge: AgentKnowledge) -> None`
  - 説明: エージェントに新しい知識を追加
  - 引数: 追加する知識オブジェクト

- `search_knowledge(query: str, **kwargs) -> List[Dict]`
  - 説明: 知識ベースから情報を検索
  - 引数:
    - query: 検索クエリ
    - kwargs: 検索オプション
  - 戻り値: 検索結果のリスト

## チーム連携

### チーム管理
- `add_team_member(agent: Agent) -> None`
  - 説明: チームに新しいエージェントを追加
  - 引数: 追加するエージェント

- `remove_team_member(agent_id: str) -> None`
  - 説明: チームから指定したエージェントを削除
  - 引数: 削除するエージェントのID

### タスク移譲
- `transfer_task(task: str, agent_id: str) -> str`
  - 説明: タスクを他のチームメンバーに移譲
  - 引数:
    - task: 移譲するタスクの説明
    - agent_id: タスクを移譲するエージェントのID
  - 戻り値: 移譲先エージェントからの応答

## モニタリングとデバッグ

### ログ管理
- `enable_debug() -> None`
  - 説明: デバッグモードを有効化

- `disable_debug() -> None`
  - 説明: デバッグモードを無効化

### モニタリング
- `start_monitoring() -> None`
  - 説明: agno.comでのモニタリングを開始

- `stop_monitoring() -> None`
  - 説明: モニタリングを停止