💡

databricks上で ollama + dspyでLLMの推論

に公開

この記事ではdatabricksのノートブック上で ollamaでgemmaのモデルをサーブして、dspyでプロンプトをカスタママイズしながら、推論する例を紹介していきます。

事前にコンピュートを立ち上げておきましょう。

まずは必要なライブラリをnotebook上でインポートします。

!pip install dspy
!pip install ollama
dbutils.library.restartPython()
!curl -fsSL https://ollama.com/install.sh | sh 

下記のコマンドでAPI サーバーが立ち上がります。

!ollama serve
# http://localhost:11434

自身の利用したいモデルをPULLしてきます。

import ollama
ollama.pull('gemma3:4b')

推論の実行を dspyで実施してみます。

import dspy

lm = dspy.LM("ollama_chat/gemma3:4b", 
            api_base="http://localhost:11434",
            api_key="")

dspy.configure(lm=lm)

predict = dspy.Predict('country -> capital')
response = predict(country="日本")

# 結果の表示
print(response)

これだけだと、あまり恩恵を感じられませんが、dspyはプロンプトの構造化等色々便利なモジュールを提供してくれてるようです。

dspyが用意しているChainOfThoughtを使用する。

document = "ドーナツ(ドーナッツ、英語: doughnut, donut)は、小麦粉が主成分の生地に水・砂糖・バター・卵などを加えたものであり、一般的には、油脂で揚げる揚げ菓子の一種類である。内側はしっとりふんわりしたケーキのような食感のものや、モチモチした食感のものなどがあり、形状はリング状が多いが、ボール状や棒のような形のものなどもある。日本では下に記した専門店や、スーパーマーケット、コンビニエンスストアで販売されている。ホットケーキミックス、ドーナツ専用の「ドーナツミックス」などを用いると、家庭でも比較的簡単に作ることができる。日本では菓子の範疇であるが、アメリカ合衆国では朝食代わりにする人も多い。"

class SummarizeWithSystemPrompt(dspy.Signature):
    """system prompt を含んだ文書要約"""
    system_prompt = dspy.InputField(desc="出力スタイルや指示を定義するプロンプト")
    document = dspy.InputField(desc="要約したい文書")
    summary = dspy.OutputField(desc="文書の要約")

summarize = dspy.ChainOfThought(SummarizeWithSystemPrompt)

response = summarize(
    system_prompt="日本語で回答してください。",
    document=document
)

print(response)

元のドキュメントが少し短いのであれだが、理由と回答を返してくれている

特にmlflowのモジュールの呼び出しとかはしていませんが、databricksのノートブックの出力結果部分(MLflow Trace UI)に出力がしっかりとされていることがわざわざプリントしなくてもわかるのは便利ですね。

評価用のプロンプトやさまざまなものも作れるようですので、下記の記事等もご参考までに
https://qiita.com/taka_yayoi/items/4bde6969ecbc20a38bfe

Discussion