Simple Agent サンプル
概要
このサンプルは、Agno-Goを使用してツール呼び出し機能を持つシンプルなAIエージェントを作成する基本的な使い方を示します。エージェントはOpenAIのGPT-4o-miniモデルを使用し、数学的な演算を実行するための計算ツールキットを装備しています。
学べること
- OpenAIモデルの作成と設定方法
- ツールを持つエージェントのセットアップ方法
- ユーザークエリでエージェントを実行する方法
- 実行メタデータ(ループ、トークン使用量)へのアクセス方法
前提条件
- Go 1.21以上
- OpenAI APIキー
セットアップ
- OpenAI APIキーを設定:
bash
export OPENAI_API_KEY=sk-your-api-key-here
- サンプルディレクトリに移動:
bash
cd cmd/examples/simple_agent
完全なコード
go
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/rexleimo/agno-go/pkg/agno/agent"
"github.com/rexleimo/agno-go/pkg/agno/models/openai"
"github.com/rexleimo/agno-go/pkg/agno/tools/calculator"
"github.com/rexleimo/agno-go/pkg/agno/tools/toolkit"
)
func main() {
// 環境からAPIキーを取得
apiKey := os.Getenv("OPENAI_API_KEY")
if apiKey == "" {
log.Fatal("OPENAI_API_KEY environment variable is required")
}
// OpenAIモデルを作成
model, err := openai.New("gpt-4o-mini", openai.Config{
APIKey: apiKey,
Temperature: 0.7,
MaxTokens: 1000,
})
if err != nil {
log.Fatalf("Failed to create model: %v", err)
}
// 計算ツールキットを作成
calc := calculator.New()
// エージェントを作成
ag, err := agent.New(agent.Config{
Name: "Math Assistant",
Model: model,
Toolkits: []toolkit.Toolkit{calc},
Instructions: "You are a helpful math assistant. Use the calculator tools to help users with mathematical calculations.",
MaxLoops: 10,
})
if err != nil {
log.Fatalf("Failed to create agent: %v", err)
}
// エージェントを実行
ctx := context.Background()
output, err := ag.Run(ctx, "What is 25 multiplied by 4, then add 15?")
if err != nil {
log.Fatalf("Agent run failed: %v", err)
}
// 結果を出力
fmt.Println("Agent Response:")
fmt.Println(output.Content)
fmt.Println("\nMetadata:")
fmt.Printf("Loops: %v\n", output.Metadata["loops"])
fmt.Printf("Usage: %+v\n", output.Metadata["usage"])
}
コードの説明
1. モデル設定
go
model, err := openai.New("gpt-4o-mini", openai.Config{
APIKey: apiKey,
Temperature: 0.7,
MaxTokens: 1000,
})
- GPT-4o-miniを使用するOpenAIモデルインスタンスを作成
Temperature: 0.7
はバランスの取れた創造性と一貫性を提供MaxTokens: 1000
は応答長を制限
2. 計算ツールキット
go
calc := calculator.New()
計算ツールキットは4つの関数を提供:
add
- 2つの数値の加算subtract
- 2つの数値の減算multiply
- 2つの数値の乗算divide
- 2つの数値の除算
3. エージェント設定
go
ag, err := agent.New(agent.Config{
Name: "Math Assistant",
Model: model,
Toolkits: []toolkit.Toolkit{calc},
Instructions: "You are a helpful math assistant...",
MaxLoops: 10,
})
Name
- エージェントを識別Model
- 推論に使用するLLMToolkits
- エージェントが利用できるツールコレクションの配列Instructions
- エージェントの動作を定義するシステムプロンプトMaxLoops
- ツール呼び出しの最大反復回数(無限ループを防ぐ)
4. エージェントの実行
go
output, err := ag.Run(ctx, "What is 25 multiplied by 4, then add 15?")
エージェントは以下を行います:
- ユーザークエリを分析
- 計算ツールを使用する必要があると判断
multiply(25, 4)
を呼び出して100を取得add(100, 15)
を呼び出して115を取得- 自然言語の応答を返す
サンプルの実行
bash
# オプション1: 直接実行
go run main.go
# オプション2: ビルドして実行
go build -o simple_agent
./simple_agent
期待される出力
Agent Response:
The result of 25 multiplied by 4 is 100, and when you add 15 to that, you get 115.
Metadata:
Loops: 2
Usage: map[completion_tokens:45 prompt_tokens:234 total_tokens:279]
重要な概念
ツール呼び出しループ
MaxLoops
パラメータは、エージェントがツールを呼び出せる回数を制御:
- ループ1: エージェントが
multiply(25, 4)
を呼び出し → 結果: 100 - ループ2: エージェントが
add(100, 15)
を呼び出し → 結果: 115 - 最終: エージェントが自然言語の応答を生成
各ループは、1回のツール呼び出しと結果処理を表します。
メタデータ
output.Metadata
には有用な実行情報が含まれます:
loops
- 実行されたツール呼び出しの反復回数usage
- トークン消費量(プロンプト、完了、合計)
次のステップ
- Anthropic統合についてはClaude Agentサンプルを探索
- 複数のエージェントによるチーム協調について学ぶ
- 複雑なプロセスのためのワークフローエンジンを試す
- ナレッジ検索を使用したRAGアプリケーションを構築
トラブルシューティング
エラー: "OPENAI_API_KEY environment variable is required"
- APIキーをエクスポートしたことを確認:
export OPENAI_API_KEY=sk-...
エラー: "model not found"
- GPT-4o-miniモデルへのアクセスがあることを確認
- 代替として"gpt-3.5-turbo"を試す
エラー: "max loops exceeded"
- エージェントがMaxLoops制限(10)に達した
MaxLoops
を増やすかクエリを簡略化