Slide 1

Slide 1 text

o1のAPIで実験してみたが 制限きつすぎて辛かった話 2024.09.18 #o1_osarai

Slide 2

Slide 2 text

(C)PharmaX Inc. 2024 All Rights Reserve 2 自己紹介 上野彰大 PharmaX共同創業者・エンジニアリング責任者 好きな料理はオムライスと白湯とコーラ マイブームはLLMとRust X:@ueeeeniki

Slide 3

Slide 3 text

(C)PharmaX Inc. 2024 All Rights Reserve 3 自社としては LLMを中心に勉強会を月 1回程度開催 自己紹介

Slide 4

Slide 4 text

(C)PharmaX Inc. 2024 All Rights Reserve 4 個人でも勉強会コミュニティ StudyCoも運営 自己紹介

Slide 5

Slide 5 text

(C)PharmaX Inc. 2024 All Rights Reserve 5 医療アドバイザーに体調 のことをいつでも気軽に相 談できる 相談型医療体験 30種類以上の漢方薬からあ なたに合ったものを月毎に 提案 パーソナライズ漢方薬 定期的に漢方をお届けし、 一人ひとりに寄り添うかか りつけ医療を提供 継続的なかかりつけ 一生涯にわたって寄り添うかかりつけ漢方薬局「 YOJO」

Slide 6

Slide 6 text

(C)PharmaX Inc. 2024 All Rights Reserve 6 今回対象とするアプリケーション

Slide 7

Slide 7 text

(C)PharmaX Inc. 2024 All Rights Reserve 7 YOJOにおけるフローエンジニアリング ● ①ルールベースでLLM処理可能かを 判定 ● ②LLMで会話を分類しLLM処理可能 かを判定 ● ③LLMで次のフェーズに移るべきかど うかを判定 ● ④LLMでメッセージを作成 ● ⑤LLMで作成されたメッセージを評価 (LLM-as-a-Judge)し、一定の水準を 下回ったら再生成して、クリアしたもの のみをサジェストする ① ② ④ ③ ⑤

Slide 8

Slide 8 text

(C)PharmaX Inc. 2024 All Rights Reserve 8 LangSmith上データセットを蓄積 LangSmith上で蓄積したデータセットは下記のように見ることができる

Slide 9

Slide 9 text

(C)PharmaX Inc. 2024 All Rights Reserve 9 データセットに対して新プロンプトやモデルで評価を実施 データセットに対して新プロンプトやモデルで評価を実施して改善が見られたらリリースする experiment13 experiment12 experiment11 experiment10 experiment9 experiment7 experiment6 LLM-as-a-Judge1 LLM-as-a-Judge2 LLM-as-a-Judge1 LLM-as-a-Judge Grand Truthとの距離

Slide 10

Slide 10 text

(C)PharmaX Inc. 2024 All Rights Reserve 10 主要エージェントをファインチューニングし精度向上&コスト削減 蓄積したデータセットを用いて GPT-4o-miniなどの安価なモデルをファインチューニング

Slide 11

Slide 11 text

(C)PharmaX Inc. 2024 All Rights Reserve 11 YOJOにおけるフローエンジニアリング ● ①ルールベースでLLM処理可能かを 判定 ● ②LLMで会話を分類しLLM処理可能 かを判定 ● ③LLMで次のフェーズに移るべきかど うかを判定 ● ④LLMでメッセージを作成 ● ⑤LLMで作成されたメッセージを評価 (LLM-as-a-Judge)し、一定の水準を 下回ったら再生成して、クリアしたもの のみをサジェストする ① ② ④ ③ ⑤ ⑤

Slide 12

Slide 12 text

(C)PharmaX Inc. 2024 All Rights Reserve 12 User 会話分類プロンプトのイメージ まず会話内容の分類するルールと few-shotを与えて、会話内容のタイプ(複数回答可)を分類させる メッセージ作成用プロンプト System あなた(assistant)は、ユーザーから受信したメッセージ内容を もとに、会話内容がどの分類にあたるのかを判定してください。 ...(略)… ・会話内容のタイプは、下記のA〜Nの14分類の中から複数選 択されることもあります。配列形式で、分類名(A~Nの記号)をカ ンマ区切りで返してください。 ・userとchat-assistantとの会話の流れは以下の通りです。直近 の会話だけを抜き出します。 ーーー {会話の流れ} ーーーーーーーーーーーーーーー 漢方提案前確認のチャットを送るべきかどうか判定してください。 条件を元にJSON形式で、{ "reason": {判断理由}, "会話内容タ イプ": [{タイプの配列}]}を返してください。

Slide 13

Slide 13 text

(C)PharmaX Inc. 2024 All Rights Reserve 13 複数モデルでデータセットに対して評価を実施 o1-preview&o1-miniで評価をしてみたが GPT-4oと”ほぼ”同じプロンプトでは精度の向上は見られなかった LLM-as-a-Judge1 LLM-as-a-Judge2 LLM-as-a-Judge1 fine-tuned gpt-4o o1-preview o1-mini

Slide 14

Slide 14 text

(C)PharmaX Inc. 2024 All Rights Reserve 14 ● Modalities : テキストのみ、画像はサポートされていない ● Message types : userおよびassistantのメッセージのみ、systemメッセージはサポートされていない ● Streaming : サポートされていない ● Tools : Tools、Function Calling、Response Formatのパラメータはサポートされていない ● Logprobs : サポートされていない ● Other : temperature、top_p、およびnは1に固定されており、presence_penaltyとfrequency_penaltyは0に固定されて いる ● Assistants and Batch : Assistant APIやBatch APIではサポートされていません。 o1のAPIはBeta版なので制限が厳しい 現状だとAPIを使えるケースは限られてしまいそう 実際10%ぐらいの割合で JSONフォーマットではない値が返ってきた 今回はすべて assistantメッセージに入れた

Slide 15

Slide 15 text

(C)PharmaX Inc. 2024 All Rights Reserve 15 プロンプトのベストプラクティスが GPT-4oまでと異なる 特にデリミタを使用していないことで o1のポテンシャルを開放しきれていないのではないか ● プロンプトはシンプルで直接的に:モデルは簡潔で明確な指示を与えることで、余計な説明なし に理解して応答する ● 思考の連鎖を促すプロンプトは避ける:モデルは内部で推論を行うため、「段階的に考える」や 「推論を説明する」といった指示は不要 ● デリミタを使用して明確化:三重引用符、 XMLタグ、セクションタイトルなどのデリミタを使用して、 入力の異なる部分を明示すると、モデルがそれぞれのセクションを適切に解釈しやすくなる ● RAGでの追加コンテキストを制限:追加のコンテキストやドキュメントを提供する際は、最も関連 性の高い情報のみを含めることで、モデルが過度に複雑な応答をするのを防ぐことができる

Slide 16

Slide 16 text

(C)PharmaX Inc. 2024 All Rights Reserve 16 その他注意事項 ● 別のプロンプトにはなるが実行中に下記のようなエラーが出た openai.BadRequestError: b'{\n "error": {\n "message": "Invalid prompt: your prompt was flagged as potentially violating our usage policy. Please try again with a different prompt.",\n "type": "invalid_request_error",\n "param": null,\n "code": "invalid_prompt"\n }\n} ○ PharmaXのビジネスのようなうプロンプトだとセンシティブな内容と判断されるのかも これまでのモデルでは出たことないエラーが出たのでシェア