見出し画像

LLMとプログラミングを調和させるライブラリ、Marvinを体験してみました。

mah_lab / 西見 公宏さんのMarvinの紹介記事を読んで、とても興味が湧いたので、じぶんも体験してみることにしました。😃
コンセプトなど詳しい説明は、ぜひ西見さんの記事をお読みください。

動作サンプル(google colab)

Marvinの使用方法は、@ai_fnをつけた関数や、@ai_modelデコレータをつけたクラスで、LLMの入出力とプロンプトを指定するだけです。従来のPythonのプログラミングのスタイルを踏襲して、複雑な処理はLLMにお任せする感じ。

!pip install openai
!pip install marvin

import os
os.environ["OPENAI_API_KEY"] = "YOUR OPENAI_API_KEY"
from marvin import ai_model
import datetime
from typing import Literal, List
import pydantic

# フォーマット・型を定義
class ActionItem(pydantic.BaseModel):
    担当者: str
    内容: str
    期限: Optional[datetime.datetime]
    緊急度: Literal['低', '中', '高']

# LLMへのプロンプト、出力形式を定義
@ai_model
class Conversation(pydantic.BaseModel):
    '''A class representing a team converastion'''
    participants: List[str]
    action_items: List[ActionItem]

# 実行!
result = Conversation('''
山田: 斉藤さん。私からの決済書類を承認してもらえませんか。
斉藤: はいはい。いつまでに必要なんだっけ。
山田: 来週の月曜日の朝までには欲しいです。発注しないといけないので。
斉藤: 了解。早めに確認するからちょっと待っててね。 
山田: おーい田中さん、10時からの客先への進捗状況の説明なんだけど、
      紙資料を9時までに印刷してもらえるかな。
田中: 共有フォルダーに入ってる資料ですよね。
山田: そうそう。
田中: 承知しました。すぐお持ちします。 
''').json(indent = 4, ensure_ascii=False)
print(result)

{
   "participants": [
       "山田",
       "斉藤",
       "田中"
   ],
   "action_items": [
       {
           "担当者": "斉藤",
           "内容": "山田からの決済書類を承認する",
           "期限": "2023-05-22T00:00:00+00:00",
           "緊急度": "中"
       },
       {
           "担当者": "田中",
           "内容": "客先への進捗状況の説明のため、共有フォルダーから資料を印刷する",
           "期限":
"2023-05-15T09:00:00+00:00",
           "緊急度": "高"
       }
   ]
}

JTCっぽいオフィスの会話

コンセプトは分かりますが、こんなコードが実際にそのまま動いてしまうなんて、もはや魔法ですね。

プロンプト芸でLLMの能力に頼り切った感じの実装ではなく、型ヒントを応用してプログラマー側のニーズを明確に伝えるコンセプトから、今後のLLMを活用したプログラミングの一つの可能性を感じます。何より、エージェントが自動でガンガン進めてをしてしまう方向性より安心感がありますね。

将来的にはLLM側の性能アップでも補えてしまうのかもしれませんが、ラッパー側の型チェック、内容チェックの精度が上がれば、システム全体の保守性や動作の信頼性も上がりそうです。今後に期待です。

さて、ドキュメントを読まないと。

本当にこの分野は日々新しいアイデアが生み出されるので刺激的で楽しいですね。そういえば langChain のバージョンもまた上がってたなぁ。ひー😅

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?