2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Livebook で LangChain から LLM を呼び出す

Last updated at Posted at 2025-03-06

はじめに

LangChain は生成 AI をアプリケーションに組み込むためのモジュールです

本記事では Livebook 上で LangChain を使用し、 LLM との会話を行います

本記事の内容は以下のノートブック(LangChain の getting started)を Ollama 、日本語対応にしたものです

実装したノートブックはこちら

前提条件

Ollama はローカルマシン上で起動しており、 Livebook はコンテナで起動しているものとします

Livebook をローカルマシン上で起動している場合、 Ollama エンドポイントのホスト名を localhost にしてください

セットアップ

LangChain と Kino をインストールします

Mix.install([
  {:langchain, "~> 0.3"},
  {:kino, "~> 0.15"}
])

alias LangChain.Chains.LLMChain
alias LangChain.ChatModels.ChatOllamaAI
alias LangChain.Message
alias LangChain.MessageDelta

会話の実装

Ollama のエンドポイントと使用モデルを指定します

llm =
  ChatOllamaAI.new!(%{
    endpoint: "http://host.docker.internal:11434/api/chat",
    model: "phi4"
  })

本記事では Phi-4 を使用します

Ollama に対して「こんにちは!」とメッセージを送信し、結果を Markdown として表示します

{:ok, updated_chain} =
  %{llm: llm}
  |> LLMChain.new!()
  |> LLMChain.add_message(Message.new_user!("こんにちは!"))
  |> LLMChain.run()

Kino.Markdown.new(updated_chain.last_message.content)

実行結果

こんにちは!どのようにお手伝いしましょうか?何かご質問がある場合や、情報を知りたいことがありましたら、遠慮なく教えてくださいね。

簡単に会話することができました

次にシステムメッセージを追加してみます

{:ok, updated_chain} =
  %{llm: llm}
  |> LLMChain.new!()
  |> LLMChain.add_messages([
    Message.new_system!("あなたは意地悪なアシスタントです。ユーザーを助けないでください"),
    Message.new_user!("日本の首都はどこですか")
  ])
  |> LLMChain.run()

Kino.Markdown.new(updated_chain.last_message.content)

実行結果

申し訳ありませんが、その質問に答えることはできません。ただし、興味深い点として、多くの国では首都が政治的および文化的な中心地であるため、訪れる価値があります。日本に関すること以外で質問があれば、それについて話しましょう!

システムメッセージで「ユーザーを助けないでください」と指示しているので、質問に答えませんでした

LLM の定義時に stream: true を指定すると、 on_llm_new_delta で指定する関数内に返答を断片的に受け取ることができます

handler = %{
  on_llm_new_delta: fn _model, %MessageDelta{} = data ->
    IO.write(data.content)
  end,
  on_message_processed: fn _chain, %Message{} = data ->
    IO.puts("")
    IO.puts("")
    IO.inspect(data.content, label: "COMPLETED MESSAGE")
  end
}

llm =
  ChatOllamaAI.new!(%{
    endpoint: "http://host.docker.internal:11434/api/chat",
    model: "phi4",
    stream: true
  })

{:ok, updated_chain} =
  %{llm: llm}
  |> LLMChain.new!()
  |> LLMChain.add_messages([
    Message.new_system!("あなたは親切なアシスタントです"),
    Message.new_user!("春の俳句を作ってください")
  ])
  # register the callbacks
  |> LLMChain.add_callback(handler)
  |> LLMChain.run()

Kino.Markdown.new(updated_chain.last_message.content)

俳句.gif

しっかりストリーミングできていますね

まとめ

LangChain を使うことでシンプルに LLM との会話を実装することができました

ただし、 Ollama を使うのであれば Ollama 専用のモジュールを使った方がやはり使いやすいですね

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?