マイクロソフトのLLM統合ライブラリ{{guidance}}を試してみる
マイクロソフトから先日発表された、LLM をアプリ開発に統合するためのPythonフレームワーク {{guidance}} を簡単に試食してみます。
マイクロソフトからは、今回発表されたguidanceのほか、C#向けにSemantic Kernelというライブラリも発表されています。この分野は、マイクロソフト以外でもPython向けのライブラリとして、定番のLangChainや、新星Marvinなど、日々、色々なアイデアが公表されていて楽しいです。
さて、guidance には、どんな特徴があるのでしょうか。
1.guidanceの特徴
シンプルで分かりやすいテンプレートエンジンであるHandlebarsの書式に基づいたシンプルで直感的な構文
複数の世代、選択、条件付き、ツールの使用などを備えた豊富な出力構造
Jupyter/VSCodeノートブックでのストリーミング
スマートシードベースの生成キャッシュ
ChatGPTのようなrole-basedなチャドモデルのサポート
標準プロンプトを超えるスピードアップのためのガイダンスアクセラレーション、プロンプト境界を最適化するためのトークンヒーリング、フォーマットを強制するための正規表現パターンガイドなど、Hugging Faceモデルとの簡単な統合。
2.実行サンプル
とにかく、サンプルを実行してみましょう。
!pip install guidance
OpenAIのAPIのほか、ローカルで実行可能なVicuna-13Bや、llamaのようなHugging Face Transformersのモデルもサポートされているようです。今回はgpt-3.5-turboで試してみます。
import guidance
# connect to a chat model like GPT-4 or Vicuna
gpt3 = guidance.llms.OpenAI("gpt-3.5-turbo")
# gpt4 = guidance.llms.OpenAI("gpt-4")
# vicuna = guidance.llms.transformers.Vicuna("your_path/vicuna_13B", device_map="auto")
Handlebarsのテンプレートの書式で、プロンプトを作ってllmに渡します。OpenAI APIの標準のプロンプトのテンプレートよりも、もっと柔軟に色々な論理制御などができるようです。
experts = guidance('''
{{#system~}}
あなたは親切で有能なアシスタントです
{{~/system}}
{{#user~}}
次の質問に答えてください:
{{query}}
Name 3 world-class experts (past or present) who would be great at answering this?
Don't answer the question yet.
{{~/user}}
{{#assistant~}}
{{gen 'expert_names' temperature=0 max_tokens=300}}
{{~/assistant}}
{{#user~}}
では、この専門家たち(experts)が共同で匿名の回答を書いたかのように、日本語で回答してください。
{{~/user}}
{{#assistant~}}
{{gen 'answer' temperature=0 max_tokens=500}}
{{~/assistant}}
''', llm=gpt3)
それでは、実行してみましょう。
experts(query='どうすればもっと有効的に大規模言語モデルを活用できますか')
同じテンプレートで、お題を変えて実験
experts(query='歴代の日本のロボットアニメのうち最も熱い作品')
3.まとめ
Handlebarsの豊富な機能のテンプレート書式を使うことで、アプリ開発の中で、より見通し良くLLMを活用できそうです。
このほかguidanceには、出力形式が必ずjson形式になることを保証する機構や、トークンの節約など色々有用な機能が織り込まれています。ぜひ本家ページのサンプルをのぞいてみてください。
マイクロソフトが提案するだけあって、大人の実装というか、全体の機能として見通しが良い印象を受けました。もちろん、最大戦速で様々なアイデアを実装しまくっているLangChainのイケイケ開発スタイルも大好きですけど。
guidanceは、LangChainや、先日試してみたMarvinとは、 また一味違ったアイデアが取り込まれていて、各ライブラリそれぞれの長所を生かして、うまく棲み分けができそうな印象を受けました。LLM本体の競争だけでなく、ラッパーライブラリの開発競争も目が離せませんね。
お読みいただき、ありがとうございました。
おしまい