Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 もどんどん広めていくよ!