1. わく枠べんきょ会
  2. #4 [気になるスライド] LangCh..
2024-09-07 23:31

#4 [気になるスライド] LangChainの現在とv0.3にむけて

LangChainの現在とv0.3にむけて

https://speakerdeck.com/os1ma/langchainnoxian-zai-tov0-dot-3nimukete


以下、詳しくは読まなかったコンテンツ(今後どこかで読むかもです)


Membership Options (acm.org)

https://www.acm.org/membership/membership-options


State of JavaScript2023

https://2023.stateofjs.com/ja-JP/


「メタバース大規模調査」2023年度分析レポート

https://prtimes.jp/main/html/rd/p/000000001.000148662.html


大規模言語モデル (LLM) の技術と最新動向 - Speaker Deck https://speakerdeck.com/ikuyamada/da-gui-mo-yan-yu-moderu-llm-noji-shu-tozui-xin-dong-xiang

presentor

- taniguchi

- sakamoto (mossan-hoshi) https://x.com/mossan_hoshi

00:02
おはようございます。じゃあ始めましょうか。
ちなみにマイクですけど、結局諦めました。
やっぱりなんかね、RVCを使って変換するとかやってみたんですけれども、
やっぱりなんか気持ち悪い感じだった。
まあ、やっぱりある程度ちゃんと取っておかないと難しいなというような感じですね。
今日なんですけれども、LDというか、片方が発表するみたいな感じの回なんですけれどもですね。
正直あんま私の方でガッツリ準備してるというよりは、
一緒に読み進めたいなというようなコンテンツがあるんで、
それをなんか読んでいこうかなというふうに思います。
正直ちょっと今迷ってまして、応募がいくつかあるんですよ。
一応この管理表とかそこには、
LLMのサーベイ的なサーベイというか、
最新の動向これですよっていうサーベイ的なスライドがあるんですけれどもですね。
これだとあんま良くないな。ちょっと待ってくださいね。
画面の共有を振ってあげて。
画面は全体を共有するか。
全体共有。大丈夫か。
そうですね。こういうLLMの動向か、あとはいくつかあるんですけれどもですね。
このState of Javascript 2023、発表されてもう1ヶ月ぐらい経つんですけれども、
要はWeb技術の結構スタンダードな年一で発表される、
開発者に聞いた今何使ってますみたいな感じの大規模なアンケート結果ですね。
これか、あとはこのLangChainっていって、いわゆるエージェントというかですね、
いわゆるChatGPTとかLLMありますけれども、
ユーザーが明示的に質問一発投げてそのまま一発返ってくるっていうようなやつじゃなくて、
その結果も含めてこのLLMに判断させればある程度自動できるじゃんっていう、
ある意味結構タスクをある程度自動化させるっていうツールで、
いわゆるもうデファクトスタンダード的なLangChainっていうのがあるんで、
こちらのほうが結構だいぶこなれてきたんでですね、
そこら辺をちょっとまとめた資料だとか、あとは最後ちょっとおまけみたいな感じですけども、
Metaverseの大規模調査っていうのがあったらしいんで、
それのレポートも出てたんで、これ見るのも悪くないかなって感じで、
03:01
いくつかあるっていうところなんですよね。
あともう一個おまけつけるところですね。
以前ちょっと話してたオライリーのサブスクリプションってやつですね、
ありましたけど、あれが結構高かったんですけれども、
ちょっとそれ安くできるよっていうようなネタがあって、
そこら辺話すっていうのもありかなっていうので、
正直個人的にこの5つどれでもいいんですけども、
せっかくなんで谷口さんが興味あるやつなんかありますかね、
この5つの中で。
すみません、LangChainっていうのはどういうあれでしたっけ。
いわゆるエージェントとか、
エージェントだけじゃなかったりするんですけれどもですね、
AIがよし何なんか、最初のタスク、
要はユーザーがもう上司みたいな感じになってですね、
部下にこれやっといてって言ったらですね、
部下となるAIがいろいろ調べたりだとか、
その結果をさらにもっといいことやったりだとか、
もしくはいわゆるエージェントが複数にいて、
これをやる専門のエージェントみたいな感じでですね、
特定のタスクだけやるやついて、
それのジョブが終わったら、
その結果を他のAIに渡してあげてみたいな感じで、
本当にそれで仕事で複数人で仕事をやり取りしたりしますけども、
ああいったのをまさにAIだけで組むっていうようなやつですね、
そういったイメージのやつになります。
今後は多分本当にこれが主流になってくるんでしょうけど、
今なかなかやっぱり何回も何回もリクエストを出すことになるんで、
結構ちょっとコストがかかったりだとか、
あとはレスポンスの問題だとかがあるので、
なかなか実プロダクトに投入というか、
そういうのはやってるところはありますけれども、
正直そこまで必要かってところもあったりするんですけども、
ちょっとここは見といたほうがいい技術ではあると。
はい。
じゃあそのLangChainが一番興味があるというか、
見てみたいところですか。
じゃあせっかくなんで見ていきましょう。
9月のやつでLangChainのミートアップで発表された資料の、
LangChainの現在と0.3に向けてというようなところで、
これは株式会社Generative Agentsっていうところの方が
発表された資料っぽいですね。
ちょっと私も実はこのスライド、
あんまり事前にちゃんと読み込んでないんで、
途中でどういうことじゃろうっていうのがあるかもしれませんが、
ご了承くださいと。
LangChainではありますが、
結構いろんな技術というかですね、
能力というかですね、そこら辺が提供されていまして、
もともとはさっき言ったとおり、
06:01
いわゆる結構複雑なタスクをAIに任せるというようなもので
ありましたよとなったんですね。
ここがオープンAI用のやつとか、
オープンAI以外にもGoogleのGeminiに接続したり、
Azureに接続したり、
あとはAnthropicに接続したりとか、
結構そのLLMどれ使うかが任意だったりするんですよね。
なのでそれぞれ用に接続用のやつがあったりするんでですね、
結構そこら辺あまり気にせずに、
自由に接続できたりしますというところですね。
これ結構有名どころではありますけれども、
LangSmithって言ってですね、
結局こういうふうなAIのシステム作ったときに、
それがちゃんと製品として使える状態になってるのってところが、
やっぱり分かんないじゃないですか。
最初よかったんだけども、
どっかのタイミングですごい精度が悪くなって、
それに気づかずずっと運用してたみたいな感じになってくると、
結構危険ですよね。
なのでちゃんとテスト用のデータセット、
テストセットみたいなのを用意しておいてあげて、
更新があるたびにそこら辺のテストを走らせて、
現状性能的にはこんな感じになってますよ。
例えば失敗してるやつがあったときに、
こういうような結果になってましたよ、
みたいなところをいい感じに管理する、
そういったダッシュボードというか、
管理ツール。
あとはこのランググラフっていうのも、
先ほど話してたいわゆるグラフ上みたいな感じで、
作業者をこいつ、こいつ、こいつ、こいつ、
みたいな感じで用意してあげて、
この作業者Aが作業をやってて、
うまくいったらここ、もし失敗したらこっちにあげる、
みたいな感じで、
作業の流れがグラフ上でどんどん移り変わっていくってやつですね。
これがランググラフっていう新しい技術になったりします。
こんなのもいろいろとあったりするって感じで、
結構だいぶ膨らんできてるよと。
多分今後この後はいろいろそこら辺の話が出てくるのかな。
そんな感じで肥大化してきましたが、
パッケージをちゃんと分けましょうねっていうのが
どんどん進んできましたよと。
ラングチェーンエクスプレッションランゲージっていうのが、
いわゆる処理ですね、処理のチェーン。
さっき言った一発だけでワンじゃなくてですね、
複数のこれやって、これやって、これやって、これやって、
みたいなのを書くためのですね、
表現としてラングチェーンエクスプレッションランゲージ
っていうのができたっぽいですね。
この場合だとレトリバーが、
これ多分ラグのサンプルかな。
レトリバーっていって、最初質問が来たときにそれとの類似度を
大量のデータ、要は社内情報を検索しますよみたいなのが
09:03
結構ニーズとしてあると思うんですけども、
一般的なLLMに聞いてもわからない、
社内情報を知らないですよね、学習してないから。
それというのをですね、社内情報を調べるというときに
どういうふうなやり方を取るかっていうふうになると、
まずその出てきたいわゆるプロンプトですね、
プロンプトと一番類似度が近そうな社内文章を
データベース検索みたいなのがあります。
そこら辺その文章の類似度の検索ってベクター検索って、
要はテキストのベクターデータ、ベクター情報ですよね。
数字元の数値の、要は空間上にマッピングするみたいな
イメージを持っていただけるといいと思います。
空間上にテキストを入れるとどっかの空間に
マッピングされるわけですよね。
そうなると今入れたプロンプトもマッピングできますし、
データベース上のいろんなテキスト、
それを適当なサイズで切るんですけども、
その切ったやつもそれぞれマッピングされますよね。
そうなると空間上で一番近くにいるやつっていうのは
分かりますよね、単純に距離を計算すれば。
そんな感じで今入れたやつと一番近い文章を検索してきて、
その一番近い文章、一番近いやつだけではなかったりしますけれども、
それを引っ張ってきます。
そこは別にLLMを使う必要はないというような感じですね。
そういったベクター検索をやって近いやつを持ってきて、
その近いやつを一応コンテキスト、
プロンプトの最初のほうにペタって貼り付けるわけですよ。
ペタって貼り付けて、その下にユーザーが出したプロンプトを入れてあげる。
そうなると社内情報のペタって貼り付けたやつを
加味した質問に回答がLLMができるわけですよね。
そういうのがいわゆる一般的なラグのシステムになります。
検索&生成って感じですね。
多分そこら辺のチェーンを書いたやつがこれになります。
こんな感じで複数のツールを使うんですけども、
ラグの場合だと、そこもこんな感じで
ラグをリトリーブしてプロンプトを入れてモデルにぶち込んで、
その結果をパースしますよ。
多分JSONかなんかで書いてきたやつを用心なりみたいな感じかと思いますけども。
簡単にできるよっていうようなやつですね。
しかもこういうふうに形がちゃんと定義されているので、
この実行結果がラングスミスで、
先ほどラングスミスで実行した結果をいろいろ見ることができるよっていう感じで言いましたけども、
それもこのフォーマットに即していれば、
それぞれのステップがこういうふうになってるよねっていうのを
ちゃんと見ることができるようになってるというところですね。
こんな感じでちょっといい感じに慣れてきてるよという話ですね。
さっき言ったラングスミスってやつですね。
ラングスミスで実行結果を保存できますよというのもあるんですけれども、
12:00
それ以外にもよく使うプロンプトだとかですね。
トレースってなんだ?
ラングスミスのトレースってなんだこれ。
Vertex AIがどの程度の最新のことまで分かっているか分かんないですけども。
思ったんですが、GeminiとこのVertex AIっていうのはまた別なんですか?
Vertex AIはいわゆるGoogleクラウドの中にある1サービスのVertex AIってやつ。
要はGoogleクラウドで使えるAIをいろいろまとめたやつがVertex AIってやつで、
その中にいろいろあるんですね。
言語系のやつもあれば、音声系のやつもあれば、
それ以外の画像分類系のやつもあればみたいな感じでいろいろあって、
その中にLLMも当然ありますよと。
そのLLMにおいて使えるモデルがGeminiで、
Gemini以外も実はあったりするんですけれども、
Googleが使っているやつはGeminiですよというような感じですね。
そういった関係性があります。
ラングスミス知っているかなこいつ。
アプリケーション実行。
そういうことっぽいけど、
実行結果的なやつを残しておくっていう意味でのトレースっていうことなのかな。
どのタイミングでこのトレースが実行されるのか。
ちょっとあんまり知っているのか知っていないのか、
いまいち判断できない。
それっぽい回答してきましたけど。
まあいいや。
なんとなく実行結果を。
そういうことか。
実際ラングスミスで行う場合は、
トレースをログイン記録する。
要は実行コードのほうに、
この結果をトレースしてねみたいな感じで残しておくと、
それはラングスミス上にトレースされるんで、
明示的にこれ残しておきたいってやつに関して、
それを記録するっていうようなやつかと思います。
その機能ですよと。
そういうのもできるよと。
だからその実行結果の記録。
あとプロンプトの管理や評価の機能もありますよと。
OKですね。
公式ドキュメントも確かに読みやすいですよと。
次ですね。
ここ半年ぐらいかな。
結構目玉の機能としてランググラフっていうのが出てきたよ。
先ほどのエージェントがたくさんいて、
そいつらをグラフ上に構成することで、
結構しっかりとしたシステムが、
比較的簡単に組めますよってやつですね。
ここから先は最近のトピック。
UX4エージェントシリーズ。
何のこっちゃここは。
ちょっとあんまちゃんと読んでないんで。
こういう最近ブログ記事。
公式のブログ記事はどこのツールであっても結構出してたりしますけども、
そこらへんこれおすすめですよってやつですね。
とりあえず一旦ちょっと、
15:01
ラングチェーンがバージョン0.3になるんでそこについて、
後半の内容ですね。いきましょうか。
バージョン0.1からのリリースポリシーとして、
0.1から安定性を重視することが明言されて、
ベータ機能を持ち、
ベータ機能を持ち、
バージョン0.1からのリリースポリシーとして、
バージョン0.1からのリリースポリシーとして、
安定性を重視することが明言されて、
ベータ機能を除いて破壊的変更、
要はこの書き方で普通に使えてたのに、いつの間にか仕様変わって、
使えなくなったよっていうのは、
マイナーバージョンなんで、
0.1と0.2の場合だとマイナーバージョンが発生しますよ。
同じ0.1系の0.1と0.1の1と0.1の2であれば、
破壊的変更はないよというような、
そういった感じの仕様ですよと。
今、Rang 0.3に向けて動いているところではありますが、
今、Rang 0.3に向けて動いているところではありますが、
それぞれどういうようなことをやってきたよというところを振り返りましょうというところで、
それぞれどういうようなことをやってきたよというところを振り返りましょうというところで、
バージョン0.1ではリリースポリシーの策定をやって、
先ほど言ったパッケージが何かまとまってたんで、
それをよしなに分割を行いましたよと。
あと、先ほど言ったフォーマットですね、
LCLっていう標準的なチェーンの定義の仕方があるので、
それが推奨されましたよと。
バージョン0.1が2024年の1月で、
バージョン0.1が2024年の1月で、
0.2が2024年の5月なんで、
だいぶ短いは短いんですけれどもですね。
コミュニティパッケージとランゲージチェーンパッケージの依存がなくなったのと、
コミュニティパッケージとランゲージチェーンパッケージの依存がなくなったのと、
マイナーバージョンごとにドキュメントが分かれる。
結局最新版だけのドキュメントがネットにあって、
古いやつ残ってないよってなってくると、
古いやつ使ってる人にとってドキュメント分かりづらくなるっていうのはよくあるあるではありますが、
古いやつ残ってないよってなってくると、古いやつ使ってる人にとってドキュメント分かりづらくなるっていうのはよくあるあるではありますが、
そこら辺が分かれたと。
じゃあ0.3何が変わってくるのっていうようなとこではありますか。
じゃあ0.3何が変わってくるのっていうようなとこではありますか。
Pythontic2が完全サポートして、
破壊的なリリースを予定してますよと。
Pythontic1とPythontic2何が違うんだろう。
Pythontic、
カタチェックみたいなものだとざっくり思っていただければいいかなというふうに思いますけれども、
別にこのラング・チェインに限らず使えるライブラリーではあります。
さらには、その型が間違ってるとき、
Pythonってカタチェックしないじゃないですか。
一応カタヒントっていうような感じで、
この点数はこの方ですよっていうのは、
ですね それが実質的にそれ間違 ってたときにエラーを吐くとか
そういうのが出ないんですよと それを 型間違ってるときに 型ヒント
をもとに判断して それでエラー を出したりだとか そういうエラー
ハンドリング的なやつを行うっていう のがパイランティックだと思って
いただければいいかと思います ほぼデファクトスタンダードという
18:07
か そういったやつですねという 感じかな 今 話し通りですね あと
はパイランティックに関しては データの構造 結構 例えば辞書
型みたいな感じでざっくりと変数 定義したりしますけれども そう
じゃなくて 辞書でフィールドは それぞれこんな感じで どういう
ふうな型ですよみたいなところ の定義とかもできるっていうの
がパイランティックの特徴では あって そいつがバージョン0.1から
バージョン0.2なんだけども そこの 具体的な内容は何ぞやってるのは
ちょっとよく分かんねえぞと パイランティック 1 2の違い何だろう
まあいいや ちょっと細かいとこ がいいでしょう あとは細かいとこ
の話だな ずっと細かいの続きます けれども レガシーなやつがなくなる
よだとか あとランググラフに移行 してくださいねっていうのが推奨
されてますよと もともと結構その エージェントみたいな感じでですね
エージェント機能っていうのが あったんですけれども そこの辺
もグラフのほうに集約されるっていう のがあるらしいです というわけ
で 結構ガチで使う人向けの内容 だったんで かなり細かいところ
ではありましたけれども そんな 感じでいろいろ進化してますよ
っていうような感じでしたね ちょっと モーラ的って感じではなかった
ですけれども 今 ラングチェーン がどんな状況かっていうところ
を紹介されている発表でしたよ というとこでした 多分 今後 その
AI系のシステムとか組むってなった システム もしくは機能組むって
なったときに ちょっとこのラング チェーン自体は候補になり得る
ので ぜひぜひってところですかね こんなとこですかね 以上です
はいでした ちょっと時間余ってるん で どうしようかな
先ほどラングチェーンのほうで 興味があったのは 言語をマッピング
するっていうお話があったと思 うんですけど
言語をマッピング どこでしたっけ
最初のほう 分布の近さで判断する
ラングチェーンというかラグですね じゃあラグの話しますか
ベクターデータで調べたほうが いいかな ラグの こんな感じですね
はい 何々とは何ですかみたいな 感じで質問したときに 普通に聞く
と分かんないよってなっちゃう よと なんで そういった場合は
このデータベース上にいろんな テキストを使って この何ですか
っていうテキスト自体をベクター化 するできるわけですね ベクター
データって何ぞやっていう感じ なんですが 実際にちょっと見て
いただいたほうが こんな感じ ですね XY空間上で座標があります
けれども それよりももっと次元 が深いもの 何十とか何百次元
21:02
ぐらいかなの次元の座標だと思 ってください それがベクトルって
やつになります 先ほどのこのプロンプト のテキスト自体を入れて それを
変換することもできます 要は任意 のテキストですね それを入れる
と何らか座標が返ってくるよっていう ものになります そこはそれ用の
アルゴリズムがあるんですけども 大体 われわれ普通にラグ使ってる
タイプの人はブラックボックス としてほぼほぼ使っている ざっくり
と何か似たような内容だったら 似たようなところにマッピング
されるよぐらいの感じで 思って いただけるといいかなという
ふうに思いますというとこですね これがベクターの基本ですね
そうするので 基本的には類似度 検索を行うためのデータベース
というふうに思っていただける といいですね
はい 次元数でいうとめちゃくちゃ ある感じなんですかね
ですね 次元 何でめちゃくちゃ あるよ ただ そのぐらいあると任意
のテキストであっても 近い近く 内容を評価できるようになるよ
ただ 結局 所詮は座標なんで 類似 近さですね 近さの判定は計算量
余りなしでちゃちゃちゃとやる ことができるよというとこですね
なので 社内データある程度もう 全部ぶち込んであげても そこまで
えげつない負荷がかかるわけではない よというような話ですね 当然 この
ベクターデータベース用の工夫 は データベース作ってる人はちゃんと
やってはいますけれども ユーザー としてはそんな気にする必要はない
というとこですね こういうのがある と 結局 類似チェックは簡単に
できますよね
なるほど 最初 すごい三次元の イメージだったんで どういうこと
って思ったんですけど
もっとえげつないですね
そうじゃなきゃ無理ですもんね
そうですね 先ほど言ったエメリング ってやつはこれですよ デキスト
データがあったときに こんな感じ で変換するよというような感じ
ですね
はい ありがとうございます
じゃあ 今日はそこそこでいい時間 なんで 今日は一旦こんなところ
で終わりますか
23:31

コメント

スクロール