Slide 1

Slide 1 text

バックエンドエンジニア statiolake Rust で 生成 AI の社内 chatbot を メンテしている話 Copyright © NIFTY Corporation All Rights Reserved.

Slide 2

Slide 2 text

こんにちは ■ statiolake ■ 2023 年入社(2 年目) ■ Rust という言語が大好き ■ プロダクションに導入したい

Slide 3

Slide 3 text

Rust https://www.rust-lang.org/ ■ パフォーマンス・信頼性・生産性 ■ 速いで語られがち ■ 信頼性と生産性もすごくいいよ

Slide 4

Slide 4 text

生成 AI、 使ってますか?

Slide 5

Slide 5 text

myfriendGPT ■ Slack で使える生成 AI ■ 社内情報を入力できる ■ 作者によるテックブログ ■ https://engineering.nifty.co.jp/blog/16019 ■ Python 製でシンプル

Slide 6

Slide 6 text

もっといろいろな 機能が欲しい… 画像を読み取ったりとか

Slide 7

Slide 7 text

エンハンスなら Rust で書きたい…

Slide 8

Slide 8 text

いっそ Rust に 書き換えちゃえば あとは成り行きで…?

Slide 9

Slide 9 text

刷新しました 自分がメンテナを引き受けて刷新 ■ Rust + Cargo Lambda で実装 / デプロイ ■ lambda-runtime & axum ■ Claude 3.5 Sonnet (Amazon Bedrock) で応答

Slide 10

Slide 10 text

Cargo Lambda https://www.cargo-lambda.info/ ■ cargo : Rust の公式最強ビルドツール ■ cargo build 一発で依存解決・ビルドができる ■ Python でいう Poetry とか Rye ■ Cargo Lambda : 補助ツール ■ AWS Lambda 向けにビルド・デプロイできる

Slide 11

Slide 11 text

Rust にしてよかったこと

Slide 12

Slide 12 text

① ビルドとデプロイが楽!

Slide 13

Slide 13 text

① ビルドとデプロイが楽! いままで ■ Python コード含めて Terraform でデプロイ これから ■ 成果物は Cargo Lambda でビルド & デプロイ

Slide 14

Slide 14 text

Terraform でインフラだけ作って

Slide 15

Slide 15 text

Cargo Lambda で上書きする $ cargo lambda build $ cargo lambda deploy → デプロイ完了 自動デプロイ (CD) も GitHub Actions で完結、簡単すぎました

Slide 16

Slide 16 text

② enum が便利すぎる

Slide 17

Slide 17 text

② enum が便利すぎる ■ それぞれの選択肢にデータを持てる! ■ 生成 AI に送信するデータの構造 enum Content { Text { text: String }, Image { source: ImageSource }, }

Slide 18

Slide 18 text

match 文が便利すぎる ■ データを取り出しながら分岐する match content { Text { text } => { /* テキストを送信 */ } Image { source } => { /* 画像を送信 */ } }

Slide 19

Slide 19 text

match 文が便利すぎる ■ データを取り出しながら分岐する match content { Text { text } => { /* テキストを送信 */ } Image { source } => { /* 画像を送信 */ } }

Slide 20

Slide 20 text

③ コンパイルが通ったら バグらない

Slide 21

Slide 21 text

画像に対応する前 こうなっていた enum Content { Text { text: String }, }

Slide 22

Slide 22 text

画像に対応した後 こうした enum Content { Text { text: String }, Image { source: ImageSource }, }

Slide 23

Slide 23 text

エラーを直すだけで… 動いた ■ 大量のエラーが出る ■ match 漏れがエラー ■ 直し怒られを繰り返す ■ 気づいたら動いてた 画像の出典: https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%8 2%A1%E3%82%A4%E3%83%AB:AyaSofyaelev.jpg

Slide 24

Slide 24 text

まとめ

Slide 25

Slide 25 text

Rust はいいぞ ① ビルドとデプロイが楽! ② enum が便利すぎる ③ コンパイルが通ったらバグらない 「速い」で語られがちだが  速くなくても便利な言語 と伝えたい

Slide 26

Slide 26 text

エンハンス、もっとやります ■ 社内ナレッジを含めた RAG の搭載を画策中 ■ そこだと「速い」も生きるかも ■ Rust もどんどん広めていくよ!