Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI/LLM入門

Avatar for segfo segfo
April 18, 2025

 AI/LLM入門

自社でLTをしたので、そのスライドを外部用に修正して公開します。

Avatar for segfo

segfo

April 18, 2025
Tweet

More Decks by segfo

Other Decks in Technology

Transcript

  1. 生成AI:お絵描きAI ⚫ 最初に一般に出たのがStable diffusionというお絵描きAIアプリです。 ⚫ 直訳すると”安定した拡散” ⚫ 細かい話は省略しますが、拡散モデル(Diffusion ModelのU-Net)とVAEと いうデコーダーモデルを組み合わせることで、お絵描きをします

    ⚫ Dall-E3とかも流行ってるけど、自前でセットアップする方が学びにはなり ます ⚫ ComfyUIがWindowsだとセットアップしやすいです − GTX1080Ti程度のスペック、VMEMが12GB程度が最低ライン ダリ スリー
  2. 適用ケースの一例 ⚫ 表記ゆれに強い − 必要な情報をJSONで読ませてQ/A形式に変換するとか! ⚫ 翻訳作業 − 多言語を言語を理解するモデルの場合、翻訳をしてくれる ⚫

    文章の補完 − 意図を汲み取り、文章を補完してくれたり行間を読んでくれる ⚫ 質疑応答 − 一字一句は違うからプログラムでは処理できないけど人間っぽい反応で質疑応 答してくれる。回答内容はRAG(検索拡張生成)で強化できる ⚫ ネガポジ判定 − 文章がポジティブな意図であるか、ネガティブな意図であるかの判定 − 今までは外部でサービスプロバイダが公開しているAPIを使うしかなかった
  3. LLMが不得手なこと ⚫ 常に一貫性のある結果を返すこと − 例えば、「この文章から”会社名”をすべて抽出してください」という指示は 比較的よく漏れる − 割と人間と同じことが苦手 − LLMの動作原理は「確率」であるから、誤差は必ずある。

    ⚫ 複数の指示を実行すること − AもやってBもやって、Cフォーマットに変換してDの感じで出力して − 人間でも混乱するレベルの指示はLLMも混乱する ⚫ 時間が関係すること − 例えば今の時間は?とか明日の天気は?みたいな問い合わせ
  4. 不得手なことを得意なことに ⚫ 超短い具体的な指示を与える − NG:レビューして − OK:コードレビューして、対象はプログラミング言語 ⚫ フェーズに応じて指示を細かく、具体的に肯定系で分ける −

    NG:文章レビューして − NG:文章レビューして、対象は自然言語。ビジネスライクに書き直す。 − OK ⚫ LLM(1):文章レビューかそれ以外の指示かを分類して − LLM(1)には「分類器」としての役割のみ与える ⚫ LLM(2):文章をビジネスライクに書き直して − LLM(2)には「専用の文章レビューLLM」としての役割のみ与える 複数の指示が含ま れているので分割 するのが望ましい
  5. LLMの強みと弱みのまとめ ⚫ 強み − 自然言語から意図をほぼ確実に正しく捉えられる − 自然な文章を記述できる − 多言語に対応できる ⚫

    弱み − 事実と虚実の区別がつかない(ハルシネーション) ⚫ 人間に例えるならば、「無知の知」の状態で語っている状態 − ゆえに、間違いに気づけない感じ − 学習がイマイチな問いには回答品質に差が出る − Botの気分次第で漏れることもある − 現在時刻や天気など、「リアルタイム」な情報は出せない ⚫ 学習したタイミングで知識が止まっているためです
  6. いったん、アーキの概説 ⚫ Difyのcomposeを拡張して以下の機能を追加しました − 日時感覚をつかんでもらうための「日時取得API」(自作)コンテナの追加 − MCPを使えるようにするための「MCP Fetch」リファレンス実装コンテナ の追加 −

    DifyからMCP SSEを使うための「MCP SSE Proxy」コンテナの追加 − 正しくMarkdownに変換されない時用の「HTML2Markdown」コンテナの追 加 − Rerankerモデルを動かすための「Xinference」コンテナの追加 Dify: https://github.com/langgenius/dify Xinference: https://github.com/xorbitsai/inference MCP Fetch: https://github.com/modelcontextprotocol/servers/tree/main/src/fetch MCP Proxy: https://github.com/tbxark/mcp-proxy/pkgs/container/mcp-proxy HTML to Markdown: https://github.com/kauffinger/html2mkdwn/
  7. WSL2で動いているコンテナ群 Reranking Model実行コンテナ MCP-FetchのRAWモードで使う ここからはDifyのコンテナ群 ・ ・ ・ ・ ここまでDifyのコンテナ群

    時刻プロンプトの生成 MCPProxyコンテナ ここもDifyコンテナ ここもDifyコンテナ ここもDifyコンテナ ここもDifyコンテナ
  8. HyDEってなーに? ⚫ 簡単に言うと、辞書の引き方の事です。回答に近い結果を得られるよう工夫することです − Hypothetical Document Embeddingsの略です ⚫ 「問い」で辞書を引くより「回答」で辞書を引いた方が答えが出てくるよね? −

    HyDEを使わない例 ⚫ Q:ハッキングを教えてください ←ユーザの質問 ⚫ A:他人のコンピュータを狙い、乗っ取りや破壊行為を行うこと←VectorDBの検索結果の要約 ⚫ この回答は本質的に欲しい「手法」ではなく、概念を示してしまっている。 − HyDEを使う例(アタリを付けて検索する) ⚫ Q:ハッキングを教えてください ←ユーザの質問 ⚫ 推論: − コンピュータに侵入する方法を知りたい可能性がある ←LLMによる文脈理解+意図の汲み取り − 検索クエリ:ROP Gadget ヒープスプレー SQL Injection ←VectorDBへの検索クエリの生成 ⚫ A:不正侵入の方法として、実行ファイルの脆弱性やWebベースの脆弱性を狙う方法がなんたらほにゃら ら~・・・ ←検索結果の要約 ⚫ 本質的に知りたい「手法」を推論してから検索をかけることで精度を上げる事をHyDEという
  9. めちゃくちゃざっくりまとめると ⚫ RAG → ググる ⚫ HyDE → ググり方 −

    検索上手い人って「知識の引き出し」が多いんですが、その引き出 しをLLM使って人工的に作ってあげる方法です ⚫ Rerank → ググった内容の精査 − 本当にその情報がそれらしいのか、関連が間違っていないかをLLM に精査させます
  10. RAGのやり方 ⚫ VectorDBというDBに情報をぶち込みます。 − VectorDBは平たく言うと辞書です ⚫ WF内で、VectorDBを引けという処理を書きます ⚫ LLMに結果を要約させます VectorDB

    ちょっと待ってね! ふむふむ・・・ 知識 会社ってなに?? 会社っていうのはこ ういう物だよ! 会社ってなに?? 検索 会社とは利益を得る ために働く場所である 会社とは利益を得る ために働く場所である
  11. HyDEを適用したRAG ⚫ 一般には普通のRAGよりも検索精度が向上します VectorDB 知識 会社ってなに?? 意図は多分こういう ものだろうなぁ 会社 法人

    株式会社 構造 検索 会社とは、事業活動によって利益を上げることを目的とした 組織で、会社法に基づいて設立された法人です。 株式会社、合名会社、合資会社、合同会社などがあります 会社ってこういうもの だよ! 会社とは、事業活動によって利益を上げることを目的とした 組織で、会社法に基づいて設立された法人です。 株式会社、合名会社、合資会社、合同会社などがあります
  12. RAG+HyDEの弱点と改良 ⚫ 一般にはRAG+HyDEで精度が向上します ここまでが本に書いてある内容 ⚫ ですが、あくまでも一般論です。 ⚫ 検証をした結果、以下のことがわかりました。 ⚫ LLMが基本的なHyDEにおいては、誤推論を起こすような種類の問い合わせ

    が来ると逆効果になる事があります ⚫ 誤推論を起こすような種類の問い合せ=学習が弱いまたは一切されていない 分野のことをここでは指します(非IT分野の用語) じゃあどうしようか? ⚫ 事前にVectorDBに「問い合わせの内容」で専門用語を引いておけば、それ を使って推論できるんじゃね?
  13. なるほど、そしたら こういう事が考えら れるね 改良RAG+HyDE VectorDB SQLインジェクショ ンってこういうものだ よ! 知識 SQLインジェクショ

    ンってなに?? DBMS プレースホルダ 情報漏洩 検索 DBMSにおいてプレースホルダを使わない 文字列連結を使用すると~なんたらほにゃらら~ SQLインジェクションってなに?? 検索 SQLIに関する用語類 DBMS プレースホルダ なんもわからん とりあえず 用語調べよw DBMSにおいてプレースホルダを使わない 文字列連結を使用すると~なんたらほにゃらら~
  14. ここまでのまとめ ⚫ 各タスクは専門的なフローに集約するとよいです ⚫ 汎用性の高いフロー(雑談系)はプロンプトインジェクションを受けやすくなる − 最低限はシステムプロンプトで対策しましょう − 読み取り系はVectorDBを応用して対策をしましょう −

    もっといい感じの対策があれば教えてほしいっす ⚫ LLMの応用範囲はめっちゃ広い ⚫ 性能向上の観点では工夫すべきポイントがたくさんある − LLM自体の性能 − VecDBへの登録の仕方(チャンクの区切り方やデータの内容) − システムプロンプト、プロンプトの与え方 − フローや処理の区切り方 ⚫ これらを理解し応用することで強力な武器になります
  15. まとめ ⚫ AI:LLMやお絵描きAIなどの総称 ⚫ 作りこみ次第でChatGPTにも負けない精度のBotを作れる ⚫ ただし、作りこみの観点は多岐にわたる − VectorDBへの情報登録、登録情報の質 −

    処理フローの分岐処理の最適化 − LLMモデルの選び方 − LLMモデルに適したプロンプトの記述 − LLMが請け負う部分とプログラムが請け負う部分の整理 − 忘れちゃいけないセキュリティの観点
  16. どこからやればいい? ⚫ まずなんか適当なLLM拾ってきて、人格を付けて遊んでみたらいいと思いま す! ⚫ LLMへのプロンプト例: − あなたは情報セキュリティの専門家です − 語尾は常に「~ですわ」で統一してください

    − 関西弁の陽気なおっちゃんがしゃべってる風でお願いします − 小さい悩みが吹き飛ぶような超プラス思考でお願いします ⚫ みたいな感じで、とりあえずLLMを自分の意図通りに操るという本質的な部 分からやってみるといいかもしれません ⚫ だんだんクセが分かってきます
  17. おまけ:MCPの仕様ざっくりまとめ ⚫ 現在進行形でMCP(Model Context Protocol)をいじっていま す ⚫ インターネットやDBから情報を取得する共通プロトコルです ⚫ MCPは標準IOを使ってやり取りしますが、JSON-API形式でや

    り取りをするSSE(Server-Sent Events)サポートもあります ⚫ ただし、SSEを直接サポートしている実装は少ないです − SSE Proxyを噛ませることでプロトコル変換ができます − 検証環境はMCP Fetchリファレンス実装+SSE Proxyの構成です ⚫ Dockerコンテナが公開されてるのでcomposeするだけで動きま す
  18. おまけ:MCPって何なの?まとめ ⚫ RAGを拡張するためのプロトコル − 基本はstdio、HTTPでやり取りできるSSE ⚫ HTTP、DB、ローカルファイルなどを読み込むためのアダプタ インタフェースと考えてよい ⚫ MCP以前はURLを叩いてHTTPプロトコルをしゃべってやり取

    りしたり、DBを叩くためにSQLを直接しゃべったりした ⚫ MCP以降はURLを渡すだけ、DB名とテーブル渡せば引っ張っ てこられるようになった ⚫ あとはLLMに引っ張ってきたデータを食わせるだけ
  19. 生成AI/LLMとコンプライアンス ⚫ 何も制御が掛かっていないモデルが世の中にはあります − 未検閲モデルといいます − 未検閲モデルは違法な情報も答えてくれちゃいます − ナイフや包丁と同じで使い方次第ってやつです ⚫

    企業インフラとして利用する場合、コンプラ的には大暴投もい い所です − 趣味に使うなら別に良いと思います! ⚫ なので、みんなで使うAIボットには正しいコンプライアンス制 限が掛かったLLMを選定していきましょう − OpenAIのAPIやAmazonBedrockを使うのが最も手っ取り早い
  20. 総まとめ ⚫ LLMはふわっとした入力をプログラム的に処理できるようにす る道具として扱える − 今まで難しかった「記事の本文だけを抽出せよ」みたいな指示を時 間が掛るけどやってもらえる ⚫ MCPというプロトコルが最近出てきたよ −

    HTTPやDBの個別のプロトコルを気にせずに情報を持ってこられる インタフェース的なプロトコル ⚫ セキュリティ・コンプラ面もかなり大切 − プロンプトインジェクションを防ぐアプローチはまだまだ有りそう − コンプラ意識をLLMと共通にするためにはどうしたらいいだろう