GolangでAIアプリ開発!einoで始めるスマートソリューション
今日はですね、ただ歌って騒ぐだけじゃなく、皆さんの開発ライフを劇的に変えるかもしれない、とっておきのフレームワークをご紹介したいと思います!
さあ、皆さま、突然ですが質問です! AIって聞くと、どんなイメージが浮かびますか?
「難しそう…」 「Pythonしか使えないんでしょ?」 「なんか、ごちゃごちゃしてて…」
そんな声が聞こえてきそうですね! でもご安心ください! 今日ご紹介する「eino」は、そんなAI開発のイメージをガラッと変える、まさに"コントのように"楽しく、そして"スピーディーに"AIアプリケーションを開発できる、Golang製の超絶便利なフレームワークなんです!
はい、マイクを握りしめて説明しますね!
「eino」は、CloudWeGoという、高性能なミドルウェアで有名なチームが開発した、LLM(大規模言語モデル)やAIアプリケーションを開発するためのフレームワークです。一言で言うと「Golang版のLangChain」ってイメージが一番近いかもしれません!
皆さんの大好きなGolangで、AIアプリが作れちゃうんですよ! これってすごくないですか?
では、ここからはプロのソフトウェアエンジニアの視点から、einoがどれほど皆さんの役に立つのかを熱く語らせていただきます!
これが一番のポイントです! 多くのAIフレームワークがPython製である中、einoはGolangで提供されています。
メリット
高いパフォーマンス
Golangは元々並行処理に強く、高いパフォーマンスを発揮します。AI処理は計算負荷が高いことが多いので、これは大きなメリットです。
低リソース消費
Pythonに比べてメモリ使用量などが少なく、限られたリソースでも効率的に動作します。
デプロイが容易
コンパイルすれば単一のバイナリになるため、デプロイが非常に簡単です。Dockerイメージも小さくできますね。
既存システムとの親和性
既にGolangでバックエンドシステムを構築している場合、AI機能をシームレスに組み込むことができます。Pythonのサブシステムを別途用意する必要がありません!
「AI」と一言で言っても、最近の主役はやっぱりLLMですよね。einoはLLMとの連携を強力にサポートしています。
プロンプト管理
LLMに与える指示(プロンプト)のテンプレート化や、動的な値の埋め込みが簡単にできます。
モデルとの統合
OpenAIのGPTシリーズ、Llama2など、様々なLLMモデルと簡単に接続できます。まるでカラオケのリモコンで曲を選ぶように、使いたいモデルをサッと選んで使えるイメージです。
チェーン構造
複数のLLM呼び出しや処理を組み合わせた「チェーン」を簡単に構築できます。例えば、「ユーザーの質問を要約する」→「要約した内容で検索する」→「検索結果とユーザーの質問から回答を生成する」といった複雑なワークフローも、まるでコントの脚本を作るように組み立てられます。
LLMはあくまで言語モデル。外部のデータやツールと連携することで、その真価を発揮します。
外部API連携
独自のAPIや既存のWebサービスと連携し、LLMに外部の情報を使わせることができます。(例
天気予報APIを呼び出して、現在の天気を教えてもらう)
データベース連携
データベースから情報を取得したり、書き込んだりといった操作も可能です。
カスタムツールの作成
自分で作ったGolangの関数を「ツール」としてLLMに提供し、必要に応じて呼び出させることができます。これはもう、AIに「ちょっとそこにあるリモコン取って」ってお願いするようなもんですね!
「フレームワーク」と聞くと、ガチガチに縛られるイメージがあるかもしれませんが、einoは違います。
モジュール性
各機能がモジュールとして提供されているため、必要なものだけを選んで使えます。
カスタマイズ性
細かい部分まで自由にカスタマイズできるので、特定の要件に合わせたAIアプリケーションを開発できます。
さあ、皆さま、マイクを片手に、導入方法を歌いながら覚えていきましょう!
Go環境の準備! (♪ 準備はいいか?) まずはGoの環境が必要です。まだの方は公式ページからインストールしてくださいね。
einoをインストール! (♪ Go get eino!)
go get github.com/cloudwego/eino
これだけでOK!簡単でしょ? まさに「Go Go Go!」って感じです。
環境変数の設定! (♪ 忘れちゃだめだよ!) OpenAIなどのAPIを使う場合は、APIキーを環境変数に設定しておきましょう。
export OPENAI_API_KEY="あなたのAPIキー"
これで準備は万端!さあ、いよいよコードを書いていきましょう!
ここからは、実際にコードを書いて、einoがどれだけ簡単かを見ていきましょう!
登場人物
AIさん (einoを使って喋ります)
あなた (ユーザー)
脚本
package main
import (
"context"
"fmt"
"log"
"github.com/cloudwego/eino/pkg/llms/openai" // OpenAIモデルを使うよ!
"github.com/cloudwego/eino/pkg/prompts" // プロンプトを管理するよ!
)
func main() {
// 1. LLMモデルを用意するよ! (AIさん、準備はいい?)
// 環境変数 OPENAI_API_KEY が設定されていることを前提とします
llm := openai.NewLLM()
// 2. プロンプトテンプレートを作るよ! (AIさんに何を喋らせるか決めよう!)
// 「{{.name}}」の部分が後で変わるよ!
promptTemplate := prompts.NewPromptTemplate(
prompts.TemplateWithInputVariables("name"), // どんな変数を使うか教えてあげる
prompts.TemplateWithTemplate("こんにちは、私の名前は{{.name}}です。よろしくお願いします!"), // 喋らせたいセリフ!
)
// 3. プロンプトに値を埋め込むよ! (AIさんに名前を教えてあげよう!)
prompt, err := promptTemplate.Format(map[string]any{"name": "イーノ"}) // 「イーノ」って名前にするよ!
if err != nil {
log.Fatal(err)
}
// 4. LLMを呼び出すよ! (AIさん、喋って!)
completion, err := llm.Call(context.Background(), prompt)
if err != nil {
log.Fatal(err)
}
// 5. 結果を表示するよ! (AIさん、上手に言えたかな?)
fmt.Println(completion)
// 出力例: こんにちは、私の名前はイーノです。よろしくお願いします!
}
カラオケ解説
はい、拍手!
どうですか? これだけでAIが喋ってくれましたよ!
まるで、プロンプトが歌詞カード、Formatがマイクの音量調整、Callが歌うボタン、って感じですね!
登場人物
AIさん (einoを使って賢くなります)
天気予報士 (外部ツールとして登場)
あなた (ユーザー)
脚本
package main
import (
"context"
"fmt"
"log"
"github.com/cloudwego/eino/pkg/llms/openai"
"github.com/cloudwego/eino/pkg/tools" // ツールを使うよ!
"github.com/cloudwego/eino/pkg/tools/toolkit" // いろんなツールがあるよ!
"github.com/cloudwego/eino/pkg/agents/agent" // エージェントを使って賢く動かすよ!
)
// 今日は常に晴れという天気予報ツール (簡単のために固定値)
type WeatherTool struct{}
func (w *WeatherTool) Name() string {
return "get_current_weather" // ツールの名前だよ
}
func (w *WeatherTool) Description() string {
return "現在の天気を取得するツールです。引数として都市名をstringで渡してください。" // ツールの説明だよ (AIがこれを見て使うか判断する)
}
func (w *WeatherTool) Run(ctx context.Context, input map[string]any) (string, error) {
// 実際はここで天気予報APIを呼び出す!
city, ok := input["city"].(string)
if !ok || city == "" {
return "", fmt.Errorf("city parameter is required")
}
return fmt.Sprintf("%sの今日の天気は晴れです。", city), nil
}
func main() {
llm := openai.NewLLM()
// ツールキットを作るよ! (天気予報士さん、準備できた?)
toolkit := toolkit.NewToolkit(
tools.NewTool("get_current_weather", new(WeatherTool)), // 天気予報ツールを登録!
)
// エージェントを作るよ! (AIさん、ツール使えるようになったね!)
// エージェントは、LLMが自分でツールを使うかどうか判断してくれる賢い機能だよ
agentExecutor, err := agent.NewAgentExecutor(
agent.AgentExecutorWithLLM(llm),
agent.AgentExecutorWithToolkit(toolkit),
agent.AgentExecutorWithVerbose(true), // 何をしているか詳しくログに出すよ!
)
if err != nil {
log.Fatal(err)
}
// AIに質問するよ! (AIさん、今日の天気教えて!)
input := map[string]any{"input": "東京の今日の天気は?"}
output, err := agentExecutor.Run(context.Background(), input)
if err != nil {
log.Fatal(err)
}
fmt.Println("AIの回答:", output)
// 実行ログを見ると、AIが自分でget_current_weatherツールを呼び出しているのがわかります!
// AIの回答: 東京の今日の天気は晴れです。
}
カラオケ解説
ブラボー!ブラボー!
今度はAIが自分で判断して、ツールを使ってくれましたね!
これはまるで、AIが「この歌詞には説明が必要だな…」と判断して、自分で歌詞解説サイトにアクセスして情報を取得するようなもんです!
WeatherToolが「歌詞解説サイト」、AgentExecutorが「賢い歌手」って感じです!
AIが質問に対して、どのツールを使うべきか、ツールにどんな引数を渡すべきかまで考えてくれるんですよ!これはもう、プロのエンジニアが惚れ込むレベルです!
「eino」は、Golangというパワフルな言語で、AIアプリケーションを開発するための強力な味方です。
Pythonに慣れていないけどAI開発に挑戦したい!
既存のGolangシステムにAI機能を組み込みたい!
高パフォーマンスで安定したAIアプリケーションを構築したい!
そんな願いを持っている方には、まさにうってつけのフレームワークです。
今日のカラオケはこれで終わりですが、ぜひ「eino」を実際に触ってみて、その楽しさと便利さを体験してみてください! きっと、AI開発がもっと身近で、もっとワクワクするものになるはずです!