Magentic: Python開発者のためのシームレスなLLM連携
June 04, 2025
Magentic
プロジェクト概要
Magenticは、大規模言語モデル(LLM)をPythonコードにシームレスに統合するためのPythonライブラリです。@prompt
や@chatprompt
デコレータを用いて、LLMから構造化された出力を返す関数を簡単に作成できます。また、LLMへの問い合わせとツール利用を従来のPythonコードと組み合わせることで、複雑なエージェントシステムを構築することも可能です。
利用方法
- インストール:
pip install magentic # または uv を使用 uv add magentic
- 設定:
OPENAI_API_KEY
環境変数を設定して、OpenAIのAPIキーを指定します。他のLLMプロバイダーの設定については、ドキュメントを参照してください。 @prompt
を使った基本的な利用:from magentic import prompt @prompt('「{phrase}」にもっと「ダチ」っぽさを加えてください。') def dudeify(phrase: str) -> str: ... dudeify("Hello, how are you?") # 戻り値: "やあ、ダチ!調子どう?元気にしてたか?"
@prompt
を使った構造化出力:from magentic import prompt from pydantic import BaseModel class Superhero(BaseModel): name: str age: int power: str enemies: list[str] @prompt("「{name}」という名前のスーパーヒーローを作成してください。") def create_superhero(name: str) -> Superhero: ... create_superhero("Garden Man") # 戻り値: Superhero(name='Garden Man', age=30, power='Control over plants', enemies=['Pollution Man', 'Concrete Woman'])
@chatprompt
を使ったチャットプロンプト:from magentic import chatprompt, AssistantMessage, SystemMessage, UserMessage from pydantic import BaseModel class Quote(BaseModel): quote: str character: str @chatprompt( SystemMessage("あなたは映画好きです。"), UserMessage("ハリー・ポッターで一番好きなセリフは何ですか?"), AssistantMessage( Quote( quote="夢にとらわれて、生きることを忘れてはいけない。", character="アルバス・ダンブルドア", ) ), UserMessage("「{movie}」で一番好きなセリフは何ですか?"), ) def get_movie_quote(movie: str) -> Quote: ... get_movie_quote("Iron Man") # 戻り値: Quote(quote='I am Iron Man.', character='Tony Stark')
FunctionCall
を使った関数呼び出し:from typing import Literal from magentic import prompt, FunctionCall def search_twitter(query: str, category: Literal["latest", "people"]) -> str: """Twitterでクエリを検索します。""" print(f"Twitterでカテゴリ「{category!r}」の「{query!r}」を検索しています") return "<twitter results>" @prompt( "適切な検索関数を使って、次の質問に答えてください: {question}", functions=[search_twitter], ) def perform_search(question: str) -> FunctionCall[str]: ... output = perform_search("LLMに関する最新ニュースは何ですか?") # output: FunctionCall(search_twitter, 'LLMs', 'latest') output() # 出力: Twitterでカテゴリ「latest」の「LLMs」を検索しています # 戻り値: '<twitter results>'
@prompt_chain
を使ったプロンプトチェーン:from magentic import prompt_chain def get_current_weather(location, unit="fahrenheit"): """指定された場所の現在の天気を取得します。""" return {"temperature": "72", "forecast": ["sunny", "windy"]} @prompt_chain( "{city}の天気はどうですか?", functions=[get_current_weather], ) def describe_weather(city: str) -> str: ... describe_weather("Boston") # 戻り値: 'ボストンの現在の天気は72°Fで、晴れ時々風が強いです。'
主な機能
- 構造化出力: PydanticモデルやPythonの組み込み型を構造化出力に対応しています。
- ストリーミング: 生成中に構造化出力や関数呼び出しのストリーミングが可能です。
- LLMを活用したリトライ: 複雑な出力スキーマに対するLLMの順守を向上させます。
- オブザーバビリティ: OpenTelemetryと統合し、ログ記録とトレースをサポート。Pydantic Logfireとのネイティブ統合も含まれます。
- 型アノテーション: リンターやIDEとの連携が良好です。
- 設定: OpenAI、Anthropic、Ollamaなど、複数のLLMプロバイダーに対応しています。
- チャットプロンプト: 複数ターンでの会話やFew-shotプロンプトが可能です。
- 並列関数呼び出し: 複数の関数を並行して呼び出すのをサポートします。
- Vision: LLMによる画像・視覚処理機能を提供します。
- フォーマット: 出力形式を制御するためのツールがあります。
- Asyncioサポート: 非同期処理に対応しています。
- 関数チェーン: LLM駆動の関数を他のLLM関数へのツールとして提供し、複雑なエージェントフローを可能にします。
ターゲットユーザー
大規模言語モデルをPythonアプリケーションに統合したい開発者やエンジニア、特に以下の分野に注力している方に最適です。 * エージェントシステムの構築 * LLMからの構造化データ生成 * LLM駆動の関数によるタスク自動化 * 自然言語入力に基づく動的な関数呼び出しへのLLMの活用
プロジェクトリンク
- 公式サイト: https://magentic.dev/
- GitHubリポジトリ: https://github.com/jackmpcollins/magentic
アプリケーションシナリオ
- データ抽出と変換: 非構造化テキストから構造化情報(例:名前、住所、製品詳細)を抽出します。
- コンテンツ自動生成: 製品説明、要約、特定の形式のクリエイティブな文章など、動的なコンテンツを生成します。
- インテリジェントエージェントとチャットボット: ユーザーの意図を理解し、外部ツール(API、データベース)を呼び出し、構造化された応答を返す会話型エージェントを開発します。
- ワークフロー自動化: LLMが意思決定を行ったり、定義済みのPython関数を呼び出してアクションを実行したりする自動化されたワークフローを作成します。
- 自然言語インターフェース: ユーザーが自然言語を使って複雑なシステムと対話できるインターフェースを構築し、Magenticがこれらの入力を関数呼び出しに変換します。
- コード生成支援: プロンプトに基づいてコードスニペットや関数定義を生成し、構造化出力機能を活用することができます。