Slide 1

Slide 1 text

Flutterエンジニアの為の
 ざっくりAI


Slide 2

Slide 2 text

heyhey1028と申します
 
 ・Flutterエンジニア4年
 ・フードテック→フィンテック企業でFlutterエンジニア
 ・それまでは商社・メーカーで海外営業
 ・金沢生まれサウジアラビア育ち、石油王は大体友達
 (サウジ、アメリカ、アイルランド、スリランカ、イギリス)
 ・今日から2歳のリトルモンスターと生後1ヶ月の小人育ててます
 


Slide 3

Slide 3 text

Zenn Book
 


Slide 4

Slide 4 text

2022年11月 ChatGPTリリース


Slide 5

Slide 5 text

🤯


Slide 6

Slide 6 text

このままエンジニアは
 AIとプロンプトエンジニアに
 駆逐されてしまうのか...


Slide 7

Slide 7 text

学べること
 ・開発者にとって重要(になりそう)なAI関連技術をざっくり知る
 → 今後の個人開発・機能開発のアイデアの足しにする
 → 今後のAI関連ニュースにもなんとなくついて行ける
 


Slide 8

Slide 8 text

トピック
 ・ざっくり機械学習
 ・ざっくり大規模言語モデル
 ・ざっくりGPT
 ・ざっくりChatGPT API
 ・ざっくりLangChain
 ・ざっくりAIエージェント
 ・ざっくりHugging Face


Slide 9

Slide 9 text

🙇陳謝
 ● 時間が取れず資料まとめ切れていません
 ● プロンプトエンジニアリングについては話しません
 ● FlutterとDartはほとんど出てきません
 ● 一部情報が間違っている可能性があります
 ● 知ってる人は知ってるやつです
 ● ただの自分の自由研究です


Slide 10

Slide 10 text

ざっくり機械学習


Slide 11

Slide 11 text

機械学習とは
 ● アルゴリズムと統計学を利用して、コンピュータがデータから学習し、自動的に予測 や意思決定を行う能力を持たせる技術
 
 ● 手作業でのプログラム設計を最小限にし、データから自動的に有用な情報を見つ け出すことができるようにする


Slide 12

Slide 12 text

主な学習方法
 教師あり学習
 - 入力に対して正解を教える学習方法
 教師なし学習
 - データからパターンを自動的に読み取る
 強化学習
 - 開発者が報酬を設計し、報酬が最大化するようにタスクを実行する学習方 法


Slide 13

Slide 13 text

主な学習方法
 教師あり学習 → 正解による学習
 - 入力に対して正解を教える学習方法
 教師なし学習 → パターン分析による学習
 - データからパターンを自動的に読み取る
 強化学習 → 報酬による学習
 - 開発者が報酬を設計し、報酬が最大化するようにタスクを実行する学習方 法


Slide 14

Slide 14 text

使われるアルゴリズム
 ● 線形回帰
 ● ロジスティック回帰
 ● サポートベクターマシン
 ● 決定木
 ● ランダムフォレスト
 
 ● ニューラルネットワーク
 ● k近傍法
 ● 主成分分析
 ● K-平均法
 ● 隠れマルコフモデル
 などなど...


Slide 15

Slide 15 text

機械学習モデルの開発プロセス
 データ
 収集
 前処理
 特徴量
 抽出
 モデル 設計
 学習
 評価
 最適化


Slide 16

Slide 16 text

ざっくり大規模言語モデル(LLM)


Slide 17

Slide 17 text

大規模言語データ
 前 処 理
 設 計
 学 習
 大規模な言語データから作った機械学習モデル


Slide 18

Slide 18 text

大規模言語データ
 前 処 理
 設 計
 学 習
 自然言語処理に特化したタスクを行う為のモデル


Slide 19

Slide 19 text

使われるアルゴリズム
 ● 線形回帰
 ● ロジスティック回帰
 ● サポートベクターマシン
 ● 決定木
 ● ランダムフォレスト
 
 ● ニューラルネットワーク
 ● k近傍法
 ● 主成分分析
 ● K-平均法
 ● 隠れマルコフモデル
 などなど...


Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

深層学習(Deep Learning)


Slide 23

Slide 23 text

データ
 数学的表現に 置き換える
 多層構造の
 計算層を
 通過させる
 解を導き出す


Slide 24

Slide 24 text

Transformerアーキテクチャ
 ・2017年にGoogleが発表
 ・自然言語処理に対する深層学習モデル
 ・従来の手法に比べて、早い上に精度が高い
 ・自然言語処理に対するデファクトスタンダード
 


Slide 25

Slide 25 text

GPT
 BERT,LaMDA
 Llama


Slide 26

Slide 26 text

GPT
 BERT,LaMDA
 Llama
 同じTransformerアーキテクチャを採用していても、 学習プロセスや出力方法は異なる
 


