背景
LangChain のあんな機能・こんな機能をあれこれ試していると、なかなかに生成 AI サービスの API コールが発生します。もちろん gpt-3.5 系などを使えば費用もそんなに嵩まないのですが、もう少し気兼ねなくあれこれ試す環境を用意できないものか。5月の連休中にあれこれ試した結果、一番お手軽さが優った Ollama & phi3 を Google Colaboratory でシンプルに動かすまでの手順の記録です。
環境
- Google Colaboratory (無料版)
- ランタイムのタイプ: T4 GPU
試し方
それぞれのサンプルコードを、Colaboratory のノートブックのコードセルにコピー & ペーストして実行してください。
まず、公式ページの Linux 用のインストール手順に従い install.sh を取得 & 実行します。
!curl -fsSL https://ollama.com/install.sh | sh
Ollama を起動し、phi3 をダウンロードして使えるようにします。
!nohup ollama serve &
!ollama pull phi3
ここは次の Youtube 動画を参考にさせていただきました。creativaier さんに感謝です。
- 量子化版(ファイルサイズ約 2.3 GB)をダウンロードしているので、時間もあまりかからずセルの実行が完了します
- phi3 を llama3 に変えれば、llama3 も使えるようになります
LangChain の ChatOllama を使うためにライブラリをインストールします。
!pip install langchain_community
次のコードを実行し、準備を整えます。
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
# 言語モデルを定義
llm = ChatOllama(model="phi3")
# プロンプトテンプレートを定義
template = "{input}"
prompt = ChatPromptTemplate.from_template(template)
# チェインの定義
chain = prompt | llm | StrOutputParser()
入力を与えて生成を実行します。
print(chain.invoke({"input": "生成 AI を使う時のプロンプトを書くコツを教えてください。"}))
実行例:
以下に、AIプロントを作成する際に考慮すべきポイントとその実行方法を記します。プロンプトはAIが効果的に動作するための最良の入力であり、コミュニケーション、意思決定、習得や改善に役立つものとなります。
1. 明確性:
- プロントは具体的であるべきです。例えば「写真分類アシスタント」や「天気予報AI」など、目的がわかります。
2. 複数の可能性を含める:
- AIが複数の答えを提示できるようにします。たとえば、「日本史のトピックを紹介してください」であれば、戦国時代、平安時代、明治時代など複数のトピックが提示できます。
3. 自然言語処理に適したフォーマット:
- 入力は自然体であるべきで、直接的かつ説得力を持っていることが重要です。例えば、「今日の天気は?」「私のスポーツ選手に関して教えてください」
4. ユーザーの課題に対するアシスタントとしての仕事を指定:
- プロントは、AIがその課題にどのように対応できるか示すべきです。「質問回答」、「情報収集」、「タスク実行」などがあります。
5. バックログやフィードバックの挙動を定義:
- ユーザーとの連続会話やアシストの評価を記録し、改善するためのデータを生成できるようになります。
6. エラーハンドリング:
- AIがユーザーから不明瞭な入力を受け取った場合の対応方法を設定します。例えば、「どういう意味でしょうか?」と訊いてください。
以上のポイントに基づき、プロンプトを作成する際にはこれらを網羅的に取り入れることが重要です。AIの能力を最大限に引き出すために、複合的かつ実用的なプロンプトを定義しましょう。
雑感
LangChain & Llama.cpp も色々試してみましたが、Colaboratory で使う場合はコンパイルにそこそこ時間がかかるので、お手軽さではこちらに軍配が上がるかなと思います。
phi3 も 3.6B のパラメーター(おかげでモデルのファイルサイズも小さい)で結構使える印象です。あと、phi3 も llama3 もそこそこ日本語扱えますね。これも驚きの一つでした。
自作 PC (Windows 11) でも同様の構成で動作し、LangChain の Agent や LangGraph をあれこれ試すことができました。
- 2024/5/6 時点で LangChain の Components -> Chat models の OllamaFunctions には bind_tools も実装されていました(これが無いと Agent や LangGraph やるのがなかなかに難しい。。)
- ただし、ここ数週間以内での更新のようで、pip install langchain_experimental で入れたライブラリだと OllamaFunctions 実行時にエラーになります
- 回避策はあるのですが、ライブラリのコードを直接書き換える必要があるので、Colaboratory ではまだ試せていません
github のレポジトリ側のコードは更新されているので、あとは pypi 側の更新待ちのようです。