Slide 1

Slide 1 text

LangChain Meetup Tokyo #3 LangChain & LangServeで APIを爆速作成 2024.10.09 1

Slide 2

Slide 2 text

© 2024 Algomatic Inc. ⾃⼰紹介 2 データサイエンティストとして位置情 報分析に従事。その後、⽣成AIプロダ クト開発を担当。 AIを活⽤した業務変⾰⽀援の案件に参 画しています。 AI Transformation(AX) 伊藤 光祐/ Kosuke Ito

Slide 3

Slide 3 text

© 2024 Algomatic Inc. 3 今⽇の内容 LangChainでイケてる⾃動化フロー作ったはいいけど... ● ちゃんとしたアプリにするのが⾯倒 ● 短期間でAPIを納⼊する必要がある ● APIの作り⽅よくわからん LangServeを使って爆速でAPIを作成しよう!!!

Slide 4

Slide 4 text

© 2024 Algomatic Inc. 4 アジェンダ 1. LangServeの基本 2. チャットボットAPIの作り⽅ 3. 複雑なフローのAPI化 4. おまけ

Slide 5

Slide 5 text

© 2024 Algomatic Inc. 5 アジェンダ 1. LangServeの基本 2. チャットボットAPIの作り⽅ 3. 複雑なフローのAPI化 4. おまけ

Slide 6

Slide 6 text

© 2024 Algomatic Inc. 6 まずはAPI化したいRunnableを作成 例として超シンプルなRunnableを作成。

Slide 7

Slide 7 text

© 2024 Algomatic Inc. 7 RunnableのAPI化 add_routesにFastAPIのインスタンスとRunnableを渡してパス(APIのURL)を指定するだけ!

Slide 8

Slide 8 text

© 2024 Algomatic Inc. 8 APIサーバーの起動 uvicorn.runの引数にFastAPIのインスタンスと各種設定を渡す。

Slide 9

Slide 9 text

© 2024 Algomatic Inc. 9 ⾃動ドキュメント化 サーバーのURL/docsを開くと勝⼿にドキュメント化されてます。

Slide 10

Slide 10 text

© 2024 Algomatic Inc. 10 簡易UI サーバーのURL/APIのパス/playgroundを開くと簡易アプリが使えます。

Slide 11

Slide 11 text

© 2024 Algomatic Inc. 11 アジェンダ 1. LangServeの基本 2. チャットボットAPIの作り⽅ 3. 複雑なフローのAPI化 4. おまけ

Slide 12

Slide 12 text

© 2024 Algomatic Inc. 12 チャットボット⽤Runnable 対話履歴(BaseMessageのリスト)と最新メッセージを持つdictが引数になる。

Slide 13

Slide 13 text

© 2024 Algomatic Inc. 13 チャットボット⽤簡易UI add_routesの引数でplayground_type="chat"とすると有効になる。

Slide 14

Slide 14 text

© 2024 Algomatic Inc. 14 アジェンダ 1. LangServeの基本 2. チャットボットAPIの作り⽅ 3. 複雑なフローのAPI化 4. おまけ

Slide 15

Slide 15 text

© 2024 Algomatic Inc. 15 今回API化する処理フロー より実践的な例として、構造的な⼊出⼒‧マルチモーダル‧分岐といった要素をもつ画像タ グ付け処理フローをAPI化する。 画像タグ付け処理フロー 画像⼊⼒ & ⾔語選択 プロンプト分岐 タグ付け タグ付け結果 英語 or ⽇本語 英語でタグづけして ね ⽇本語でタグ付けし てね or プロンプト タイトル 概要 タグ 絶望 この画像は納期に追 われて絶望している ITエンジニアを写し ています 絶望 納期 ITエンジニア バグ

Slide 16

Slide 16 text

© 2024 Algomatic Inc. 16 APIの⼊出⼒の定義 LangChainにデフォルトで実装されているRunnableは⼊出⼒が定義されているが、 RunnableLambdaなどを使う場合は⼊出⼒を定義しないとドキュメントに反映されない。

Slide 17

Slide 17 text

© 2024 Algomatic Inc. 17 マルチモーダルLLMの使い⽅ 画像のURL or Base64エンコード(詳細は割愛)を渡す必要がある。書き⽅は全て特定の構造の dictを渡す⽅法に統⼀されている。(でも正直覚えられない。)

Slide 18

Slide 18 text

© 2024 Algomatic Inc. 18 処理の分岐 if⽂で返すRunnable(この場合ChatPromptTemplate)が分岐する関数を定義する。

Slide 19

Slide 19 text

© 2024 Algomatic Inc. 19 LLMに構造的出⼒をさせる ChatModelのwith_structured_outputにPydanticのクラスを渡すとFunction CallingやJson Schemaによって構造的な出⼒をさせるようにできる。(+勝⼿に出⼒の型が定義される。)

Slide 20

Slide 20 text

© 2024 Algomatic Inc. 20 最終的なRunnable 分岐処理の関数はRunnableLambdaに渡し、⼊⼒の型定義はwith_typesに渡す。

Slide 21

Slide 21 text

© 2024 Algomatic Inc. 21 完成

Slide 22

Slide 22 text

© 2024 Algomatic Inc. 22 アジェンダ 1. LangServeの基本 2. チャットボットAPIの作り⽅ 3. 複雑なフローのAPI化 4. おまけ

Slide 23

Slide 23 text

© 2024 Algomatic Inc. 23 Poetreyが便利 Poetryを使うと依存関係の管理‧wheelパッケージ化‧CLIコマンドの作成が楽 パッケージのバージョン情報などを管理できる 依存するライブラリなども管理できる pip install後に使えるCLIコマンドを定義できる wheelファイルのビルドができる(=pip installで きるようになる)

Slide 24

Slide 24 text

© 2024 Algomatic Inc. 24 まとめ 公式のサンプルをコピペしてadd_routesに Runnableを突っ込もう もうちょっとちゃんとしたい⼈向け ● add_routesにRunnableを渡す以外はFast APIと同じ ● LangServeは⾃動でドキュメントや簡易UIを作ってくれる ○ チャットUIの簡易UIは対応しているRunnableが限られることに注意 ● 基本的にRunnableの⼊出⼒がそのままAPIの⼊出⼒になる ○ RunnableLambdaなどを使う場合は⼊出⼒の型がちゃんと定義されてい るか確認しよう(定義がないとドキュメントに反映されない)

Slide 25

Slide 25 text

© 2024 Algomatic Inc. 25 参考資料 今回作成したコードのリポジトリ https://github.com/algomatic-inc/langchain-meetup-tokyo-3