Slide 27

Slide 27 text

ざっくりGPT


Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

GPTとは
 サム・アルトマン率いるOpenAI社が開発した大規模言語モデル
 トランスフォーマーアーキテクチャを用いた最大の成功例の1つ
 ポイント:
 ● 1つの単語の後にどの単語が続くのか統計的に導き出している
 ● アラインメントを特に重要視している
 ● 教師あり学習と強化学習、両方の手法を用いており、そのプロセスに人間の評価を 介在させている
 


Slide 30

Slide 30 text

GPTのポイント
 1つの単語の後にどの単語が続くのが統計的に導き出している
  → 知性はない。文脈を理解しているわけではないので正確ではない。
 アラインメントを特に重要視している
  → 人類に脅威となるAIに対抗できる人間寄りのAIを作ることを理念にOpenAIが設立さ れた
 教師あり学習と強化学習、両方の手法を用いており、そのプロセスに人間の評価を介在 させている
  → Human in the loopと呼ばれ、アラインメントを高める為に重要なステップ。さらにそ れによって性能が向上した。


Slide 31

Slide 31 text

ざっくりChatGPT API


Slide 32

Slide 32 text

3月1日にChat APIをリリース


Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

Chat APIの概要
 使用可能モデル:
 ● gpt-3.5-turboまで使用可能
 ● gpt-4の使用はwaiting list
 
 入出力文字数の上限:
 ● 1度に入出力可能なトークン数は4096トークン
 
 価格:
 ● gpt-3.5-turboは $0.002 (¥0.27) / 1,000 tokens


Slide 35

Slide 35 text

エンドポイント
 ● https://api.openai.com/v1/chat/completions
 ヘッダー
 ● Autorization: APIトークン
 ● Content-Type: json
 リクエストパラメーター
 ● model: 使用するモデルの名前
 ● messages: 
 ○ role: system, user, assistant
 ○ content: プロンプト内容
 http.post( Uri.parse(endpoint), headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer $apiKey', }, body: jsonEncode( { "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": prompt, } ], }, ), );

Slide 36

Slide 36 text

レスポンス
 ● choices: 
 ○ message: 返信内容
 ○ finish_reason: 終了した理由
 ■ stop: 正常終了
 ■ length: トークン上限に達した為 
 ■ content_filter: 不適切な内容の為
 ■ null: 処理中 or なんらかの不具合
 ● usage:
 ○ prompt_tokens: 入力completion_tokens: 出 力
 ○ total_tokens: 合計
 { "id": "chatcmpl-123", "object": "chat.completion", "created": 1677652288, "choices": [ { "index": 0, "message": { "role": "assistant", "content": "\n\nHello there!" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 9, "completion_tokens": 12, "total_tokens": 21 } }

Slide 37

Slide 37 text

{ "model": "gpt-3.5-turbo", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, {"role": "assistant", "content": "Dodgers won in 2020."}, {"role": "user", "content": "Where was it played?"} ], }, Chat APIの挙動
 ● 会話履歴を全て投げているだけ
 ● 過去のチャット内容を保存しているわけではない


Slide 38

Slide 38 text

{ "model": "gpt-3.5-turbo", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, {"role": "assistant", "content": "Dodgers won in 2020."}, {"role": "user", "content": "Where was it played?"} ], }, role: system
 ● 最初に記述
 ● 挙動を制御する


Slide 39

Slide 39 text

{ "model": "gpt-3.5-turbo", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, {"role": "assistant", "content": "Dodgers won in 2020."}, {"role": "user", "content": "Where was it played?"} ], }, role: user
 ● ユーザーの質問


Slide 40

Slide 40 text

{ "model": "gpt-3.5-turbo", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, {"role": "assistant", "content": "Dodgers won in 2020."}, {"role": "user", "content": "Where was it played?"} ], }, role: assistant
 ● GPTからの返答


Slide 41

Slide 41 text

GPTモデルの課題
 ● 最新の情報を知らない (2021年6月までのデータ)
 ● Webサイトにアクセス出来ない


Slide 42

Slide 42 text

GPTを限界突破させるのが...


Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

ざっくりLangChain


Slide 45

Slide 45 text

LangChainとは
 🦜⛓
 大規模言語モデルを効果的に使う為 のPythonライブラリ
 ● Models
 ● Prompts
 ● Indexes
 ● Memory
 ● Chains
 ● Agents


Slide 46

Slide 46 text

Models
 ● 様々なLLMを呼び出すインターフェース群
 ● OpenAIのAPIを含む様々なLLMのAPIを呼び出すラッパーメソッド
 
 ● LLMs
 ○ Text Completion APIなど単発のやり取りをするAPI用のインターフェース
 ● Chat Models
 ○ Chat APIなどチャット形式のやり取りをするAPI用のインターフェース
 ● Text Embeddings Models
 ○ Embeddings APIなどEmbedding(埋め込み)を行うAPI用のインターフェース


