LLM

勉強会「LangChainでAIアシスタントを動かすハンズオン」を開催しました【ご質問への回答まとめ】

2023 年 10 月 26 日に、勉強会「【書籍出版記念 vol2】LangChain で AI アシスタントを動かすハンズオン」を開催しました。

StudyCo 初のオフライン(現地)・ハンズオン勉強会でしたが、大盛況でした!

勉強会の概要、開催の様子、アンケートでいただいたご質問への回答をまとめます。

https://studyco.connpass.com/event/298456/

開催概要

StudyCo の大嶋が、吉田真吾さん (https://twitter.com/yoshidashingo) と共著で『ChatGPT、LangChain によるチャットシステム構築[実践]入門』という書籍を出しました。

出版記念の第 2 弾として、LangChain を使ったハンズオンを開催しました!

書籍の Amazon ページはこちら: https://www.amazon.co.jp/dp/4297138395

AI エージェントとは

LLM の応用例として「AI エージェント」が大きな話題の 1 つとなっています。

AI エージェントは、与えられた目的に対して、何をすべきか自律的に判断して動きます。 例えば、必要に応じて Web 上の情報を検索して回答してくれたり、試行錯誤しながらプログラムを実装してくれたりします。

LangChain を使うことで、このような AI エージェントを簡単に実装して試すことができます。

この勉強会のテーマ

この勉強会では、LangChain で AI エージェントを実装する例として、「AI アシスタント」を動かしてみます。

近年はご家庭にスマートスピーカーも普及していますが、

  • 「今日の天気を教えて」
  • 「明日の 13 時に会議の予定を登録して」
  • 「電気つけて」「扇風機つけて」

といった入力に従って、適切なアクション・応答をしてくれる AI アシスタントを自作できたら面白いのではないでしょうか?

LangChain を使うと、このような AI アシスタントを簡単に実装することができます。 (ただし今回のハンズオンでは、音声入力ではなく、キーボード等での入力です)

この勉強会を通して、LangChain や AI エージェントの面白さを体験していただきます。

発表資料・アーカイブ動画など

今回の勉強会は、発表資料・アーカイブ動画の公開はありません。

使用したソースコードは GitHub で公開しています。

勉強会の様子

会場は、虎ノ門の KDDI DIGITAL GATE (TOKYO) 様を無償でご提供いただきました。

スライドを使っての解説・ハンズオンで皆さん楽しんでくれたようです。

勉強会最後のデモンストレーション (AI エージェントに「電気つけて」と依頼する様子)

ご質問への回答

ここから、事前アンケート・講座終了後のアンケートでいただいたご質問への回答をまとめます。

参加登録時のアンケートでいただいたご質問への回答

顧客要望ごとの機能の使い分けについて/個人の生産性向上で活用できることや、企業で活用する方法などに興味があります。/LangChain のいろんな使い方。

今回の勉強会は、LangChain を網羅的に扱うというより「AI エージェント」にフォーカスした内容でした。 LangChain を体系的に学びたい場合は、ご紹介した書籍を手に取っていただくのが一番だと思います。

その他、無料で見ることができる情報源としては、4 月に開催した勉強会「プロンプトエンジニアリングから始める LangChain 入門」の資料・アーカイブ動画がおすすめです。

langchain で扱えるモデルはどれくらいあるか

公式ドキュメントの該当ページを見ていただくのがよさそうです。

ドキュメントとは別に、インテグレーションをまとめた Web ページもあります。

Hugging Face Hub や Llama.cpp にも対応しているため、非常に多くのモデルを使うことができます。

また、Custom LLM として任意の LLM を使うことも可能です

講座終了後のアンケートでいただいたご質問への回答

せっかくなのでインターフェースを LINE なり Slack なりの Bot から入力できるようにしたいです

LINE や Slack ボットを作る知識は、LangChain や OpenAI の API に特有というよりも、LINE や Slack ボットの作り方、または一般的なアプリケーション開発の知識となります。 そのようなボットの作り方を理解した上で、LangChain や OpenAI の API と組み合わせる、ということになります。

今回の勉強会で紹介した書籍では Slack ボットの具体的な実装方法も解説しているので、よろしければ参照してみてください。

複数のエージェントの中から条件によって特定のエージェントを選択させる方法を教えて頂きたいです。

今回のハンズオンでは、用意した 1 つのエージェントに、複数のツールを与えて、状況に適した 1 つのツールを選択させる、というものでした。 そのため、エージェントが複数のツールからどうやって 1 つのツールを選んでいるのか、というご質問だと捉えて回答させていただきます。

非常に単純化した例ですが、今回のハンズオンで使用したエージェントへの入力のプロンプトは、以下のようなイメージになります。

Wikipediaを検索したい場合は以下の形式で応答してください。
{
  "tool": "wikipedia",
  "param": "検索する文字列"
}

シェルでコマンドを実行したい場合は、以下の形式で応答してください。
{
  "tool": "terminal",
  "param": "コマンド"
}

質問: Amazon Bedrockとは

このプロンプトを ChatGPT (GPT-4) に入力すると、次のような応答を得られます。 (実際に試した結果です)

{
"tool": "wikipedia",
"param": "Amazon Bedrock"
}

この文字列をもとに、「LLM は Wikipedia で Amazon Bedrock と検索したがっている」と判断することになります。 つまり、ツールの選択は LLM にさせている、ということになります。

もう少し正確な動作の例については、勉強会「【2023/04/20】プロンプトエンジニアリングから始める LangChain 入門」のアーカイブ動画 53:46 あたりから解説しているので、そちらをご覧ください。

https://www.youtube.com/live/8FPgoCjoenI?si=z0MLNMaFZDYsrtE-&t=3226

このように、単に LLM の応答のテキストの形式を工夫するだけで実現しているため、どのような LLM でも (性能が十分であれば) 同じような仕組みでエージェントを動かすことができます。

【補足】Function calling について

今回のハンズオンでは、エージェントの実装に Open AI の Chat Completions API の Function calling という機能を使っていました。 そのため、実際には上記のようなプロンプトではなく、Function calling 機能の形式で OpenAI にリクエストを送っています。

しかし、Function calling は LLM として何か特別な機能ということではなく、

  • このようなユースケースのために専用の入出力形式が用意されている
  • そのためにモデルがファインチューニングされている

だけだと理解するのが適切という認識です。

実際に Function calling がどのように実現されているのか公開されていないはずですが… Function calling の入出力は LLM にとっては単なるテキストの入出力と同じように実現されている可能性もあります。 たとえば、ChatML のようにメタ文字列で区切って扱われているだけ、という可能性があります。

参考 (ChatML について)

おわりに

以上、勉強会の概要、開催の様子、アンケートでいただいたご質問への回答をまとめました。

回答内容へのご指摘や追加のご質問については、お問い合わせフォーム からお問い合わせいただくか、発表者の Twitter にご連絡お願いします。

また、StudyCo では、法人様・コミュニティ様向けの出張勉強会や、技術サポートなどもお受けしています。 お問い合わせフォーム から、お気軽にご相談ください。

次回予告

11 月 9 日 (木) 19:30 から、「【初心者歓迎】NeRF: 3 次元 × 機械学習入門―注目の 3 次元化技術をやさしく解説」を開催予定です。

ご興味・お時間ある方は以下の connpass ページからお申し込みください!

https://studyco.connpass.com/event/299270/