Slide 47

Slide 47 text

Prompts
 ● プロンプト設定を行う為のインターフェース群
 
 ● Prompt Templates 
 ○ 単発プロンプトの事前プロンプトを定義するクラス
 ● Chat Prompt Templates 
 ○ 対話の事前プロンプトを定義するクラス
 ● Example Selectors
 ○ Few-shotプロンプトを定義するクラス
 ● Output Parsers
 ○ 出力結果を変換するクラス


Slide 48

Slide 48 text

Indexes
 ● ベクトルストア(ベクトル化したデータ用のDB)と連携する為のインターフェース群
 
 ● Document Loaders
 ○ 様々な形式の媒体(PDF、webサイト、Git Repository)からテキストデータを抽出するクラス
 ● Text Splitters
 ○ 抽出されたテキストデータをトークンサイズに分割するクラス
 ● Vectorstores
 ○ ChromaやPineconeなどのベクトルストアにデータを保存する為のクラス
 ● Retrivers
 ○ ベクトルストアからデータを取得する為のクラス


Slide 49

Slide 49 text

Memory
 ● 対話履歴を管理する為のインターフェース
 ● ChatModelsに渡すメッセージのラッパークラス


Slide 50

Slide 50 text

Chains
 ● 連続的な対話を行う為のインターフェース
 ● 一回の実行でLLMに対してシークエンシャルなAPIコールを定義可能


Slide 51

Slide 51 text

Agents
 ● LangChainの最も強力な機能の1つ
 ● 自動的にタスクの判断と実行をするAgentを定義するインターフェース
 ● Agent自体がLLMを使って、どんなタスクをどの順番で行うかを定義
 
 ● Tools
 ○ Agentが外部サービス(API)を実行する為のインターフェース 
 ● Agents
 ○ タスク実行とprompt実行を行うAIエージェントを定義する為のインターフェース 
 ● Toolkits
 ○ 特定のタスクに特化したAIエージェント 


Slide 52

Slide 52 text

ざっくりAIエージェント


Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

BabyAGI
 ● 問いに対して、自動的にドンドン深掘ってくれるAIエージェント
 ● ざっくりとした問いに対しても深い内容の返答まで考察してくれる
 ● 開発者は日本人のyohei nakajimaさん (中島聡さんの息子)


Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

AutoGPT
 ● 要求したタスクに対して、必要なステップを自動で見積もり、それぞれのステップに 必要なタスクを実行する
 ● 最終的に成果物を様々な形式でアウトプットしてくれる


Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

CAMEL
 ● 問いに対して、2つのAI同士で会話をさせて深掘りさせながらタ スクを実行するAIエージェント


Slide 59

Slide 59 text

ざっくりHugging Face


Slide 60

Slide 60 text

Hugging Face
 ● 機械学習モデルやデータセット共有のプラットフォーム


Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

● Multimodalな出力や入力にも対応したモデルが存在する
 ポイント


Slide 67

Slide 67 text

テキスト
 画像
 動画
 音声
 テキスト
 画像
 動画
 音声
 入力
 出力


Slide 68

Slide 68 text

最後に...


Slide 69

Slide 69 text

思ったこと
 ・ボトルネックはいつでも自分だと感じた
 ・何をしたいか?の解像度を高める必要がある
 ・限られた選択肢から良いと思うものを選ばされてきた
 ・自分が本当に求めているものは何か分かっていますか?
 ・内省しよう


Slide 70

Slide 70 text

おまけ


Slide 71

Slide 71 text

Flutterエンジニアにも
 役立ちそうなAIツール&サービス


Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

Github Copilot tips
 ● コメントで生成して欲しいコードを先に記述する
 ● コメント内でQ&A形式で対話する


Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

Github Copilot Labs
 ● Explain
 ● Language Translations
 ● Brushes
 ● Test Generation


Slide 77

Slide 77 text

phind
 ● AI駆動検索エンジン
 ● 質問内容を検索し、要約してくれる
 ● Webサイトに実際にアクセスするのでリアルタイムな情報にも対応


Slide 78

Slide 78 text

● PDFチャットサービス
 ● PDFを読み込み、対話可能にしてくれるサービス
 ChatPDF


Slide 79

Slide 79 text

● ソースコードチャットサービス
 ● Git Repositoryやコードを読み込み、対話可能にしてくれるサービス
 Adrenaline


Slide 80

Slide 80 text

Tome
 ● Text-to-Slide サービス
 ● テキスト内容に応じてスライドを自動生成
 ● 画像もDALL-Eを使って生成してくれる


Slide 81

Slide 81 text

Rewind
 ● PCの操作を全て記憶し、検索可能にするデスクトップ用アプリケーション
 ● 自分がいつ何をやって、どこに置いたかを対話できる