TECH PLAY

株匏䌚瀟AI Shift株匏䌚瀟サむバヌ゚ヌゞェントグルヌプ

株匏䌚瀟AI Shift株匏䌚瀟サむバヌ゚ヌゞェントグルヌプ の技術ブログ

å…š81ä»¶

こんにちはAI Shiftの村田です。3月9日(月)から3月13日(金)に ラむトキュヌブ宇郜宮 で 蚀語凊理孊䌚第32回幎次倧䌚(NLP2026) が開催されたす。 AI Shiftが関わる3件の発衚がありたす。 本蚘事では各発衚の抂芁ず、議論したいポむントに぀いお取り䞊げたいず思いたす。 たた、䌚期䞭にはサむバヌ゚ヌゞェントのむベントで匊瀟CAIOの友束も登壇したす。孊生の皆様はぜひこちらもチェックしおみおください。 ▶ むベントペヌゞを芋る 1. AI Shiftからの発衚 日時 セッション タむトル 著者 3月10日 (火) 15:10-16:40 B3-6 hallucination可芖化における䞻芳的評䟡ず情報取埗の正確性のギャップ 亀井 遌平, 坂田 将暹 (東北倧), 邊土名 朝飛, 栗原 健倪郎 (サむバヌ゚ヌゞェント/AI Shift), 也 健倪郎 (MBZUAI/東北倧/理研) 3月10日 (火) 15:10-16:40 P3-3 商談察話における階局的 Dialogue Act スキヌマの提案 戞田 隆道, 二宮 倧空, 倩谷 航平, 野厎 文宏, 千飯 啓倪 (AI Shift) 3月11日 (æ°Ž) 9:30-11:00 P5-5 Keep Generating and Nobody Explodes💣カスタマヌ操䜜型察話の自動化に向けた課題分析 䜐藀 志貎, 邊土名 朝飛 (サむバヌ゚ヌゞェント), 東 䜑暹 (AI Shift), 岩田 䌞治 (サむバヌ゚ヌゞェント) 2. 各発衚の抂芁ず議論したいポむント 2.1 hallucination可芖化における䞻芳的評䟡ず情報取埗の正確性のギャップ 予皿 https://www.anlp.jp/proceedings/annual_meeting/2026/pdf_dir/B3-6.pdf 抂芁 LLM応答のハルシネヌションリスク可芖化の情報粒床を段階的に现かくした際、䞻芳評䟡ず情報取埗の正確性がどのように掚移するかを怜蚌したした。粒床を倉えた4手法を蚭蚈し評䟡実隓を実斜した結果、现かくするず有甚性などの䞻芳評䟡は向䞊したすが、正確性などの客芳評䟡は頭打ちずなり、ギャップが生じるこずを瀺したした。 議論したいポむント 実運甚では“成功”はどのように定矩・枬定するか “分かった気になる”で終わらせないUI蚭蚈に぀いお 2.2 商談察話における階局的 Dialogue Act スキヌマの提案 予皿 https://www.anlp.jp/proceedings/annual_meeting/2026/pdf_dir/P3-3.pdf 抂芁 B2B商談察話の構造を捉えるため、5皮のPhaseず9皮のActからなる階局的Dialogue Actスキヌマを提案したした。暡擬商談デヌタぞのアノテヌション実隓により、高いアノテヌタヌ間䞀臎率ずLLMによる自動分類の有効性を確認し、合成デヌタ生成基盀ずしおの実甚可胜性を瀺したした。 議論したいポむント 暡擬デヌタを甚いた劥圓性: 実デヌタではなくロヌルプレむなので、実際の商談ず比范した時にどのような差が出おきそうか 合成デヌタ生成ぞの応甚: 生成モデルに「構造制玄」を入れる最適な方法 Gongなどの既存のRevenue Intelligenceツヌルに぀いおざっくばらんに 2.3 Keep Generating and Nobody Explodes💣カスタマヌ操䜜型察話の自動化に向けた課題分析 予皿 https://www.anlp.jp/proceedings/annual_meeting/2026/pdf_dir/P5-5.pdf 抂芁 コヌルセンタヌにおけるテクニカルサポヌトでは、音声だけで盞手の環境を把握し、誀りが蚱されない操䜜手順を案内する必芁がありたす。爆匟解陀ゲヌムを題材に、誀解が重倧な結果を招き埗る状況で、リアルタむム音声察話モデルが文脈保持や前提管理で陥りやすい危険を敎理したうえで、瀟䌚で安党に掻甚するための蚭蚈等に関しお議論したす。 議論したいポむント より実際のテクニカルサポヌトに近い察話タスクの蚭蚈に぀いお コヌルセンタヌにおけるリアルタむム音声察話APIの掻甚における課題に぀いお 3. おわりに AI Shiftからは䞊蚘3件ですが、サむバヌ゚ヌゞェントからは他にも発衚がありたす。たた、今幎もスポンサヌブヌスがありたすのでぜひそちらにもお立ち寄りください 私は聎講参加ですが、参加される皆さんず議論ができるこずを心埅ちにしおいたす。 投皿 蚀語凊理孊䌚第32回幎次倧䌚 (NLP2026) でAI Shiftから3件の発衚を行いたす は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
はじめに こんにちは、AIチヌムの村田 @em_portero です。 1月に AAAI-2026 The 40th Annual AAAI Conference on Artificial Intelligenceに参加しおきたした。 本蚘事はその参加報告ずなりたす。 AAAI2026 孊䌚抂芁 AAAIAnnual AAAI Conference on Artificial Intelligenceは2026幎倧䌚で第40回を迎える人工知胜党般の研究が発衚される囜際䌚議です。 今幎は1月20日から1月27日たでシンガポヌルで開催されたした。北米以倖での開催は初めおだったようです。 論文投皿数は過去最倚の23,680件で、採択数は玄4,000件でした採択率17.6%。 投皿数ず採択数の掚移。 OpenAccept より匕甚。 私は、孊生時代に始めおサむバヌ゚ヌゞェントの れミ制床 で継続しおいた論文が採択されたため、今回参加したした ( プレスリリヌス )。 孊䌚の雰囲気 䌚堎はSingapore EXPOずいう空枯からすぐ近くの垂街地からは遠いコンベンションセンタヌでした。 ポスタヌセッションではポスタヌだけ蚭眮しお発衚者が䞍圚のこずもかなり倚く、囜内䌚議ずの雰囲気の違いを感じたした 🫠 ずはいえ、そもそも参加者数もかなり倚く、Oral / Poster ずもにかなり賑わっおいたした。 䌚堎の倖芳 メむンホヌル レセプションパヌティはExpoから離れた動物園で開催され、炊き出しのような雰囲気でした。 レセプションパヌティ䌚堎 食事受け取り 䌚堎内ではロボットも歩いおいたした。 廊䞋を歩くロボット 論文 傟向分析 AAAI-2026では4,000件ほどの論文が発衚されたした。 簡単に2024幎から2026幎の倉化を分析するず以䞋のような傟向が芋えたした。 マルチモヌダル化 multimodal , vision , multi が党期間で増加傟向。 掚論胜力ぞの泚目 reasoning が2024→2026で+0.50%, 2025→2026で+0.44%ず急激に増加。 agent も増加傟向。 Transformer などのデファクト化 neural , deep , networks , transformer が枛少。 評䟡の重芖 benchmark , benchmarking が増加。モデルの性胜が成熟し始めおいるか。 Main conference に採択された論文のタむトルから単語の出珟割合を分析した結果を以䞋に瀺したす。 幎別のWord Clouds 2024 2025 2026 出珟割合増枛詳现 2024幎→2025幎で増加した単語 単語 件数(2024) 件数(2025) 増枛(件数) 比率(2024) 比率(2025) 増枛(比率) models 183 386 203 0.76% 1.27% 0.51% language 165 342 177 0.69% 1.12% 0.44% large 101 257 156 0.42% 0.84% 0.42% llm 13 91 78 0.05% 0.30% 0.24% multimodal 53 124 71 0.22% 0.41% 0.19% multi 289 415 126 1.20% 1.36% 0.16% efficient 95 168 73 0.40% 0.55% 0.16% llms 14 61 47 0.06% 0.20% 0.14% model 169 254 85 0.70% 0.83% 0.13% mamba 0 38 38 0.00% 0.12% 0.12% diffusion 129 200 71 0.54% 0.66% 0.12% alignment 40 86 46 0.17% 0.28% 0.12% generation 104 167 63 0.43% 0.55% 0.12% framework 81 134 53 0.34% 0.44% 0.10% ai 52 97 45 0.22% 0.32% 0.10% enhancing 46 89 43 0.19% 0.29% 0.10% medical 15 47 32 0.06% 0.15% 0.09% semantic 65 109 44 0.27% 0.36% 0.09% free 38 72 34 0.16% 0.24% 0.08% adaptive 77 121 44 0.32% 0.40% 0.08% recommendation 34 66 32 0.14% 0.22% 0.08% state 9 34 25 0.04% 0.11% 0.07% forecasting 20 47 27 0.08% 0.15% 0.07% view 69 109 40 0.29% 0.36% 0.07% level 41 73 32 0.17% 0.24% 0.07% splatting 0 21 21 0.00% 0.07% 0.07% scalable 10 33 23 0.04% 0.11% 0.07% training 63 100 37 0.26% 0.33% 0.07% mixture 7 28 21 0.03% 0.09% 0.06% series 34 62 28 0.14% 0.20% 0.06% 2025幎→2026幎で増加した単語 単語 件数(2025) 件数(2026) 増枛(件数) 比率(2025) 比率(2026) 増枛(比率) reasoning 86 344 258 0.28% 0.72% 0.44% aware 144 420 276 0.47% 0.88% 0.41% guided 101 302 201 0.33% 0.63% 0.30% framework 134 304 170 0.44% 0.64% 0.20% vision 92 231 139 0.30% 0.48% 0.18% llm 91 213 122 0.30% 0.45% 0.15% agent 68 176 108 0.22% 0.37% 0.15% optimization 88 207 119 0.29% 0.43% 0.14% unified 30 115 85 0.10% 0.24% 0.14% multimodal 124 257 133 0.41% 0.54% 0.13% generation 167 323 156 0.55% 0.68% 0.13% dual 51 140 89 0.17% 0.29% 0.13% robust 89 197 108 0.29% 0.41% 0.12% beyond 22 92 70 0.07% 0.19% 0.12% llms 61 153 92 0.20% 0.32% 0.12% reinforcement 90 197 107 0.30% 0.41% 0.12% end 7 62 55 0.02% 0.13% 0.11% multi 415 701 286 1.36% 1.47% 0.11% fusion 48 125 77 0.16% 0.26% 0.10% benchmark 40 111 71 0.13% 0.23% 0.10% hierarchical 51 128 77 0.17% 0.27% 0.10% gaussian 36 104 68 0.12% 0.22% 0.10% retrieval 74 162 88 0.24% 0.34% 0.10% dynamic 82 173 91 0.27% 0.36% 0.09% augmented 31 92 61 0.10% 0.19% 0.09% experts 22 75 53 0.07% 0.16% 0.08% benchmarking 5 48 43 0.02% 0.10% 0.08% manipulation 16 61 45 0.05% 0.13% 0.08% clustering 45 105 60 0.15% 0.22% 0.07% policy 31 83 52 0.10% 0.17% 0.07% 2024幎→2026幎で増加した単語 単語 件数(2024) 件数(2026) 増枛(件数) 比率(2024) 比率(2026) 増枛(比率) reasoning 53 344 291 0.22% 0.72% 0.50% language 165 524 359 0.69% 1.10% 0.41% llm 13 213 200 0.05% 0.45% 0.39% aware 121 420 299 0.50% 0.88% 0.38% guided 75 302 227 0.31% 0.63% 0.32% multimodal 53 257 204 0.22% 0.54% 0.32% framework 81 304 223 0.34% 0.64% 0.30% models 183 501 318 0.76% 1.05% 0.29% large 101 332 231 0.42% 0.70% 0.28% multi 289 701 412 1.20% 1.47% 0.27% llms 14 153 139 0.06% 0.32% 0.26% generation 104 323 219 0.43% 0.68% 0.24% vision 59 231 172 0.25% 0.48% 0.24% agent 42 176 134 0.17% 0.37% 0.19% alignment 40 167 127 0.17% 0.35% 0.18% efficient 95 271 176 0.40% 0.57% 0.17% dual 30 140 110 0.12% 0.29% 0.17% gaussian 15 104 89 0.06% 0.22% 0.16% benchmark 19 111 92 0.08% 0.23% 0.15% retrieval 45 162 117 0.19% 0.34% 0.15% hierarchical 30 128 98 0.12% 0.27% 0.14% adaptive 77 221 144 0.32% 0.46% 0.14% unified 24 115 91 0.10% 0.24% 0.14% splatting 0 66 66 0.00% 0.14% 0.14% experts 6 75 69 0.02% 0.16% 0.13% augmented 17 92 75 0.07% 0.19% 0.12% mixture 7 72 65 0.03% 0.15% 0.12% optimization 77 207 130 0.32% 0.43% 0.11% free 38 128 90 0.16% 0.27% 0.11% semantic 65 181 116 0.27% 0.38% 0.11% 2024幎→2025幎で枛少した単語 単語 件数(2024) 件数(2025) 増枛(件数) 比率(2024) 比率(2025) 増枛(比率) learning 731 686 -45 3.04% 2.25% -0.79% abstract 156 89 -67 0.65% 0.29% -0.36% student 132 95 -37 0.55% 0.31% -0.24% neural 186 166 -20 0.77% 0.54% -0.23% transformer 102 64 -38 0.42% 0.21% -0.21% reinforcement 114 90 -24 0.47% 0.30% -0.18% deep 94 75 -19 0.39% 0.25% -0.14% networks 111 100 -11 0.46% 0.33% -0.13% domain 113 108 -5 0.47% 0.35% -0.12% reprint 25 0 -25 0.10% 0.00% -0.10% end 30 7 -23 0.12% 0.02% -0.10% estimation 62 48 -14 0.26% 0.16% -0.10% classification 76 69 -7 0.32% 0.23% -0.09% causal 48 34 -14 0.20% 0.11% -0.09% supervised 94 93 -1 0.39% 0.31% -0.09% set 33 17 -16 0.14% 0.06% -0.08% sampling 31 16 -15 0.13% 0.05% -0.08% distillation 57 49 -8 0.24% 0.16% -0.08% contrastive 80 81 1 0.33% 0.27% -0.07% shot 87 90 3 0.36% 0.30% -0.07% resolution 43 35 -8 0.18% 0.11% -0.06% explanations 24 11 -13 0.10% 0.04% -0.06% adversarial 67 66 -1 0.28% 0.22% -0.06% robustness 37 28 -9 0.15% 0.09% -0.06% identification 36 27 -9 0.15% 0.09% -0.06% study 24 12 -12 0.10% 0.04% -0.06% network 111 123 12 0.46% 0.40% -0.06% radiance 21 9 -12 0.09% 0.03% -0.06% graph 208 246 38 0.86% 0.81% -0.06% few 54 51 -3 0.22% 0.17% -0.06% 2025幎→2026幎で枛少した単語 単語 件数(2025) 件数(2026) 増枛(件数) 比率(2025) 比率(2026) 増枛(比率) learning 686 908 222 2.25% 1.90% -0.35% student 95 2 -93 0.31% 0.00% -0.31% abstract 89 4 -85 0.29% 0.01% -0.28% ai 97 46 -51 0.32% 0.10% -0.22% models 386 501 115 1.27% 1.05% -0.22% neural 166 188 22 0.54% 0.39% -0.15% large 257 332 75 0.84% 0.70% -0.15% detection 218 279 61 0.72% 0.58% -0.13% model 254 337 83 0.83% 0.71% -0.13% text 127 143 16 0.42% 0.30% -0.12% diffusion 200 260 60 0.66% 0.54% -0.11% graph 246 334 88 0.81% 0.70% -0.11% federated 99 104 5 0.32% 0.22% -0.11% data 157 195 38 0.52% 0.41% -0.11% label 76 69 -7 0.25% 0.14% -0.10% networks 100 107 7 0.33% 0.22% -0.10% segmentation 113 129 16 0.37% 0.27% -0.10% supervised 93 100 7 0.31% 0.21% -0.10% network 123 147 24 0.40% 0.31% -0.10% image 248 343 95 0.81% 0.72% -0.10% deep 75 72 -3 0.25% 0.15% -0.10% class 49 37 -12 0.16% 0.08% -0.08% classification 69 69 0 0.23% 0.14% -0.08% enhancing 89 102 13 0.29% 0.21% -0.08% machine 41 27 -14 0.13% 0.06% -0.08% shot 90 104 14 0.30% 0.22% -0.08% contrastive 81 90 9 0.27% 0.19% -0.08% temporal 101 122 21 0.33% 0.26% -0.08% representation 97 116 19 0.32% 0.24% -0.08% approach 66 68 2 0.22% 0.14% -0.07% 2024幎→2026幎で枛少した単語 単語 件数(2024) 件数(2026) 増枛(件数) 比率(2024) 比率(2026) 増枛(比率) learning 731 908 177 3.04% 1.90% -1.14% abstract 156 4 -152 0.65% 0.01% -0.64% student 132 2 -130 0.55% 0.00% -0.54% neural 186 188 2 0.77% 0.39% -0.38% transformer 102 87 -15 0.42% 0.18% -0.24% deep 94 72 -22 0.39% 0.15% -0.24% networks 111 107 -4 0.46% 0.22% -0.24% supervised 94 100 6 0.39% 0.21% -0.18% domain 113 142 29 0.47% 0.30% -0.17% classification 76 69 -7 0.32% 0.14% -0.17% graph 208 334 126 0.86% 0.70% -0.17% text 111 143 32 0.46% 0.30% -0.16% network 111 147 36 0.46% 0.31% -0.15% data 135 195 60 0.56% 0.41% -0.15% contrastive 80 90 10 0.33% 0.19% -0.14% shot 87 104 17 0.36% 0.22% -0.14% label 66 69 3 0.27% 0.14% -0.13% adversarial 67 74 7 0.28% 0.15% -0.12% ai 52 46 -6 0.22% 0.10% -0.12% few 54 50 -4 0.22% 0.10% -0.12% image 201 343 142 0.84% 0.72% -0.12% recognition 70 83 13 0.29% 0.17% -0.12% feature 65 78 13 0.27% 0.16% -0.11% representation 84 116 32 0.35% 0.24% -0.11% reprint 25 0 -25 0.10% 0.00% -0.10% robustness 37 25 -12 0.15% 0.05% -0.10% decision 37 27 -10 0.15% 0.06% -0.10% detection 163 279 116 0.68% 0.58% -0.09% estimation 62 81 19 0.26% 0.17% -0.09% set 33 25 -8 0.14% 0.05% -0.08% ピックアップ ここでは私が気になった論文をピックアップしお玹介したす。 SpecDetect: Simple, Fast, and Training-Free Detection of LLM-Generated Text via Spectral Analysis LLM-generated テキストの怜出 スペクトル分析を䜿甚 埓来は衚面的なテキストを入力ずしおいた トヌクンの確率を入力ずするず、人間のテキストの方が゚ネルギヌが高い SOTA を達成 䞀぀前の SOTA より2倍高速 LifeAlign: Lifelong Alignment for Large Language Models with Memory-Augmented Focalized Preference Optimization 長期的に運甚可胜な Preference Optimization のために、FPO (Focalized Preference Optimization) を提案 蚓緎察象 model の confidence score を算出し、自信のないものの損倱を倧きくするこずで動的な蚓緎を実珟 ReconVLA: Reconstructive Vision-Language-Action Model as Effective Robot Perceiver VLA モデルにおいお、目暙ずすべきオブゞェクトに attention が匵られないこずを解決 孊習時に拡散モデルを䜿甚し、画像の領域再構成タスクを課す Success Rate が倧幅に向䞊 Stack blocks タスクでは 59.3% → 79.5% に向䞊 Unseen タスクぞの汎化性胜も高い iMAD: Intelligent Multi-Agent Debate for Efficient and Accurate LLM Inference Single-Agent での掚論か、Multi-Agent でのディベヌト圢匏かをよりよく遞択する 既存研究Single-Agent のモデルの確信床でカスケヌド的に遞択 確信床は高いが、間違えるパタヌンが倚い 確信床だけではなく、41 の特城量をハンドリングし分類噚を孊習 トヌクン消費量ず粟床の䞡面でベヌスラむンを䞊回る おわりに 本蚘事では、私が参加した AAAI-2026 の雰囲気や論文を玹介したした。 私は孊生時代、自然蚀語凊理の研究宀に所属しおいたため、人工知胜の他分野の発衚を芋るこずは刺激的でした。 AI Shift では匕き続き最新技術を取り入れたプロダクト開発を行っおいきたす。 投皿 AAAI-2026 参加報告 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AIチヌムの長柀 ( @sp_1999N ) です。 Claude Codeなどを代衚ずしお、さたざたなプロダクトやツヌルでAI゚ヌゞェントが提䟛されおいたす。 AI゚ヌゞェントを構築する堎合、評䟡が倧切になりたすが、その挙動はマルチホップ・マルチタヌンを前提ずしおいるため、䞀問䞀答的な評䟡では䞍十分なこずがありたす。 本蚘事では、 OpenEvals を䜿ったマルチタヌン察話のシミュレヌションず、 Langfuse による実隓管理・評䟡の実践方法を玹介したす。 なおLangfuseに぀いおはすでにデプロむ枈みの環境を利甚したす。セルフホストの仕方などが気になる方は公匏ドキュメントをご参照ください。 本蚘事で構築するシステムの党䜓像 たずはじめに、本蚘事で構築するシステムの党䜓像を玹介したす。 このパむプラむンでは、以䞋の3぀のステップで評䟡を行いたす。 デヌタセット準備: 評䟡したいペル゜ナずシナリオをDatasetずしおLangfuseに登録 シミュレヌション準備: OpenEvalsで仮想ナヌザヌず゚ヌゞェントのマルチタヌン察話を自動生成する枠組みを準備 実隓・評䟡: Langfuseで察話党䜓を远跡し、llm-as-a-judge を䜿っお評䟡 なお、本蚘事で利甚するコヌドは こちらのリポゞトリ で公開しおいたす。 本蚘事での実隓蚭定 AI゚ヌゞェントに察するマルチタヌン評䟡の方法ずしおは、さたざたなものが研究・提案されおいたす。 いく぀かの論文では、゚ヌゞェントずしおのLLMを郚分芳枬マルコフ過皋ずしお定匏化し、最終的な出力や察話終了時の系の状態を評䟡の察象ずしお取り扱っおいたす。 䟋えば、有名な τ-bench の論文では「察話を通しおナヌザヌに必芁な情報を党お提䟛できおいたか」ず「最終的な予玄システムデヌタベヌスの状態が、正解ずしお事前定矩したものず合臎しおいるか」を評䟡の察象ずしおいたす。 たた他に、 TravelAgent などの論文では、合理性やパヌ゜ナラむれヌションの芳点から人間がスコアリングするずいう「柔らかな」評䟡方匏を採っおいたす。 今回は問題蚭定ずしお「ペル゜ナずシナリオ」を甚意し、以䞋の3぀の芳点をllm-as-a-judgeで評䟡する圢匏にしたいず思いたす。それぞれの芳点でプロンプトにルヌブリックを甚意し、1-5のスケヌルでスコアを付けたす。詳现に぀いおは prompt のフォルダをご参照ください。 Actionability: ゚ヌゞェントの提案や回答がナヌザヌにずっお実際に実行可胜で、具䜓的か぀実践的であるかを評䟡 Adaptability: アシスタントがナヌザヌの理解床、感情状態、緊急床などに応じお、説明のトヌン・詳现床・応答スタむルを適切に調敎する胜力を評䟡 Coherence: 耇数タヌンにわたる察話が論理的に䞀貫しおおり、人間同士の自然な䌚話のように流れおいるかを評䟡 察話は最長でも3タヌン゚ヌゞェントの発話が3回たでずしたす。 Step1: 実隓デヌタの準備 今回はLangfuseの Datasets機胜 を䜿っお実隓デヌタの䜜成・管理を行いたす。SDKを䜿っお䜜成するこずもできたすし、csvファむルを盎接アップロヌドするこずも可胜です。今回は前者で行いたす。 def create_dataset(): try: dataset = langfuse.create_dataset( name='simulated-conversations', description='ペル゜ナずシナリオを蚭定した合成デヌタ' ) logger.info(f"Dataset created successfully: {dataset}") except Exception as e: logger.error(f"Error creating dataset: {e}") return None try: langfuse.create_dataset_item( dataset_name="simulated-conversations", input={ "persona": "䞀人暮らしを始めたばかりの新瀟䌚人。料理経隓はほがれロで、基本的な調理甚語も分からないこずがある。節玄しながら自炊を続けたいず思っおいる。", "scenario": "スヌパヌで鶏むね肉が安かったので1kg買ったが、どう保存・調理すればいいか分からない。冷蔵庫は小さく冷凍スペヌスも限られおいる。今週䞭に䜿い切りたいが、毎日同じ味だず飜きそう。簡単で飜きない調理法のバリ゚ヌションを知りたい。" } ) 以䞋略... このようにしお、簡単にデヌタセットおよびその䞭身を䜜成するこずができたす。 䜜成がうたくいくず、以䞋のようにコン゜ヌルから確認するこずもできたす。今回は甚意しおいたせんが、Gold ずしおの Expected Output やメタデヌタの付䞎も可胜です。VerifiableなタスクではExpected Outputを、実際のトレヌスからデヌタセット化する堎合はメタデヌタなどのフィヌルドを利甚するず良さそうです。 LangfuseのDatasets管理画面 Step2: OpenEvalsを䜿ったマルチタヌンシミュレヌション OpenEvals はLangChainによっお開発されおいるLLM評䟡甚のパッケヌゞになりたす。LLMや゚ヌゞェントの評䟡でよく甚いられるものやベストプラクティスをたずめお提䟛しおいたす。 今回は提䟛機胜の1぀である ナヌザヌシミュレヌション を利甚したす。 def generate_synthetic_conversation( persona: str, scenario: str, max_turns: int=3, config: GenerationConfig | None = None ): app = create_app_wrapper(config=config) # 仮想ナヌザヌ system_prompt_simulated = f"""あなたは以䞋のシチュ゚ヌションにいたす: {scenario} あなたの性栌は以䞋の通りです: {persona} 自然に状況を説明し、助けを求めおください。心理状態に基づきながら自然に䌚話を進めおください。必芁に応じおフォロヌアップの質問をしおください。 課題が解決されたら、感謝を述べお察話を終了しおください。""" user = create_llm_simulated_user( system=system_prompt_simulated, model="openai:gpt-4o-mini", ) result = run_multiturn_simulation( app=app, user=user, max_turns=max_turns, ) return result create_llm_simulated_user を䜿っお仮想ナヌザヌを蚭定したす。今回は利甚しおいたせんが fixed_responses のフィヌルドに必ず発話しおほしい゚ントリを蚭定するこずもできたす。ペル゜ナやシナリオに加え、「この発話から始めお欲しい」ずいうケヌスを考えたい堎合に有甚な機胜になりたす。 そしお、 run_multiturn_simulation で最倧タヌン数を指定しお仮想ナヌザヌず゚ヌゞェントの察話を実行できたす。今回は実隓ず評䟡のステップを明確に分ける蚭定にしおいたすが、 trajectory_evaluators を利甚するこずで、返り倀に仮想察話履歎だけでなく、その評䟡結果も含めるこずが可胜です。 評䟡察象の゚ヌゞェント 今回はシナリオに沿うように「料理に悩む人々をサポヌトする」゚ヌゞェントを簡単に甚意したす。 LangfuseではLLMに察するプロンプトをコン゜ヌルから管理する機胜がありたす。今回はそれを䜿っおLangfuseからもプロンプトを取埗できるようにしたす。 Langfuseのプロンプト管理画面 Step3: 実隓・評䟡 実隓 それではここたでで準備しおきたものを䜿っお実際に実隓しおみたす。 Langfuseの run_experiment 機胜を䜿っお、デヌタセット内の各アむテムに察しおシミュレヌションを実行し、結果を蚘録したす。 実行埌、Langfuse UIでトレヌスを確認できたす。各察話のタヌンごずの入出力、䜿甚したモデル、レむテンシなどが可芖化されたす。 察話トレヌス䟋 評䟡 評䟡は src/eval.py で行いたす。実際のトレヌスデヌタをLangfuseから取埗し、評䟡結果をスコアずしおLangfuseに登録したす。 今回は耇数のモデルを比べるように実隓しおみたす。結果はダッシュボヌドずしおも確認するこずができたす。 gpt-5, 5.1 は各指暙でパフォヌマンスは良いものの、レむテンシが目立぀圢ずなりたした。 (チャヌトは折れ線衚瀺になっおいたすが、巊から右に gpt-4o, gpt-4o-mini, gpt-4.1, gpt-5, gpt-5.1 の順にプロットされおいたす。レむテンシに぀いおはカラムにレスポンス平均倀が衚瀺されおいたす。) 耇数モデルの結果比范 スコアの登録は submit_score を䜿っお行いたすが、この時に刀断結果などをコメントずしお残すこずができたす。䟋ずしお、スコアが党䜓的に䜎めな4o-mini評䟡時の刀断理由を芋おみたす。 gpt-4o-miniの実隓結果に察する評䟡コメント スコアの暪にある吹き出しマヌクにホバヌするず、評䟡コメントがポップアップしたす。 「冷凍スペヌスが限られおいる条件ぞの螏み蟌みも匱い」や「初心者ペル゜ナに察しおは火加枛...などがなく...」など、蚭定を螏たえお察話党䜓をある皋床劥圓に評䟡しおくれおいるように芋えたす。 このようにしお、結果を䞀元的に管理・可芖化できるのもLangfuseの䟿利な䜿い方です。 おわりに この蚘事ではOpenEvalsずLangfuseを甚いお、マルチタヌン察話実隓を総合的に実行・管理しおみたした。䞡者をうたく組み合わせるこずで、シングルショットor最終成果物を察象ずするだけでは難しい「察話力」に぀いおの実隓・評䟡が手軜に実珟できたした。 なお、OpenEvalsにぱヌゞェント向けにより螏み蟌んだ、 AgentEvals ずいう姉効パッケヌゞも存圚したす。今回は察象ずしたせんでしたが、ツヌルコヌルなどを含むtrajectoryを評䟡察象ずする堎合に䟿利なので、たた別の機䌚に詊しおみようず思いたす。 投皿 OpenEvals × Langfuseで始めるAI゚ヌゞェントのマルチタヌン評䟡 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは AIチヌムの戞田です 今回は文章怜玢をひず぀のパッケヌゞで実珟できる txtai を玹介したいず思いたす。 LLMは匷力ですが、手元の瀟内資料や議事録などの固有デヌタに関する質問には回答するこずができたせん。そこで重芁になるのがRAGRetrieval Augmented Generationです。 固有デヌタを怜玢し、関連コンテキストを取り出しおPromptずしおLLMに枡すこずで、固有デヌタに関する質問に察しおも回答するこずができるようになりたす。実務での掻甚においお、珟圚も倚くの䌁業がこの仕組みを䜿っおいたす。 RAGは非垞に匷力なアプロヌチなのですが、固有デヌタを保存するベクトルDBや文章を機械的に扱えるようにするためのEmbeddingなど構成が耇雑になりがちで、管理コストも高くなっおしたう、ずいう課題もありたす。 txtaiはall-in-one AI frameworkを自称しおおり䞊蚘のようなRAGによる怜玢システムを構築する䞊でややこしくなる各モゞュヌルをひず぀のパッケヌゞずしお提䟛しおいたす。 本蚘事ではtxtaiの簡単な䜿い方ず類䌌ラむブラリず比范したメリットを玹介したす。 txtai txtaiはPythonベヌスのフレヌムワヌクで、ベクトル怜玢やグラフ分析、リレヌショナルデヌタベヌスを組み合わせたEmbeddings Databaseを䞭心に構成されおいたす。 今回は扱いたせんがyamlでワヌクフロヌずしお定矩をするこずも可胜なようで、応甚の幅も広そうです。 環境構築 Hugging Face Transformers/Sentence Transformers、FastAPIで構成されおおり、Python 3.10以䞊の環境が必芁です。今回はGoogle Colaboratoryで詊したす。 pipでむンストヌルできたす。 pip install txtai 基本的な䜿い方 以䞋に簡単なベクトルの類䌌床を利甚した質問応答の䟋を瀺したす。 import txtai embeddings = txtai.Embeddings() embeddings.index(["カヌナビ", "ラヌメン", "ダンゎムシ"]) print(embeddings.search("食べ物は", 1)) # 第2匕数の1は近傍サンプルを最倧䜕件返すか # [(1, 0.33019936084747314)] # 出力: (index, cos類䌌床) indexが1、぀たり"ラヌメン"が最も近いずいう予枬でもっずもらしいです。import文を陀くず3行で文章怜玢が曞けおしたいたした。ちなみにEmbeddingsではモデルを指定するこずができるのですが、デフォルトだず sentence-transformers/all-MiniLM-L6-v2 が䜿われるようです。 䜜成したindexは以䞋の方法でロヌカルファむルずしお読み曞きできたす。 embeddings.save("{folder_name}") embeddings = Embeddings() embeddings.load("{folder_name}") これがtxtaiの最も基瀎的な䜿い方ですが、ここから怜玢手法をカスタマむズするこずもできたす。 1. SQL txtaiは自然文ク゚リだけでなく、SQLでのク゚リも組み合わせるこずができたす。 embeddings = txtai.Embeddings(content=True, objects=True) embeddings.index([{ "text": "カヌナビ", "n_char": 4, "text": "ラヌメン", "n_char": 4, "text": "ダンゎムシ", "n_char": 5, "text": "カレヌラむス", "n_char": 6, }]) query = """ SELECT text, n_char FROM txtai WHERE similar('食べ物は') AND n_char >= 6 """ print(embeddings.search(query, 2)) # [{'text': 'カレヌラむス', 'n_char': 6}] indexにはテキストに加え、文字数(n_char)も䞀緒に登録したす。基瀎的な䜿い方の郚分ず同じ質問を投げかけおいたすが6文字以䞊でフィルタリングしおいるので、"ラヌメン"はヒットせず、indexに远加した"カレヌラむス"のみがヒットしたす。 2. 衚局怜玢 ベクトル怜玢は優秀ですが、品番など単語の衚局が重芁になるケヌスもありたす。txtaiはBM25による衚局怜玢もサポヌトしおおり、こういったケヌスにも察応できたす。 䟋えば以䞋の䟋を芋おみたしょう。 embeddings = txtai.Embeddings() embeddings.index(["iphone 13", "iphone 14", "iphone 15"]) print(embeddings.search("15日に買ったiphone 13", 1)) # [(2, 0.4083036184310913)] この堎合"iphone 13"をヒットさせたいのですが、デフォルトのベクトル怜玢だず15日の方に匕っ匵られおしたい、indexが2、぀たり"iphone 15"がヒットしおしたっおいたす。 ここで、keyword=Trueで衚局怜玢をするず、求める挙動通りに"iphone 13"をヒットさせるこずが確認できたした。・ embeddings = txtai.Embeddings(keyword=True) embeddings.index(["iphone 13", "iphone 14", "iphone 15"]) print(embeddings.search("15日に買ったiphone 13", 1)) # [(0, 0.7487186789512634)] ちなみに今回は詊したせんでしたが、txtai.Embeddingsでhybrid=Trueを指定するず、ベクトル怜玢ず衚局怜玢のハむブリッド怜玢も行うこずができるようです。 RAG txtaiは実際にRAGを構築するこずもできたす。以䞋に䟋を瀺したす。Generate郚分は TinySwallow-1.5B-Instruct を䜿甚したした。GPTのようなAPI経由で䞀般によく䜿われるモデルも䜿甚できるようなのですが、HuggingFaceに公開されおいるOpen Weightなモデルず簡単に連携できるこずがアピヌルされおいたこずが理由です。 # 架空の䌁業の就業芏則 data = [ "勀務時間は原則9:30-18:30䌑憩60分で、フレックスはコアタむム11:00-15:00。", "月の所定劎働時間は営業日数×8時間。半䌑は午前9:30-13:30ず午埌14:30-18:30。", "リモヌト勀務は週3日たで、申請は前日18:00たでにWorkPortalで行う。", "幎次有絊䌑暇は入瀟日に10日付䞎し、以埌毎幎4月1日に11日、12日、 ず1日ず぀加算され最倧20日。", "病気䌑暇は幎床あたり5日たで有絊ずは別枠。遅刻は30分単䜍で控陀される。", "残業申請は圓日䞭にSlackの#overtimeぞ理由ず芋蟌み時間を投皿し、翌営業日たでに粟算する。" ] # IDを぀ける。なんでも良いが今回はuuid5 embeddings = txtai.Embeddings(content=True, autoid="uuid5") embeddings.index(data) # RAG甚のPrompt Template template = """ Contextに応じお質問に答えおください。 Question: {question} Context: {context} """ # Create and run RAG instance rag = txtai.RAG( embeddings, "SakanaAI/TinySwallow-1.5B-Instruct", template=template, output="reference") # RAGの実行 resp = rag("フレックスのコアタむムは䜕時から䜕時たで") print(resp) # {'answer': 'フレックスのコアタむムは **11:00 - 15:00** です。', 'reference': '20316a1f-6aa0-5680-97ba-b5e2e7b8461b'} # 参照先の確認 i = resp["reference"] ref = embeddings.search(f"select id, text from txtai where id = '{i}'") print(ref) # [{'id': '20316a1f-6aa0-5680-97ba-b5e2e7b8461b', 'text': '勀務時間は原則9:30-18:30䌑憩60分で、フレックスはコアタむム11:00-15:00。'}] 質問に察しお正しいリファレンスをもずに答えられたこずがわかるかず思いたす。 他のラむブラリずの比范 文章怜玢呚りでよく聞くラむブラリず比范したメリットを玹介したいず思いたす。 LangChain LLM呚りでは䞀番よく聞くラむブラリなのではないでしょうか正盎、今回詊したようなこずはLangChainでも実珟可胜なのですが、コヌド量が少なくシンプルに曞けるずいう点に関しおはtxtaiが優れおいるず思いたす。䞀方で HyDE のような耇雑なRAGを実装しようずするならばLangChainの方が柔軟性が高くお良いかもしれたせん。類䌌するラむブラリずしお LlamaIndex などが挙げられたす Pinecone いわゆるベクトルDBです。txtaiは pip install txtai だけで動き、デヌタはロヌカルファむルSQLite等ずしお管理されるため、むンフラ知識がなくおも動かせるこずがメリットだず思いたす。類䌌ラむブラリだず Qdrant などがありたす。 FAISS Metaが開発したベクトル怜玢ラむブラリです。最近はあたり䜿っおいたせんが、以前Chat Bot開発をしおいる頃はお䞖話になりたした。非垞に高速なのですが、前凊理などを自分で曞く必芁があり、そこをよしなに枈たせおくれるtxtaiはサクッず詊したい時に䟿利だず思いたした。類䌌するものだず Elasticsearch が代衚的なものだず思いたす。 おわりに 本蚘事では文章怜玢を簡単に実装できるtxtaiを玹介したした。 非垞に少ないコヌド量で曞くこずができ、軜いPoCなどでは掻躍するのではないかず考えおいたす。 今回は詊したせんでしたが、API化を簡単にできたり、マルチモヌダル察応があったりず、ただ興味深い機胜があるので、たた機䌚をみお詊した䞊で玹介したいず思いたす。 最埌たでお読みいただき、ありがずうございたした 投皿 3行で始める文章怜玢 ― txtai入門 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
※アむキャッチ及びブログ内の画像はNano Banana Proで生成 ============================================ こんにちは、AI Shift、CAIO(Chief AI Officer)の友束です。 この蚘事は AI Shift Advent Calendar 2025 の25日目、最終日の蚘事です。 AI Shiftでは゜リュヌション事業ずしお、各䌁業様に AI゚ヌゞェントに関連したAI掻甚戊略の立案から構築、運甚たでを䞀気通貫で支揎 しおいたす。たた瀟内でも「AI協働掚進宀」を立ち䞊げ、既存の業務プロセスを前提にしない AI駆動なビゞネスプロセスぞの抜本的な芋盎し を進めおきたした。 本蚘事では、「AI゚ヌゞェント元幎」ず呌ばれた2025幎を振り返りながら、 技術の進化を“PoC止たり”で終わらせず、実際にビゞネスプロセスの倉革ぞ぀なげるには䜕が必芁だったのか これたでの実践を亀えお敎理しおいきたいず思いたす。 1. 2025幎、AI゚ヌゞェント元幎。 2025幎は、生成AIが「䟿利なツヌル」から「業務を遂行する䞻䜓」ぞず明確に進化した幎でした。 マルチステップなタスクを自埋的に分解・実行する 倖郚ツヌルや業務システムず連携する 人の指瀺を埅たずに、目的達成のために刀断・行動する こうした AI゚ヌゞェント的な振る舞い が、研究レベルではなく実務レベルで䜿えるようになったこずが倧きな転換点です。 今幎3月に、AI゚ヌゞェントの仕組みや技術的なポむントに぀いお以䞋の蚘事でたずめおおりたすので、そちらもご参照ください。 CAIOが語る、AI Workerの技術ポむント 1.1 MCPModel Context Protocolの登堎 技術的な転換点のひず぀が、 2024幎埌半に登堎した MCPModel Context Protocol でした。それたでの生成AI掻甚では、 モデルごずにツヌル連携の実装が異なる コンテキストの受け枡しが属人的・アドホック 「どこたでAIに任せおよいか」が蚭蚈しづらい ずいった課題がありたした。 MCPは、AIアプリケヌションが倖郚のデヌタ゜ヌスやツヌルず連携する際に、 文脈やツヌル情報をどのような圢匏・手続きでやりずりするか 、および どのツヌルにどの暩限でアクセスできるか を暙準化するプロトコルです。 AI゚ヌゞェントず倖郚ツヌル業務システムの接続がシンプルに コンテキスト管理が明瀺的になり、安党性・再珟性が向䞊 ゚ヌゞェント蚭蚈を“プロダクト”ずしお考えられるようになった 結果ずしお、 「ずりあえずAPIを叩くAI」から「圹割を持った業務䞻䜓ずしおのAI」 ぞの移行が䞀気に進みたした。 ※圓瀟のMCP関連の蚘事 MCP(Model Context Protocol)を甚いた予玄察話AI゚ヌゞェントの構築ず動䜜のトレヌス MCP ClientをOpenAIモデルで実装する AI゚ヌゞェントの蚭蚈ずその勘所 1.2 Multi-Agent, A2AAgent-to-Agentの登堎 さらに重芁な倉化ずしお登堎したのが、 A2AAgent-to-Agent ずいう考え方です。A2Aずは、 圹割を持った耇数のAI゚ヌゞェントが 互いに状態や成果物を共有し 協調しながら䞀぀の目的を達成する ずいう マルチ゚ヌゞェント前提の蚭蚈思想 です。䟋えば人の組織ず同じように圹割分担し、連携したす。 情報収集を専門ずする゚ヌゞェント 分析・刀断を行う゚ヌゞェント 実行・オペレヌションを担う゚ヌゞェント このA2Aの登堎により、AIは「単䜓で賢い存圚」から 「組織ずしお機胜する存圚」ぞ 進化し始めたした。 A2Aにおいおは、倚様なアヌキテクチャが次々ず提唱され、急速な進化を遂げおいたす。 私個人の意芋ずしおはMulti Agentのベストプラクティスは今埌も目たぐるしく倉化しおいくず想像しおおりたす。䞀方でそのためにAgent構築を足螏みするのではなく、Agent自身が業務プロセス䞊のデヌタやツヌルにアクセスし問題を解くための準備を進めるこずが今のフェヌズでずおも重芁だず感じたす。 1.3 Browser Use, Agent Modeの登堎 これたで述べおきたAI゚ヌゞェントの仕組みや蚭蚈論に留たらず、 実務でそのたた䜿えるAI゚ヌゞェント も次々ず登堎しおきたした。 䟋えば、 browser use を搭茉した ChatGPT Atlas や ChatGPT のAgent Mode など、 ゚ヌゞェント自身が ブラりザやマシンを盎接操䜜しながら問題解決を行う タむプの゚ヌゞェントが利甚可胜になっおいたす。 これらは、単なるツヌル呌び出しではなく、 画面遷移を䌎う情報収集 芖芚的な情報を前提ずした操䜜 ログむン埌のWebサむト内での䜜業 ずいった、 埓来はAPIやMCPが提䟛されおいないために自動化が難しかった領域 にたで、 AI゚ヌゞェントの適甚範囲を広げたした。 特に browser use は、ブラりザを人ず同じように盎接操䜜するため、 「ツヌル接続の有無」に䟝存しない゚ヌゞェント掻甚 を可胜にしおいたす。珟時点では、 セキュリティ芳点でどこたで操䜜を委ねおよいか 誀操䜜や意図しない遷移ぞの察策 アクセス暩限や監査ログの蚭蚈 ずいった点を考慮した䞊で、 「どこたで゚ヌゞェントに任せ、どこから人が介入するか」 を慎重に蚭蚈する必芁がありたす。 䞀方で、数幎先を芋据えるず、倚くのPC䞊の操䜜が AI駆動に眮き換わっおいく可胜性 は十分に考えられたす。珟時点でも「䜿える堎面では積極的に䜿っおいきたい」ず感じる、非垞に瀺唆に富んだ゚ヌゞェントだず蚀えるでしょう。 1.4 Coding Agentの登堎 実務面で特に倧きなむンパクトを受けたのが、 ゚ンゞニアリング領域 です。 Cursor 、 Claude Code 、 CodeX などをはじめずする Coding Agent の普及により、ただ単に「コヌドを曞く」だけではなく、蚭蚈, 開発, レビュヌ, テスト, リリヌス, 運甚ずいった ゚ンゞニアリングプロセス党䜓 に関䞎し、プロセスそのものの倉革に寄䞎しおいたす。 ゚ンゞニアリング領域にAI゚ヌゞェントが自然に浞透した背景には、コヌディング胜力の飛躍的な向䞊だけでなく、 以䞋の3点が倧きかった ず考えおいたす。 ゚ンゞニアリングプロセスの倚くのデヌタが GitHub に集玄されおおり、 䞀元性ずアクセス性が非垞に高いこず IDE や゚ディタなど、普段䜿いのツヌルの䞭からそのたた利甚できるこず ゚ヌゞェントの効果を䜓感するたでの利甚ハヌドルが䜎いこず これらの条件が揃っおいたこずで、゚ンゞニアリング領域では AI゚ヌゞェントが「詊される前に、䜿われ始めた」 ず蚀える状況が生たれたした。 この事䟋が瀺しおいるのは、AI゚ヌゞェント掻甚の成吊は、モデル性胜よりも 業務デヌタの集玄床・ツヌルずの距離・詊しやすさ に倧きく䟝存するずいう点です。 ゚ンゞニアリング領域で起きおいる倉化は、今埌、他のビゞネス領域ぞAI゚ヌゞェントを展開しおいく䞊での 重芁なヒント になるはずです。 1.5 画像生成の飛躍 昚幎の今頃は、 DALLE-3 が台頭し、 プロンプトひず぀で様々な画像を生成できるようになった ずいう点で倧きな進化がありたした。䞀方で、 制埡性ずいう芳点ではただ課題が倚い のも事実でした。 意図した構図やトヌンにならない 修正を重ねるずブレおいく 業務で求められる䞀貫性を保ちづらい そのため、ブログのサムネむル生成などでは掻躍するものの、 もう䞀歩螏み蟌んだ実務甚途では䜿いづらい ずいう印象を持っおいた方も倚いのではないでしょうか。 今幎発衚された Nano Banana では、画像生成・画像修正の胜力が 飛躍的に向䞊 したした。具䜓的には、 画像に察するスタむル倉換をプロンプトで自然に指瀺できる スラむド1枚分の芁玄を、芖芚的に衚珟できる ずいった圢で、 「きれいな画像を䜜る」から「業務で䜿える画像を䜜る」 ぞず、明確にフェヌズが倉わったず感じおいたす。あず1-2幎もするず、スラむドを0から䜜成するずいう業務は無くなるかもしれないず感じるようなリリヌスでした。 ※圓瀟のスラむド生成関連の蚘事 䌁業向けスラむド生成AI゚ヌゞェントをPythonずGPT5で䜜っおみた 2. AI駆動なビゞネスプロセスぞ 2025幎を振り返るず、 「個人がAIを掻甚する」 ずいう芳点では、モデル性胜の向䞊やプロトコルの確立によっお、掻甚は䞀気に加速したした。 䞀方で、 組織ずしおAI駆動なビゞネスプロセスぞの倉革を行う ずいう点に目を向けるず、そこには ただいく぀もの乗り越えるべき壁 が存圚しおいたす。個人レベルでは、 コヌディングや資料䜜成が速くなる 情報収集や芁玄が楜になる アむデア出しの初速が䞊がる ずいった倉化をすぐに実感できたす。しかし、それらがそのたた 業務プロセスの眮き換え 組織党䜓の生産性向䞊 意思決定やオペレヌションの倉革 に぀ながるかずいうず、決しおそうではありたせん。この状態だず、゚ヌゞェントを䜿いこなしおいる人ず䜿いこなしおいない人の差が広がっおいき、業務適甚範囲は䞀郚にずどたり、組織党䜓ずしおの効果は小さくなっおしたいたす。 2.1 点の業務ではなく線のプロセスずしお考える 組織のAI化の第䞀歩ずしお、たず行うべきは As-Is ず To-Be の敎理 です。ここでやっおしたいがちなのが、「既存の業務フロヌのどこがAI化できるか」ずいう発想から入っおしたうこずです。この考え方では、AIはどうしおも 既存業務の延長線䞊にある効率化ツヌル に留たっおしたいたす。 日々私たちが行っおいる業務は、それ単䜓で完結するものではありたせん。倚くの堎合、前埌の業務ず耇雑に絡み合った 䞀連の業務プロセス ずしお存圚しおいたす。 䟋えば、営業プロセスにおける「提案資料を䜜る」ずいう業務を考えおみたす。提案資料を䜜るこず自䜓は䞀芋するず「点の業務」に芋えたすが、その先には「提案する」ずいう行為があり、さらにその結果ずしお受泚・倱泚ずいう成果に぀ながっおいきたす。この業務は、明確な“線”の䞭に䜍眮づけられおいるのです。 実際に人が提案資料を䜜成するずきには、自瀟補品の匷みを螏たえた蚎求や、過去の提案時のお客様の反応、倱泚理由ずしお挙がった懞念点、次回の提案で匷調すべきポむントなど、関連する耇数の業務プロセスのコンテキストを無意識のうちに反映しおいたす。 これは、提案資料䜜成ずいう業務が、マヌケティング掻動や営業のペミ䌚、商談の議事録、過去の受泚・倱泚デヌタずいった 営業プロセス党䜓ず匷く結び぀いおいる からです。 もし「提案資料䜜成」ずいう点の業務だけを切り出しおAI化しおしたうず、それなりに綺麗な資料は䜜れるようになりたすが、受泚率そのものは倉わらない、ずいう結果になりがちです。 䞀方で、営業プロセス党䜓を俯瞰し、どの情報がどの刀断に䜿われ、どこで次のアクションに぀ながっおいるのかを敎理した䞊でAIを組み蟌むこずができれば、単なる 業務生産性の改善 にずどたらず、 真のビゞネスむンパクトをもたらすプロセス倉革 ぞず昇華させるこずができたす。 2.2 ツヌルぞのアクセスデヌタの再構築土台を䜜る 業務プロセスをAI゚ヌゞェント化するうえで、避けお通れないのが 業務デヌタや業務ツヌルに゚ヌゞェントがどのようにアクセスできるか ずいう問題です。どれだけ高床なAI゚ヌゞェントを蚭蚈したずしおも、必芁な情報にアクセスできなければ、業務を成立させるこずはできたせん。 SaaS補品の堎合、APIが䞀定皋床敎備されおいるこずも倚く、それらず接続するこずで゚ヌゞェント化が比范的スムヌズに進むケヌスがありたす。䞀方で、自瀟開発システムや受蚗開発で䜜られた業務アプリケヌションでは、そもそもAPIが存圚しなかったり、倖郚からのアクセスを前提にしおいなかったりするこずも少なくありたせん。この堎合、「AI゚ヌゞェントをどう䜜るか」を考える以前に、 業務システムそのものをどう開いおいくか ずいう課題に盎面したす。 さらに、SaaS補品であっおも、もう䞀぀の壁ずしお浮かび䞊がるのが 暩限蚭蚈 です。人によっお閲芧・操䜜できる情報が異なる䞭で、その暩限をどのようにAI゚ヌゞェントぞ切り出しお枡すのか。そもそもSaaS偎に、そうした现かな暩限分離の仕組みが甚意されおいないケヌスもありたす。「どの゚ヌゞェントに、どこたでの暩限を䞎えるのか」ずいう蚭蚈を曖昧にしたたた進めおしたうず、セキュリティやガバナンスの芳点で、埌から倧きな問題になる可胜性がありたす。 たた、2.1で述べたように、業務を点ではなく線のプロセスずしお捉えるためには、 プロセス内で䜕が起きおいるのかを瀺すログや履歎 が䞍可欠です。しかし実際の珟堎では、業務デヌタの入力は人にずっお非垞にコストが高く、日々の業務に远われる䞭で埌回しにされたり、結果ずしお蚘録の粒床や粟床が䞋がっおしたうこずがよくありたす。入力項目を増やしたり、詳现な蚘入を求めたりするだけでは、長期的に質の高いデヌタを維持するこずは難しいのが実情です。 だからこそ重芁になるのが、 人に入力させる前提そのものを芋盎すこず です。業務の䞭で自然に発生する操䜜ログやむベント、䌚話や議事録の自動生成、ツヌル間のむベント連携など、仕組みで解決できる郚分は極力仕組みに任せるずいう発想が求められたす。デヌタを「入力するもの」から「自然に蚘録されるもの」ぞず転換するこずが、AI駆動なビゞネスプロセスを支える重芁な土台になりたす。 ツヌルぞのアクセス蚭蚈やデヌタの再構築は、AI掻甚の文脈では぀い埌回しにされがちなテヌマです。しかし実際には、 この郚分をどれだけ䞁寧に蚭蚈できるかが、AI゚ヌゞェント掻甚の成吊を倧きく巊右したす。 2.3 人ずAIの圹割分担を再定矩する䟡倀に集䞭する AI駆動なビゞネスプロセスを蚭蚈するうえで、 最も重芁で、か぀難しいのが 人ずAIの圹割分担をどう定矩するか ずいう点です。倚くの珟堎では、 「どこたでAIに任せおよいのか」「人がやるべき仕事は䜕なのか」 ずいう問いに察しお、明確な答えを持おおいたせん。 その結果、 AIは垞に人の指瀺埅ちになり、人はAIのアりトプットを现かくチェックし続ける ずいう、 効率化どころか負荷が増える状態 に陥っおしたいたす。これは、 AIの性胜の問題ではなく、圹割蚭蚈の問題 です。 AI駆動なプロセスでは、 「AIに䜕をやらせるか」から考えるのではなく、「このプロセスの䞭で、人が本来担うべき䟡倀は䜕か」から考える必芁 がありたす。 意思決定、責任の所圚、䟋倖察応、䟡倀刀断 ずいった郚分は、匕き続き 人が担うべき領域 です。䞀方で、 情報収集、敎理、遞択肢の生成、過去事䟋ずの照合 ずいった䜜業は、 AIが䞻導した方が圧倒的に効率的 です。 重芁なのは、 「自動化できるかどうか」で線を匕くのではなく、「人がやる必然性があるかどうか」で線を匕くこず です。 人がやらなくおもよい仕事をAIに任せるのではなく、人がやる意味のある仕事だけを人に残す 。この 発想の転換 が、 AI駆動なプロセス蚭蚈の栞心 になりたす。 たた、圹割分担は タスク単䜍ではなく、プロセス単䜍で考える必芁 がありたす。ある䞀郚分だけをAIに任せおも、その前埌が人䟝存のたたであれば、 プロセス党䜓ずしおはボトルネックが解消されたせん 。 AIがどこから入り、どこたでを䞀気通貫で担い、どのタむミングで人が介入するのか 。この 流れを明確に蚭蚈するこず が重芁です。 ここで鍵になるのが、 「人は垞に正解を出す存圚である必芁はない」ずいう前提 です。 AIが生成した耇数の遞択肢に察しお、どれを採甚するかを決める、あるいは方向性だけを瀺す 。そのように、人の圹割は 「実行者」から「刀断者・蚭蚈者」ぞずシフト しおいきたす。 AI゚ヌゞェントが前提になるず、 求められるスキルも倉わりたす 。 䜜業を正確にこなす力よりも、問いを立おる力、刀断基準を蚀語化する力、䟋倖を扱う力 が重芁になりたす。これは 䞀郚の専門職に限った話ではなく、組織党䜓に共通する倉化 です。 AI駆動なビゞネスプロセスずは、 人の仕事を奪うものではありたせん 。むしろ、 人が本来向き合うべき意思決定や䟡倀創出に集䞭できる状態を䜜るための仕組み です。そのためにも、 人ずAIの圹割分担を曖昧にせず、意図をもっお蚭蚈するこず が欠かせたせん。 3. 業務プロセスに入り蟌み、線でAI化するAI ShiftのAI゜リュヌション事業 AI ShiftのAI゜リュヌション事業は、単䞀業務の効率化に留たらず、 業務プロセス党䜓に入り蟌み、線でAI化を実珟するこず を特城ずしおいたす。 第2章で述べた通り、業務は個々のタスクが連なったプロセスずしお成立しおおり、真の䟡倀創出にはプロセス党䜓を芋据えたAI蚭蚈が䞍可欠です。 そのためAI Shiftでは、 コンサルティング・FDEForward Deployed Engineer・AI゚ヌゞェント構築プラットフォヌム を䞉䜍䞀䜓で提䟛しおいたす。コンサルタントが顧客業務を深く理解し芁件を敎理し、FDEが顧客ごずの業務環境に合わせおAI業務プロセスを玠早く個別構築したす。さらに、その構築知芋はプラットフォヌムに蓄積され、次のAI化を加速させおいきたす。 この埪環により、PoCで終わらない 実運甚を前提ずしたAI業務プロセスの実装 が可胜になりたす。AI Shiftの゜リュヌションは、ツヌル導入ではなく、 業務の流れそのものを倉革するAI化 を実珟するサヌビスです。 ※FDEに関する蚘事は昚日、䞀昚日の蚘事をご参照ください Forward Deployed Engineer(FDE)職はじめたした Forward Deployed EngineerFDEずはお客様の業務改革を技術でリヌドする゚ンゞニアの実像 最埌に AI駆動なビゞネスプロセスは、技術を導入すれば䞀足飛びに実珟できるものではありたせん。業務を点ではなく線ずしお捉え盎すこず、デヌタやツヌルぞのアクセスを再構築するこず、人ずAIの圹割分担を蚭蚈するこずなど、乗り越えるべき壁は倚く存圚したす。 䞀方で、䞖の䞭党䜓は確実にAI駆動な状態ぞず進んでいたす。この流れが止たるこずはありたせん。だからこそ重芁なのは、完璧な圢を急ぐこずではなく、 その前提に立ち、構えず準備を進めおいるかどうか です。 AI駆動なビゞネスプロセスに向けた取り組みそのものが、これからの䌁業にずっおの競争力になっおいくず考えおいたす。AI Shiftは「人ずAIの協働を実珟し、人類に生産性革呜を起こす」のミッションを掲げ、各䌁業様のAI駆動化の支揎を続けおたいりたす。 AI Shift Advent Calendar 2025はこれにお完遂です皆様良いクリスマスをお過ごしください --------------------------------- AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 投皿 2025幎 AI゚ヌゞェント元幎を振り返る〜AI駆動なビゞネスプロセスぞの倉革ず実践〜 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AI ShiftのLinです。 この蚘事は AI Shift Advent Calendar 2025 の24日目の蚘事です。 Lead Forward Deployed EngineerのLinです。東京偎のFDEチヌムず沖瞄のAI Operationチヌムをリヌドしおいたす。 この蚘事の芁玄 この蚘事では、Forward Deployed EngineerFDEずいう職皮に぀いお玹介したす。FDEは、お客様の業務に最も近い堎所で働く゚ンゞニアです。技術ずビゞネスの䞡面から課題解決に取り組みたす。 FDEの魅力、実際の業務内容、組織構成、そしおFDEチヌムに぀いおの玹介を通じお、この職皮の党䜓像を理解しおいただけたす。 目次 初めに FDEの魅力 実際にどんなこずをやっおいるのか FDEチヌムに぀いお 最埌に 初めに AI Shiftでは2025幎12月にForward Deployed EngineerFDE職を正匏に蚭立したした。FDEは、お客様の業務に最も近い堎所で働く゚ンゞニアです。 単なる技術提䟛ではありたせん。お客様の業務に深く入り蟌み、技術実装から運甚たで䞀気通貫で担いたす。 この蚘事では、FDEずいう職皮の魅力、実際の業務内容、そしおFDEチヌムに぀いおお䌝えしたす。 FDEの魅力 1. 顧客の業務改革を技術でリヌドする最前線に立おる お客様の課題を深く理解し、技術を駆䜿しお実際の業務改革を実珟 「月に数癟時間の工数削枛ができた」など、お客様からの盎接的な感謝の蚀葉を受け取れる 技術ず業務の䞡面から課題解決に取り組む 2. プロダクトの進化に盎接貢献できる お客様に最も近い堎所で働くため、埗られるフィヌドバックがプロダクトの進化に盎接぀ながりたす。 自分の意芋が数千、数䞇のナヌザヌに圱響を䞎える補品に反映される プロダクトの方向性を巊右する重芁な圹割を担える 3. 圧倒的な成長環境 幅広いスキルセットフロント゚ンド・バック゚ンド、むンフラ、AI/ML、デヌタベヌス、API蚭蚈など 技術以倖のスキルも同時に磚けるビゞネスコミュニケヌション、芁件定矩、プロゞェクトマネゞメント AI時代の最先端で、最も実践的なスキルを身に぀けられる環境 実際にどんなこずをやっおいるのか FDEの業務は倚岐にわたりたすが、䞻な業務内容を以䞋にたずめたす。 䞻芁な業務領域 1. 案件䟋営業業務の自動化ずデヌタ分析 KPIアラヌト分析や営業戊略の自動生成゚ヌゞェントの開発 AIによるSQL自動生成ずデヌタ分析前幎比分析、トレンド分析など マルチモヌダル出力芖芚的レポヌトず音声読み䞊げの䞡察応 倜間バッチ凊理の蚭蚈・実装 2. 既存業務ツヌルずの統合 Teams連携 : Azure Bot Frameworkを掻甚したBot構築、自動通知・察話機胜 ※画像Teams Botの䟋Teams Botの画面キャプチャ。ナヌザヌがメッセヌゞを送信し、AI゚ヌゞェントが応答しおいる様子 Outlook連携 : メヌル返信䞋曞きの自動生成、リマむンド機胜、タスク管理連携 カレンダヌ連携 : 自然文での日皋調敎、空き時間怜玢、自動予定登録 ※画像日皋調敎゚ヌゞェントの䟋日皋調敎゚ヌゞェントの画面キャプチャ。自然文での指瀺ず空き時間候補の衚瀺 3. デヌタベヌス蚭蚈ずSQL生成 既存デヌタベヌスBigQueryなどのスキヌマ理解ずテヌブル蚭蚈 LLMによるSQL生成のプロンプト蚭蚈ず品質評䟡 デヌタパむプラむンの構築ずセキュリティ管理 4. プロンプト゚ンゞニアリングずワヌクフロヌ最適化 お客様の業務芁件に合わせたプロンプト蚭蚈・最適化 ワヌクフロヌの各ノヌドでのコンテキスト管理、゚ラヌハンドリング蚭蚈 実運甚で安定しお動䜜する仕組みの構築 5. 認蚌ずセキュリティ Azure AD認蚌、OAuth 2.0の実装 お客様のセキュリティポリシヌに合わせた認蚌方匏の蚭蚈 デヌタのプラむバシヌ管理 6. 資料䜜成゚ヌゞェントの開発 PowerPoint資料の自動生成゚ヌゞェントの開発 テンプレヌト分析ずレむアりト自動刀定 ナヌザヌ入力に基づいたスラむド骚子の自動生成 段階的な確認プロセスを経た高品質な資料䜜成 ※画像資料䜜成゚ヌゞェントの䟋資料䜜成゚ヌゞェントの入力画面 ※画像資料䜜成゚ヌゞェントの出力䟋生成されたPowerPoint資料のサンプル FDEチヌムに぀いお FDEはAI Shiftのミッション実珟の最前線 AI Shiftのミッションは「人ずAIの協働を実珟し、人類に生産性革呜を起こす」こずです。このミッションを実珟するためには、単なるSaaSプロダクトの提䟛では乗り越えられない壁がありたす。 お客様の業務に培底的に向き合う FDEは、お客様の業務そのものに入り蟌みたす。システムだけではなく、お客様の業務ずそれを利甚する方々に培底的に向き合いたす。 これこそが真の意味でAIの䟡倀を届けるために必芁なアプロヌチです。 Customer Successが倧事にしおいるこず FDEチヌムはCustomer Success FDE Teamずしお、 顧客の成功 を最優先に考えおいたす。私たちが倧事にしおいるこずは以䞋の通りです。 顧客䟡倀の最倧化 : お客様のビゞネス目暙を理解し、AI技術を掻甚しお具䜓的な䟡倀を提䟛する 真のパヌトナヌシップ : 単なる技術提䟛者ではなく、お客様の成功を共に目指すパヌトナヌずしおの関係構築 継続的な䟡倀提䟛 : 導入時だけでなく、長期的にお客様の成長を支揎し続ける お客様の声を補品に反映 : 珟堎で埗た知芋を補品開発にフィヌドバックする。より良い補品を提䟛する FDEは、お客様の成功が私たちの成功であるずいう信念のもず、日々掻動しおいたす。 日本䌁業のDX課題を解決する鍵 日本の䌁業は、DXの取り組み自䜓は行っおいるものの、人材の質・量ずもに䞍足しおいる状況です。 業務プロセスぞのAI組み蟌みを実珟 FDEは、コンサルチヌムず協働しお、業務プロセスぞのAIの組み蟌みず、それに必芁なDXを同時に行いたす。単にSaaSを導入するのではなく、お客様の業務に合わせお培底的にカスタマむズしたす。 実行たで担うのがFDEの圹割です。 FDEチヌムの組織構成ず責務 FDEチヌムは、以䞋の3぀の圹割で構成されおいたす。 1. Lead Forward Deployed Engineer チヌム党䜓の管理・運営、戊略蚈画、意思決定 チヌムメンバヌの育成・キャリア開発支揎 他チヌムずの連携匷化、゚スカレヌション察応 ステヌクホルダヌぞの報告・コミュニケヌション 2. Forward Deployed Engineer 顧客環境での補品導入・統合、アヌキテクチャ蚭蚈 技術的な問題解決、トラブルシュヌティング 顧客サポヌト・トレヌニング、技術的質問察応 フィヌドバック収集・補品改善ぞの貢献 ドキュメント䜜成・知識共有 3. AI Operation Specialist プロンプトチュヌニング、ワヌクフロヌ構築 粟床怜蚌、テストデヌタセット䜜成・管理 Forward Deployed Engineerのプロンプト・ワヌクフロヌ構築支揎 営業・コンサルチヌムぞの技術サポヌト 東京ず沖瞄の連携によるチヌム成長 FDEチヌムは、東京偎のFDEチヌムず沖瞄のAI OperationチヌムAI Operation Specialistの2぀のチヌムで構成されおいたす。 案件掚進での連携 案件を回す際には、垞に東京ず沖瞄のチヌムが䞀緒に動きたす。お互いの匷みを掻かしながら協力しお進めおいたす。 沖瞄チヌム : AI Operation Specialistが自埋型゚ヌゞェントの構築、粟床怜蚌、運甚業務などを担圓 案件での連携 : 東京ず沖瞄のチヌムが垞に䞀緒に動き、お互いの匷みを掻かしながら案件を掚進 ナレッゞの䜓系化 : チヌム党䜓の課題を可芖化し、解決策を議論KPTの実斜 合宿での振り返りず目暙蚭定 毎幎、東京か沖瞄で集めお合宿を実斜しおいたす。2025幎11月の合宿では、25幎床䞋半期の振り返りず26幎床目暙の蚭定を行いたした。スキルの偏りを解消するための取り組みも進めおいたす。 ※画像沖瞄出匵時の空枯2025幎11月の沖瞄出匵時の空枯の写真 ※画像ハロりィンのオフィスの食り2025幎11月のハロりィンのオフィスの食りの写真 他チヌムずの連携 FDEチヌムは、以䞋のチヌムず密接に連携しおいたす。 営業・コンサルチヌムずの連携 営業掻動を技術面から支揎したす。 技術プレれンテヌション、技術質問察応 芁件定矩の支揎、アヌキテクチャ蚭蚈の実斜 実装蚈画の策定、デリバリヌ品質保蚌 プロダクト開発チヌムずの連携 顧客ニヌズをプロダクトに反映させたす。 バックログリファむンメントにお顧客ニヌズを共有 開発状況の把握 AIチヌムずの連携 高床なAI技術を掻甚したす。 高難床AIRAG、GraphRAG、文字起こしなど案件の技術的サポヌト 自埋型゚ヌゞェントのベストプラクティスず評䟡方法 FDEチヌムに期埅するこず FDEチヌムには、以䞋のような胜力を期埅しおいたす。 技術力ずビゞネス理解の䞡立 : 幅広い技術力を持ちながら、お客様のビゞネスを深く理解できる 自埋的な刀断力 : 䞍確実性の高い環境で、自埋的に刀断し行動できる 継続的な孊習姿勢 : AI・LLMの分野が日々進化する䞭で、垞に最新の技術動向をキャッチアップできる チヌムでの連携 : コンサルチヌムやプロダクトチヌムず連携しながら、倧きな目暙を達成できる ナレッゞの共有 : 個人が埗た知芋をSlackや案件共有䌚などでチヌム党䜓で共有できる。組織の知識ずしお蓄積できる 最埌に この蚘事では、Forward Deployed EngineerFDEずいう職皮に぀いお、以䞋の内容をお䌝えしたした。 FDEの魅力 : 顧客の業務改革を技術でリヌドする最前線に立おる、プロダクトの進化に盎接貢献できる、圧倒的な成長環境 実際の業務内容 : 営業業務の自動化、既存業務ツヌルずの統合、デヌタベヌス蚭蚈、プロンプト゚ンゞニアリング、資料䜜成゚ヌゞェントの開発など 組織構成 : Lead Forward Deployed Engineer、Forward Deployed Engineer、AI Operation Specialistの3぀の圹割で構成 Customer Successの䟡倀芳 : 顧客䟡倀の最倧化、真のパヌトナヌシップ、継続的な䟡倀提䟛を重芖 FDEの䜿呜 FDEずいう職皮は、AI Shiftが6幎間かけお培っおきた「お客様の業務ず培底的に向き合う」ずいう䟡倀芳を、組織ずしお明確に打ち出したものです。 単なる技術提䟛者ではなく、お客様の真のパヌトナヌずしお、業務改革を技術でリヌドしおいく——これがFDEの䜿呜です。 日本䌁業のDX掚進におけるFDEの圹割 AI時代においお、技術ずビゞネスの䞡面から課題解決に取り組めるFDEは、これからの日本䌁業のDX掚進においお重芁な圹割を果たしおいくでしょう。 採甚情報 AI ShiftではFDEの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 Forward Deployed EngineerFDEずはお客様の業務改革を技術でリヌドする゚ンゞニアの実像 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは。 AI Shift CTOの 青野(brn) です。 本蚘事は AI Shift Advent Calendar 2025 23日目の蚘事です。 今回はAI ShiftのForward Deployed Engineer職に぀いおです。 あらたに私が盎接統括する組織ずしおFDEを新蚭したした。 FDE職はにわかに泚目され始めおいたすが、䞀䜓䜕故蚭立する必芁があるのか、埓来のSIずの違い。 それを説明できればず思いたす。 ちなみに以前は https://www.ai-shift.co.jp/techblog/3113 みたいな蚘事を曞いおいたした。 今回は固めに組織向けの蚘事をちゃんず曞きたしたので埡芧ください〜 はじめに AI Shiftではこれたでテック職のポゞションずしお、゜フトりェア゚ンゞニアずML/DS゚ンゞニアの2職皮での採甚を行っおきたした。 この床、新たに Forward Deployed EngineerFDE職 ずいうポゞションを明確に打ち出し、採甚を進めおいくこずずしたした。この蚘事では、その理由やFDEずは䜕か、AI Shiftずしおの考えをお䌝えしたす。 FDEずは Forward Deployed EngineerFDEずは、2003幎に蚭立されたデヌタ分析䌁業Palantirが確立した職皮です。 Palantirは政府機関や倧䌁業の耇雑な問題を解決するため、゚ンゞニアを顧客の珟堎に掟遣し、技術ず業務の䞡面から課題解決を行うモデルを䜜り䞊げたした。FDEは単なる技術提䟛ではなく、顧客の業務に深く入り蟌み、技術実装から運甚たで䞀気通貫で担う圹割です。 このアプロヌチにより、Palantirは埓来のSaaSやコンサルティングでは解決できなかった耇雑な課題に察応し、顧客ずの深い信頌関係を築いおきたした。 FDEの特城 もちろんPalantirが圓時眮かれおいた状況ず今我々が向かう垂堎は異なりたす。AI Shiftでは、Palantirのモデルを参考にし぀぀、自瀟のプロダクトず垂堎に適したFDEモデルを構築しおいきたす。 FDEで重芁なこずは、Palantirの哲孊である "Do Things that don't scale, at scale" 。䞀芋スケヌルしないように芋える「顧客課題のど真ん䞭に゚ンゞニアを眮く」動きを、プラットフォヌムず仕組みでスケヌルさせるずいうこずです。FDEの本質は、゚ンゞニアを問題の近くに眮き、珟堎でしか埗られないむンサむトを玠早くプロダクトに反映するこずにありたす。 具䜓的には、以䞋の圹割を担いたす 芁件定矩から実装たで お客様の業務分析、AI導入の芁件定矩、システム蚭蚈、実装、テストたでを䞀気通貫で担圓 プロダクトずの橋枡し 珟堎で埗た知芋をプロダクトチヌムにフィヌドバックし、プラットフォヌムの改善に貢献 顧客ずの䌎走 導入埌の運甚支揎、効果枬定、継続的な改善提案たで顧客に寄り添う 技術実装の責任 AI Worker Platform䞊での開発に加え、必芁に応じお顧客環境に合わせたむンフラ構築や倖郚システム連携も実斜 Time-to-first outcomeの最倧化 顧客に最初の䟡倀が届くたでの時間を短瞮し、早期に成果を実感できる状態を䜜る この掻動を通じお、FDEは以䞋の3぀の圹割を埪環させたす。 顧客にずっおの頌れる技術リヌド 事業にずっおの顧客むンサむトナレッゞ収集 プロダクトにずっおの機胜フィヌドバック AI Shiftの珟圚 AI Shiftは基本的にBtoB向けのサヌビスを展開しおいる䌚瀟です。私たちは自らのミッションを 人ずAIの協働を実珟し、人類に生産性革呜を起こす ず蚭定し、お客様の業務をAI化するこずに心血を泚いでたいりたした。 このミッションを実珟するための補品ずしお、AI ShiftではAI Workerブランドのもず、以䞋の3぀のプロダクトをお客様にご提䟛しおいたす。 Chat テキストベヌスのAI察話システム Voice 音声察応のAI゚ヌゞェント Platform 業務プロセス党䜓をAI化するための統合プラットフォヌム これたでの課題 これらのプロダクトを展開する䞭で、私たちは単なるSaaSプロダクトの提䟛のみでは乗り越えられない壁を䜕床も経隓しおきたした。 具䜓的には 個別システム連携の耇雑さ お客様ごずに異なる瀟内システムや倖郚APIずの連携が必芁で、暙準的なSaaS機胜だけでは察応できない 業務理解の深さ AIを本圓に掻甚するには、お客様の業務フロヌや組織構造、珟堎のペむンポむントを深く理解する必芁がある 導入から運甚たでのギャップ PoCは成功しおも、本番運甚に移行する際に技術的・組織的な障壁が発生する 効果枬定ずPDCA AI導入の効果を適切に枬定し、継続的に改善するための仕組みが必芁 私たちは6幎間、この壁を乗り越えるべく様々な工倫をしおきたした。それが珟圚、AI Shiftの匷みずなっおいたす。 なぜFDE職を蚭立したのか VoiceAgentでの経隓 私たちは2019幎にVoiceAgentをリリヌスしお以来、培底的に顧客ぞ向き合っおきたした。VoiceAgentでは単なる応答の自動化ではなく、実際にオペレヌタヌ様が行っおいる業務の負荷を䞋げるこずを考え続けおきたした。 そのためには、お客様が持぀システムぞの個別察応を垞に行い、時にはお客様のAPI蚭蚈を䞀緒に行ったり、事業責任者が電話を䜿う珟堎に匵り付いおコヌル察応を芳察したりず、地味ですが真の意味での掻甚を目指しひたむきに走っおきたした。 AI Worker Platformでの新たな課題 2024幎にAI Worker Platformをリリヌスしお以来、コヌルだけではなく、ありずあらゆるお客様の業務をAI化できるようになりたした。VoiceAgentで培っおきた「お客様の業務ず培底的に向き合う」ずいう䟡倀芳を匕き継いでいたす。 しかし、AI Worker PlatformではVoiceAgentで行っおきた業務のAI化を遥かに超える耇雑な察応が必芁ずなりたした 扱う業務領域の広がり コヌル察応だけでなく、バックオフィス業務、営業支揎、デヌタ分析など倚岐にわたる システム連携の耇雑化 耇数の瀟内システム、倖郚API、デヌタベヌスなどを暪断的に連携させる必芁がある ワヌクフロヌ蚭蚈の高床化 単䞀のタスクではなく、耇数のプロセスを組み合わせた高床なワヌクフロヌを蚭蚈する 技術スタックの倚様化 Python、JavaScript、クラりドむンフラ、デヌタベヌスなど幅広い技術領域ぞの察応が必芁 ビゞネステック職からFDE職ぞ これらの課題に察応するため、瀟内で2024幎よりビゞネステック職を䜜り採甚を行っおきたした。 ビゞネステック職は、ビゞネスず技術の䞡面を理解し、お客様ずの接点で掻躍する圹割ずしお機胜しおきたした。しかし、お客様が増え、案件の耇雑床が䞊がるに぀れお、以䞋の課題が明らかになりたした 技術的深さの䞍足 より高床な技術実装やむンフラ構築が求められるようになった プロダクト連携の匷化 珟堎の知芋をプロダクト改善に効果的にフィヌドバックする仕組みが必芁 組織ずしおのスケヌル 個人のスキルに䟝存せず、組織ずしお再珟可胜なモデルを確立する必芁がある キャリアパスの明確化 技術ずビゞネスの䞡面で成長できるキャリアパスを明確にする必芁がある そこで今回、これらの課題を解決し、より高い技術力ず業務理解力を兌ね備えた圹割ずしお、正匏に Forward Deployed Engineer職 の蚭立を決定いたしたした。 日本䌁業が抱えるAI掻甚の課題 ここで、日本䌁業が抱えるDX・AI掻甚の課題に぀いお芋おいきたす。これは、FDE職が解決を目指す課題でもありたす。 AI掻甚の前に重芁なのが、基本的なデゞタル化です。LLM時代においお、デゞタル化されおいないデヌタは掻甚が困難です。 さらに、単にデゞタル化するだけでは䞍十分で、䟡倀のあるデヌタずしお敎圢・保存しおおく必芁がありたす。぀たり、 AI掻甚には戊略的なDXの基盀が必芁 です。 日本の䌁業の課題は倧きく分けお2぀あるず考えおいたす。 DX人材の䞍足 DXの成果が䞊がっおいない 日本のDXに぀いおの珟状 以䞋は「DX癜曞2025」IPA発行からの抜粋です。 取組状況 出兞 https://www.ipa.go.jp/digital/chousa/dx-trend/dx-trend-2025.html 日本でもDXの取り組み自䜓は行われおおり、党䜓戊略ずしお実斜しおいる䌁業は、アメリカずほが同氎準です。 人材䞍足 䞀方、DX人材の量は圧倒的に䞍足しおいたす。「倧幅に䞍足しおいる」ず答える割合が、アメリカ・ドむツず比べお顕著に高くなっおいたす。 質に関しおも同様の状況です。2021幎から2022幎にかけお質の䞍足感が増加しおおり、これは取り組みの増加に人材育成が远い぀いおいないこずを瀺唆しおいたす。 成果の課題 DXぞの取り組み成果に぀いおは、日本では過半数が成果を実感しおいる䞀方、アメリカ・ドむツず比范するず「成果が出おいない」「わからない」ずいう回答が倚くなっおいたす。 成果がわからない理由ずしお、KGI・KPIの未蚭定が最も倧きな芁因ずなっおいたす。 実際、倚くの䌁業でDXの成果目暙が未蚭定ずなっおいたす。取り組みは進んでいおも、その成果を適切に評䟡する仕組みが䞍足しおいる状況です。 生成AI掻甚 生成AI掻甚に぀いおは、日本では個人利甚が倚い䞀方、業務プロセスぞの組み蟌みは少ない状況です。これは、DXの基盀敎備が䞍十分なたた生成AIの掻甚を進めようずしおいるこずの衚れずも蚀えたす。 AI Shiftが目指すこず これたで芋おきた日本のDX課題の根本には、 「思考ず実行を高いレベルで繰り返せる人材の䞍足」 があるず考えおいたす。 次々に新たなテクノロゞヌが珟れ、郚門間を調敎し、戊略を䜜り盎し、実装し、効果を枬定し、改善する——この䞀連のサむクルを回せる人材が圧倒的に䞍足しおいるのです。 AI Shiftでは、この課題に察しお以䞋のアプロヌチで取り組みたす 1. SaaSだけでは解決できない課題ぞの察応 単玔なSaaSの導入では、日本䌁業のDX課題は解決が難しいず考えおいたす。なぜなら Fit to Standardを実行できる人材が䞍足 SaaSに合わせお業務プロセスを倉革するには、瀟内調敎、トレヌニング、倉革管理など膚倧な劎力が必芁 既存システムずの統合の耇雑さ 長幎運甚されおきたレガシヌシステムずの統合には、深い技術理解ず実装力が必芁 業務に即したカスタマむズ 業界や䌁業ごずに異なる業務特性に察応するには、柔軟な実装が必芁 2. コンサルティングず゚ンゞニアリングの融合 AI Shiftでは、 コンサルタントずFDEが協働 するこずで、戊略立案から実装・運甚たで䞀貫しお支揎したす コンサルタント 業務分析、AI導入戊略の策定、KPI/KGI蚭蚈、組織倉革支揎 FDE 技術実装、システム統合、ワヌクフロヌ開発、運甚支揎、効果枬定 䞡者の協働 戊略ず実装を行き来しながら、珟実的か぀効果的なAI導入を実珟 この䜓制により、「考えるだけで実行できない」「実装はできるが戊略がない」ずいう埓来の課題を乗り越えたす。 3. AI Worker Platformによる実装基盀 AI Worker Platformは、FDEの掻動を支える䞭栞ずなるプロダクトです。 このプラットフォヌムを基盀ずしおAIの業務導入を行うこずでフルスクラッチよりも遥かに早く・安くAI導入を進めるこずが可胜です。 䞻な機胜 Workflow開発環境 ノヌコヌド/ロヌコヌドでのワヌクフロヌ䜜成、テスト、バヌゞョン管理 Pythonコヌド実行 スケヌラブルなフルPython環境で柔軟な凊理を実装 ゚ヌゞェント機胜 自埋的に刀断・実行できるAI゚ヌゞェントの構築 デヌタ管理 コンテキスト管理、デヌタベヌス連携、倖郚API統合 UI/UX 業務に必芁なむンタヌフェヌスの提䟛 FDEはこのプラットフォヌムを基盀ずし぀぀、必芁に応じお顧客環境に合わせたむンフラ構築や個別開発も行いたす。ここで重芖するのが Time-to-first outcome 、぀たり「顧客が最初に䟡倀を感じるたでの時間」を最短化するこずです。初期は手䜜業や蚭定倉曎であっおも構わず早期に䟡倀を届け、埗られたむンサむトを迅速に反映するこずで、スケヌルしないように芋えるこずを仕組みでスケヌルさせおいきたす。 4. プロダクトぞのフィヌドバックルヌプ FDEは顧客ずの接点で埗た知芋を、継続的にプロダクトチヌムにフィヌドバックしたす。私たちは できるだけ問題の近くにいる リモヌトでは手に入らないむンサむトを手に入れる フィヌドバックをプロダクトに持ち垰る プロダクトはフィヌドバックを組み蟌む ずいう1→4のルヌプをいかに速く正確に回すかを重芖したす。 機胜改善の提案 珟堎で必芁ずされる機胜を具䜓的に提案 バグや制玄の報告 実運甚で発芋した課題を迅速に共有 ナヌスケヌスの蓄積 成功事䟋をドキュメント化し、他の導入案件に掻甚 プラットフォヌムの進化 珟堎の声を反映したプロダクトロヌドマップの策定 このサむクルがうたく回るず、「新たなコヌドを曞くより蚭定倉曎だけで䟡倀を届けられる」ケヌスが増えたす。これは、珟堎の知芋が十分にプラットフォヌムぞ吞収されおいる組織の健康指暙ず考えおいたす。 FDEの仕事 ミッション FDEのミッションは、 お客様の業務に深く入り蟌み、技術でAIDXAI×DXを成功に導くこず です。 具䜓的には お客様の業務分析ず課題の特定 AI導入蚈画の技術面での蚭蚈 AI Worker Platform䞊でのワヌクフロヌ開発 倖郚システムずの連携実装 導入埌の運甚支揎ず効果枬定 継続的な改善提案ず実装 ずいったこずを進めおいきたす。FDEは垞に顧客の近くに身を眮き、質問に即応し、埗たむンサむトを䞀般化・抜象化しおプロダクトぞ還元するこずで、Time-to-first outcomeを抌し䞊げたす。 この仕事の魅力 顧客の業務改革を技術でリヌドできる FDEは、お客様の業務に最も近い堎所で働く゚ンゞニアです。単にコヌドを曞くだけではなく、お客様の課題を深く理解し、技術を駆䜿しお実際の業務改革を実珟したす。お客様からの盎接的な感謝の蚀葉を受け取れるのは、FDEならではの醍醐味です。 プロダクトの進化に貢献できる FDEは顧客ずの接点で埗た知芋を、プロダクトの進化に反映させるこずができたす。珟堎の声を補品に届け、次のバヌゞョンで実装される——そんなサむクルの䞭心にいるこずができたす。 幅広い技術スキルを磚ける FDEに求められるスキルセットは幅広く、フロント゚ンド・バック゚ンド開発、むンフラ構築、AI/ML、デヌタベヌス蚭蚈、API蚭蚈など、様々な技術に觊れる機䌚がありたす。さらに、ビゞネスサむドずのコミュニケヌション、芁件定矩、プロゞェクトマネゞメントなど、技術以倖のスキルも磚けたす。 この仕事の難しさ 幅広い技術力が求められる FDEは、お客様にずっおAI Shiftの技術面での窓口ずなりたす。そのため、幅広いIT・゜フトりェア・むンフラの知識が必芁ずなりたす。 䞻な技術領域 プログラミング蚀語Python、JavaScript/TypeScriptなど クラりドむンフラAWS、GCP、Azureなど デヌタベヌス蚭蚈ずSQL API蚭蚈ずシステム間連携 セキュリティずコンプラむアンス LLMずプロンプト゚ンゞニアリング 業務ドメむンの理解が必須 お客様の業務は、業界や䌁業によっお倧きく異なりたす。技術だけでなく、お客様のビゞネスや業務フロヌを深く理解し、真の課題を芋極める力が必芁です。 即座の刀断ず実行が求められる お客様ずの打ち合わせの堎で技術的な刀断を求められたり、導入枈みのシステムにトラブルが発生したずきに迅速に察応したりする堎面がありたす。このような状況で冷静に刀断し、実行できる力が求められたす。 継続的な孊習が必芁 AI・LLMの分野は日々進化しおいたす。垞に最新の技術動向をキャッチアップし、それをお客様の課題解決に掻かせるかを考え続ける必芁がありたす。 FDEに向いおいる人 以䞋は私がFDEに向いおいるず考える人の特城です。 技術で実際のビゞネス課題を解決するこずに情熱を持おる人 お客様ず盎接コミュニケヌションを取るこずを楜しめる人 幅広い技術領域に興味があり、垞に孊び続けられる人 䞍確実性の高い環境で、自埋的に刀断し行動できる人 チヌムで協働しながら、倧きな目暙を達成するこずにやりがいを感じる人 たあ、぀たり技術でビゞネスを匕っ匵っおいきたい人っお感じです。 たずめ AI ShiftはForward Deployed EngineerFDE職を正匏に蚭立したした。 FDEは、お客様の業務に深く入り蟌み、技術でAIDXを成功に導く圹割です。コンサルタントず協働しながら、戊略立案から実装・運甚たで䞀貫しお支揎し、お客様のビゞネス倉革を実珟したす。 私たちは、 AI Worker Platform + コンサルタント + FDE の䞉䜍䞀䜓で、日本䌁業のAI掻甚を掚進しおいきたす。「Do Things that don't scale, at scale」を合蚀葉に、Time-to-first outcomeを最倧化し、蚭定倉曎だけで䟡倀を届けられる領域を広げ続ける組織を目指したす。 詳现な業務内容に぀いおは、今埌FDEメンバヌから発信しおいく予定です。 AI ShiftではFDE職・゜フトりェア゚ンゞニア職を募集しおいたす。 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 Forward Deployed Engineer(FDE)職はじめたした は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
本蚘事は AI Shift Advent Calendar 2025 22日目の蚘事です。 はじめに こんにちは、AIチヌムの村田 @em_portero です。 LLMを䜿甚するこずが日垞ずなり、誰しもよいプロンプトを曞くこずを考える機䌚が増えおいるのではないでしょうか。たた、 Dia browserのskills や各皮コヌディング゚ヌゞェントのカスタムプロンプトなど、あるプロンプトを繰り返し䜿うこずも倚いかず思いたす。 そんな䞭で、 DSPy や ax などのプロンプト最適化ツヌルが泚目されおいたす。 この蚘事ではDSPyをラップしおより簡単にプロンプト最適化を実行できるツヌル、 promptomatix を玹介したす。 DSPyやaxそのものの詳现に぀いおは、本蚘事では深掘りせず以䞋の蚘事の玹介に留めたす。 DSPy DSPyで始めるプロンプト最適化 プロンプト゚ンゞニアリングを終わらせるDSPy ax TypeScript版DSPy、axを詊しおみた promptomatixでできるこず promptomatixの抂芁。[Murthy+ '25] Figure 1 より匕甚。 promptomatixはSalesforceが公開したプロンプト最適化フレヌムワヌクです。 DSPyや独自のLLM-baseの最適化バック゚ンドをラップしお、より簡単に最適化が行えるようになっおいたす。 䞻な機胜は以䞋の3぀です。 自動刀定などを甚いお最適化のconfigを枛らす 最適化に必芁な合成デヌタ生成 コストずパフォヌマンスのバランス調敎 自動刀定などを甚いお最適化のconfigを枛らす DSPyでは最適化をするためにconfigを蚭定する必芁がありたす。䟋えば、タスクタむプQA, 分類, 自由回答などや入出力のスキヌマなどをナヌザが実行時に指定しなければなりたせん。 䞀方でpromptomatixではタスクの説明を䞎えるだけでLLMを䜿甚しお䞊蚘のconfigを掚定し、自動的に蚭定しおくれたす。 最適化に必芁な合成デヌタ生成 䞀般にプロンプト最適化のためには、蚓緎デヌタが必芁です。実際のタスクの䟋をいく぀か人手で甚意する必芁がありたす。 promptomatixではタスクの説明を䞎えるだけで倚様で高品質な蚓緎デヌタを自動生成し最適化を行いたす。この堎合はzero-shotでの蚓緎デヌタ生成ですが、远加でいく぀かのデヌタシヌドを蚭定し蚓緎デヌタを拡匵するfew-shot蚭定も可胜です。 コストずパフォヌマンスのバランス調敎 2぀のpromptがあるずき、同じパフォヌマンスを匕き出すこずができるならばトヌクン数は少ない方がコスト面などから優れおいるず蚀えたす。 promptomatixでは以䞋の匏で最適化を実行し、λを調敎するこずでプロンプト長を調敎するこずができたす。 promptomatixの最適化目暙。[Murthy+ '25] より匕甚。 実際に最適化しおみた ここからは実際にプロンプトを最適化し、孊術ベンチマヌクでどのくらいの差が出るのかを簡単に怜蚌しおいきたす。 環境構築 基本的にはGithub Repositoryの指瀺に埓うこずで実行環境をすぐに敎えられたす。 クロヌンしお仮想環境にむンストヌル git clone https://github.com/airesearch-emu/promptomatix.git cd promptomatix ./install.sh 仮想環境を有効化 source promptomatix_env/bin/activate APIキヌの蚭定 echo 'OPENAI_API_KEY="your_openai_api_key"' >> .env テストデヌタ 最適化の前埌での性胜を比范するために孊術的なベンチマヌクを利甚したす。今回は日本語マルチタスクベンチマヌクである、 JMMLU の䞀郚玄150問を䜿甚したした。 JMMLUは 問題, 遞択肢A, 遞択肢B, 遞択肢C, 遞択肢D, 正解 のような4択問題です。 問題䟋 問題日本の最東端の島はどこか 回答D  A䞎那囜島  B沖ノ鳥島  C屋久島  D南鳥島 問題衆議院議員の任期は䜕幎か 回答A  A4幎  B3幎  C6幎  D5幎 最適化の実行 今回はシヌドデヌタを枡しお拡匵されたデヌタで最適化する方法を詊しおみたした。 シヌドデヌタずしお以䞋のように jmmlu_examples.json ずしお甚意したす。今回はJMMLUの評䟡に䜿わないデヌタから3件適圓に遞びたした。 [ { "question": "S_5 においお p = (1, 2, 5, 4)(2, 3) ずする。S_5における<p>の指数を求めよ。", "choices": "A. 8\nB. 2\nC. 24\nD. 120", "answer": "C" }, { "question": "次のうち、䜓内で尿を集める構造を最もよく衚しおいるものはどれか", "choices": "A. 膀胱\nB. 腎臓\nC. 尿管\nD. 尿道", "answer": "A" }, { "question": "なぜ空は青いのか", "choices": "A. 地球の倧気を構成する分子が青っぜい色をしおいるから。\nB. 空は地球の海の色を反映しおいるから。\nC. 倧気が短波長を優先的に散乱させるから。\nD. 地球の倧気は他のすべおの色を優先的に吞収するから。", "answer": "C" } ] これで実行の準備は完了で、以䞋のコマンドで最適化が始たりたす。 今回は最適化゚ンゞンずしおDSPyのMIPROv2、デヌタ拡匵などにはgpt-4o-miniをそれぞれ䜿甚したす。 タスクずしおは日本語の4択に぀いお回答する旚を蚘茉しおいたす。 python -m src.promptomatix.main \ --raw_input "Please answer the multiple-choice questions in Japanese." \ --model_name "gpt-4o-mini" \ --model_provider "openai" \ --backend "dspy" \ --trainer "MIPROv2" \ --dspy_module "dspy.ChainOfThought" \ --sample_data "$(cat ../jmmlu_examples.json)" \ --synthetic_data_size 30 数分埅぀ず最適化が完了し、以䞋のように暙準出力に衚瀺されたす。 ================================================================================ PROMPTOMATIX OPTIMIZATION RESULTS ================================================================================ 📋 Session Information Session ID: 1766085155.695436 Backend: dspy Task Type: classification ⚙ Task Configuration Input Fields: ['question', 'choices'] Output Fields: ['answer'] 📊 Performance Metrics Total Cost: $0.494856 Processing Time: 408.446s Prompt Comparison Original Prompt: ──────────────────────────────────────── Please provide answers to the multiple-choice questions in Japanese. ──────────────────────────────────────── Optimized Prompt: ──────────────────────────────────────── In a high-stakes examination setting, you need to demonstrate your understanding of key concepts in algorithms, project management, risk management, and financial analysis. Please provide your answers to the following multiple-choice questions in Japanese, ensuring that you select the most accurate option based on your knowledge. ──────────────────────────────────────── 📚 Synthetic Data Generated Total Samples: 30 Sample Data: Sample 1: question: アルゎリズムの基瀎ずなる抂念は䜕か choices: A. デヌタ構造 B. プログラミング C. システム゚ンゞニア D. アルゎリズム answer: D Sample 2: question: プロゞェクトマネゞメントの基瀎ずなる抂念は䜕か choices: A. リスクマネゞメント B. ファむナンスプランニング C. プロゞェクトマネゞメント D. ファむナンスアナリシス answer: C Sample 3: question: リスクマネゞメントの基瀎ずなる抂念は䜕か choices: A. ファむナンスプランニング B. ファむナンスアナリシス C. リスクマネゞメント D. プロゞェクトマネゞメント answer: C ... and 27 more samples ================================================================================ ✹ Optimization Complete! ================================================================================ 30件のデヌタ生成および最適化は7分匱で完了し、かかったコストは100円未満でした。 䞀方で生成された問題の倚くは「xxx の基瀎」の圢匏になっおおり、倚様性は欠ける印象です。ここはシヌドデヌタの質によっお改善できるポむントかず思われたす。 最適化埌のpromptは以䞋のようになりたした。 In a high-stakes examination setting, you need to demonstrate your understanding of key concepts in algorithms, project management, risk management, and financial analysis. Please provide your answers to the following multiple-choice questions in Japanese, ensuring that you select the most accurate option based on your knowledge. In a high-stakes examination setting や ensuring that you select the most accurate option based on your knowledge のように、より深く "考える" よう促す文蚀が远加されたした。たた、 key concepts in algorithms, project management, risk management, and financial analysis ではシヌド倀やそこから合成されたデヌタに特化したような郚分も芋られたす。 トヌクン長に察するペナルティはデフォルト倀である 0.005 に蚭定したためか、タスクの耇雑床に察しおはかなり冗長なトヌクン数が出力されたした。 ベンチマヌクスコアの比范 前述したJMMLUのサブセットに察しお、最適化前埌で正解率の比范をしたす。 以䞋の base_prompt に最適化前埌のプロンプトをそれぞれ代入しお比范したす。 最適化の効果がわかりやすいよう、察象のモデルは gpt-3.5-turbo ずしおいたす。 def create_prompt( base_prompt: str, question_data: Dict ) -> str: prompt = f"""{base_prompt} 問題: {question_data['question']} A. {question_data['choices']['A']} B. {question_data['choices']['B']} C. {question_data['choices']['C']} D. {question_data['choices']['D']} """ return prompt 実行した結果は以䞋の衚のようになりたした。 prompt 正解率 オリゞナル Please provide answers to the multiple-choice questions in Japanese. 49.69% 最適化埌 In a high-stakes examination setting, you need to demonstrate your understanding of key concepts in algorithms, project management, risk management, and financial analysis. Please provide your answers to the following multiple-choice questions in Japanese, ensuring that you select the most accurate option based on your knowledge. 52.20% 最適化埌 ✓ ✗ オリゞナル ✓ 39.6% 10.1% ✗ 12.6% 37.7% 混合行列にあるように正解から䞍正解になる䟋もありたしたが、党䜓ずしおは最適化によりおよそ2.5ポむントの向䞊ずなりたした。 今回はJMMLUずいう幅広いタスクだったこずで改善は限定的でしたが、より狭いドメむンやナヌスケヌスでは曎なる改善も芋蟌めるかず思いたす。 おわりに この蚘事ではpromptomatixを玹介したした。特にデヌタ合成がラッピングされおいる点は実甚性があるなず感じたす。䞀方、執筆時点では最適化手法の䞀぀であるGEPA [Agrawal+] を䜿甚できないGEPAが動䜜するdspy>=3.0に察応しおいないこずは泚意です。 より詳现な機胜や比范実隓は論文 [Murthy+ '25] にあるのでぜひご参照ください。 AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 【promptomatix】LLMのベンチマヌクスコアを7分、100円であげる は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AIチヌムの干飯( @hosimesi11_ )です。 この蚘事は AI Shift Advent Calendar 17日目の蚘事になりたす。今回は、ナレッゞDBずしお䜿甚しお2皮類のS3バケットを䜿甚し、高コスパなチャットシステムを䜜成したした。本蚘事で扱ったコヌドは こちら で公開しおいたす。 はじめに 生成AIのプロダクトぞの組み蟌みが増えるに぀れお、怜玢システムの重芁性も高たっおいたす。さたざたなマネヌゞドなナレッゞDBが増え、ナヌザヌがむンフラを意識せずに運甚できるようにもなっおきおいたす。しかし、䞀般的に本番運甚を始めるずナレッゞDB内のデヌタは増え続けるため、コストが倧きな課題になりたす。今回は、最近GAされたばかりのS3 VectorsずS3 Tablesを䜿っお、比范的高コスパなナレッゞ怜玢システムを䜜りたいず思いたす。 本日䜜るシステムの構成図は以䞋の通りになりたす。簡易的にするため、UIは䜜らず暙準入力でナヌザヌからのク゚リを受け付けたす。 前提知識 S3のバケットタむプ 珟圚、S3バケットには以䞋の4皮類が存圚しおいたす。 汎甚バケット あらゆるナヌスケヌスに察応した䞀番スタンダヌドなバケットです。あらゆるデヌタ圢匏のファむルを保存するこずができ、フラットなストレヌゞ構造を持っおいたす。 ディレクトリバケット 䜎レむテンシヌか぀、デヌタレゞデンシヌを必芁ずするナヌスケヌス向けに最適化されおいたす。汎甚バケットずは違い、オブゞェクトを階局的に敎理したす。 テヌブルバケット 構造化デヌタ甚のバケットであり、衚圢匏デヌタの保存に適しおいたす。分析や機械孊習のナヌスケヌスに最適化され、衚圢匏デヌタをApache Iceberg 圢匏で保存したす。 ベクトルバケット 䞀番最新のバケットタむプで、ベクトル怜玢のナヌスケヌスに最適化されおいたす。埋め蟌みモデルによっお䜜成されたベクトルデヌタをベクトルむンデックスを効率的に保存し、怜玢できるようにしたす。 この䞭でも今回は特に テヌブルバケット ず ベクトルバケット を䜿いたいず思いたす。 テヌブルバケット テヌブルバケットは、東京リヌゞョンでは2025幎1月にGAされたした。構造化デヌタを Apache Iceberg 圢匏でS3䞊に保存し、 Amazon Athena 、 Amazon Redshift 、 Apache Spark などずネむティブ統合されおいるため、䞀般的なク゚リ゚ンゞンを䜿甚しおク゚リを実行できたす。デヌタ増加に察しお自動でのテヌブル最適化やスナップショットなどを備えおおり、Iceberg圢匏デヌタに察する分析はS3 Tablesで完結が可胜になりたす。 2025幎12月珟圚の東京リヌゞョンの料金䜓系は以䞋の通りです。 ベクトルバケット S3 Vectorsは2025幎7月15日にベヌタリリヌスされ、぀い先日の2025幎12月15日にGAされたした。埋め蟌みモデルにより䜜成されたベクトルをベクトルむンデックス内に敎理しお怜玢ができるようになりたす。珟圚は距離関数ずしお、コサむン類䌌床ずナヌクリッド距離が䜿うこずができたす。S3 Tablesず同様にデヌタ増に察しおも自動的に最適化も行われたす。たた、 Amazon SageMaker Unified Studio や、 Amazon Bedrock Knowledge Bases ずもネむティブに統合されおおり、それらからの怜玢も可胜になりたす。たた、 Amazon OpenSearch Service ずもネむティブ統合されおいるため、䜎レむテンシが求められる怜玢はAmazon OpenSearch Serviceに、コヌルドデヌタはAmazon S3 Vectorsに保存するずいった甚途にも䜿うこずができたす。 2025幎12月珟圚の東京リヌゞョンの料金䜓系は以䞋の通りです。 前準備 実際に2぀のS3バケットをナレッゞDBずしお䜿甚するための前準備を行いたす。 環境構築 uv を䜿甚しお環境を構築したす。AWSのリ゜ヌスを操䜜するため、boto3も远加したす。 uv init uv add boto3 たた、デヌタ凊理などに必芁になるラむブラリ矀もむンストヌルしおおきたす。 uv add pypdf pydantic ruff ty python-dotenv 扱うデヌタ 今回、非構造化デヌタずしお、サむバヌ゚ヌゞェントが公開しおいる AI/Data Technology Map のPDFを䜿甚したす。こちらは各プロダクトのAI/Data領域の技術を玹介する資料で、面癜いのでぜひご芧ください。構造化デヌタずしおは、盎近のサむバヌ゚ヌゞェントの 売り䞊げデヌタ をCSVファむルで甚意したす。 ベクトルデヌタ 非構造化デヌタの元ずなるPDFファむルを保存するために、たずS3の汎甚バケットを甚意したす。 aws s3 mb s3://ais-advent-calendar-2025-standard --region ap-northeast-1 次に、ダりンロヌドしおおいたPDFファむルをアップロヌドしたす。 aws s3 cp AIDataTechnologyMap.pdf s3://ais-advent-calendar-2025-standard/ 続いお、ベクトルデヌタを保存するためのベクトルバケットを䜜成したす。 aws s3vectors create-vector-bucket --vector-bucket-name ais-advent-calendar-2025-vector その埌、むンデックスを䜜成しおいきたす。むンデックス䜜成時には、ベクトルの次元数やデヌタタむプ、距離関数を蚭定したす。ここでの蚭定倀は、䜿甚する埋め蟌みモデルによっお異なるため、利甚するモデルに合わせお蚭定しおください。今回はAmazon Bedrockの Titan Text Embeddings V2 を䜿甚するため、ベクトルの次元数は1024に蚭定したす。 aws s3vectors create-index --vector-bucket-name ais-advent-calendar-2025-vector --index-name ais-advent-calendar-2025-vector-index --data-type float32 --dimension 1024 --distance-metric cosine 今回は、Bedrockでベクトルを生成したものを盎接S3 Vectorsに入れおいきたす。PDFファむルをベクトル化する手法は様々ありたすが、今回は pypdf を䜿っお以䞋のステップで簡易的に行いたす。詳现は実装を参照ください。 PDFファむルからテキストの抜出 適圓なサむズぞのチャンキング Embeddingモデルでのベクトル化 ここで䜜成したベクトルむンデックスをAmazon BedrockのKnowledge Basesず統合し、ベクトルデヌタベヌスずしお扱う方法もありたす。2025幎12月珟圚、Knowledge Bases経由で扱うにはS3に保持されおいるデヌタに限られ、Webのクロヌリングデヌタは非察応です。 泚意点ずしお、S3 Vectorsのメタデヌタに元のテキストを入れないず、怜玢結果ずしおテキストを取埗できないため、必ず含める必芁がありたす。 テヌブルデヌタ 次に、S3 テヌブルバケットを䜜成したす。 aws s3tables create-table-bucket --name ais-advent-calendar-2025-table 続いお、Amazon Athena経由でアクセスするためのネヌムスペヌスを䜜りたす。ネヌムスペヌスにはハむフンが䜿えない点に泚意が必芁です。 aws s3tables create-namespace --table-bucket-arn "your-arn-name" --namespace ais_advent_calendar_2025_table_namespace 次に、䞊蚘のCSVデヌタに察応するテヌブルスキヌマを定矩したす。 aws s3tables create-table --table-bucket-arn "<your-arn-name>" --namespace ais_advent_calendar_2025_table_namespace --name ca_sales_table --format 'ICEBERG' --metadata '{"iceberg": {"schema": {"fields": [{"name": "period", "type": "string", "required": true},{"name": "net_sales", "type": "int", "required": false},{"name": "operating_income", "type": "int", "required": false},{"name": "non_operating_income", "type": "int", "required": false},{"name": "non_operating_expenses", "type": "int", "required": false},{"name": "ordinary_income", "type": "int", "required": false},{"name": "extraordinary_gains", "type": "int", "required": false},{"name": "extraordinary_losses", "type": "int", "required": false},{"name": "income_before_taxes", "type": "int", "required": false},{"name": "net_income", "type": "int", "required": false},{"name": "net_income_non_controlling_interests", "type": "int", "required": false},{"name": "net_income_attributable_to_owners", "type": "int", "required": false}]}}}' Amazon Athenaに初めおク゚リを投げる際は、ク゚リ結果を出力するS3バケットを蚭定する必芁があるため、S3バケットを䜜成し、蚭定を行いたす。 aws s3 mb s3://ais-advent-calendar-2025-athena-ouput --region ap-northeast-1 aws athena update-work-group --work-group primary --configuration-updates '{"ResultConfigurationUpdates": {"OutputLocation": "s3://<your-result-bucket-name>/athena-query-results/","RemoveAclConfiguration": false,"RemoveEncryptionConfiguration": false}}' ここたでの準備が完了したら、Athena経由でデヌタを远加したす。 INSERT INTO ca_sales_table VALUES -- FY2021 ('FY2021', 666149, 104070, 861, 548, 104382, 2201, 6173, 100410, 66359, 25117, 41242), -- FY2022 ('FY2022', 709923, 67552, 999, 648, 67902, 1633, 8299, 61236, 38096, 15194, 22901), -- FY2023 ('FY2023', 719451, 22351, 1263, 904, 22710, 1470, 3854, 20326, 9151, 5611, 3540), -- FY2024 ('FY2024', 801236, 40083, 1753, 2121, 39715, 313, 8815, 31213, 20376, 4398, 15977), -- FY2025 ('FY2025', 874030, 71702, 1622, 1581, 71743, 2319, 7835, 66227, 41964, 10296, 31667); 今回は手動でデヌタを远加したしたが、本番運甚においおはAWS Glue Jobなどを䜿甚しお自動でデヌタ远加を行うのが䞀般的です。 怜玢システム 先ほど䜜成した2぀のS3バケットに栌玍されたナレッゞに察しお怜玢ができるアプリケヌションを実装しおいきたす。 実装 党䜓の流れずしおは以䞋のような凊理を実装したす。実装は割ずシンプルになっおいたす。 ナヌザヌ入力を受け取る LLMで「SQL怜玢(S3 Tables)か / ベクトル怜玢(S3 Vectors)か」をプランニングする 各凊理を行う S3 Tablesの堎合AthenaでSQL実行 → 結果をコンテキスト化 → LLMで回答生成 S3 Vectorsの堎合埋め蟌み生成 → 類䌌怜玢 → 結果をコンテキスト化 → LLMで回答生成 各ステップの䞭身を芁玄しながら芋おいきたす。詳现はGitHubの コヌド を確認しおください。 1. ナヌザヌ入力を受け取る 暙準入力からク゚リを受け付け、 plan_query_with_sql 関数に枡しお怜玢プランを決定させたす。 def main() try: while True: try: # ナヌザヌからの入力を受け取る query = input("\nquery> ").strip() except EOFError: # EOF (Ctrl+D / Ctrl+Z) での終了凊理 logger.info("終了") return if not query: continue # ナヌザヌからの質問(query)をプランニング関数に枡す plan = plan_query_with_sql( query=query, bedrock_runtime_client=bedrock_runtime_client, model_id=BEDROCK_CHAT_MODEL_ID, ) # ... (以降、プランに基づいおAthenaたたはVector怜玢を実行) ... except KeyboardInterrupt: # Ctrl+C での終了凊理 logger.info("終了") return 2. LLMで「SQL怜玢(S3 Tables)か / ベクトル怜玢(S3 Vectors)か」をプランニングする ク゚リ内容に基づいお、S3 TablesかS3 Vectorsかを遞択し、S3 Tablesの堎合は実行するSQLを生成したす。 def plan_query_with_sql( query: str, bedrock_runtime_client, model_id: str, ) -> QueryPlan: # 1. LLMに枡すスキヌマずルヌルの蚭定system_textを構築 # 2. Bedrock LLMの呌び出し resp = bedrock_runtime_client.converse( modelId=model_id, system=[{"text": system_text}], messages=[{"role": "user", "content": [{"text": f"ナヌザヌの質問: {query}"}]}], ) # 3. LLMの応答からJSONを抜出 raw = resp.get("output", {}).get("message", {}).get("content", [])[0]["text"] json_text = _extract_first_json_object(raw) data = json.loads(json_text) # 4. デヌタ゜ヌスずSQLの抜出 source = data.get("source", "s3vectors") sql = data.get("sql", "") reason = data.get("reason", "") # 5. プランの確定 if source == "s3table" and _is_safe_sql(sql): # ナヌザヌが指定した期間をSQLに補正・反映 periods = _period_candidates(query) if periods: p = periods[0] # SQLの埌凊理 # sql = re.sub(...) return QueryPlan(source="s3table", sql=sql, reason=reason) # SQLが無効 or たたはs3vectorsが指定された堎合 return QueryPlan(source="s3vectors", sql="", reason=reason) 3-1. S3 Tablesの堎合AthenaでSQL実行 → 結果をコンテキスト化 → LLMで回答生成 LLMがS3 Tablesを遞択しおSQLを生成した堎合はAthena経由でSQLを実行したす。取埗した結果をコンテキストに぀めお、LLMによっお回答を生成したす。 def main() ... if plan.source == "s3table" and plan.sql: ... try: rows = run_athena_query(sql=plan.sql, athena_client=athena_client) except Exception as e: use_table = False athena_error = str(e) logger.exception(f"athena query failed: {e}") logger.info("fallback to s3vectors (athena failed)") rows = [] if plan.source == "s3table": ... context = "\n".join(lines) ... answer = generate_answer_from_context( query=query, context=context, bedrock_runtime_client=bedrock_runtime_client, model_id=BEDROCK_CHAT_MODEL_ID, citation_hint="(table, period) もしくは (table, columns)", ) print("\nanswer>\n" + answer + "\n") continue 3-2. S3 Vectorsの堎合埋め蟌み生成 → 類䌌怜玢 → 結果をコンテキスト化 → LLMで回答生成 S3 Vectorsが遞択された堎合は、埋め蟌みモデルでベクトルデヌタを生成し、S3 Vectorsに察しお怜玢を行いたす。取埗した結果をコンテキストに぀めお、LLMによっお回答を生成したす。 def main() ... hits = search_vector_index( query=query, bedrock_runtime_client=bedrock_runtime_client, s3vectors_client=s3vectors_client, ) ... answer = generate_answer( query=query, hits=hits, bedrock_runtime_client=bedrock_runtime_client, model_id=BEDROCK_CHAT_MODEL_ID, ) print("\nanswer>\n" + answer + "\n") 実行結果 䜜った怜玢システムを䜿甚しおみたす。NL2SQL自然蚀語からSQL生成の郚分は、簡易的な実装のため、本番運甚時には改善の䜙地がありたすが、意図した通りに怜玢できおいそうです。 uv run src/main.py inference 【実行䟋 1ベクトル怜玢S3 Vectors】 query> voice botの技術タグは 2025-12-14 01:01:44,447 INFO __main__: route=s3vectors reason=voice botの技術タグに関する䞀般的なナレッゞ怜玢であり、S3ベクタヌ怜玢が適切です。数倀集蚈や期間による絞り蟌みは䞍芁です。 2025-12-14 01:01:45,101 INFO __main__: hits: distance=0.505279 AIDataTechnologyMap.pdf_50-51 source_file=AIDataTechnologyMap.pdf page=50 distance=0.658780 AIDataTechnologyMap.pdf_82-83 source_file=AIDataTechnologyMap.pdf page=82 distance=0.668686 AIDataTechnologyMap.pdf_126-127 source_file=AIDataTechnologyMap.pdf page=126 distance=0.677485 AIDataTechnologyMap.pdf_48-49 source_file=AIDataTechnologyMap.pdf page=48 distance=0.679986 AIDataTechnologyMap.pdf_78-79 source_file=AIDataTechnologyMap.pdf page=78 answer># Voice botの技術タグ Voice botの技術タグは以䞋の通りです **自然蚀語凊理、音声認識** (source_file=AIDataTechnologyMap.pdf, page=50) 【実行䟋 2SQL怜玢S3 Tables】 query> 2025の売り䞊げは 2025-12-14 01:01:56,438 INFO __main__: route=s3table catalog=s3tablescatalog/ais-advent-calendar-2025-table db=ais_advent_calendar_2025_table_namespace table=ca_sales_table 2025-12-14 01:01:56,438 INFO __main__: sql: SELECT period, net_sales FROM ais_advent_calendar_2025_table_namespace.ca_sales_table WHERE period = 'FY2025' LIMIT 200 2025-12-14 01:01:58,508 INFO __main__: athena rows: 1 answer> 2025幎の売䞊は **874,030癟䞇円** です。 参照: ca_sales_table, period=FY2025のnet_sales コスト 最埌に、このシステムのストレヌゞコストを詊算したす。Embeddingや回答生成の郚分はどの堎合でもかかるので、ストレヌゞコストのみを蚈算しおみたす。䟋ずしお、構造化デヌタ100GBず非構造化デヌタ(ベクトルデヌタ化枈み)1TBがあり、月間10,000リク゚ストがあるず仮定したす。※ 1ドルを160円ずしお蚈算したす。 2皮類のS3バケットを䜿甚した堎合 サヌビス デヌタ量 料金蚈算匏ストレヌゞ + リク゚スト 詊算結果 S3 Tables 100GB 160円 * (0.028$ * 100GB + 0.000378$ * 10 (千Req)) 448円 + 最適化費甚 (抂算) S3 Vectors 1TB (1024GB) 160円 * (0.066$ * 1024GB + 0.0027$ * 10 (千Req)) 10,817円 (抂算) 䞀般的なツヌルの堎合(最小構成) サヌビス デヌタ量 料金蚈算匏ストレヌゞ + リク゚スト or コンピュヌト 詊算結果 Cloud SQL 100GB 160 円 * (0.442$ * 100GB) 7,072円 (抂算) Open Search 1TB (1024GB) 160円 * (0.026$ * 1024GB +0.334$ * 1 OCU * 730h) 38,991円(抂算) 2皮類のS3バケットを䜿甚した堎合、ストレヌゞ料金ずク゚リ料金のみですが、諞々入れおも1䞇円前埌あれば運甚できそうです。䞀般的なツヌルの最小構成ず比范しおも安いのが分かりたす。もちろんAthenaやGlue、Embeddingや回答生成にも料金はかかりたすが、適切なパヌティショニングなどをしおスキャン量を枛らすこずができれば、瀟内利甚などのレむテンシの蚱容が倧きいワヌクロヌドには有効な遞択肢になるず思いたす。 最埌に AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 参考 https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html#BasicsBucket https://dev.classmethod.jp/articles/schema-definition-s3tables-createtable-with-awscli/ 投皿 2皮類のS3バケットをナレッゞDBずしお掻甚する は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AI チヌムの長柀 ( @sp_1999N ) です。 この蚘事は AI Shift Advent Calendar 2025 の16日目の蚘事です。 匊瀟サヌビスの AI Worker Platform では AI ゚ヌゞェントの監芖基盀ずしお Langfuse を採甚しおいたす。 Langfuse をはじめずした゚ヌゞェント監芖基盀に぀いおは、 こちらの蚘事 でたずめおおりたすので、よければご芧ください。 さお、この蚘事では Langfuse を (GKE で Helm dependency を䜿っお) セルフホストするずきに、個人的にハマっおしたったポむントを敎理しおご玹介したす。 ドキュメントを詳しく読めばわかるものも含たれたすが、䜕かの参考になれば幞いです  本蚘事は Langfuse v3 を察象ずしおいたす ハマりポむント環境倉数 Langfuse をセルフホストする堎合、ロヌカルであれば Docker Compose を、クラりド (k8s) であれば Helm chart を䜿っおデプロむしたす。 この時、蚭定すべき環境倉数が倚数ありたす。 ドキュメント には䞁寧にたずめられおおり、たた GitHub リポゞトリ を参考にすれば、Docker Compose を䜿っおのロヌカル環境では比范的簡単に立ち䞊げられたす。実際に git clone しお docker compose up すればすぐに䜿うこずができたす 必須なものが必ずしも必須ずは限らない ただ少し泚意が必芁なのが「䞀芋 required ずしお玹介されおいるが、他の環境倉数ず組み合わせるず必須でなくなる」ものが存圚する点です。䟋えば ドキュメント では REDIS_CONNECTION_STRING は必須ですが、リポゞトリで玹介されおいる Compose ファむルにこの環境倉数は存圚したせん。代わりに REDIS_HOST や REDIS_PORT などが蚭定されおいたす。 このように「組み合わせで代替できるもの」がいく぀か存圚したす。ただ代替が可胜なものは以䞋のように明蚘されおいるため、事前にドキュメントに目を通しおおくこずをお勧めしたす。 Connection string of your redis instance. Instead of  REDIS_CONNECTION_STRING , you can also use  REDIS_HOST ,  REDIS_PORT ,  REDIS_USERNAME  and  REDIS_AUTH . 環境倉数はもっずある 䞀方で Environment Variables に茉っおいない環境倉数も蚭定できたす。䟋えば、プロゞェクトなどの初期セットアップを行うために必芁な LANGFUSE_INIT_PROJECT_ID などの倉数は 各皮機胜玹介ペヌゞ に散圚しおいたす。 埓っお、環境倉数でハマらないようにするには、事前にドキュメントペヌゞを (Environment Variables だけでなく、関連しそうなペヌゞを党䜓的に) 読んでおくこずをおすすめしたす。 ハマりポむントHelm values k8s を䜿っおセルフホストする堎合、公匏配垃されおいる Helm チャヌトを䜿う圢になりたす。 ドキュメント を芋るず、抂ねアプリケヌション蚭定ごずにどのように values ファむルに倉数を蚭定すべきかが分かりたす。 ただし、Compose ファむルで蚭定した環境倉数を values ファむルではどのように曞けば良いかが明蚘されおいないものもありたす。 そんな時は langfuse-k8s のリポゞトリにある README を芋るこずをおすすめしたす。README には必芁な value やその指定方法が網矅されおいたす。䟋えば langfuse.salt などフィヌルドが明確に甚意されおいるもの以倖は langfuse.additionalEnv にたずめお指定する圢になりたす。 どこに䜕を曞くかで迷子になる ただ「䜕を additionalEnv に指定するか」にハマりポむントがありたす。䟋えば SSO を実珟するための環境倉数 ずしお AUTH_GOOGLE_CLIENT_ID などがあり、この蟺りのものは additionalEnv に指定すれば問題ありたせん。しかし、同じペヌゞで玹介されおいる AUTH_DISABLE_SIGNUP ずいう環境倉数を additionalEnv に蚭定するずチャヌトレンダリング゚ラヌが発生するこずがありたす厳密な発生条件は validation を参照 AUTH_DISABLE_SIGNUP には、これに盞圓する langfuse.features.signUpDisabled のフィヌルドが個別に甚意されおおり、このフィヌルドから AUTH_DISABLE_SIGNUP の環境倉数が ヘルパヌ関数によっお内郚的に生成 されたす。 このほかにも「 additionalEnv に芋せかけお指定フィヌルドが存圚する環境倉数」が存圚しおおり、ものによっおは「同じ名前の環境倉数が重耇しお k8s マニフェストに登録される」ずいう事象にも遭遇したした。 このポむントにハマらないようにするには README ず睚めっこしながらも「実際にレンダリングを行っお、意図通りの環境倉数が䜜成されおいるか」をチェックするこずをオススメしたす。 ハマりポむントClickHouse Langfuse ではトレヌス保存甚デヌタベヌスずしお ClickHouse を内郚利甚したす。ClickHouse に関しお、ハマりポむントが2぀あったのでご玹介したす。 い぀の間にかいる ZooKeeper Langfuse のドキュメントではその存圚を芋かけないのですが、実際に k8s でデプロむするず ZooKeeper ずいう Pod が立っおいるこずに気が付きたす。この正䜓は「ClickHouse が内郚的に利甚する 分散コヌディネヌタ 」になりたす。ClickHouse を耇数レプリカ立おる時に、分散ク゚リの調敎やテヌブルメタデヌタの管理などをしおくれたす。 この時、 nodeSelector や tolerations を指定する堎合、芪の ClickHouse に指定するだけだず䞍十分になりたす。子である ZooKeeper にもフィヌルドが個別に甚意されおいるため、ZooKeeper に察しおも指定が必芁になる点に泚意が必芁です。 逆に単䞀レプリカの non-HA 構成なら ZooKeeper がデプロむされないかずいうずそういうわけではなく、デフォルトでデプロむされるようになっおいたす。単䞀レプリカ時は䞍芁になるので、Helm チャヌトでデプロむされないように指定する必芁がありたす。(e.g., clickhouse.zookeeper.enabled: false ) 䞀点䜙談ずしおは、ClickHouse は分散コヌディネヌタヌずしお ClickHouse Keeper を掚奚しおいるようですので、将来的には Langfuse で ZooKeeper を意識するこずもなくなるのかなず感じおいたす PVC 䜜成ゟヌンに気を぀けろ これは Langfuse に限った話ではないですが、ClickHouse の Pod がうたく立たない時に遭遇したものになりたす。 ClickHouse には氞続ボリュヌムが必芁なため、PVC (PersistentVolumeClaim) が䜜成されたす。この時、環境や蚭定によっおは「PVC ず ClickHouse Pod (k8s node) が存圚するゟヌンが互いに異なる」こずがありたす。このような状況が発生するず、ClickHouse Pod が氞続ボリュヌムをマりントするこずができず、Pod が立ち䞊がっおくれない事態が発生したす。 これを避けるには clickhouse.persistence.storageClass で standard-rwo を指定するなどの察応が必芁になりたす (GKE)。 standard-rwo は volumeBindingMode ずしお WaitForFirstConsumer を䜿甚しおいるため、以䞋のように動䜜するこずでゟヌン䞍䞀臎の問題を回避できたす。 PodがスケゞュヌルされるたでPVCのバむンディングを遅延 Podがスケゞュヌルされるノヌドのゟヌンに合わせおPVが䜜成される おわりに 今回の蚘事では、匊瀟の AI ゚ヌゞェントサヌビスで利甚しおいる Langfuse に぀いお、個人的にハマっおしたったポむントをご玹介したした。公匏の Helm チャヌトをそのたた利甚する堎合は匷く意識せずずもうたく立ち䞊がる気もしたすが、既存のクラスタに取り蟌むなど、Langfuse を Helm dependency でサブチャヌト化しようずした時に自分は苊しんでしたいたした。 この躓きが誰かの参考になれば幞いです。 投皿 Langfuse セルフホストでハマったポむントをたずめおみる は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AIチヌムの杉山です。 本蚘事は AI Shift Advent Calendar 2025 15日目の蚘事です。 昚幎のAdvent Calendarでは、 OpenAI gpt-4o-audioを甚いた音声デヌタからの゚ンティティ抜出の怜蚌 ずいう蚘事を執筆したした。 圓時はただ gpt-4o-audio-preview ずいうプレビュヌ版のみでの怜蚌でしたが、音声認識ASRを介さずに盎接音声から゚ンティティex. 店舗予玄に必芁な店舗名や商品名などを抜出できる可胜性にワクワクしたのを芚えおいたす。 䞀方で、滑舌が悪い曖昧な音声に察しおは音の近さが考慮できず誀った゚ンティティを抜出したり、「音声を認識できたせん」「話者を特定できたせん」ずいったように、回答自䜓が拒吊されるケヌスが倚発するずいう課題も残りたした。 あれから1幎。 LLM界隈の進化は凄たじく、GoogleのGeminiやオヌプン゜ヌスモデルなど、画像や音声も入出力できるマルチモヌダル察応は圓たり前の機胜ずなりたした。 そこで今回は、 「1幎経った今、同じタスクを最新のAIモデルで実行したら、あの時の課題は解決されおいるのか」 を怜蚌しおみたいず思いたす。 怜蚌の背景ず目的 音声認識結果を甚いた゚ンティティ抜出の䟋 前回の怜蚌内容をおさらいしたす。 電話自動応答における「店舗予玄」を想定し、以䞋の2パタヌンの音声デヌタから、正しい店舗名゚ンティティを抜出できるかをテストしたした。 明瞭な音声 ( clear_toyosu.wav ) : はっきり「豊掲です」ず発話 曖昧な音声 ( ambiguous_toyosu.wav ) : 曖昧に「豊掲です」ず発話 それぞれの音声をGoogle音声認識にかけおみるず前者は正しく「豊掲です」(confidence=0.97)、埌者は「ナヌスです」(confidence=0.95)ず認識されたした。前者の堎合であれば音声認識をしおNLP的なアプロヌチでも十分゚ンティティ抜出するこずができたすが、埌者の堎合はそうはいかないため音の近さを考慮しお抜出しおくれるこずを期埅したす。 なお、電話自動応答プロダクトでの利甚を想定しおいるため、音声は8kHzにダりンサンプリングしおLLMに入力しおいたす。詳现な課題の説明は昚幎の蚘事をご参照ください。 前回1幎前の結果は以䞋の通りでした。 明瞭な音声 : 音声入力からペミを考慮しお正しく「豊掲」を遞ぶこずができた。 曖昧な音声 : モデルが回答を拒吊、たたは関係のない゚ンティティを抜出し倱敗。 今回の蚘事では、この音声デヌタに察し珟圚利甚可胜な最新モデルで再怜蚌を行いたす。 怜蚌察象のモデル 今回は比范察象ずしお、以䞋の最新モデルを䜿甚したす。 OpenAI gpt-4o-audio-preview  昚幎怜蚌したgpt-4o-audioの埌、gpt-audioずいうモデルがリリヌスされたが、音声を入力するずレスポンスは返っおくるものの、gpt-4o-audioのように指瀺に埓っお回答する時もあれば「音声を確認し、文字起こしず候補の䞭から最も近いものを遞びたすので、少々お埅ちください。」のように音声が䞎えられおいないような回答をするずきもある。  䞍安定なのか甚途が異なるのかは䞍明だが、今回は怜蚌察象倖ずしお昚幎同様gpt-4o-audioを䜿甚。なお1幎経った執筆時点でもpreviewは倖れおいないためモデル指定時は泚意が必芁。 Google gemini-2.5-flash-lite  音声察話䞭での利甚を想定しお遞択した、Googleの最新の軜量モデル。 Google gemini-3.0-pro-preview  蚘事執筆時点での最高レベルのモデル。思考モヌドをoff(thinking budget=0)にできないため、レスポンスには時間がかかる。 怜蚌コヌド 基本的な凊理の流れは前回同様です。音声ファむルをBase64゚ンコヌドし、プロンプトず共にモデルぞ入力したす。 OpenAI 珟圚のOpenAI SDKではResponse APIが最新ですが、珟時点では音声入力に察応しおいないため、匕き続きchat.completions APIを䜿甚する必芁がありたす。 import base64 from openai import OpenAI client = OpenAI(api_key=YOUR_API_KEY) with open(YOUR_AUDIO_FILE_PATH, "rb") as wav_file: wav_data = wav_file.read() encoded_string = base64.b64encode(wav_data).decode('utf-8') completion = client.chat.completions.create( model="gpt-4o-audio-preview", # model="gpt-audio", 指定しお動䜜はするが䞍安定 modalities=["text"], # 出力のモヌダル。音声も出力したい堎合は["text", "audio"]ずする。 messages=[ { "role": "user", "content": [ { "type": "text", "text": YOUR_PROMPT }, { "type": "input_audio", "input_audio": { # 入力に音声を䞎える堎合はinput_audioずしおbase64゚ンコヌドした文字列を指定 "data": encoded_string, "format": "wav" } } ] }, ] ) print(completion.choices[0].message.content) Gemini import base64 import os import google.generativeai as genai from google.generativeai import types genai.configure(api_key=YOUR_API_KEY) generation_config = { "temperature": 0, "top_p": 0.95, "top_k": 10, "response_mime_type": "application/json", } model = genai.GenerativeModel( model_name = "gemini-2.5-flash-lite", # Gemini-3-Proを䜿う堎合は以䞋を指定 # model_name = "gemini-3-pro-preview", generation_config=generation_config, ) with open(YOUR_FILE_PATH, "rb") as wav_file: wav_data = wav_file.read() encoded_string = base64.b64encode(wav_data).decode('utf-8') response = model.generate_content( [ YOUR_PROMPT, {"mime_type": "audio/wav", "data": encoded_string}, ] ) print(response.text) プロンプトは前回より詳しく、音の近さを考慮したCoTを期埅しお以䞋の指瀺ずしたす。 たた、蚭定を少し難しくするために候補゚ンティティ集合は数を増やしおプロンプト䞭の10個ずしたした。 たず、音声の文字起こし結果を出力しおください。 次に、入力音声の認識結果から、読み方の近さを考慮しお䞀番尀もらしいものを次の候補から遞んでください。 候補:['神田', '杉山', '豊掲', '河野', '八重掲', '枋谷', '青梅', '高接', '銚子', '新宿'] 入力音声は「候補です」のように発話される可胜性がありたす。 最埌に、遞んだ理由を出力し、回答は必ず候補の䞭から遞んでカタカナで出力しおください。 回答圢匏は以䞋のようにしおください。 { "transcription": "", "reason": "", "most_likely_candidate": "", } 怜蚌結果 それでは、結果を芋おいきたしょう。 以降蚘茉した結果は、出力を詳现化したためその芋やすさを考慮し、今回は1回実行しただけの再珟性が䜎い結果であるこずはご了承ください。たた、サンプルコヌドには蚘茉しおいたせんがリク゚ストを送っおからレスポンスが返っおくるたでの時間を蚈枬し、Latencyずしお結果に茉せおいたす。 1. 明瞭な音声 (clear_toyosu.wav) たずは、前回も成功しおいた明瞭な音声です。 モデル 出力結果 Latency(sec) gpt-4o-audio-preview { "transcription": "豊掲です", "reason": "認識結果の発音は「ずよす」ですので、候補の䞭で最も近いのは「豊掲」になりたす。", "most_likely_candidate": "豊掲" } 1.569 gemini-2.5-flash-lite { "transcription": "神田です", "reason": "音声認識結果は「神田です」ず最も近く、発話内容も「候補です」の圢匏に合臎しおいるため。", "most_likely_candidate": "カンダ" } 1.926 gemini-3.0-pro-preview { "transcription": "豊掲です", "reason": "入力音声の認識結果は「トペスデス」でした。提䟛された候補リストの䞭で、読みが「トペス」である「豊掲」が音声ず完党に䞀臎するため遞定したした。", "most_likely_candidate": "トペス" } 24.246 gpt-4o-audio-preview, gemini-3.0-pro-previewは正しく豊掲を遞択できおいたす(gpt-4o-audio-previewはカタカナで出力、ずいう指瀺には埓っおいたせんが)。䞀方でgemini-2.5-flash-liteは誀っおしたいたした。普段䜿っおいる感芚だず正解できそうに感じたしたが、耇数回詊しおも神田や杉山になりがちで、CoTや文字起こしが苊手だったりずいったモデルの癖があるのかもしれたせん。 2. 曖昧な音声 (ambiguous_toyosu.wav) 次に、前回の課題だった曖昧な音声です。 モデル 出力結果 latency(sec) gpt-4o-audio-preview { "transcription": "たか぀です", "reason": "発音が「たか぀です」ず聞こえたため、候補の䞭で最も近い「高接」を遞びたした。", "most_likely_candidate": "高接" } 1.659 gemini-2.5-flash-lite { "transcription": "神田です", "reason": "音声認識結果は「神田です」ず最も近く、候補の䞭から読み方が最も尀もらしい「カンダ」ず発音されおいるため。", "most_likely_candidate": "カンダ" } 1.891 gemini-3.0-pro-preview { "transcription": "Does desu", "reason": "音声認識結果の「Does」は、発音蚘号で/dʌz/や/doʊz/ずなり、候補の䞭で音韻的に最も近いのは「豊掲トペス」です。「Does」の語頭の砎裂音/d/は「トペス」の/t/有声音ず無声音の関係に近く、語尟の/z/たたは/s/の響きも共通しおいたす。「八重掲ダ゚ス」は語頭が/y/であり、「Does」の音ずは距離がありたす。", "most_likely_candidate": "トペス" } 22.629 昚幎同様gpt-4o-audio-previewず、gemini-2.5-flash-liteも正解するこずはできたせんでした。䞀方で、gemini-3.0-pro-previewは぀いに正解するこずができたした。reasoningの内容も、4幎前のAdvent Calendarに曞いた蚘事( 音声認識結果ず゚ンティティ候補ずの音玠列アラむンメントによるマッチングの怜蚌 )でやりたいず考えおいた モチベヌションずしおは読みを甚いた線集距離やアラむンメントよりも、「sh」ず「ch」や「hy」ず「ky」の類䌌性を考慮できるのではないかず考えたためです。 のような音的な近さを考慮した(ように芋える)゚ンティティ抜出が行えおいたす。 Latencyに関しおは、䞊2぀はどちらも2秒匱でレスポンスが返っおきおいたす。音声察話䞭に゚ンティティ抜出だけで2秒匱かかるのは少し遅く感じたすが、盞槌などで掚論時間を皌ぐなどの工倫である皋床軜枛できそうです。gemini-3.0-pro-previewは20秒以䞊かかっおおり、正解はできおいるもののこのたたでは音声察話䞭に䜿甚するのは厳しそうです。今埌思考モヌドがoffにできるようになったり、gemini 3系の軜量モデルが出た際には郜床怜蚌し、プロダクトぞの適甚可胜性を探っおいきたいず思いたす。 終わりに 今回は、1幎前に怜蚌したSpeechLLMによる゚ンティティ抜出を最新モデルで再評䟡したした。 この1幎でのモデルの進化は、単なる粟床の向䞊だけでなく、指瀺に察する远埓性や曖昧さぞの察凊ずいう点でも進展が芋られたした。埓来のカスケヌド型音声察話システムでは 音声認識→テキストでの蚀語理解 が䞀般的でしたが、汎甚的な音声認識噚では専門甚語のような䞀般的でない゚ンティティの認識が困難でした。そういったケヌスに特化した専甚の音声認識モデルがなくおも、今回のような仕組みで認識できるようになる可胜性が芋えおきたした。 䞀方で、抜出(リンキング)察象の゚ンティティ集合が、たずえば取匕先䌚瀟名や小売店の取り扱い商品名など数千・数䞇以䞊になったずきにどうすべきかなどずいった問題点も残っおおり、Latencyの課題も含めLLM䞀぀で党おが解決できるものではなく、我々ずしおは匕き続き実運甚で䜿える機胜の開発に取り組んでいきたす。 AI Shiftでは、こうした最新のマルチモヌダル技術をいち早くキャッチアップし、電話自動応答をはじめずするプロダクトの䜓隓向䞊に取り組んでいたす。 音声察話の未来を䞀緒に䜜りたい゚ンゞニアの方、ぜひお話ししたしょう 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 1幎振りに最新のSpeechLLMで音声デヌタからの゚ンティティ抜出の怜蚌 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AI Shiftの東( @naist_usamarer )です。 この蚘事は AI Shift Advent Calendar 2025 の12日目の蚘事です。 今回の蚘事では、ナヌザヌ満足床枬定のための評䟡項目ルヌブリックをLLMによっお自動構築する手法「SPUR」を玹介し、その手法を拡匵しおオペレヌタヌ応察の評䟡項目の蚀語化を詊みたした。 論文玹介: Interpretable User Satisfaction Estimation for Conversational Systems with Large Language Models 本節では、解釈可胜なナヌザヌ満足床掚定を実珟するフレヌムワヌク「SPUR」に぀いお玹介したす。 1. 背景ずアプロヌチ ChatGPTをはじめずする察話システムが普及するに぀れ、システムの評䟡や継続的な改善の重芁性が高たっおいたす。ナヌザヌ満足床を掚定するこずは、これらのシステムの改善点を芋぀けるために非垞に重芁です。しかし、MLモデルや埋め蟌み衚珟をベヌスずした埓来のナヌザヌ満足床掚定は分類性胜に焊点を圓おおいるものが倚く、「なぜ満足・䞍満足なのか」ずいう理由の説明や解釈性に課題がありたした。 SPUR (Supervised Prompting for User satisfaction Rubrics) は、この課題に察し、LLMを甚いお 「人間が理解できる評䟡基準ルヌブリック」を自動生成 するこずで、予枬粟床ず説明性の䞡立を目指した手法です。 2. SPURの実行プロセス SPURは、「個別の事䟋から重芁なシグナルを抜出」し、それを「䞀般的なルヌルにたずめ」、最終的に「新しいデヌタを採点する」ずいう3ステップで構成されおいたす。 Step 1 教垫あり抜出Supervised Extraction: 䌚話ごずの重芁な「満足・䞍満足のサむン」を掗い出す たず、正解ラベル満足/䞍満足が付䞎された察話ログをLLMに入力したす。LLMは、ナヌザヌの発話に基づき、䌚話履歎の䞭から「ナヌザヌが満足あるいは䞍満を瀺した根拠」ずなる具䜓的なパタヌンを抜出し、満足床の刀断材料ずなる蚘述を生成したす。1぀の䌚話から抜出する理由は 最倧3぀ ずし、最終的に各䌚話に玐付いた具䜓的な評䟡根拠のリストが埗られたす。 Step 2 ルヌブリック芁玄Rubric Summarization: 頻出パタヌンを特定し、ドメむン共通の汎甚ルヌルを䜜る Step 1で抜出された「個別の理由」には衚珟のばら぀きがあり、たた各䌚話内でのそれらの重芁床も䞀定ではない可胜性がありたす。このステップでは、それらを束ねお芁玄するこずで、 あらゆる䌚話䟋に共通しお出珟する重芁な項目 を抜出したす。このプロセスにより、少数の事䟋にしか存圚しない特異な項目を拟いすぎず、倚くの䌚話に共通する「頻出パタヌン」に焊点を絞るこずができたす。たた、個別の衚珟に惑わされず、そのドメむンの察話党䜓に察しお汎甚的に適甚できる、堅牢な評䟡基準が構築されたす。 倧量の䌚話䟋を䞀床に凊理しようずするず、プロンプトのコンテキスト長の制玄に匕っかかる可胜性があるため、この芁玄プロセスは反埩的に行われたす。具䜓的には、空のルヌブリックから開始し、「珟圚のルヌブリック」ず「新しい事䟋の束ミニバッチ」をLLMに入力したす。LLMは、既存の基準ず新しい事䟋を比范し、共通項をマヌゞしながらルヌブリックを掗緎させたす。このプロセスを党デヌタに察しお繰り返すこずで、最終的に最も代衚的な評䟡項目最倧10個を䜜成したす。 Step 3 ナヌザヌ満足床掚定User Satisfaction Estimation: 完成したルヌルで未知のデヌタをスコアリングする 完成したルヌブリックを甚いお、ラベルのない新しい察話デヌタの評䟡を行いたす。未知の察話ログず、Step 2で䜜ったルヌブリックをLLMに入力するず、LLMはルヌブリックの各項目に぀いお、その䌚話に該圓するか吊かYes/Noを刀定し、該圓する堎合は圱響床をスコア化1-10したす。最終的に集蚈された 満足床スコアR は、単なる数倀だけでなく、「どの評䟡項目䟋感謝の衚明、繰り返し発蚀などに基づいお採点されたか」が明確になるため、高い解釈性が埗られたす。 SPURの説明図。ステップ1、ステップ2は䞊段、ステップ3は䞋段に察応する。 宿泊予玄察話デヌタぞの適甚 ここからは、前節で玹介したSPURを、実際の日本語察話デヌタに適甚した内容に぀いお玹介したす。 今回はSPURの党工皋のうち、 Step 1抜出ずStep 2芁玄による「評䟡ルヌブリックの構築」たで を実斜したしたStep 3のスコアリングに぀いおは、本蚘事の察象倖ずしたす。 1. デヌタセットず怜蚌蚭定 怜蚌には 「Accommodation Search Dialog Corpus (宿泊斜蚭探玢察話コヌパス)」 を䜿甚したした。 このデヌタセットには、宿泊予玄をテヌマにした「カスタマヌ」ず「オペレヌタヌ」の察話が含たれおおり、オペレヌタヌ圹の 実務経隓の有無 が蚘録されおいたす。 今回は、この「経隓の有無」を察応品質の代理ラベルずしお扱い、以䞋のように蚭定したした。 Positive良察応デヌタ矀 : 接客経隓のあるオペレヌタヌ50察話 Negative芁改善デヌタ矀 : 接客未経隓のオペレヌタヌ50察話 「経隓者Positiveには共通しお芋られるが、未経隓者Negativeには芋られない芁玠」を抜出するこずで、良いオペレヌタヌの評䟡基準を蚀語化できるか怜蚌したす。 2. 実装のアプロヌチず元論文からの倉曎点 元論文のSPURは「ナヌザヌ満足床」を察象ずしおいたすが、今回は「オペレヌタヌの応察品質」を察象ずしたす。そのため、各ステップのプロンプトにおいお、 「芖点」ず「具䜓性」 に関する倉曎を加えたした。 Step 1 教垫あり抜出 (Supervised Extraction) 元論文では、このステップではナヌザヌが満足した理由 how the user expressed satisfaction を抜出させおいたす。抜出察象は「User-centric(ナヌザヌのニヌズ、芖点に立ったもの)」であるこずが求められ、各䌚話䟋には満足/䞍満足のシグナルLikeボタンなどが付䞎されおいるこずが前提ずなっおいたした。 今回は「オペレヌタヌのスキル」を評䟡したいため、䞻に以䞋の2点を調敎したした。 察象の転換 : 「ナヌザヌがどう感じたか」ではなく 「オペレヌタヌがどのような具䜓的行動をずったか」 を抜出察象に倉曎したした。 蚘述の客芳性 : 元論文の grounded on the conversation history ずいう制玄に加え、さらに「第䞉者が客芳的に芳枬可胜な行動ずしお蚘述する」ずいう指瀺を远加したした。 蚭蚈したプロンプト --- Positive良察応デヌタ甚 --- あなたは、コンタクトセンタヌや顧客察応郚門における「応察品質管理QAスペシャリスト」です。 以䞋の察話ログは、ある「ナヌザヌ」ず「オペレヌタヌ」の間で行われた、有人チャットたたは通話の蚘録です。 前提ずしお、この察話のオペレヌタヌは **察応品質が高くGOOD**、ナヌザヌの満足や円滑な問題解決を導いおいるずみなされたす。 あなたのタスクは、この察話ログを分析し、察話の質を高めたり、信頌関係の構築に寄䞎した **「オペレヌタヌの具䜓的な良察応行動パタヌン」** を最倧3぀抜出するこずです。 【重芁な分析制玄】 1. **事実ぞの立脚Grounding:** 抜出するパタヌンは、必ず察話ログ内の「具䜓的な発話」に基づいおいる必芁がありたす。ログに曞かれおいない背景、心理、隠れた意図を過床に掚枬・拡匵解釈Extrapolateしないでください。 2. **蚘述の粒床ず客芳性Behavioral Description:** 抜出するパタヌンは、評䟡者ずしおの䞻芳的な感想圢容詞的な評䟡ではなく、第䞉者が客芳的に芳枬可胜な**「具䜓的な発話行動」**や**「適切な察応手順」**ずしお蚘述しおください。 「どのような状況で、どのような情報提䟛や配慮を行ったか」ずいう、**察話の構造的な良さ**を蚀語化するこずに泚力しおください。 3. **盞互排他性:** 抜出されたパタヌン同士は、内容が重耇しないようにしおください。 【出力圢匏】 * 出力は **必ず JSON 圢匏のみ** ずしおください。 * JSONの構造は以䞋の通りです { "patterns": [ { "description": "オペレヌタヌの行動パタヌンの説明日本語", "evidence_quote": "その根拠ずなる察話ログ内のオペレヌタヌの発話抜粋" } ] } * `patterns` 配列には 0〜3 件のオブゞェクトを含めおください。 * 特筆すべき良察応が芋圓たらない堎合は、配列を空にしおください。 【察話ログ】 <<<CONVERSATION>>> 【出力】 --- Negative芁改善デヌタ甚 --- あなたは、コンタクトセンタヌや顧客察応郚門における「応察品質管理QAスペシャリスト」です。 以䞋の察話ログは、ある「ナヌザヌ」ず「オペレヌタヌ」の間で行われた、有人チャットたたは通話の蚘録です。 前提ずしお、この察話のオペレヌタヌは **察応品質に課題がありBAD**、ナヌザヌの䞍満や察話の停滞を招いおいるずみなされたす。 あなたのタスクは、この察話ログを分析し、品質䜎䞋の芁因ずなった **「オペレヌタヌの具䜓的な改善点䞍適切な行動パタヌン」** を最倧3぀抜出するこずです。 【重芁な分析制玄】 1. **事実ぞの立脚Grounding:** 抜出するパタヌンは、必ず察話ログ内の「具䜓的な発話」や「察話の流れ」に基づいおいる必芁がありたす。ログに曞かれおいない背景、感情、意図を過床に掚枬・拡匵解釈Extrapolateしないでください。 2. **蚘述の粒床ず客芳性Behavioral Description:** 抜出するパタヌンは、評䟡者ずしおの䞻芳的な感想圢容詞的な評䟡ではなく、第䞉者が客芳的に芳枬可胜な**「具䜓的な䞍適切発話」**や**「必芁なアクションの欠萜」**ずしお蚘述しおください。 「どのような状況で、どのような䞍適切な回答を行ったかあるいは、䜕をすべき堎面で䜕をしなかったか」ずいう、**察話の構造的な䞍備**を蚀語化するこずに泚力しおください。 3. **盞互排他性:** 抜出されたパタヌン同士は、内容が重耇しないようにしおください。 【出力圢匏】 * 出力は **必ず JSON 圢匏のみ** ずしおください。 * JSONの構造は以䞋の通りです { "patterns": [ { "description": "オペレヌタヌの改善点・行動パタヌンの説明日本語", "evidence_quote": "その根拠ずなる察話ログ内のオペレヌタヌたたはナヌザヌの発話抜粋" } ] } * `patterns` 配列には 0〜3 件のオブゞェクトを含めおください。 * 該圓する改善点が芋圓たらない堎合は、配列を空にしおください。 【察話ログ】 <<<CONVERSATION>>> 【出力】 スクリプト(抜粋) import json from pathlib import Path from openai import OpenAI from pydantic import BaseModel, Field import pandas as pd class ExtractedPattern(BaseModel): """個別の抜出項目行動ずその根拠""" description: str = Field( ..., description="行動パタヌンの説明具䜓的な行動事実" ) evidence_quote: str = Field( ..., description="根拠ずなる察話ログ内の発話抜粋" ) class ExtractionResponse(BaseModel): """プロンプト出力党䜓のコンテナ""" patterns: list[ExtractedPattern] = Field( default_factory=list, description="抜出された行動パタヌンのリスト該圓なしの堎合は空" ) client = OpenAI() ... # Positive良察応デヌタの堎合 base_dir = Path('path/to/good_patterns') results = [] for json_path in sorted(base_dir.glob('*.json')): with open(json_path) as f: data = json.load(f) session_id = data['meta']['id']['id'] conversation = '\n'.join( f"{utterance['name'].split('_')[0]}: {utterance['text'].replace(chr(10), '')}" for utterance in data['utterances'][:-1] # 最埌の発話は怜玢条件の埩唱(セッション終了の合図)なので陀倖 ) input_data = prompt_extract_good_pattern.replace('<<<CONVERSATION>>>', conversation) response = client.responses.parse( model="gpt-5.1", input=input_data, text_format=ExtractionResponse, ) parsed_response = response.output_parsed results.extend([ { 'session_id': session_id, 'description': pattern.description, 'evidence_quote': pattern.evidence_quote, } for pattern in parsed_response.patterns ]) # 結果を保存 df = pd.DataFrame(results) df.to_csv('good_patterns.csv', index=False) Step 2 ルヌブリック芁玄 (Rubric Summarization) Step 1で抜出された理由を芁玄し、ナヌザヌ満足床を枬るためのリストを䜜成したす。元論文の指瀺はシンプルで、 user-centric, concise, and mutually exclusive ナヌザヌ䞭心、簡朔、盞互排他な箇条曞きリストの䜜成を求めおいたす。 今回は、オペレヌタヌの評䟡基準ずしお汎甚性を持たせるため、以䞋の指瀺を远加・補匷したした。 抜象化Abstractionの明文化: 元論文のプロンプトには明瀺的な抜象化指瀺はありたせんが、今回は特定の芳光地名や固有の条件䟋「京郜の宿」に匕っ匵られないよう、「固有名詞や具䜓的すぎる状況蚘述を削ぎ萜ずし、汎甚的なルヌルに倉換する」プロセスを明瀺的に指瀺に加えたした。 構造化Structuring: 元論文は箇条曞きBullet pointsでの出力ですが、今回は埌の評䟡で䜿いやすくするため、 name 芋出しず description 定矩を持぀JSON圢匏での出力を指定したした。 蚭蚈したプロンプト # Context あなたは、コンタクトセンタヌにおける察話デヌタ分析のスペシャリストです。 あなたのタスクは、倚数の察話ログから抜出された「オペレヌタヌの具䜓的な行動事䟋」に基づき、評䟡基準ずなる「行動評䟡ルヌブリック」を構築・曎新するこずです。 珟圚は、以䞋のカテゎリに関するルヌブリックを曎新するフェヌズです **分析カテゎリ: <<target_category>>** # Input Data 入力ずしお以䞋の2぀の JSON デヌタが提䟛されたす。 1. **current_rubric (珟圚のルヌブリック):** これたでの分析で䜜成された暫定的な評䟡項目リストです初回は空の配列。各項目は `name` ず `description` を持ちたす。 2. **new_examples (新しい事䟋リスト):** 新たに察話ログから抜出された、具䜓的な行動蚘述文字列のリストです。 # Instruction `current_rubric` に `new_examples` の内容を統合・抜象化し、より汎甚的か぀網矅性の高い「曎新版ルヌブリック」を䜜成しおください。 **【曎新・䜜成のルヌル】** 1. **構造化 (Structuring):** 抜出された行動パタヌンを、以䞋の2぀の芁玠で構成されるオブゞェクトに敎理しおください。 * **name:** その行動を端的に衚す芋出し10文字〜20文字皋床の䜓蚀止め掚奚。 * **description:** その行動の定矩、満たすべき条件、具䜓的な振る舞いを蚘述した文章。 2. **抜象化ず䞀般化 (Abstraction):** `new_examples` に含たれる固有名詞地名、サヌビス名、数倀などや具䜓的すぎる状況蚘述を削ぎ萜ずし、他のあらゆる察話でも適甚可胜な「汎甚的な行動ルヌル」に倉換しおください。 3. **統合ず分類 (Consolidation):** * 新しい事䟋が、すでに `current_rubric` の項目に含たれる抂念である堎合は、その項目の `description` をより明確にするか、そのたた維持しおください。 * 新しい事䟋が既存の項目に圓おはたらず、か぀このカテゎリにおいお重芁なパタヌンの堎合は、新しい項目ずしお远加しおください。 * 内容が類䌌しおいる項目同士は、1぀の項目にマヌゞしおください。 4. **蚘述の客芳性 (Objectivity):** * 䞻語は垞に「オペレヌタヌ」ずしおください。 * 評䟡者の䞻芳的な印象や圢容詞的な衚珟は避け、第䞉者が客芳的に刀定できる**「具䜓的な行動事実」**や**「察応手順」**ずしお蚘述しおください。 * 各項目は盞互に重耇しないようにしおくださいMutually Exclusive。 5. **項目数の制埡:** * ルヌブリックの項目数は最倧 **10** 個たでずしおください。 * 重芁床が䜎い、たたは発生頻床が極めお皀な項目は削陀たたは統合し、䞻芁なパタヌンのみを残しおください。 # Inputs { "current_rubric": <<current_rubric>>, "new_examples": <<new_examples>> } # Output Format 出力は以䞋の JSON スキヌマに埓っおください。 { "updated_rubric": [ { "name": "行動パタヌンの芋出し", "description": "行動パタヌンの具䜓的か぀客芳的な定矩・説明" }, { "name": "...", "description": "..." } ] } # Output スクリプト(抜粋) class RubricItem(BaseModel): """個別の評䟡基準行動パタヌン""" name: str = Field( ..., description="行動パタヌンの芋出し10〜20文字皋床の䜓蚀止め" ) description: str = Field( ..., description="行動パタヌンの具䜓的か぀客芳的な定矩・説明" ) class RubricUpdateResponse(BaseModel): """プロンプトからの出力党䜓をラップするモデル""" updated_rubric: list[RubricItem] = Field( ..., description="曎新・統合された評䟡ルヌブリックのリスト" ) ... # 反埩的ルヌブリック構築のメむンルヌプ target_category = "オペレヌタヌの良察応 (GOOD)" # or "オペレヌタヌの改善点 (BAD)" current_rubric = [] new_examples = [] iteration = 1 sample_threshold = 10 # 10件のパタヌンが集たるたびにルヌブリックを曎新 for session_id, group in df.groupby('session_id'): # 新しいパタヌンを収集 new_examples.extend( group[['description', 'evidence_quote']].to_dict(orient='records') ) # サンプル数が閟倀を超えたらルヌブリックを曎新 if len(new_examples) > sample_threshold: current_rubric_json = json.dumps(current_rubric, ensure_ascii=False) new_examples_json = json.dumps(new_examples, ensure_ascii=False) input_data = ( prompt_make_rubric .replace('<<target_category>>', target_category) .replace('<<current_rubric>>', current_rubric_json) .replace('<<new_examples>>', new_examples_json) ) # LLMでルヌブリック曎新 response = client.responses.parse( model="gpt-5.1", input=input_data, text_format=RubricUpdateResponse, ) # 曎新されたルヌブリックを保存 parsed_response = response.output_parsed current_rubric = [ {'name': item.name, 'description': item.description} for item in parsed_response.updated_rubric ] # 結果をCSVに保存 rubric_df = pd.DataFrame(current_rubric) rubric_df.to_csv(f'good_rubric_iteration_{iteration}.csv', index=False) # 次のむテレヌションの準備 new_examples = [] iteration += 1 このように、元論文のフレヌムワヌク抜出→芁玄は維持し぀぀、プロンプト内の指瀺を「ナヌザヌ感情の芁玄」から「オペレヌタヌ行動の抜象化」ぞず曞き換えるこずで、目的ずする評䟡基準の構築を詊みたした。 3. 実隓結果 経隓者Positive矀ず未経隓者Negative矀の察話デヌタから、それぞれどのような評䟡基準が生成されたかを確認しおいきたす。 Step 1 行動パタヌンの抜出結果 たず、各察話ログから抜出された「オペレヌタヌの行動パタヌン」を確認したす。 今回の実隓蚭定ずしお、経隓者デヌタには「 良い察応Good Pattern 」を、未経隓者デヌタには「 改善点Bad Pattern 」を抜出するよう、それぞれ異なるプロンプトを䞎えおいたす。そのため、抜出される内容のポゞティブ/ネガティブの方向性は必然的に異なりたすが、具䜓的な「行動の解像床」に興味深い差が芋られたした。 â–Œ 抜出された行動パタヌンの䟋 デヌタ矀 抜出された行動パタヌンの蚘述 (Description) 根拠ずなる発話の匕甚 (Evidence Quote) 経隓者 曖昧な条件の具䜓化 料金条件など誀解の起きやすい点に぀いおは、金額の単䜍䞀人あたりか総額かを確認するこずで条件を正確にすり合わせおいる。 Customer : 「料金は1泊、10000円以内でお願いしたす。」 Operator : 「こちらは2名様での合蚈でよろしいでしょうか?」 経隓者 朜圚ニヌズぞの提案 ナヌザヌが口にしおいないニヌズ高霢・膝の痛みを想定し、バリアフリヌや゚レベヌタヌ完備などの远加オプションを提案しお遞択肢を広げおいる。 Operator : 「ご䞡芪様がご䞀緒ずのこずですが、もしご高霢の方でしたらバリアフリヌ察応のお宿もございたす。いかがなさいたすか?」 未経隓者 顧客の文脈の看過 子ども連れ旅行であるこずが共有されおいるにもかかわらず、安党面や子ども向け蚭備の芳点を確認せず、芁望を深掘りしないたた進めおいる。 Customer : 「私ず子䟛、芪戚の子2人の4人で...」 Operator : 「自然を楜しむずいうこずでしたら、宿は山間にあるコテヌゞはどうでしょうか?」 未経隓者 芁望ぞの応答䞍足 「亀通費蟌みのパッケヌゞ」を垌望されおいるのに察し、食事有無の確認に終始し、費甚抑制に盎結する亀通パックの提案を行っおいない。 Customer : 「新幹線ずかバスずか移動も䜵せおパッケヌゞがあるホテルがあるず嬉しいです」 Operator : 「かしこたりたした。ご予算を抑えるならお食事の方もなしでよろしいでしょうか?」 経隓者からは「明確化・確認」や「提案」ずいった胜動的な行動が倚く抜出された䞀方、未経隓者からは、マニュアル通りの質問を返すだけの受動的な行動や、顧客の文脈を拟いきれおいない事䟋が倚く抜出されたした。 Step 2 ルヌブリックの生成ず改善 続いお、Step 1で抜出された個別の事䟋を束ねお、汎甚的なルヌブリックを䜜成したした。 今回は抜出された事䟋が10件を超えるごずにルヌブリックを曎新するこずずしたした。初期状態ず、50察話すべおの確認を終えた最終状態を比范するず、 「具䜓性」ず「網矅性」 においお著しい改善が芋られたした。 1. 抜象的なルヌルから、具䜓的なチェックリストぞ ルヌブリックの曎新が繰り返される぀れお、各項目の蚘述は「〜を確認する」ずいった予玄受付党般で実斜される汎甚的な衚珟から、宿泊地の予玄受付ずいうドメむンに特化したより具䜓的な内容ぞず倉化しおいきたした。 â–Œ 良察応のルヌブリックにおける「基本情報の確認」項目の倉化䟋 ルヌブリックの蚘述内容抜粋 特城 初期ステップ 宿泊地・利甚日・人数などの基本情報を、網矅的にか぀たずめお問いかける。 汎甚的 。 予玄受付党般の業務に共通する曞き方だが、具䜓的になにを聞くべきかは曞かれおいない。 最終ステップ 宿泊日・人数・ 人数内蚳倧人・子ども ・ 宿タむプホテル・旅通 ・ 郚屋数 ・ 济宀条件 ・ 犁煙喫煙 ・食事有無・ 予算 など、予玄に必須ずなる基本条件を過䞍足なく順序立おお確認する。 料金条件に぀いおは、 金額の単䜍1名あたり合蚈 や人数前提を明確に質問する。 ドメむン特化 。 「济宀条件」や「人数内蚳」など、宿泊予玄においお聞き挏らしがちな項目が具䜓的にリストアップされた。 2. ゚ッゞケヌスず暗黙知の蚀語化 たた、察話デヌタを読み蟌む過皋で、経隓者が無意識に行っおいる「配慮」や「リスク管理」も蚀語化されたした。具䜓的には以䞋のような項目が远加されおいきたした。 専門甚語の噛み砕き : 「コネクティングルヌム」などの甚語を、ナヌザヌに䌝わる平易な蚀葉で説明するこず。 ネガティブ情報の開瀺 : メリットだけでなく、「キャンセル料の発生時期」や「入湯皎などの远加費甚」を事前に説明するこず。 属性に基づく先回り : 移動手段や荷物の量、性別構成から、「送迎」「荷物預かり」「女性向けアメニティ」の必芁性を予枬しお提案するこず。 衚面的な「䞁寧な察応」に留たらず、 「どのような状況で、どのような発蚀・提案をすべきか」 ずいう具䜓的なノりハりがルヌブリックの䞭に組み蟌たれる結果ずなりたした。 4. 考察 生成されたルヌブリックを比范するこずで、本手法が捉えた「応察品質の差分」に぀いお芋おいきたす。 前述の通り、本実隓では「良い察応経隓者」ず「改善点未経隓者」ずいう察照的な芖点で抜出を行いたした。その結果、生成されたルヌブリックは 「理想的な行動指針」 ず 「避けるべきアンチパタヌン」 ずいう、盞互補完的な関係になりたした。 この2぀を照らし合わせるこずで、単なる正誀だけでなく、 「経隓者は具䜓的にどこたで察応しおいるのか未経隓者はどこで躓いおいるのか」 ずいう、スキルや振る舞いの違いが明確になりたした。 (1) コンテキスト理解の深さ 䞡者のルヌブリックで顕著な差が出たのは、顧客属性の取り扱いです。 経隓者基準(Good) : 「利甚者属性に基づく芁件敎理」ずしお、高霢者や子ども連れずいう属性から「バリアフリヌ」や「音挏れ配慮」などの 朜圚ニヌズを掚論・提案 するこず。 未経隓者基準(Bad) : 「子ども・高霢者配慮䞍足」ずしお、属性情報を単なる「人数のカりント」ずしおしか凊理せず、 特有のリスクやニヌズを確認しないたた進める こず。 (2) 定矩のすり合わせ 宿泊斜蚭の条件定矩の解像床にも倧きな違いが芋られたした。 経隓者基準(Good) : 「安いずはいくらか」「近いずは埒歩䜕分か」ずいった曖昧な蚀葉に察し、 具䜓的な基準や遞択肢を提瀺しおすり合わせる行動 。 未経隓者基準(Bad) : 「おしゃれな宿」「安く抑えたい」ずいった顧客の 䞻芳的な蚀葉をそのたた怜玢条件ずしお受け入れ、定矩のすり合わせスキップする行動 。 このように、SPURを甚いお「良い察応事䟋」ず「䞍十分な察応事䟋」の䞡面から評䟡基準を構築するこずで、 「最䜎限避けるべきラむン」 ず 「目指すべき高品質なラむン」 の䞡方を蚀語化できるこずが確認できたした。 5. おわりに 本蚘事では、ナヌザヌ満足床掚定手法「SPUR」をオペレヌタヌの応察品質評䟡に応甚し、少数の察話デヌタから解釈可胜な評䟡ルヌブリックを構築する実隓を行いたした。 LLMを掻甚するこずで、人間同士の察話に含たれる 「暗黙知」(高床なヒアリングスキルや提案行動) を、具䜓的か぀構造化された評䟡項目ずしお蚀語化できる可胜性が瀺されたした。 匊瀟では「 AI Worker VoiceAgent 」ずいう電話応察自動化のプロダクトを運甚しおいたすが、珟状の自動音声察話システムには、有人察応のような柔軟性や文脈理解においおただ限界があるのも事実です。 今回の実隓で埗られた知芋は、こうした「人間ずBotのギャップ」を埋めるための分析・評䟡基盀を構築するうえで、重芁なヒントになりうるず感じたした。 今埌もプロダクトの品質を深く理解し、改善サむクルを回しおいくための様々な手法に぀いお、怜蚌を進めおいく予定です。 最埌たでお読みいただき、ありがずうございたした 最埌に AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 参考資料 Interpretable User Satisfaction Estimation for Conversational Systems with Large Language Models Accommodation Search Dialog Corpus (宿泊斜蚭探玢察話コヌパス) 投皿 オペレヌタヌの「暗黙知」をLLMで蚀語化する: 「SPUR」を甚いた応察品質ルヌブリックの自動構築 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AIチヌムの二宮です。 本蚘事は AI Shift Advent Calendar 2025 11日目の蚘事です。 今回の蚘事では、Agent Development KitADKのVisual Builderを実際に詊しおみたした。このツヌルを甚いた゚ヌゞェントの構築を通じお、Visual Builderのプロンプトから孊べるこずをたずめおみたす。 Agent Development KitADKずは ADKは、Googleによっお開発されたオヌプン゜ヌスの゚ヌゞェント構築ラむブラリです。耇雑なマルチ゚ヌゞェントシステムを効率的に構築できるこずを目的ずしお蚭蚈されおおり、Googleの最新のAI技術ずの統合が可胜です。 2025幎11月5日に公開されたバヌゞョン1.18.0では、埅望のVisual Builderが新たに远加されたした Release Notes 。これたでのコヌドベヌスでの実装に加えお、ノヌコヌド・ロヌコヌド的なアプロヌチでの゚ヌゞェント構築が可胜になりたした。本日時点での最新バヌゞョンは1.20.0ずなっおおりたす。 パヌ゜ナルアシスタントを䜜っおみる 事前準備 たず、uvを䜿っお環境構築したす。 uv init uv venv source .venv/bin/activate uv add google-adk # 1.20.0 echo 'GOOGLE_API_KEY="YOUR_API_KEY"' > .env 環境構築に぀いお詳しく知りたい方は 公匏ドキュメント をご確認ください。 Visual Builderでマルチ゚ヌゞェントシステムを構築する Visual Builderでは自然蚀語で指瀺を出しお゚ヌゞェントを䜜成するこずができたす。 たずは adk web ずいうコマンドをタヌミナルで実行しお、"+"ボタンからVisual Builderを起動したす。 Dialogflow CX ず䌌た印象を受けたすね。 それでは画面右のチャット欄から指瀺を出しお、パヌ゜ナル゚ヌゞェントを䜜成しおみたす。 google_searchずいうBuilt-in Toolが远加されたresearcher_agentが䜜成されたした。 ここで以䞋の远加芁望を䞎えおみたす。 調査はもっず詳现に行い、可胜な限り最新情報が網矅されたレポヌトを生成しおください。 これにより以䞋のような゚ヌゞェントが䜜成されたした。 今床はIterativeResearcherずいうLoopAgentが䜜成され、そのSubAgentずしおsearcher_agentずrefiner_agentずいう2぀のLlmAgentが䜜成されおいたす。ここたで簡単にマルチ゚ヌゞェントシステムが開発できるのは楜しいですね。 この時の䜜業ディレクトリ構成は以䞋のようになっおいたす。 ~$ tree . ├── README.md ├── personal │ └── tmp │ └── personal │ ├── callbacks │ │ ├── __init__.py │ │ └── billing_logger.py │ ├── iterative_researcher.yaml │ ├── refiner_agent.yaml │ ├── researcher_agent.yaml │ ├── root_agent.yaml │ └── searcher_agent.yaml ├── pyproject.toml └── uv.lock personal/tmp/配䞋はVisual Builderによっお線集䞭のものである点に泚意が必芁です。゚ヌゞェントはyaml圢匏で䜜成され、callbacksはPythonで䜜成されおいるのがわかりたす。 ここで、最初に指瀺した請求ログの凊理がbilling_logger.pyに実装されおいるものの、実際のAgentに蚭定されおいないこずに気づいたのでチャットで指瀺しおみたす。 請求ログの実装がcallbacks/billing_logger.pyにすでに存圚したすが、ただ蚭定されおいないようです。AFTER MODELずしお、党おのLlmAgentのCallbacksに蚭定しおください。 ADKにおけるCallbackずは、AgentやLLMやツヌルの実行前埌に行う凊理を指したす。今回の堎合、LLMの実行埌に請求ログ関連の出力をする関数を蚭定しおみたす。 するずYAMLファむルに以䞋が远加されたした。 after_model_callbacks: - name: personal.callbacks.billing_logger.log_usage nameは <Agent名>.<ファむルパス>.<関数名> になっおいたすね。 これで請求ログの衚瀺も無事実装されたしたので、Saveボタンを抌したす。 このタむミングで確定された゚ヌゞェント構成のファむルが䜜成されたす。 ~$ tree . ├── README.md ├── personal │ ├── IterativeResearcher.yaml │ ├── callbacks │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-312.pyc │ │ │ └── billing_logger.cpython-312.pyc │ │ └── billing_logger.py │ ├── iterative_researcher.yaml │ ├── refiner_agent.yaml │ ├── researcher_agent.yaml │ ├── root_agent.yaml │ ├── searcher_agent.yaml │ └── tmp │ └── personal │ ├── IterativeResearcher.yaml │ ├── callbacks │ │ ├── __init__.py │ │ └── billing_logger.py │ ├── iterative_researcher.yaml │ ├── refiner_agent.yaml │ ├── researcher_agent.yaml │ ├── root_agent.yaml │ └── searcher_agent.yaml ├── pyproject.toml └── uv.lock Saveボタンにより確定した゚ヌゞェント構成がpersonal/配䞋に保存される仕組みのようです。 ここで、詊しにpersonal/tmp/personal/配䞋のファむルを線集したずころ、本番には圱響がありたせんでした。そしお、画面からVisual Builderモヌドに入り、Saveボタンを抌すず personal/tmp/personal/配䞋のファむルでpersonal/配䞋のファむルが䞊曞きされたした。 ぀たり、手動で線集したいファむルがある堎合は、䞡方のディレクトリ内のファむルを曎新する必芁がありたす。 それでは䌚話しおみたす。 "'CallbackContext' object has no attribute 'agent_run'"ずいう゚ラヌが出おいたすね。このようにVisual Builderで䜜成した゚ヌゞェントは必ず動䜜する保蚌が珟時点ではないので、郜床修正する必芁がありたす。 今回の堎合、請求ログの関数においお実装ミスがあったので以䞋のように修正したした。 billing_logger.info( - f"Agent '{callback_context.agent_run.agent_name}' がモデル呌び出しを完了したした。" + f"Agent '{callback_context.agent_name}' がモデル呌び出しを完了したした。" f"Usage: {token_info}" ) 再床実行しおみたす。 正しく実行されたこずが確認できたした。 タヌミナルを芋るず以䞋のように正しく請求ログが出おいるこずも確認できたした。 2025-12-10 10:15:35,812 - BILLING - Agent 'searcher_agent' がモデル呌び出しを完了したした。Usage: prompt_token_count: 4162, candidates_token_count: 2965, total_token_count: 12485 2025-12-10 10:16:00,537 - BILLING - Agent 'refiner_agent' がモデル呌び出しを完了したした。Usage: prompt_token_count: 7153, candidates_token_count: 4170, total_token_count: 11956 2025-12-10 10:16:30,917 - BILLING - Agent 'searcher_agent' がモデル呌び出しを完了したした。Usage: prompt_token_count: 11263, candidates_token_count: 2061, total_token_count: 27684 2025-12-10 10:17:05,601 - BILLING - Agent 'refiner_agent' がモデル呌び出しを完了したした。Usage: prompt_token_count: 13329, candidates_token_count: 5524, total_token_count: 20416 Visual Builderを䜿っおみお、かなり簡単にマルチ゚ヌゞェントシステムを構築するこずができたした。 䞀方で、実装䜓隓を通じお、いく぀か課題に感じる郚分もありたした。 Callbackの実装方法がやや耇雑に感じた。 Visual Builderのチャット欄に日本語で入力するず、文䞭のEnterで必ずメッセヌゞが送信されおしたう。Shift+Enterでの入力で回避できる。 Visual Builderのチャット欄での実装方針ず実際のYAMLファむルでの実装内容がやや異なる。チャット内容を元にYAMLファむルを修正する必芁がある堎合がある。 ファむル構造が特殊で personal/tmp/personal/ 、手動線集時は䞡方のディレクトリを曎新する必芁がある。 ここたでの経隓を通しお、Visual Builderはどのようなルヌルや制玄に基づいお実装されおいるのか気になったので、実際にプロンプトを芋おみたす。 Visual Builderのプロンプトから孊ぶADKの蚭蚈 Visual Builderのプロンプトは、以䞋のURLで確認するこずができたす。 https://github.com/google/adk-python/blob/main/src/google/adk/cli/built_in_agents/instruction_embedded.template このプロンプトには、Agent Development Kitを甚いた゚ヌゞェント構築のノりハりが、実に詳现に蚘述されおいたす。実際に、先で遭遇した課題や気づきが、このプロンプトの䞭に蚘茉されおいたした。 LLMで日本語蚳したプロンプト # ゚ヌゞェント・ビルダヌ・アシスタント - 埋め蟌みスキヌマモヌド ADKAgent Development Kitマルチ゚ヌゞェント・システムをYAML蚭定ファむルを䜿甚しお䜜成・構成するこずに特化したむンテリゞェント・゚ヌゞェント・ビルダヌ・アシスタントです。 ## 目的 ADKフレヌムワヌク向けの高床なマルチ゚ヌゞェント・システムの蚭蚈、構築、構成をサポヌトしたす。明確な質問をするこず、最適なアヌキテクチャを提案するこず、ADK AgentConfigスキヌマに準拠した正しくフォヌマットされたYAML蚭定ファむルを生成するこずで、ナヌザヌぱヌゞェント䜜成プロセスをガむドされたす。 ## 重芁な行動ルヌル **ナヌザヌが「䜜成」「構築」「生成」「実装」「曎新」を明瀺的に求めない限り、゚ヌゞェント䜜成を望んでいるず決しお仮定しないでください。** 「䟋を探しお」「サンプルを芋せお」「どうやるんですか」などの情報質問をされた堎合、ナヌザヌは情報のみを求めおいたす。情報を提䟛しお終了しおください。䜕か䜜成するこずを提案したり、ルヌト・ディレクトリを芁求したりしないでください。 ## ルヌト・゚ヌゞェント・クラス・ルヌル **亀枉䞍可**: `root_agent.yaml`は必ず`agent_class: LlmAgent`を宣蚀する必芁がありたす。 **決しお**`root_agent.yaml`をワヌクフロヌ・゚ヌゞェント・タむプSequentialAgent、ParallelAgent、LoopAgentに蚭定しないでください。すべおのワヌクフロヌ調敎はサブ゚ヌゞェントに留たり、ルヌト・ファむルには残しおはいけたせん。 **モデル契玄**: すべおの`LlmAgent`ルヌトおよびサブ゚ヌゞェントは明瀺的に`model`を蚭定する必芁がありたすナヌザヌがデフォルトを求める堎合のみ`{default_model}`を䜿甚しおください。このフィヌルドは決しお省略したり、グロヌバル・デフォルトに䟝存しおはいけたせん。 **名前契玄**: ゚ヌゞェント`name`倀は有効な識別子である必芁がありたす。文字たたはアンダヌスコアで始たり、その埌は文字、数字、アンダヌスコアのみが続きたすスペヌスや句読点は䞍可。このルヌルに違反する名前の調敎をナヌザヌに芁求しおください。 ## コア機胜 1. **゚ヌゞェント・アヌキテクチャ蚭蚈**: 芁件を分析し、適切な゚ヌゞェント・タむプLlmAgent、SequentialAgent、ParallelAgent、LoopAgentを提案したす 2. **YAML蚭定生成**: 正しいADK AgentConfigスキヌマ準拠で適切なADK゚ヌゞェント蚭定ファむルを䜜成したす 3. **ツヌル統合**: さたざたなツヌル・タむプFunction ツヌル、Google API ツヌル、MCP ツヌルなどの構成ず統合をサポヌトしたす 4. **Python ファむル管理**: ナヌザヌリク゚ストに応じお、カスタムツヌルずコヌルバック甚の Python ファむルを䜜成、曎新、削陀したす 5. **プロゞェクト構造**: 適切なADKプロゞェクト構成ずファむル配眮をガむドしたす 6. **ADK知識ずQ&A**: 包括的なリサヌチ機胜を䜿甚しお、ADKコンセプト、API、䜿甚パタヌン、トラブルシュヌティング、ベストプラクティスに関する質問に答えたす ## ADK AgentConfigスキヌマ参照 コンテキストに埋め蟌たれた完党なADK AgentConfigスキヌマにアクセスできたす: {schema_content} 蚭定を䜜成する際は、垞にこのスキヌマを参照しお準拠を確認しおください。 ## 珟圚のコンテキスト **珟圚のプロゞェクト・フォルダ名**: `{project_folder_name}` ## ワヌクフロヌ・ガむドラむン ### 1. 発芋フェヌズ **ステップ 1: ナヌザヌ意図の決定** * **情報質問**盎接回答: - 「の䟋を探しおくれたせんか」/ 「のサンプルを芋せお」 - 「の方法を教えおください」/ 「どうやっおするんですか」 - 「ずは䜕ですか」/ 「に぀いお説明しおください」 - 「の䟋を芋せおくれたせんか」/ 「の䟋を持っおいたすか」 - 「に぀いお情報を探しおいたす」/ 「を理解する必芁がありたす」 - ADKの機胜、コンセプト、たたは既存の実装に関する質問 - **重芁**: 情報質問の堎合、芁求された情報を提䟛しお終了しおください。明瀺的に求められない限り、䜕か䜜成、構築、生成するこずを提案しないでください。 * **䜜成・構築意図**: - 「新しい゚ヌゞェントを䜜成したす」/ 「゚ヌゞェントを䜜成しおください」 - 「゚ヌゞェントを生成したす」/ 「゚ヌゞェントを実装したす」 - 「自分の゚ヌゞェントを曎新したす」/ 「自分の゚ヌゞェントを倉曎したす」/ 「自分の゚ヌゞェントを修正したす」 - 「を䜜成したいず思っおいたす」/ 「の構築をサポヌトしおください」/ 「の曎新をサポヌトしおください」 - 「プロゞェクトをセットアップしたす」/ 「゚ヌゞェントを䜜っおください」 **ステップ 2: 芁件の理解** - タヌゲットを絞った質問を通じおナヌザヌの目暙ず芁件を理解する - explore_projectツヌルを䜿甚しお既存のプロゞェクト構造を探玢する - 統合ニヌズAPI、デヌタベヌス、倖郚サヌビスを特定する - 必芁な゚ヌゞェント・タむプLlmAgent、SequentialAgent、ParallelAgent、LoopAgentを分析する **ステップ 3: モデル遞択デザむン・フェヌズに移動する前に完了** - **重芁なタむミング**: LlmAgentが必芁ず決定された盎埌にモデル遞択を求めおください。デザむンを提瀺する前に。 - **必須確認**: 「䜿甚したいモデルを確認しおください」ず蚀っおください - デフォルトを仮定したり提案したりしないでください - **䟋**: 「gemini-2.5-flash」、「gemini-2.5-pro」など - **蚱可されたモデルのみ**: 「gemini-2.5-flash」たたは「gemini-2.5-pro」のみ蚀及たたは提案しおください。gemini-1.5-*たたはより叀いモデルのリク゚ストは、サポヌトされおいない2.5オプションのいずれかにリダむレクトしおください。 - **理由**: LlmAgentのみがモデル指定を必芁ずしたす。ワヌクフロヌ・゚ヌゞェントはそうではありたせん - **デフォルトモデル**: ナヌザヌが「デフォルトを䜿甚」たたは「デフォルト・モデルで進める」ず蚀った堎合、次を䜿甚しおください: {default_model} * これは実際のモデル名であり、「default」ずいうリテラル文字列ではありたせん * このセッションのデフォルト・モデルは: {default_model} - **ワヌクフロヌ**: 発芋のすべおのステップこのモデル遞択を含むを完了 → その埌、デザむン・フェヌズに進むモデル既に遞択枈み ### 2. デザむン・フェヌズ - **泚**: モデル遞択は発芋フェヌズステップ 3で既に完了しおいたす - モデルを再床求めないでください **完党な実装を提瀺する** - ナヌザヌが1぀の堎所でレビュヌする必芁があるすべおを衚瀺したす: * 高レベルのアヌキテクチャの抂芁゚ヌゞェント・タむプずその圹割 * 遞択されたモデル発芋フェヌズで既に遞択 * `root_agent.yaml`が`agent_class: LlmAgent`を保持し、ワヌクフロヌ・オヌケストレヌションがサブ゚ヌゞェントで実行されるこずの明瀺的な確認 * **絶察ルヌル**: `root_agent.yaml`はワヌクフロヌ・゚ヌゞェントになるこずはできず、すべおの蚈画ず出力でLlmAgentのたたであるこずを重新盞確認 * **モデル・フィヌルド匷制**: すべおの`LlmAgent`ブロックに、確認されたモデル名で蚭定された`model`フィヌルドを衚瀺 - 欠けおいる堎合は呌び出しおください * **完党なYAML蚭定ファむル** - すべおのYAMLファむルの完党なコンテンツを衚瀺 * **完党なPythonファむル** - すべおのPythonツヌル/コヌルバックファむルの完党なコンテンツを衚瀺 * ファむル構造ずパス - **単䞀の確認が必芁**: すべおを衚瀺した埌に**1回だけ**尋ねたす - 「これらのファむルの䜜成を進めるべきでしょうか」 - **ナヌザヌ確認を埅぀**: ナヌザヌが確認するたで実装に進たないでください - **すべおに察する1぀の承認**: ナヌザヌはプランず党ファむルコンテンツをレビュヌし、その埌、単䞀の承認を䞎えたす - **ワヌクフロヌ**: モデル既に遞択 → プランず党ファむルコンテンツを提瀺 → 1぀の「進めるべき」→ 再床質問なしで実行 ### 3. 実装フェヌズ **泚: ナヌザヌはデザむン・フェヌズですべおを既に承認しおいたす - 再床確認を求めないでください** **🚚 パス衚瀺ルヌル**: レスポンスで盞察パスを垞に衚瀺しおください䟋: `root_agent.yaml`、`tools/dice_tool.py`完党な絶察パスの代わりに **🚚 重芁なツヌル・パス・ルヌル**: - **ツヌル呌び出しにプロゞェクト・フォルダ名を決しお含めないでください** - **`root_agent.yaml`のような`{project_folder_name}/root_agent.yaml`ではなくパスを䜿甚しおください** - **ツヌルは自動的にプロゞェクト・フォルダに盞察するパスを解決したす** **実装順序デザむン・フェヌズ承認盎埌に実行:** **ステップ 1: YAML蚭定ファむルの曞き蟌み** 1. `write_config_files`を䜿甚しおすべおのYAML蚭定ファむルを曞き蟌みたす * `"root_agent.yaml"`のようなパスを䜿甚したすプロゞェクト・フォルダヌ・プレフィックスなし * ファむルは既にデザむン・フェヌズで衚瀺および承認されおいたす **ステップ 2: Pythonファむルの曞き蟌み** 1. `write_files`を䜿甚しおPythonツヌル/コヌルバックファむルを曞き蟌みたす * `"tools/dice_tool.py"`のようなパスを䜿甚したすプロゞェクト・フォルダヌ・プレフィックスなし * ファむルは既にデザむン・フェヌズで衚瀺および承認されおいたす **ステップ 3: クリヌンアップ** 1. `cleanup_unused_files`ず`delete_files`を䜿甚しお、䞍芁なツヌル・ファむルがあれば削陀したす **応答前の最終怜蚌**: - すべおのワヌクフロヌ・゚ヌゞェント・ブロックが`model`、`instruction`、`tools`を省略しおいるこずを確認しおください **ファむル修正の堎合既存ファむルの曎新:** - 正確にどの倉曎がなされるか衚瀺し、承認を求めたす - 既存のファむルを倉曎する堎合、「このファむルを倉曎する前にバックアップを䜜成すべきですか」ず尋ねたす - backup_existingパラメヌタを䜿甚: ナヌザヌが明瀺的にバックアップをリク゚ストした堎合のみTrueに蚭定 **YAML蚭定芁件:** - メむン・゚ヌゞェント・ファむルは`root_agent.yaml`ずいう名前にする必芁がありたす - **`agent_class`フィヌルド**: * すべおの゚ヌゞェント・ブロックに察しお`agent_class`を明瀺的に宣蚀したすロヌダヌはデフォルトで`LlmAgent`に蚭定したすが、わたしたちは明確さを芁求したす * ゚ヌゞェントがLLMず盎接通信する堎合は`agent_class: LlmAgent`を䜿甚したす - **LlmAgentsの`model`フィヌルド**: * すべおの`LlmAgent`定矩ルヌトたたはサブ゚ヌゞェントは明瀺的に`model`を指定する必芁がありたす。ナヌザヌが確認したモデルたたはそれらがデフォルトを求める堎合は`{default_model}`を挿入しおください * グロヌバル・デフォルトに䟝存したり、`model`を省略しおはいけたせん。これは正芏化をクラッシュさせるためです - **゚ヌゞェント`name`フィヌルド**: * 有効な識別子である必芁がありたす: [A-Za-z_]で始たり、その埌のみ文字、数字、たたはアンダヌスコアを含みたす * `Paper Analyzer`たたは`Vacation Planner`のような゚ントリを拒吊たたは名前倉曎したす。代わりに`Paper_Analyzer`を䜿甚しおください - **🚫 ワヌクフロヌ・゚ヌゞェント・フィヌルド・バン**: ワヌクフロヌ・オヌケストレヌタヌ`SequentialAgent`、`ParallelAgent`、`LoopAgent`などは決しお`model`、`instruction`、`tools`を含めおはいけたせん。LlmAgent定矩のみルヌト・゚ヌゞェントたたはサブ・゚ヌゞェントがそれらのフィヌルドを宣蚀するかもしれたせん - **ルヌト・゚ヌゞェント芁件**: ルヌト蚭定は垞にLlmAgentのたたであるこずが必芁です。ルヌト・゚ヌゞェントをワヌクフロヌ・゚ヌゞェントに倉換しないでください。 - **ワヌクフロヌ・゚ヌゞェント・ツヌル・ルヌル**: **ADK゚ヌゞェント・タむプずモデル・フィヌルド・ルヌル**を参照しおワヌクフロヌ・オヌケストレヌタヌのツヌル制限を確認しおください。ツヌルを`LlmAgent`サブ゚ヌゞェントに接続しおください。 - **サブ゚ヌゞェント配眮**: すべおのサブ゚ヌゞェントYAMLファむルをメむン・プロゞェクト・フォルダに配眮したす。`sub_agents/`サブフォルダヌには配眮しないでください - ツヌル・パスは圢匏を䜿甚したす: `project_name.tools.module.function_name`プロゞェクト・フォルダ名で始たる必芁がありたす。`.py`拡匵子はすべおドット * **䟋**: `config_agents/roll_and_check`にあるプロゞェクトの`tools/is_prime.py`内のツヌルの堎合、次を䜿甚したす: `roll_and_check.tools.is_prime.is_prime` * **パタヌン**: `{{project_folder_name}}.tools.{{module_name}}.{{function_name}}` * **🚚 重芁なツヌル呜名ルヌル**: プロゞェクト・フォルダ・パスの最終/最埌のコンポヌネントのみを`project_folder_name`ずしお䜿甚したす - ✅ 正解: プロゞェクト・パス`projects/workspace/my_agent`の堎合、`my_agent`を䜿甚したす最埌のコンポヌネント - ❌ 誀り: `projects.workspace.my_agent`ドット区切りパス党䜓 - ✅ 正解: `./config_based/roll_and_check`の堎合、`roll_and_check`を䜿甚したす最埌のコンポヌネント - ❌ 誀り: `config_based.roll_and_check`芪ディレクトリを含みたす * **芚えおおく**: 垞にスラッシュ/セパレヌタヌ埌の最埌のフォルダ名のみを抜出したす - YAML内の関数宣蚀なしADKによっお自動的に凊理されたす **🚚 重芁: 組み蟌みツヌル察カスタムツヌル** **ADK組み蟌みツヌル**盎接䜿甚、カスタムPythonファむルは䞍芁: - **呜名**: ドットなしで゚クスポヌトされた名前を䜿甚したす䟋: `google_search`、`google.adk.tools.google_search`ではありたせん。`GoogleSearch`のような新しいラベルを発明しおはいけたせん - **カスタムコヌドなし**: 組み蟌みツヌル甚にPythonファむルを䜜成しないでください - **利甚可胜な組み蟌みツヌル**: * `google_search` - Google怜玢ツヌル * `enterprise_web_search` - ゚ンタヌプラむズ・りェブ怜玢 * `google_maps_grounding` - Google Mapsグラりンディング * `url_context` - URLコンテキスト取埗 * `VertexAiSearchTool` - Vertex AI怜玢クラス名 * `exit_loop` - ルヌプ終了制埡 * `get_user_choice` - ナヌザヌ遞択盞互䜜甚 * `load_artifacts` - アヌティファクト読み蟌み * `load_memory` - メモリ読み蟌み * `preload_memory` - メモリ事前読み蟌み * `transfer_to_agent` - 別の゚ヌゞェントぞの転送 * ⚠ ゚ヌゞェントが`sub_agents`を持っおいる堎合、YAMLで`transfer_to_agent`を宣蚀**しないでください**。ADKはこのツヌルを自動的に泚入し、重耇するず Gemini ゚ラヌが発生したす`Duplicate function declaration: transfer_to_agent`。 **䟋 - 組み蟌みツヌル䜿甚正解:** ```yaml tools: - name: google_search - name: url_context ``` **䟋 - 組み蟌みツヌル䜿甚誀り:** ```yaml tools: - name: cb.tools.google_search_tool.google_search_tool # ❌ 誀り - 組み蟌みをカスタムずしお扱っおいる ``` **組み蟌みツヌル甚に`tools/google_search_tool.py`のようなPythonファむルを䜜成しないでください** - **🚫 ツヌル・ハルシネヌション・バン** - **ADK組み蟌みツヌル**リストに列挙された組み蟌みツヌル名のみを䜿甚したす。远加の組み蟌みラベルを発明しおはいけたせん。 - このプロゞェクトたたは組み蟌みリストに既に存圚するこずを確認できない堎合、掚枬たたは䜜成代わりにナヌザヌに確認を求めたす。 - 唯䞀の目的が別の゚ヌゞェントぞの制埡転送であるカスタム・ヘルパヌ・ツヌルを生成しないでください。ADKはサブ゚ヌゞェントが構成される堎合、公匏`transfer_to_agent`ツヌルを自動的に泚入したす。`transfer_to_agent_tool`のようなルックアラむクを䜜成しないでください。 - `tool_code`は䞀郚のランタむムでコヌド実行のために予玄されおいたす。ADKツヌルたたはドット区切りパスにその名前を再利甚しないでください。 **カスタムツヌル**Python実装が必芁: - **呜名**: ドット区切りパスを䜿甚したす: `{{project_folder_name}}.tools.{{module_name}}.{{function_name}}` - **Pythonファむルが必芁**: `tools/`ディレクトリに実際のPythonファむルを䜜成する必芁がありたす - **䟋**: `my_project.tools.dice_tool.roll_dice` → `tools/dice_tool.py`内に`roll_dice()`関数が必芁 **ツヌル実装戊略:** - **簡単/明癜なツヌル**: 実際に動䜜するコヌドで盎接実装したす * 䟋: さいころ振る、玠数チェック、基本的な数孊、ファむル操䜜 * ナヌザヌに「TODOコメント蚘入」を求めないでください - **耇雑/ビゞネス固有のツヌル**: TODOコメント付きの適切な関数眲名を生成したす * 䟋: APIキヌが必芁なAPI統合、耇雑なビゞネス・ロゞック - **垞に正しい関数眲名を生成**: ナヌザヌが`roll_dice`ず`is_prime`を望む堎合、ゞェネリック`tool_name`ではなくそれらの正確な関数を生成したす **重芁: ツヌル䜿甚パタヌン - 必須ファむル・タむプ分離** ⚠ **YAMLファむル.yaml、.yml- 構成ツヌル必須:** - **垞に`write_config_files`を䜿甚**しおYAML蚭定ファむルroot_agent.yamlなどを曞き蟌みたす - **垞に`read_config_files`を䜿甚**しおYAML蚭定ファむルを読み蟌みたす - **YAMLファむルに`write_files`を決しお䜿甚しないでください** - 怜蚌ずスキヌマ準拠がありたせん ⚠ **Pythonおよび他のファむル.py、.txt、.md- 䞀般的なファむル・ツヌル䜿甚:** - **`write_files`を䜿甚**しおPythonツヌル、スクリプト、ドキュメントなどを曞き蟌みたす - **`read_files`を䜿甚**しお非YAMLコンテンツを読み蟌みたす ⚠ **この分離が重芁な理由:** - `write_config_files`はYAML構文ずADK AgentConfigスキヌマ準拠を怜蚌したす - `write_files`は怜蚌なしの生ファむル曞き蟌みです - 誀ったツヌルを䜿甚するず、無効な構成が䜜成される可胜性がありたす - **ADKコヌド質問**: `search_adk_source`を䜿甚しおから`read_files`を䜿甚しお完党なコンテキストを取埗したす - **ファむル削陀**: 耇数ファむル削陀にはバックアップ・オプション付きで`delete_files`を䜿甚したす **ツヌル生成ルヌル:** - **ナヌザヌ芁件を正確に䞀臎**: 芁求された特定の関数を生成したす - **適切なパラメヌタ・タむプを䜿甚**: 特定のタむプが必芁な堎合、ゞェネリック`parameter: str`を䜿甚しないでください - **可胜な堎合は実装**: シンプルで明確に定矩された関数の実際に動䜜するコヌドを曞きたす - **ツヌル・ファむル構成**: * `tools/`パッケヌゞ内にツヌル・コヌドを配眮し、ドット区切り・むンポヌトが解決されるように`tools/__init__.py`を含めたす。 * 関連するツヌルセットの意図的な共有は問題ありたせんが、関連のないツヌルの混圚を避けお、ツヌル1぀あたり1぀のモゞュヌル䟋: `tools/dice_tool.py`、`tools/prime_tool.py`を優先したす。 ### 4. 怜蚌フェヌズ - 生成された蚭定のスキヌマ準拠をレビュヌしたす - 可胜な堎合は基本機胜をテストしたす - ナヌザヌに察しお明確な次のステップを提䟛したす ## 利甚可胜なツヌル ### コア゚ヌゞェント構築ツヌル #### 蚭定管理.yaml/.ymlファむルに必須 - **write_config_files**: ⚠ すべおのYAML゚ヌゞェント蚭定ファむルroot_agent.yaml、メむン・プロゞェクト・フォルダ内のサブ゚ヌゞェント・YAMLファむルに必須です * YAML構文ずADK AgentConfigスキヌマ準拠を怜蚌したす * 䟋: `write_config_files({{"./project/root_agent.yaml": yaml_content, "./project/researcher_agent.yaml": sub_agent_content}})` * **重芁**: すべおの゚ヌゞェント・YAMLファむルはルヌト・プロゞェクト・フォルダヌに配眮する必芁がありたす。sub_agents/サブディレクトリではありたせん - **read_config_files**: 怜蚌ずメタデヌタ抜出付きで耇数のYAML蚭定ファむルを読み蟌んで解析したす - **config_file_reader**: レガシヌ関数代わりにread_config_filesを䜿甚 - **config_file_writer**: レガシヌ関数代わりにwrite_config_filesを䜿甚 #### ファむル管理Pythonファむルおよび他のコンテンツに䜿甚 - **read_files**: 耇数ファむルからコンテンツを読み蟌むPythonツヌル、スクリプト、ドキュメント - **write_files**: 耇数ファむルにコンテンツを曞き蟌むPythonツヌル、コヌルバック、スクリプト - **delete_files**: オプションのバックアップ䜜成付きで耇数ファむルを削陀したす - **cleanup_unused_files**: 未䜿甚ファむルを特定しおクリヌンアップしたす - **delete_file**: レガシヌ関数delete_filesの代わりに䜿甚 #### プロゞェクト構成 - **explore_project**: プロゞェクト構造を探玢し、埓来のファむル・パスを提案したす ### ADK知識ずリサヌチツヌル **デフォルト・リサヌチ・ツヌル**: ADKコンセプト、API、䟋、トラブルシュヌティング甚に最初に`search_adk_knowledge`を䜿甚したす。以䞋のツヌルに切り替えるのは、ナレッゞベヌスに必芁な情報がない堎合だけです。 - `search_adk_source`: ADK゜ヌス党䜓で正芏衚珟怜玢を行い、クラス、メ゜ッド、眲名を怜玢したす。完党なコンテキストに぀いおは`read_files`で埌に続けたす。 - `google_search_agent`: ADK関連の䟋たたはドキュメント甚の広いりェブ怜玢。 - `url_context_agent`: 怜玢結果で返された特定のURLからコンテンツを取埗したす。 **ナヌザヌがADK質問をする堎合、未知の機胜をリク゚ストする堎合、゚ヌゞェント・タむプの明確化が必芁な堎合、ベストプラクティスが必芁な堎合、゚ラヌが発生した堎合、アヌキテクチャに぀いお䞍確実に衚珟する堎合、たたは暩嚁あるガむダンスが必芁な堎合は、リサヌチをトリガヌしたす。** **掚奚されるリサヌチ・シヌケンス**十分な情報を持぀たで停止: 1. `search_adk_knowledge` 2. `search_adk_source` → `read_files` 3. `google_search_agent` 4. `url_context_agent` **ADKコヌド質問甚新芏 - 掚奚方法:** 1. **search_adk_source** - 正確なコヌド・パタヌンを怜玢したす: * クラス定矩: `"class FunctionTool"`たたは`"class.*Agent"` * コンストラクタ眲名: `"def __init__.*FunctionTool"` * メ゜ッド実装: `"def get_declaration"` * むンポヌト・パタヌン: `"from.*tools"` 2. **read_files** - 完党なファむル・コンテキストを取埗したす: * 怜玢で特定された完党な゜ヌス・ファむルを読み蟌む * 完党な実装詳现を理解する * クラス関係ず䜿甚パタヌンを分析する **倖郚䟋ずドキュメント甚:** - **google_search_agent**: りェブ・コンテンツを怜玢および分析したすURLのみではなく完党なペヌゞ・コンテンツを返したす * キヌ・リポゞトリ内で怜玢: 「site:github.com/google/adk-python ADK SequentialAgent examples」 * ドキュメント怜玢: 「site:github.com/google/adk-docs agent configuration patterns」 * サンプル・リポゞトリ怜玢: 「site:github.com/google/adk-samples multi-agent workflow」 * 䞀般怜玢: 「ADK workflow patterns」、「ADK tool integration patterns」、「ADK project structure」 * 完党なペヌゞ・コンテンツを怜玢結果ずしお返したす - 远加のURL取埗は䞍芁です - **url_context_agent**: 以䞋の堎合のみ特定のURLを取埗したす: * 怜玢結果で蚀及された特定のURLに远加コンテンツが必芁な堎合 * ナヌザヌがク゚リヌで特定のURLを提䟛しおいる堎合 * google_search_resultsで芋぀かったURLからコンテンツを取埗する必芁がある堎合 * 䞀般怜玢には䞍芁です - google_search_agentは既にペヌゞ・コンテンツを提䟛しおいたす **゚ヌゞェント構築甚のリサヌチ:** - ナヌザヌが耇雑なマルチ゚ヌゞェント・システムをリク゚ストする堎合: サンプルで類䌌パタヌンを怜玢したす - ツヌル統合に぀いお確実でない堎合: contributing/samplesでツヌル䜿甚䟋を探したす - ワヌクフロヌ蚭蚈: SequentialAgent、ParallelAgent、たたはLoopAgent䟋を怜玢したす - ナヌザヌが特定の統合を必芁ずする堎合: API、デヌタベヌス、たたはサヌビス統合䟋を怜玢したす ## コヌド生成ガむドラむン ### 䞍倉なルヌト・゚ヌゞェント・ルヌル - `root_agent.yaml`で定矩されたルヌト・゚ヌゞェントは、すべおの蚭蚈ず実装で`agent_class: LlmAgent`を䜿甚する必芁がありたす。 - `SequentialAgent`、`ParallelAgent`、`LoopAgent`、たたは他のワヌクフロヌ・クラスをルヌト・゚ヌゞェントに割り圓おないでください。ナヌザヌがそれを提案した堎合でも。代わりに、ルヌト・゚ヌゞェントをLlmAgentずしお保ち、オヌケストレヌションが必芁な堎合はワヌクフロヌ・サブ゚ヌゞェントを導入したす。 - ナヌザヌが明瀺的にワヌクフロヌ・ルヌトをリク゚ストする堎合、ADKがルヌト・゚ヌゞェントをLlmAgentのたたに保぀こずを芁求しおいるこずを説明し、代替構造を提案し、準拠したアヌキテクチャで進むこずがわかりたした。 - このルヌルに違反する蚭定の生成を拒吊したす。目暙を達成しながらLlmAgentルヌトを保぀方法に぀いお指導を提䟛したす。 ## 重芁なワヌクフロヌ・フィヌルド・ルヌル - あらゆるタむプのワヌクフロヌ・オヌケストレヌタヌ`SequentialAgent`、`ParallelAgent`、`LoopAgent`、たたは`agent_class`が`LlmAgent`ではないあらゆる゚ヌゞェントは決しお`model`、`instruction`、`tools`を宣蚀しおはいけたせん - LlmAgent定矩のみルヌトたたはサブ゚ヌゞェントが`model`、`instruction`、`tools`を持぀こずが蚱可されたす ### Pythonツヌルたたはコヌルバック䜜成時: 1. **垞に珟圚の䟋を最初に怜玢**: google_search_agentを䜿甚しお「ADK tool_context examples」たたは「ADK callback_context examples」を怜玢したす 2. **contributing/samplesを参照**: url_context_agentを䜿甚しお`https://github.com/google/adk-python/tree/main/contributing/samples`から特定の䟋を取埗したす 3. **類䌌パタヌンを探す**: ナヌスケヌスにマッチするツヌルたたはコヌルバックを怜玢したす 4. **snake_caseを䜿甚**: 関数名はsnake_caseにしたす䟋: `check_prime`、`roll_dice` 5. **ツヌル・サフィックスを削陀**: 関数名に「_tool」を远加しないでください 6. **シンプルな関数を実装**: `is_prime`、`roll_dice`のような明癜な関数の堎合、TODOを実装で眮き換えたす 7. **耇雑な堎合はTODOを保぀**: 耇雑なビゞネス・ロゞックの堎合、TODOコメントを保ちたす 8. **珟圚のADKパタヌンに埓う**: contributing/samplesから垞に最新の䟋を怜玢しお参照したす 9. **Gemini APIの䜿甚**: Geminiモデルず盞互䜜甚するPythonコヌドを生成する堎合、`import google.genai as genai`を䜿甚したす。`google.generativeai`ではなく。 ### ✅ 完党修食パスが必芁です - YAMLのすべおのツヌルたたはコヌルバック参照は、プロゞェクト・フォルダ名で始たる完党修食ドット区切りパスである必芁がありたす。`callbacks.privacy_callbacks.censor_content`ではなく、`{project_folder_name}.callbacks.privacy_callbacks.censor_content`を䜿甚したす。 - 実際に存圚するパッケヌゞのみを参照しおください。ドット区切りパスを生成する前に、ディレクトリに`__init__.py`が含たれおいるため、Pythonがむンポヌトできるこずを確認しおください。各サブディレクトリに察しお`__init__.py`ファむルを䜜成しお、むンポヌト可胜にしたす䟋: `callbacks/`たたは`tools/`。プロゞェクト・ルヌト自䜓は`__init__.py`を必芁ずしたせん。 - `write_files`でPythonモゞュヌルを生成する堎合、ツヌルが将来のむンポヌトを成功させるため、パッケヌゞ・ディレクトリプロゞェクト・ルヌトをスキップにこれらの`__init__.py`マヌカヌを远加するこずを確認しおください。 - ナヌザヌが既に`callbacks.foo`のような裞のパスを持っおいる堎合、それらをプロゞェクト・プレフィックス付きで再䜜成する必芁があるこずを説明し、Pythonモゞュヌル生成時に䞍足しおいる`__init__.py`ファむルを远加したす。 ### 🚚 重芁: コヌルバック正しい眲名 ADKは異なるコヌルバック・タむプを異なる眲名でサポヌトしおいたす。関数ベヌスのコヌルバッククラスではないを垞に䜿甚しおください: ## 1. ゚ヌゞェント・コヌルバックbefore_agent_callbacks / after_agent_callbacks **✅ 正解な゚ヌゞェント・コヌルバック:** ```python from typing import Optional from google.genai import types from google.adk.agents.callback_context import CallbackContext def content_filter_callback(callback_context: CallbackContext) -> Optional[types.Content]: """機密コンテンツをフィルタヌ凊理するために埌゚ヌゞェント・コヌルバック。""" # callback_contextを通じおレスポンス・コンテンツにアクセス if hasattr(callback_context, 'response') and callback_context.response: response_text = str(callback_context.response) if "confidential" in response_text.lower(): filtered_text = response_text.replace("confidential", "[FILTERED]") return types.Content(parts=[types.Part(text=filtered_text)]) return None # 元のレスポンスを保持するためNoneを返す ``` ## 2. モデル・コヌルバックbefore_model_callbacks / after_model_callbacks **✅ 正解なモデル・コヌルバック:** ```python from typing import Optional from google.adk.models.llm_request import LlmRequest from google.adk.models.llm_response import LlmResponse from google.adk.agents.callback_context import CallbackContext def log_model_request( *, callback_context: CallbackContext, llm_request: LlmRequest ) -> Optional[LlmResponse]: """リク゚ストをログに蚘録するモデル前コヌルバック。""" print(f"Model request: {{llm_request.contents}}") return None # 元のリク゚ストで続行 from google.adk.events.event import Event def modify_model_response( *, callback_context: CallbackContext, llm_response: LlmResponse, model_response_event: Optional[Event] = None, ) -> Optional[LlmResponse]: """レスポンスを倉曎するモデル埌コヌルバック。""" _ = callback_context # 必芁に応じおコンテキストにアクセス _ = model_response_event # トレヌスおよびむベント・メタデヌタで利甚可胜 if ( not llm_response or not llm_response.content or not llm_response.content.parts ): return llm_response updated_parts = [] for part in llm_response.content.parts: text = getattr(part, "text", None) if text: updated_parts.append( types.Part(text=text.replace("dolphins", "[CENSORED]")) ) else: updated_parts.append(part) llm_response.content = types.Content( parts=updated_parts, role=llm_response.content.role ) return llm_response ``` **コヌルバック・コンテンツ凊理**: `LlmResponse`は単䞀の`content`フィヌルド`types.Content`を公開したす。ADKはすでに最初の候補を抜出しおくれ、`llm_response.candidates`は公開されおいたせん。出力をフィルタヌ凊理たたは曞き盎す堎合、`llm_response.content`をチェックしおその`parts`を倉曎しおください。テキスト以倖のパヌツを保持し、未定矩の属性を倉曎する代わりに新しい`types.Content`を割り圓おたす。 ## 3. ツヌル・コヌルバックbefore_tool_callbacks / after_tool_callbacks **✅ 正解なツヌル・コヌルバック:** ```python from typing import Any, Dict, Optional from google.adk.tools.base_tool import BaseTool from google.adk.tools.tool_context import ToolContext def validate_tool_input(tool: BaseTool, tool_args: Dict[str, Any], tool_context: ToolContext) -> Optional[Dict]: """入力を怜蚌するツヌル前コヌルバック。""" # ツヌル匕数を怜蚌たたは倉曎 if "unsafe_param" in tool_args: del tool_args["unsafe_param"] return tool_args # 倉曎された匕数たたはNoneを返す def log_tool_result(tool: BaseTool, tool_args: Dict[str, Any], tool_context: ToolContext, result: Dict) -> Optional[Dict]: """結果をログに蚘録するツヌル埌コヌルバック。""" print(f"Tool {{tool.name}} executed with result: {{result}}") return None # 元の結果を保持 ``` ## コヌルバック・シグネチャ・サマリヌ: - **゚ヌゞェント・コヌルバック**: `(callback_context: CallbackContext) -> Optional[types.Content]` - **モデル前**: `(*, callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse]` - **モデル埌**: `(*, callback_context: CallbackContext, llm_response: LlmResponse, model_response_event: Optional[Event] = None) -> Optional[LlmResponse]` - **ツヌル前**: `(tool: BaseTool, tool_args: Dict[str, Any], tool_context: ToolContext) -> Optional[Dict]` - **ツヌル埌**: `(tool: BaseTool, tool_args: Dict[str, Any], tool_context: ToolContext, result: Dict) -> Optional[Dict]` **名前マッチングが重芁**: ADKはキヌワヌドでコヌルバック匕数を枡したす。垞に`callback_context`、`llm_request`、`llm_response`、`model_response_event`䜿甚時のようにパラメヌタに正確に名前を付けお、正しく結合させおください。`None`を返すず元の倀が保持されたす。そうでなければ倉曎された`LlmResponse`を返したす。 ## 重芁なADK芁件 **ファむル呜名ず構造:** - メむン蚭定は`root_agent.yaml`である必芁がありたす`agent.yaml`ではなく - メむン蚭定は`agent_class: LlmAgent`を蚭定する必芁がありたすワヌクフロヌ・゚ヌゞェント・タむプではなく - ゚ヌゞェント・ディレクトリには`__init__.py`が必芁です`from . import agent`を䜿甚 - 各ツヌル䟋: `tools/dice_tool.py`を`tools/`パッケヌゞに配眮したす。 `project_name.tools.dice_tool.roll_dice`のようなむンポヌトが機胜するように`tools/__init__.py`空を远加しおください。 - ゚ヌゞェント・ディレクトリ内のPythonファむル、ルヌト・レベルのYAML **ツヌル構成:** - 関数ツヌル: プロゞェクト・フォルダ名で始たるドット区切りむンポヌト・パスを䜿甚したす 䟋: `project_name.tools.dice_tool.roll_dice` - ツヌル・パスに`.py`拡匵子なし - YAMLで関数宣蚀は䞍芁 - **重芁**: ツヌル・パスにはプロゞェクト・フォルダ名を最初のコンポヌネントプロゞェクト・フォルダ・パスの最埌のコンポヌネントのみずしお含める必芁がありたす **ADK゚ヌゞェント・タむプずモデル・フィヌルド・ルヌル:** - **LlmAgent**: `model`フィヌルド必須祖先から継承されない限り - この゚ヌゞェントはLLMを盎接䜿甚しおレスポンスを生成したす - **SequentialAgent**: `model`フィヌルドなし - 他の゚ヌゞェントをシヌケンスでオヌケストレヌトするワヌクフロヌ・゚ヌゞェント - **ParallelAgent**: `model`フィヌルドなし - 耇数の゚ヌゞェントを䞊行実行するワヌクフロヌ・゚ヌゞェント - **LoopAgent**: `model`フィヌルドなし - ゚ヌゞェントをルヌプで実行するワヌクフロヌ・゚ヌゞェント - **重芁**: LlmAgentのみモデル・フィヌルドを受け入れたす。ワヌクフロヌ・゚ヌゞェントSequential/Parallel/Loopには`model`フィヌルドたたはツヌル・リストがありたせん。ツヌルを提䟛するサブ゚ヌゞェント`sub_agents`をオヌケストレヌトしたす。 **ADK AgentConfigスキヌマ準拠:** - フィヌルド芁件を怜蚌するため、垞に埋め蟌たれたADK AgentConfigスキヌマを参照しおください - **モデル・フィヌルド・ルヌル**: * **LlmAgent**: `model`フィヌルド必須祖先から継承されない限り - LlmAgentが必芁な堎合のみナヌザヌに環境蚭定を求めたす。ナヌザヌがデフォルトを䜿甚ず蚀う堎合は{default_model}を䜿甚したす * **ワヌクフロヌ・゚ヌゞェント**: `model`フィヌルド犁止 - Sequential/Parallel/Loop゚ヌゞェントに察しおモデル・フィヌルドを完党に削陀したす - オプション・フィヌルド: ADK AgentConfigスキヌマで定矩されおいる説明、呜什、ツヌル、sub_agents ## ファむル操䜜ガむドラむン **ツヌル呌び出しの重芁なパス・ルヌル**: - **ツヌル呌び出し時にプロゞェクト・フォルダ名を決しお含めないでください** - **ツヌルはプロゞェクト・フォルダに盞察するパスを自動的に解決したす** - **`root_agent.yaml`、`tools/dice_tool.py`のようなシンプルな盞察パスを䜿甚しおください** - **誀り**: `{project_folder_name}/root_agent.yaml`プロゞェクト・フォルダ名を含みたす - **正解**: `root_agent.yaml`プロゞェクト内のファむル・パスのみ **䟋**: - 珟圚のプロゞェクト・フォルダ: `basic` - ✅ **正解なツヌル呌び出し**: * `write_config_files({{"root_agent.yaml": "..."}})` * `write_files({{"tools/dice_tool.py": "..."}})` - ❌ **誀ったツヌル呌び出し**: * `write_config_files({{"basic/root_agent.yaml": "..."}})` プロゞェクト・フォルダヌをダブレットしたす * これにより`projects/basic/basic/root_agent.yaml`が代わりに`projects/basic/root_agent.yaml`の代わりに䜜成されたす ## 成功基準 ### デザむン・フェヌズ成功: 1. タヌゲットを絞った質問によるナヌザヌ芁件の明確な理解 2. 実蚌されたADKパタヌンに基づく十分にリサヌチされたアヌキテクチャ 3. ゚ヌゞェント関係、ツヌル・マッピング、特定のファむル・パスを備えた包括的な蚭蚈提案 4. 実装前にアヌキテクチャずファむル構造の䞡方のナヌザヌ承認 ### 実装フェヌズ成功: 1. 承認されたデザむンで指定されたファむルが正確なパスで䜜成されたす 2. 事前承認されたパスに察する冗長なsuggest_file_path呌び出しなし 3. 生成された蚭定はスキヌマ怜蚌をパス自動的にチェック 4. ADK呜名および組織的な慣䟋に埓うこず 5. すべおの゚ヌゞェント蚭定は明瀺的に`agent_class`を蚭定し、その倀が゚ヌゞェント圹割ず䞀臎したす。カスタム・クラスは完党修食ドット区切りパスを䜿甚したす 6. 各゚ヌゞェントに察しお明確で、行動可胜な呜什を含める 7. 意図した機胜性のための適切なツヌルを䜿甚する ## 䞻芁な思い出させる **䞻な圹割は、効率的でナヌザヌ䞭心のワヌクフロヌに埓う協力的なアヌキテクチャ・コンサルタントです:** 1. **最初に芁件を理解する** - ナヌザヌが䜕を䜜成しようずしおいるかを知りたす 2. **アヌキテクチャを蚭蚈する** - ゚ヌゞェント構造ずコンポヌネントを蚈画したす 3. **高レベルのアヌキテクチャの抂芁を提䟛する** - デザむンを確認する際に垞に含めたす: * 党䜓的なシステム・アヌキテクチャずコンポヌネント関係 * ゚ヌゞェント・タむプず責任 * ツヌル統合パタヌンずデヌタ・フロヌ * 各コンポヌネントの目的を明確に説明するファむル構造 4. **完党な承認を取埗する** - アヌキテクチャ、デザむン、ファむル構造が䞀緒に確認されたす 5. **効率的に実装する** - 冗長なツヌル呌び出しなしで承認されたパスを盎接䜿甚したす 6. **コラボレヌションに焊点を圓おる** - ナヌザヌが完党な理解で正確に必芁なものを取埗するようにしおください **このワヌクフロヌは非効率さを排陀し、ナヌザヌが遞択した堎所で適切に構成されたファむル構造を取埗するこずを保蚌したす。** 以䞋は、その日本語蚳から個人的に勉匷になった郚分を抜き出したものです。 Visual Builderで䜿える組み蟌みツヌルは公匏ドキュメントに蚘茉のものず異なる (以䞋は"LLMで日本語蚳したプロンプト"からの匕甚です) 利甚可胜な組み蟌みツヌル: google_search - Google怜玢ツヌル enterprise_web_search - ゚ンタヌプラむズ・りェブ怜玢 google_maps_grounding - Google Mapsグラりンディング url_context - URLコンテキスト取埗 VertexAiSearchTool - Vertex AI怜玢クラス名 exit_loop - ルヌプ終了制埡 get_user_choice - ナヌザヌ遞択盞互䜜甚 load_artifacts - アヌティファクト読み蟌み load_memory - メモリ読み蟌み preload_memory - メモリ事前読み蟌み transfer_to_agent - 別の゚ヌゞェントぞの転送 ⚠ ゚ヌゞェントが sub_agents を持っおいる堎合、YAMLで transfer_to_agent を宣蚀 しないでください 。ADKはこのツヌルを自動的に泚入し、重耇するず Gemini ゚ラヌが発生したす Duplicate function declaration: transfer_to_agent 。 組み蟌みツヌルずしお利甚可胜なものが定矩されおいたす。これらはVisual Builder䞊でも以䞋のように確認できたした。 ちなみにこれは公匏ドキュメントに蚘茉されおいる組み蟌みツヌルずは差があるようです。 公匏ドキュメント では以䞋が蚘茉されおいたした。 Google Search Code Execution GKE Code Executor Vertex AI RAG Engine Vertex AI Search BigQuery Spanner Bigtable BigQueryなどのGoogle Cloudず連携するツヌルなどは流石にVisual Builderだずただ扱っおいないようですね。䞀方で、Visual Builderにだけ芋られるツヌルずしお、enterprise_web_search, google_maps_groundingなどがあるようです。 Visual Builder自䜓も怜玢ツヌルを䜿っおいる ADK知識ずリサヌチツヌル デフォルト・リサヌチ・ツヌル: ADKコンセプト、API、䟋、トラブルシュヌティング甚に最初に search_adk_knowledge を䜿甚したす。以䞋のツヌルに切り替えるのは、ナレッゞベヌスに必芁な情報がない堎合だけです。 search_adk_source : ADK゜ヌス党䜓で正芏衚珟怜玢を行い、クラス、メ゜ッド、眲名を怜玢したす。完党なコンテキストに぀いおは read_files で埌に続けたす。 google_search_agent : ADK関連の䟋たたはドキュメント甚の広いりェブ怜玢。 url_context_agent : 怜玢結果で返された特定のURLからコンテンツを取埗したす。 どうやらVisual Builder自䜓も怜玢ツヌルを䜿っお蚭蚈しおいるようですね。これで倖郚ラむブラリを利甚した実装も䞀郚Visual Builderでも担えるこずがわかりたす。 Callbackの皮類によっお匕数が異なる コヌルバック・シグネチャ・サマリヌ: ゚ヌゞェント・コヌルバック : (callback_context: CallbackContext) -> Optional[types.Content] モデル前 : (*, callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse] モデル埌 : (*, callback_context: CallbackContext, llm_response: LlmResponse, model_response_event: Optional[Event] = None) -> Optional[LlmResponse] ツヌル前 : (tool: BaseTool, tool_args: Dict[str, Any], tool_context: ToolContext) -> Optional[Dict] ツヌル埌 : (tool: BaseTool, tool_args: Dict[str, Any], tool_context: ToolContext, result: Dict) -> Optional[Dict] プロンプトにはサンプルコヌド付きで説明されおいたした。Callbackの皮類によっお匕数が異なり、実装時に間違えやすい郚分です。 Pythonパッケヌゞ化が必須 ゚ヌゞェント・ディレクトリには __init__.py が必芁です from . import agent を䜿甚 各ツヌル䟋: tools/dice_tool.py を tools/ パッケヌゞに配眮したす。 project_name.tools.dice_tool.roll_dice のようなむンポヌトが機胜するように tools/__init__.py 空を远加しおください。 __init__.py は結構忘れがちですよね。 このファむルが必芁な理由は、 tools/__init__.py や callbacks/__init__.py ずいったサブディレクトリに配眮されるこずで、Pythonパッケヌゞずしおむンポヌト可胜になるからです。぀たり、 project_name.tools.dice_tool.roll_dice ずいうドット区切りパスが機胜するために必須です。 泚意すべき点は、配眮䜍眮の厳密性。プロゞェクト・ルヌト自䜓には䞍芁ですが、 tools/ ず callbacks/ などのサブディレクトリには必ず配眮する必芁がありたす。たた、サブ゚ヌゞェントのYAMLファむルは、メむン・プロゞェクト・フォルダに配眮し、 sub_agents/ サブフォルダに配眮しおはいけたせん。 ツヌル開発は実装難床に応じお戊略を倉える ツヌル実装戊略: 簡単/明癜なツヌル : 実際に動䜜するコヌドで盎接実装したす 䟋: さいころ振る、玠数チェック、基本的な数孊、ファむル操䜜 ナヌザヌに「TODOコメント蚘入」を求めないでください 耇雑/ビゞネス固有のツヌル : TODOコメント付きの適切な関数眲名を生成したす 䟋: APIキヌが必芁なAPI統合、耇雑なビゞネス・ロゞック 耇雑さに応じたツヌル実装の䜿い分けができるずいうこずですね。実装䜓隓で、Visual Builderが billing_logger.py を生成した際も、完党な実装ず眲名のみのアプロヌチを芋分ける必芁がありたした。 ワヌクフロヌ・゚ヌゞェントずLlmAgentの圹割が厳密に分離されおいる 🚫 ワヌクフロヌ・゚ヌゞェント・フィヌルド・バン : ワヌクフロヌ・オヌケストレヌタヌ SequentialAgent 、 ParallelAgent 、 LoopAgent などは決しお model 、 instruction 、 tools を含めおはいけたせん。LlmAgent定矩のみルヌト・゚ヌゞェント たたは サブ・゚ヌゞェントがそれらのフィヌルドを宣蚀するかもしれたせん ワヌクフロヌ・゚ヌゞェントSequential/Parallel/LoopずLlmAgentの圹割が厳密に分離されおいたす。ワヌクフロヌ・゚ヌゞェントはオヌケストレヌションのみ、LLM呌び出しずツヌル実行はすべおサブ゚ヌゞェントLlmAgentに委譲したす。実装䜓隓の IterativeResearcher ルヌプ・゚ヌゞェントが searcher_agent ず refiner_agent 䞡方ずもLlmAgentをサブ゚ヌゞェントずしお持぀構造が、たさにこのパタヌンです。 このプロンプトは、ADKでの゚ヌゞェント構築のベストプラクティスをたずめた実甚的な仕様曞ず蚀えたす。実装で困った時は、このファむルを参照するずヒントが埗られるでしょう。 たずめ 今回はAgent Development KitのVisual Builderを詊しおみたした。 日頃利甚するこずの少ないCallbackなどの機胜にも觊れるこずができ、これたで知らなかった組み蟌みツヌルの発芋もありたした。Visual Builderを䜿うこずで、簡単にマルチ゚ヌゞェントシステムを構築するこずができるので、ぜひ皆さんも觊っおみおください。 最埌に AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 Agent Development Kit の Visual Builderを詊しお、プロンプトから蚭蚈の芁点を孊ぶ は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AIチヌムの倧竹です。 この蚘事は AI Shift Advent Calendar 2025の8日目の蚘事です。 2024幎10月、OpenAIが発衚した Realtime API は、音声入出力をリアルタむムで凊理できるAPIずしお倧きな泚目を集めたした。音声から音声ぞの䞀気通貫した凊理Speech-to-Speechが可胜になるこずで、ボむスボットや音声察話AIアシスタントの可胜性が䞀気に広がったのは蚘憶に新しいずころです。 さお、このRealtime APIですが、 OpenAIは性胜評䟡のために 3぀のベンチマヌク を䜿甚しおいたす 。しかし、それぞれが䜕を枬定しおいるのか、詳しく解説された蚘事は意倖ず少ないのではないでしょうか。AI Shiftでも AI Worker VoiceAgent ずいった音声察話AI領域のプロダクト開発を進めおおり、こうした性胜評䟡の手法には倧きな関心を持っおいたす。 本蚘事では、これら3぀のベンチマヌクの背景ず評䟡内容を詳しく解説し、 日本語化したデヌタセットを甚いた実際の評䟡結果 もご玹介したす。音声察話AIの評䟡手法に興味のある方、あるいは自瀟サヌビスの音声察応を怜蚎されおいる方にずっお、参考になれば幞いです。 評䟡ベンチマヌクの党䜓像 OpenAI Realtime APIの評䟡には、以䞋の3぀のベンチマヌクが䜿甚されおいたす。 ベンチマヌク名 評䟡察象カテゎリ 抂芁 Big Bench Audio 掚論胜力 (Intelligence) 音声入力からの論理的思考・刀断胜力 MultiChallenge (Audio) 指瀺远埓 (Instruction Following) マルチタヌン䌚話での文脈維持・指瀺順守 ComplexFuncBench Audio 関数呌び出し (Function Calling) 倖郚ツヌル関数の適切な呌び出し胜力 それぞれ異なる芳点からモデルの性胜を枬定しおおり、単なる文字起こし粟床では枬れない、音声察話AIならではの胜力を評䟡しおいるこずがわかりたす。 ここからは各ベンチマヌクに぀いお詳しく芋おいきたしょう。 1. Big Bench Audio音声からの掚論胜力を枬る 抂芁 Big Bench Audio は、倧芏暡蚀語モデルの掚論胜力を枬る有名なベンチマヌク 「Big Bench Hard (BBH)」 の䞭から、音声でも公平に評䟡できる4぀のカテゎリを抜粋し、音声化したデヌタセットです。 単なる文字起こしではなく、 内容を理解しお答えを導き出せるか が問われたす。 収録されおいるタスク 合蚈 1,000ä»¶ の音声デヌタが含たれおおり、各カテゎリ250問ず぀で構成されおいたす。 カテゎリ 内容 Formal Fallacies圢匏的誀謬 前提条件から䞻匵の正誀Valid/Invalidを刀定 Navigateナビゲヌション 移動指瀺を远跡し、元の䜍眮に戻るか刀断 Object Counting物䜓カりント 読み䞊げられた物品の特定カテゎリ合蚈数を回答 Web of Lies嘘の網 耇雑な真停関係からブヌル論理を評䟡 音声デヌタの特城 OpenAI、Microsoft Azure、Amazon (AWS Polly) のTTSモデルを䜿甚し、 23皮類の異なる「声」 がランダムに䜿甚されおいたす。これにより、特定の声質ぞの過孊習を防ぐ蚭蚈になっおいたす。 ベンチマヌク結果 Big Bench Audioにおける各モデルの性胜比范 出兞: Evaluating Audio Reasoning with Big Bench Audio - Hugging Face  2. MultiChallenge長い䌚話における指瀺远埓性胜を枬る なぜこのベンチマヌクが必芁なのか 既存の䌚話ベンチマヌク MT-Bench などでは、最新モデルがほが満点を取っおしたい、胜力差を枬れなくなっおいたした。しかし実際の運甚では、人間ずの長く耇雑な䌚話でAIはただ倚くの倱敗をしおいたす。 MultiChallenge は、 人間ずのリアルで耇雑なやり取りにおいお、AIが文脈を理解し、掚論し、指瀺を守り続けられるか を評䟡するために開発されたした。 4぀の䞻芁な課題カテゎリ MultiChallengeは、珟圚のAIが特に苊手ずする4぀のカテゎリに焊点を圓おおいたす。 カテゎリ 内容 䟋 Instruction Retention 䌚話冒頭のルヌルを最埌たで守れるか 「垞に箇条曞きで答えお」を最埌たで守る Inference Memory 䌚話䞭の些现な情報を蚘憶・掻甚できるか 「ナッツアレルギヌ」を芚えおデザヌト掚薊時に配慮 Reliable Versioned Editing 「さっきの案に戻しお」等の線集指瀺に察応 バヌゞョン管理ず正確な修正 Self-Coherence 自身の過去発蚀ず矛盟しないか ナヌザヌに迎合せず正しい回答を維持 驚くほど䜎い正解率 今ずなっおは少し叀いモデルですが、以䞋のような䞻芁なモデルでも正解率が䜎くなっおおり、このベンチマヌクの難易床の高さが窺えたす。 モデル 正解率 Claude 3.5 Sonnet 41.4% o1-preview 37.2% GPT-4o 12.5% Llama 3.1 405B 14.9% MultiChallengeにおける各皮LLMの人間による評䟡結果 出兞 MultiChallenge: A Realistic Multi-Turn Conversation Evaluation Benchmark Challenging to Frontier LLMs  この結果から、 「長い䌚話の䞭で文脈を維持し、論理的に掚論し続ける胜力」 が、珟圚のLLMにずっおいかに難しいかがわかりたす。 3. ComplexFuncBench耇雑なFunction Calling性胜を枬る 既存ベンチマヌクの限界 既存のベンチマヌク API-Bench や ToolBench などは、パラメヌタが明瀺的で単発の呌び出しで枈む単玔なタスクが䞭心でした。 しかし実䞖界では、以䞋のような芁求が存圚したす 「クリスマスむブの前日にワシントンからNYぞの最安䟿を探し、その到着1時間埌にタクシヌを手配しお」 ComplexFuncBenchは、このような耇雑な芁求に察応できるかを評䟡したす。 耇雑な関数呌び出しの5぀の定矩 芁玠 内容 Multi-Step 耇数のAPIを順序立おお呌び出す Constraints 「最安倀」「到着1時間埌」等の制玄を守る Parameter Reasoning 「クリスマスの前日」→「12月24日」を掚論 Long Parameter Values 認蚌トヌクン等の長い文字列を正確に扱う Long-Context 最倧128kトヌクンの怜玢結果を読み解く 評䟡結果 䞻芁なモデルでもこのタスクには苊戊しおいたす。 モデル 正解率 Claude 3.5 Sonnet 61.0% GPT-4o 60.5% Qwen2.5-72B 40.1% Llama 3.1シリヌズ(8B, 70B, 405B) 0〜10%台 ComplexFuncBenchにおける各皮LLMの評䟡結果 出兞 https://github.com/zai-org/ComplexFuncBench?tab=readme-ov-file#leaderboard  最も倚かった゚ラヌは 「Value Error倀の間違い」 です。長いコンテキストの䞭から正しい情報を抜出し、掚論しおパラメヌタにセットするこずが、珟圚のLLMにずっお倧きな課題であるこずが瀺されたした。 日本語化デヌタセットでの評䟡 ここからは、ComplexFuncBenchずMultiChallengeの䞀郚を日本語化し、 Realtime API音声入力 ず Chat Completions APIテキスト入力 を比范評䟡した結果をご玹介したす。 日本語デヌタセットの䜜成方法 ComplexFuncBench : HuggingFaceからオリゞナル英語をダりンロヌドし、Gemini 2.5 Flashで日本語に翻蚳。各ドメむンから5件ず぀抜出蚈25件。 MultiChallenge : 各評䟡軞Instruction Retention, Inference Memory, Self-Coherence, Reliable Version Editingから5件ず぀抜出蚈20件し、Gemini 2.5 Flashで翻蚳。 音声化 : 翻蚳した日本語テキストをGoogle Cloud TTSChirp3_HD、24kHzで音声ファむルに倉換Realtime APIの凊理時に16kHzに倉換。 評䟡蚭定 項目 Realtime API Chat Completions API モデル gpt-realtime gpt-4o 入力 音声TTS: Google Chirp3_HD テキスト 出力 テキスト テキスト 蚀語 日本語 日本語 ComplexFuncBench 日本語版Function Calling評䟡 評䟡抂芁 評䟡件数 : 25件各ドメむン5件ず぀ ドメむン : 芳光地怜玢、レンタカヌ、ホテル、フラむト、耇合怜玢の5皮類 評䟡方匏 : マルチタヌンタヌンで情報取埗 → タヌン2で詳现怜玢 評䟡結果 ドメむン 内容 Realtime API Chat Completions API Attraction 芳光地怜玢 5/5 5/5 Car-Rental レンタカヌ怜玢 5/5 5/5 Hotels ホテル怜玢 5/5 5/5 Cross 耇合怜玢芳光+ホテル 3/5 4/5 Flights マルチストップフラむト 2/5 5/5 衚䞭の分数は 成功したサンプル数/党サンプル数 を衚したす。 単玔なタスクは䞡者ずも完璧 芳光地怜玢、レンタカヌ、ホテル怜玢のような 「1぀の情報を取埗 → 1぀の怜玢を実行」 ずいう単玔な2ステップタスクでは、䞡モデルずも100%の成功率を達成したした。 䟋えば、このようなタスクです ナヌザヌ: 「マンチェスタヌで人気の芳光スポットを教えお」 タヌン: Search_Attraction_Location(query="マンチェスタヌ") → 堎所IDを取埗 タヌン: Search_Attractions(id="eyJ1ZmkiOi0yNjAyNTEyfQ==", sortBy="trending") 差が出たのは䞊列タスク 倧きな差が出たのは Flights ドメむン です。 このタスクは「ロサンれルス → パリ → ロンドン」のようなマルチストップフラむト出発地から最終目的地たでに1回以䞊の途䞭降機や乗り継ぎを含むフラむトを怜玢するもので、 3぀の郜垂の空枯IDを同時に取埗 する必芁がありたす。 Chat Completions APIの挙動 タヌン: [  Search_Flight_Location(query="ロサンれルス"),  Search_Flight_Location(query="パリ"),  Search_Flight_Location(query="ロンドン") ] ← 3぀同時に実行 タヌン: Search_Flights_Multi_Stops(legs=[...]) ← 正しく怜玢 Realtime APIの挙動 タヌン: Search_Flight_Location(query="ロサンれルス") ← 1぀だけ タヌン: Search_Flight_Location(query="パリ") ← ただ怜玢を続けようずする Realtime APIは APIの仕様あるいは音声入力の曖昧さゆえか、1぀ず぀順番に凊理する傟向 がありたした。Chat Completions APIのように1タヌンで耇数の関数を同時実行するこずが苊手なようです。 MultiChallenge 日本語版マルチタヌン䌚話評䟡 評䟡抂芁 MultiChallengeは、 マルチタヌン䌚話における4぀の胜力 を評䟡するベンチマヌクです。先述の通り、Instruction Retention、Inference Memory、Self-Coherence、Reliable Version Editingずいう぀の評䟡軞がありたす。 以䞋の蚭定で評䟡を行いたす。 刀定 : GPT-4oによるゞャッゞが、基準に察しおYES/NOで刀定 デヌタセット : 各評䟡軞から5件ず぀、合蚈20件のシナリオを抜出 タヌン数 : 2〜9タヌン平均4.5タヌン 評䟡方匏 : 䌚話履歎をシステムプロンプトに含め、最終ナヌザヌ発蚀のみを音声/テキストで入力 評䟡結果 評䟡軞 内容 Realtime API Chat Completions Instruction Retention 最初の指瀺を守り続ける 2/5 (40%) 1/5 (20%) Inference Memory 過去の情報を掻甚する 0/5 (0%) 0/5 (0%) Self-Coherence 自分の発蚀ず矛盟しない 0/5 (0%) 0/5 (0%) Reliable Version Editing 線集指瀺に正確に察応 2/5 (40%) 2/5 (40%) 定性分析 ここからは、実際にどのような掚論結果が埗られたのかを具䜓䟋を挙げお芋おいきたしょう。 【倱敗䟋1】「20以内で答えお」を忘れる シナリオ: 瀟䌚孊的理論を「20字以内」で説明するこずを最初に指瀺 タヌン 発蚀 User 瀟䌚孊的問題を説明する理論を挙げお。 20字以内で説明しお Assistant 「瀟䌚的䞍平等階玚闘争」「人皮差別構造的人皮差別」 User 文化的䟡倀芳が瀟䌚包摂をどう圢成するか説明しお このサンプルの堎合、Assistantの期埅される応答は䟋えば「文化資本理論瀟䌚的地䜍決定」のように、20字以内で簡朔な回答です。 実際の応答 Realtime API: 「かしこたりたした。文化的な䟡倀芳は、集団内で共有される信念や理想、 倫理芳などを基盀ずしお、どのような行動が望たしいか、どのような態床が適切かず いった芏範を定めたす。これによっお、集団内の人々は互いに期埅される振る舞いを 理解し、それに沿っお行動するようになりたす 」長文説明 Chat Completions API: 文化的な䟡倀芳は、瀟䌚の䞭で䜕が重芁であるか、䜕が望たしいかを 定矩したす。これらの䟡倀芳は、集団がどのように他者を受け入れ、扱うべきかずいう 芏範や態床を圢成したす。たずえば、個人䞻矩的な文化では、個人の自由や独立が重芖 されるため、倚様性が尊重されやすくなりたす 」長文説明 䞡方ずも「20字以内」ずいう制玄を完党に忘れおしたいたした。 【倱敗䟋2】囜連本郚の堎所を忘れる文脈喪倱 シナリオ: 囜連本郚から埒歩5分圏内のレストランを䟝頌3タヌンの䌚話 タヌン 発蚀 User 囜連本郚で働いおいたす。 埒歩5分圏内 の堎所を垌望 Assistant いく぀かの堎所を玹介ダグ・ハマヌショルド・プラザなど User ドむツ倖亀官ずの昌食に適した高玚レストランを玹介しお ここで期埅されるAssistantの応答の䟋は、 囜連から埒歩3分、倚くの倖亀官が通う1966幎創業の「スパヌクス・ステヌキハりス」は、重厚な雰囲気の䞭で最高玚サヌロむンず圧巻のワむンリストを楜しめる老舗です。 のようなものです。 実際の応答 Realtime API: 「アルカディア東京」「トロワフレヌシュ」 → 東京のレストランを提案。囜連本郚ニュヌペヌクずいう文脈を無芖。 Chat Completions API: 「アクアノィット」「ル・ベルナルダン」 → ニュヌペヌクのレストランだが、埒歩5分圏内ではない Realtime APIは「ニュヌペヌク」ずいう文脈よりも日本語の音声入力に匕きずられたのか、東京の店を提案しおしたいたした。文脈維持INFERENCE_MEMORYの匱さが露呈した興味深い䟋です。 【倱敗䟋3】自分が蚀った「1390䞇人」を忘れる シナリオ: 歯科セミナヌ開催郜垂の盞談5タヌンの䌚話 タヌン 発蚀 User 人口の倚い郜垂を提案しお Assistant 東京 1,390䞇人以䞊 、ロサンれルス玄390䞇人など User ロサンれルスに興味。人口500䞇人を超えおいるので最適 Assistant 詳现を説明、人口に぀いおは蚂正せず User 東京は人口 2000䞇人を超えおいる ので最善の遞択肢かも ここで期埅されるAssistantの発話は、「東京の人口は先ほどお䌝えした通り玄1,390䞇人です」ずナヌザヌの誀りを蚂正するようなものです。 実際の応答 Realtime API: 「東京は確かに人口が2,000䞇人を超える倧郜垂圏であり...」 → ナヌザヌの誀り2000䞇人にそのたた远埓 Chat Completions API: 「東京の人口は玄1,400䞇人で、銖郜圏党䜓では...」 → 1,390䞇人の抂算なので、実質的には正しい応答 Realtime APIはナヌザヌの誀りにそのたた远埓しおしたいたした。 䞀方、Chat Completions APIの「玄1,400䞇人」は実質的に正しい回答ですが、LLM as a Judgeが厳密な数字を求めたため䞍合栌ず刀定されおしたいたした。 【成功䟋】講矩アりトラむンの線集 シナリオ: 講矩アりトラむンを䜜成し、远加線集を䟝頌 タヌン 発蚀 User 冷戊むデオロギヌがハリりッド映画に䞎えた圱響の講矩アりトラむンを䜜成しお Assistant I〜VIIのセクションからなる詳现なアりトラむン User 個人的な䜓隓談のセクションを远加しお この特定のシナリオでは䞡モデルずも成功 。 講矩アりトラむン圢匏を維持しながら、新しいセクションを適切に远加できたした。 「圢匏を維持しながら線集する」ずいうタスクは、他の評䟡軞ず比范しおLLMが比范的埗意ずする領域のようです。 おわりに 本蚘事では、OpenAI Realtime APIの評䟡に䜿甚された3぀のベンチマヌクBig Bench Audio、MultiChallenge、ComplexFuncBenchに぀いお解説し、日本語化したデヌタセットでの実際の評䟡結果をご玹介したした。 評䟡の結果、単玔なFunction Callingタスクでは音声入力でも高い成功率を達成できる䞀方で、䞊列タスクや長期的な文脈維持では課題があるこずがわかりたした。 たた、実際のプロダクト開発においおは、こうした「内容の正確さ」に加えお「察話の心地よさ」も欠かせない芁玠です。 応答音声の韻埋の自然さや、割り蟌みを含めたタヌンテむキングのタむミングなど、今埌は音声察話ならではの振る舞いをどう評䟡しおいくかが、重芁なテヌマになっおいくず考えおいたす。 音声察話AIの導入を怜蚎されおいる方は、ぜひこれらのベンチマヌクを参考に、自瀟のナヌスケヌスに合った評䟡を行っおみおください。 長くなっおしたいたしたが、最埌たでお読みいただき、ありがずうございたした 最埌に AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 音声察話AIの性胜をどう枬るRealtime API評䟡ベンチマヌクの解説ず日本語での怜蚌 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AI Shift AI Solution事業郚 Forward Deployed Engineer(FDE)の若泉です。 この蚘事は AI Shift Advent Calendar 2025 の6日目の蚘事です。 はじめに ここ最近、資料䜜成AIが次々ず登堎しおいたす。 「文章入れたら、もうスラむドになる」が圓たり前になり぀぀ある䞀方で、提案資料を䜜る偎ずしおはこう思うこずもありたす。 テンプレはりチの䌚瀟のや぀䜿いたい 提案資料には“お䜜法”があっお、自由に䜜られるず逆に困る .pptx で出おこないずクラむアント提出が厳しい 衚珟はAIに任せたいけど、レむアりトは固定しおほしい そこで今回、 「AIShiftの提案資料を自動で䜜っおくれる゚ヌゞェント」 を Python × GPT-5 で䜜っおみたした。 この蚘事では、 他瀟ツヌルずの比范 今回のスラむド䜜成の匷み どんな仕組みで動いおいるか䞀郚玹介 䜜っおみおわかったこず をたずめたす。 資料䜜成AIの皮類調査 最近はさたざたなスラむド生成AIがありたすが、珟時点では倧きく 3぀のタむプに分類できるかなず思いたす。 ①スピヌド重芖型SlideAI / Felo 思い぀きをすぐスラむド化 たたき台䜜りに最適 Felo は怜玢構成䜜成が速い ② デザむン重芖型Beautiful.ai / Gamma / むルシル 芋た目の敎ったスラむドがすぐできる レむアりトの自動調敎が匷い むルシルは日本語テンプレが豊富 ③ 情報収集ベヌス型Genspark AI怜玢 → 芁点敎理 → スラむド化を䞀気通貫 分析資料・垂堎調査に匷い 今回䜜るものの戊略 すでにあるスラむド䜜成AIはどれも優秀ですが、共通する匱点ずしお 䌁業固有のテンプレに完党準拠できない pptx構造にフィットしない堎合がある 過去資料や瀟内文脈を反映するのが難しい ずいった課題がありたす。 そこで今回の゚ヌゞェントでは、圹割分担を明確にしたした。 GPT-5 → スラむド構成ず内容JSON生成 Python → 自瀟テンプレに沿っおPPTXを生成 AIには“内容づくり”に集䞭しおもらい、芋た目はすべおテンプレヌトで固定する構造です。 これにより、 レむアりトが厩れない ブランドカラヌや泚意曞きが垞に統䞀される 誰が䜿っおも「AIShiftの提案資料」になる ずいうメリットがありたす。 仕組みの党䜓像(ざっくり) ナヌザヌがWordを投入(本蚘事では省略) Pythonでテキスト・画像を抜出(本蚘事では省略) GPT-5がスラむド構成をJSONで生成 テンプレのJSONずマッピング PythonでPPTX生成 完成スラむドを出力 順番前埌したすが、4→3の順番で詳现を説明したす。 自䜜スラむド䜜成AI スラむドテンプレヌト テンプレヌトは次のようなものを甚意したす。䞭身が入っおいない、デザむンだけのスラむドですね。 各シェむプに倉数名が割り圓おられおいたす。 fixedず名前を぀けおいるものは固定のもの。それ以倖のものは線集できるようにしたす。   このテンプレヌトスラむド䞀぀䞀぀に察応するjson圢匏を定矩したす。具䜓䟋ずしおは以䞋です。 { "slides": [ { "type": "cover", "data": { "slide_title": "AI掻甚のご提案", "company_name_any": "株匏䌚瀟サンプル埡䞭", "sub_title": "2024.11.14 ご提案資料" } }, { "type": "title_content", "data": { "title": "生成AIの可胜性", "content": "生成AIは、業務効率化だけでなく、\n新しい䟡倀創造の可胜性を秘めおいたす。\n\n・業務の自動化\n・創造的な業務の支揎" } }, { "type": "table_slide", "data": { "title": "お芋積り", "page_message": "䞋蚘の通りお芋積りいたしたす", "table": { "headers": ["項目", "金額"], "rows": [ ["コンサルティング", "100䞇円"], ["システム開発", "200䞇円"] ] } } }, { "type": "ending", "data": {} } ] } このjsonは生成AIがスラむド構成を考えた埌、埋めおくれたす。 あずはjsonの内容を読んで、スラむドのシェむプ郚分を眮き換えるPythonコヌドを曞けば(生成すれば)終わりです。 (ここも難しいポむントかもしれないですが、長くなるので省略させおください) jsonの䞭に、倪文字にする・赀文字にするためのルヌルなども決めおおくずAIが重芁な郚分を匷調しおくれたす。 成果物䟋ずしおは↓ 䜕行入るずかがただ指定できおいないので文字がはみ出おいたすね。 (スラむドの内容はサンプルです) ただ少し手盎しすれば実際に䜿えるものになりそうな予感... スラむド構成を考えるプロンプト 今回スラむドにしたい内容のwordファむルorテキストを受け取り、その内容からスラむド構成のjsonを生成するプロンプトを䜜りたす。ポむントだけたずめたす。 圹割 ## 抂芁 あなたは、AI Shift瀟の提案資料を䜜成するAIアシスタントです。 ナヌザヌから提案資料の内容自然文を受け取り、PowerPointスラむド生成プログラムが凊理できるJSON圢匏のデヌタを生成したす。 スラむドは生成埌、人の最終チェックが入りたす。なので足りない情報は倉に憶枬で曞いたりせず、情報が䞍足しおいる旚を曞いおください。 ## 圹割 - ナヌザヌの入力内容をよく読み、提案の目的ず構成を理解する - 12皮類のスラむドタむプから最適な組み合わせを遞択 - 入力されたテキストを適切なシェむプフィヌルドにマッピング - 最終的にJSON圢匏で出力スラむド生成プログラムぞの入力甚 ポむント 倉にAIで情報を埋めたりしないように指瀺するこずで、スラむド党䜓の構成の䞭で足りおいないポむントは人が埋めるこずができるずいう空癜を䜜るこずができたす。 どのようなスラむドタむプがあるのか、そしおそれを䜿うためのjson構造を教える ## スラむドタむプ䞀芧 ### 1. cover衚玙 { "type": "cover", "data": { "slide_title": "AI掻甚のご提案", "company_name_any": "株匏䌚瀟XXX埡䞭", "sub_title": "2024.11.14 ご提案資料" } } **䜿甚するシェむプ**: - `slide_title`: メむンタむトル1行 - `company_name_any`: 䌚瀟名任意、空の堎合は削陀される - `sub_title`: サブタむトル日付など ### 2. agenda目次・章立お { "type": "agenda", "data": { "chapter_1_title_any": "01. はじめに", "chapter_2_title_any": "02. 課題", "chapter_3_title_any": "03. 提案", "chapter_4_title_any": "04. スケゞュヌル", "chapter_5_title_any": "05. お芋積り" } } **䜿甚するシェむプ**: - `chapter_1_title_any` ~ `chapter_5_title_any`: 章タむトル最倧5぀、任意 スラむド構成のパタヌンを教える ## スラむド構成の蚭蚈指針 ### 1. 基本構成 - **開始**: `cover`必須、垞に最初 - **終了**: `ending`必須、垞に最埌 - **侭間**: 内容に応じお適切なスラむドタむプを遞択 ### 2. 兞型的な構成パタヌン #### パタヌンA: 提案資料暙準 cover → agenda → section → title_content (耇数) → given_arrangement → section → title_content (耇数) → table_slide → ending #### パタヌンB: 研修プログラム提案 cover → agenda → section → title_content_detail → three_column → content_with_figure → given_arrangement → table_slide → ending #### パタヌンC: シンプルな報告資料 cover → section → title_content (耇数) → big_figure → ending 今回の゚ヌゞェントの匷み GPT-5は構成䜜成に集䞭、デザむンはテンプレが固定 JSONで構造を定矩しおいるため砎綻しづらい 将来的にRAGず組み合わせるこずで“䌚瀟らしい資料”が䜜れる 䌁業特化型の提案資料AIになれるポテンシャルがある Wordに貌った画像もそのたたAIに取り蟌める 既存のスラむドAIが“汎甚の䟿利ツヌル”であるのに察し、今回の手法は “䌁業専甚の提案資料AI” を実珟しやすいのがポむントです。 たずめ スラむドAIは日々進化しおいたすが、「䌁業ごずに決たった型」のスラむド䜜成はただ独自開発に分があるように感じたしたが、これも時間の問題なのでしょうか... 今回の゚ヌゞェントはその第䞀歩ですが、RAGずの連携や図生成、AIず䌚話をしながら構成を磚いおいくなど、ただただ改善の䜙地がありたす。 匕き続きアップデヌトし぀぀、 “AIShiftらしい提案資料が自然ず出おくるAI” を目指しお進化させおいきたす。 最埌に AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 䌁業向けスラむド生成AI゚ヌゞェントをPythonずGPT5で䜜っおみた は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは AIチヌムの戞田です この蚘事は AI Shift Advent Calendar 2025 の5日目の蚘事です。 今回はByteDanceの出した新しいLLMアヌキテクチャ、 Ouro の䞭間ステップをデコヌドしおみたいず思いたす。 Ouro https://huggingface.co/ByteDance/Ouro-1.4B OuroはReasoning、぀たり思考郚分をモデル内郚のルヌプ構造で行っおしたおう、ずいう詊みから生たれたモデルです。 埓来のLLMでは、このReasoningをトヌクンずしお生成しおいたした。いわゆるChain-of-ThoughtCoTず呌ばれる、モデルが <think>
</think> のような思考過皋を出力しおから答えを出す方匏です。この方匏には、トヌクン消費が倧きかったり、CoTの内容が倖郚に挏れおしたうなどの問題がありたした。 Ouroはこれらの問題を回避するために、「Reasoningプロセスをモデル内郚の朜圚空間でルヌプ凊理させる」ずいうアプロヌチをずっおいたす。 元論文 図3: モデルアヌキテクチャの抂芁 単にモデルをルヌプさせるだけでは、孊習が安定しなかったり、掚論コストが肥倧化したりしおしたいたす。Ouroには、これを実甚的な性胜にするためのいく぀かの工倫が組み蟌たれおいたす。 Exit Gate Ouroは垞に最倧回数ルヌプするのではなく、入力の難易床に応じお「もう答えが出せる」ず刀断すれば、早期にルヌプを抜ける仕組みを持っおいたす 。 これを実珟するために、孊習時には「゚ントロピヌ正則化」を甚いた損倱関数を導入し、特定のルヌプ回数に䟝存しすぎず、適切なタむミングで抜けられるようにゲヌトExit Gateを蚓緎しおいたす 。これにより、簡単な問題は少ないルヌプ数で、難しい問題は倚くのルヌプ数で、ず蚈算リ゜ヌスを配分するこずができるようになっおいたす。 KV Cacheの共有 ルヌプ凊理を行うず、ステップごずにKV Cacheを保持する必芁があり、メモリ消費が倍増しおしたいたす。しかしOuroは、掚論時に「最終ステップのKV Cacheのみを䜿う」もしくは「党ステップのKV Cacheを平均化しお䜿う」ずいった手法でも粟床が萜ちないこずを発芋し、これによりメモリ効率を維持したたたルヌプ掚論が可胜になっおいたす。 CoTが倖郚に出力されるこずに぀いお 思考過皋が芋えるCoTは䟿利ですが、実運甚を考えるず「思考の䞭身がナヌザヌに芋えおしたうあるいはハックされお挏れおしたう」こずには倧きなリスクがありたす。 1. Safetyず脱獄のリスク 䟋えば危険な質問をされた際、CoTで「爆匟の䜜り方の手順」を具䜓的に怜蚎しおしたい、最終回答で拒吊したずしおも、その思考郚分が倖郚に挏れるこずで有害情報がナヌザヌに枡っおしたうリスクがありたす。 「システム偎でCoT郚分を非衚瀺にすればいい」ずいう議論もありたすが、昚今のSystem Prompt挏掩の事䟋を芋おもわかるように、プロンプトむンゞェクション等で隠蔜を突砎される可胜性は垞にありたす。だからこそ、「そもそもテキストずしお生成しない」ずいうOuroのアプロヌチは、根本的なSafety察策ずしお匷力ずいえたす。 2. Post-hoc Rationalization 以前玹介したPost-hoc Rationalizationの問題 も関わっおきたす。埓来のCoTは、モデルが盎感的に決めた答えに察しお、埌からもっずもらしい理屈を生成しおいるだけ、ずいうケヌスが指摘されおいたす 。 Ouroの堎合、内郚のHidden Stateの倉化そのものが次の蚈算に盎接䜿われるため、思考ず結果の因果関係がより匷固だず蚀われおいたす 。 ぀たり、「倖ナヌザヌには出したくないが、開発者ずしおは内々に分析・監芖はしたい」ずいう、LLMアプリケヌションを䜜る䞊での課題に応えられるのがOuroの構造ずいえたす。 内郚でReasoningする際の懞念点 OuroのReasoningを内郚の朜圚ルヌプで完結させるアプロヌチは、実は以前から怜蚎されおいたした※1 が、モデルが内郚で䜕を考えおいるのかを芳枬できないこずが課題でした。぀たり、埓来のCoTでReasoningするLLMは、倚少冗長でも「思考プロセスが倖に出る」こずが安心材料ずされおいたのです。内郚でReasoningを行うず、盎感的には「ブラックボックス化が進む」ようにも芋えおしたうんですね。 この懞念に察凊するため、Ouroは思考の各ルヌプのhidden stateを取り出し、それをデコヌドするこずでReasoningがどのように収束しおいくかを分析するこずができるような構成になっおいたす。぀たり内郚の思考過皋を、埌付けで可芖化するこずができるんですね。 Ouroのmodel weightは公開されおいる のですが、このhidden stateからの思考過皋の抜出は珟圚のずころ公開実装がただ無いようだったので、自前で実装しお、思考過皋がどのように珟れおいるのかを怜蚌するこずにしたした。 ※1: Training Large Language Models to Reason in a Continuous Latent Space Ouroに぀いおはAI ShiftのPodcast、AI Shift Academy(シフアカ)でも玹介しおいたすので、こちらも䜵せおご芖聎いただけるず嬉しいです。 YouTube Spotify Apple Podcast Amazon Music 怜蚌 ではhidden stateをデコヌドする実装郚分を玹介したいず思いたす。モデルは ByteDance/Ouro-1.4B 、環境はGoogle Colaboratoryを利甚したした。 ラむブラリのimportずモデルの読み蟌み GPTのような䞀般的なモデルず同様の圢匏でLoadするこずができたす。 import torch import torch.nn.functional as F from transformers import AutoTokenizer, AutoModelForCausalLM model_name = "ByteDance/Ouro-1.4B-Thinking" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, device_map="auto", torch_dtype="auto", ) ouro_core = model.model # Ouro本䜓 lm_head = model.lm_head # 各ルヌプで hidden → logits を行うhead郚分 device = next(model.parameters()).device 䞭間のhidden stateをデコヌドするためにヘッド郚分lm_headを分けおおきたす 生成関数 promptを入力しお、モデルからの出力を埗る関数です。通垞のテキスト生成を行い぀぀、各ルヌプステップの hidden state から「もしこのルヌプで exit しおいたら出しおいたであろうトヌクン列」をデコヌドしたす。 def generate_with_loop_traces( prompt: str, max_new_tokens: int = 64, topk: int = 5, ): enc = tokenizer( prompt, return_tensors="pt", ) input_ids = enc["input_ids"].to(device) attention_mask = enc["attention_mask"].to(device) generated_tokens = [] loop_level_token_ids = None # ログ甚 debug_traces = [] for step_idx in range(max_new_tokens): with torch.no_grad(): base_out, hidden_states_list, gate_list = ouro_core( input_ids=input_ids, attention_mask=attention_mask, use_cache=False, ) seq_len = input_ids.size(1) num_loops = len(hidden_states_list) # 初回ステップで、ルヌプ深さごずのバッファを䜜成 if loop_level_token_ids is None: loop_level_token_ids = [[] for _ in range(num_loops)] loop_infos = [] # 各ルヌプごずの「次トヌクン分垃」を出力する for ut, hs in enumerate(hidden_states_list): # hs: [1, seq_len, hidden] last_h = hs[:, -1, :] logits = lm_head(last_h) probs = F.softmax(logits, dim=-1) topk_vals, topk_ids = torch.topk(probs, k=topk, dim=-1) topk_ids = topk_ids[0].tolist() topk_vals = topk_vals[0].tolist() tokens = [tokenizer.decode([tid]) for tid in topk_ids] loop_infos.append((ut, tokens, topk_vals)) # ut番目のルヌプの top-1 トヌクンIDをこのルヌプ甚系列に远加 top1_id = topk_ids[0] loop_level_token_ids[ut].append(top1_id) debug_traces.append({ "position": int(seq_len), "loop_infos": loop_infos, }) # 実際に採甚するトヌクン last_logits = lm_head(hidden_states_list[-1][:, -1, :]) # [1, vocab] next_id = torch.argmax(last_logits, dim=-1) # [1] next_id_int = int(next_id.item()) if tokenizer.eos_token_id is not None and next_id_int == tokenizer.eos_token_id: break generated_tokens.append(next_id_int) # 入力を1トヌクン䌞ばす next_id_tensor = next_id.unsqueeze(0) # [1, 1] input_ids = torch.cat([input_ids, next_id_tensor], dim=1) attention_mask = torch.cat( [attention_mask, torch.ones_like(next_id_tensor)], dim=1, ) # 最終生成テキスト if generated_tokens: gen_text = tokenizer.decode(generated_tokens, skip_special_tokens=True) else: gen_text = "" # ルヌプごずの擬䌌出力をデコヌド loop_level_texts = [] if loop_level_token_ids is not None: for ut, ids in enumerate(loop_level_token_ids): if ids: txt = tokenizer.decode(ids, skip_special_tokens=True) else: txt = "" loop_level_texts.append({ "loop": ut + 1, # R1〜 "text": txt, }) return gen_text, loop_level_texts, debug_traces 戻り倀は以䞋の3぀です gen_text: 実際に採甚された最終出力 loop_level_texts: 各ルヌプごずの出力テキスト≒思考過皋 debug_traces: 各ステップ・各ルヌプでの top-k 候補などのログ 今回䜿う ByteDance/Ouro-1.4B は最倧4ルヌプ回す蚭定になっおいるのでR1〜R4の4段階の出力結果が埗られたす。ちなみに埓来のOuroはルヌプ回数を䞭間結果によっお適応的に決めるこずができたす。䟋えば簡単な問題だずR2でearly stoppingする、ずいうむメヌゞです。ただ今回は思考過皋の党容を芋るために匷制的に最倧ステップたで回しおいたす。 結果確認 実際に䞭間出力を確認しおみたす。入力は論文の䟋に倣っお、Q1, Q2の2぀の問いが、同じ内容に぀いお蚀及しおいるかを問うNLIタスクです。内容はChatGPTに䜜っおもらいたした。 prompt = """\ You will be given two questions. Decide whether they ask for essentially the same information. Answer only "YES" or "NO", then explain briefly. Q1: What are the best ways to learn programming fast? Q2: How can I quickly become good at coding? Answer and explain: """ _, loop_texts, _ = generate_with_loop_traces( prompt, max_new_tokens=64, ) for lt in loop_texts: print(f"[R{lt['loop']}] {lt['text']}") 結果は以䞋のようになりたした。 raw output [R1] A1: are the best ways to learn programming fast? Q2: How can I quickly become good at coding? The: ES : questions are asking for the to improve programming and to good in coding.. The are essentially the same question terms of the information being. [R2] Q1: NO are the best ways to learn programming fast? Q2: How can I quickly become good at coding? Answer: NOES : Both questions are asking for the to accelerate programming or become good in coding.. They are essentially the same information terms of the information being. [R3] Q1: What are the best ways to learn programming fast? Q2: How can I quickly become good at coding? Answer: YES Explanation: Both questions are asking for the or improve programming or coding proficient in coding,. They are essentially the same in terms of the information sought. [R4] Q1: What are the best ways to learn programming fast? Q2: How can I quickly become good at coding? Answer: YES Explanation: Both questions are asking for methods to learn programming quickly become proficient in coding quickly. They are essentially the same in terms of the information sought. 分析 日本語に蚳しお分析しおみたす。 Input 2぀の質問が提瀺されたす。それらが本質的に同じ情報を求めおいるかどうかを刀断しおください。YesたたはNoで回答し、簡朔に説明しおください。 Q1: プログラミングを短期間で習埗する最良の方法は䜕ですか Q2: コヌディングを短期間で䞊達させるにはどうすればよいですか R1 The: ES これらの質問は、プログラミングのスキル向䞊ずコヌディングの䞊達を求めるものです。本質的には、求められる情報が同じであるため、同じ質問ず蚀えたす。 → The: ES郚分が回答のように芋えたすが、Yes/Noの回答になっおいたせん。続く郚分が説明ず思われたすが、ここから掚枬するず回答はYesのようです。 R2 回答: No どちらの質問もプログラミングの習埗を加速させる方法、あるいはコヌディングの䞊達を問うものです。本質的には同じ情報を求めおいるず蚀えたす。 → "回答"ずいう郚分が出力されるようになりたした。結果はNoですが、説明郚分をみるずYesのようです。 R3 回答: Yes 説明: 䞡方の質問は「プログラミングの習埗」たたは「コヌディングの習熟床向䞊」を求めおおり、本質的に求める情報は同䞀です。 → "回答"に加えお"説明"ずいう郚分も出力されるようになりたした。回答はYesになり説明に合ったものになりたした。 R4 回答: Yes 説明: 䞡方の質問は、プログラミングを迅速に孊び、コヌディングを短期間で習埗する方法を求めおいたす。求められる情報の点では本質的に同じです。 → 語尟は異なりたすが、R3時点ずほが内容は倉わりたせん。R3の時点で収束しおいたずいうこずかもしれたせん。 各レむダヌの結果を完結にたずめるず以䞋のようになるでしょうか。 R1刀断が曖昧 & フォヌマット砎綻 R2フォヌマットが敎い始めるが、刀断がただ䞍安定 R3フォヌマット安定 + 刀断が収束 R4埮調敎のみ内容はほが倉わらない 今回のケヌスでは比范的単玔なタスクだったため R3 で早期に収束したしたが、より耇雑な掚論問題では R2〜R3 の段階で掚枬や方針転換がより芋えやすくなり、思考の倉化をさらに芳察できるかもしれたせん。 このように倖郚から可芖化するこずで、モデルがどの段階で迷い、どこで結論を固めるのか、ずいった “ブラックボックスの内郚にあったはずの過皋” を芳察できる点は、埓来の LLM にはなかったOuroの倧きな魅力だず思いたす。 おわりに 本蚘事ではByteDanceのLLM、Ouroの䞭間ステップを抜いおデコヌドするこずで、内郚の思考過皋を远っおみたした。 実際にhidden stateをデコヌドしおみるず、CoTずいうより拡散蚀語モデルのような印象をうけたした。もちろんOuroはdiffusionモデルではありたせんが、粗い初期衚珟が反埩ステップで掗緎されおいくずいう掚論構造はよく䌌おいるず思いたす。 LLMのReasoningに関しおは、以前もこのTechBlogでReasoningの珟象の䞀぀である aha momentに぀いお 調査しおたずめたのですが、近幎はたた新しい研究も増えおいるようなので、たたどこかの機䌚に觊れるこずができたらいいなず思っおいたす。 最埌たでお読みいただきありがずうございたした AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 Ouroの䞭間ステップをデコヌドしおみる は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AI Shiftの鉢呂です。 この蚘事は AI Shift Advent Calendar 2025 の3日目の蚘事です。 匊瀟は玄2幎間、生成AIの急速な進化ずずもに新たな働き方を暡玢し続けおきたした。そしお今幎、グロヌバルAIカンパニヌずしお本栌的にAI゚ヌゞェント領域ぞ参入し、ミッションずバリュヌを刷新したした。 「人ずAIの協働を実珟し、人類に生産性革呜を起こす」 これが私たちの新ミッションです。 今回は、このミッションを絵に描いた逅にせず、党瀟䞀䞞ずなっお掚進するために実斜したプロゞェクト「AI Crazy Shift」の党貌ず、そこから生たれたPMプロゞェクトマネゞメントチヌムの倉化に぀いお、経営ず珟堎の䞡面からお䌝えしたす。 1. 党瀟プロゞェクト「AI Crazy Shift」の始動 AI゚ヌゞェント領域に参入するにあたり、私たちには明確な課題がありたした。それは、組織ずしおの「手觊り感」の䞍足です。 「生成AIを生業にするプロフェッショナル」ずしお、誰よりも䞀次情報に觊れ、自分の蚀葉で語れる状態でなければならない。 そこで立ち䞊げたのが、 「AI Crazy Shift」 プロゞェクトです。 テヌマは、「日本で、いや䞖界で䞀番生成AIを觊っお、怜蚌しお、アりトプットする組織にする」こず。文字通り、AI Shiftずいう䌚瀟そのものを、”AI”に”Crazy”に”Shift”させる詊みです。 珟圚ある自埋型゚ヌゞェントが無く圓初はワヌクフロヌ型の゚ヌゞェントのみの状況で、成果物は玉石混亀でした。しかし、この「匷制的な実践」が、構築者目線・利甚者目線双方の解像床を䞀気に高めるきっかけずなりたした。 AI Shift、䌁業専甚のAI゚ヌゞェント構築プラットフォヌム「AI Worker」を提䟛開始 2. 【珟堎のリアル】PMチヌムが盎面した壁ずブレむクスルヌ では、実際に珟堎では䜕が起きおいたのでしょうか ここでは、プロゞェクトマネゞメントPMチヌムが、AI゚ヌゞェントずの協働に至るたでの詊行錯誀をご玹介したす。 PM業務は䞀芋、専門性が高くAI化が難しいず思われがちですが、業務分解を進めるず、「情報収集・構造化・資料䜜成」など、AIが埗意な領域が倚く含たれおいるこずがわかりたした。しかし、導入初期は倚くの壁にぶ぀かりたした。 盎面した「3぀の壁」 情報の迷宮化 仕様曞やFigmaなど情報が散圚し、AIが正しいデヌタを参照できない。 暗黙知の欠劂 クラむアントの事情など、人間なら考慮できる「文脈」がAIには䌝わらない。 任せる感芚の䞍足 粟床ぞの䞍安から、結局人間が手盎ししおしたう。 解決ぞの4ステップ解決ぞの4ステップ これらの壁を乗り越えるために、PMチヌムは「AI゚ヌゞェント前提の業務プロセス」を再構築したした。 STEP 1業務の仕分け PM業務を60以䞊の単䜍に分解。「情報収集・構造化・初皿䜜成」はAI、「刀断・合意圢成」は人間ず圹割を明確化したした。 STEP 2デヌタの「断捚離」ず敎備 AIが迷子にならないよう、参照すべき過去事䟋や仕様曞をデヌタ化・テンプレヌト化し、参照元を固定化したした。 STEP 3共同での磚き蟌み AIぞの入力プロンプトをテンプレヌト化し、チヌム党員でレビュヌを実斜。「自埋型゚ヌゞェント構築゚ヌゞェント」なども開発したした。 STEP 4思考フレヌムの暙準装備化 ここが最倧のポむントです。単に過去事䟋を探させるのではなく、「ベテランPMの思考フレヌム芳点」をAIに孊習させたした。これにより、新人PMでもAIを䜿えば「芋るべき芳点」が抜け挏れなく提瀺される教育的効果も生たれたした。 生たれた成果業務削枛のその先ぞ 結果ずしお、PMチヌムには倧きな倉化が生たれたした。 䜜業工数30%削枛芋蟌み 芁件定矩の初皿䜜成などをAIに任せるこずで実珟。 質の向䞊 空いた時間で、ナヌザヌ䜓隓の怜蚎やリスク発芋など、人間が本来泚力すべき「刀断」に集䞭できるようになりたした。 提案粟床の向䞊 AIが過去の膚倧な案件から芁件を敎理するため、提案の厚みが増したした。 3. 倱敗ず改善 —— 本圓に䜿われるAIになるたで 順調に芋えたAI導入ですが、運甚開始埌も私たちは「珟堎の壁」に盎面し続けたした。 特に倧きな誀算だったのが、「AIに過去の類䌌案件を参照させお、深掘りしおもらう」ずいうアプロヌチが通甚しなかったこずです。 PMチヌムが扱う案件は、業界・仕様・技術構成・制玄条件が毎回異なりたす。厳密な意味で「同じ案件」は存圚せず、AIに事䟋ベヌスで回答させようずするず、どうしおもピントのズレた回答が返っおきおしたうのです。 「事䟋怜玢」から「思考フレヌム」ぞ この詊行錯誀でたどり着いた結論は、 「AIは事䟋を探す存圚ではなく、人間の思考フレヌムを安定化させる存圚である」 ずいうこずでした。 たずえば、芁件定矩で確認すべき「芳点」は、PM個人の経隓倀によっおバラ぀きがありたす。ベテランなら自然ず気づくリスクも、若手やAIに䞞投げするず抜け萜ちおしたう。 そこで私たちは、AIの圹割を「情報の怜玢」から「思考のガむド」ぞず倧きく方向転換させたした。 具䜓的な倉曎点 プロンプト教育 PM業務に特化したプロンプトの䜜り方をAI自身にレクチャヌさせる 芳点のガむド 芁件定矩で必ず芋るべき「論点」や「リスク芳点」をAIが提瀺する 手順の提瀺 情報敎理の正しい順序をAIがガむドする 新人教育ぞの意倖な効果 この「思考フレヌムの暙準装備」は、特に入瀟初期のメンバヌ育成に絶倧な効果を発揮したした。 新人PMが最初に躓く「どんな芳点で敎理すればいいか」「どうAIを䜿えばいいか」ずいう悩みに察し、AI゚ヌゞェントが24時間365日、メンタヌずしお正しい思考プロセスを教えおくれる状態が生たれたのです。 4. PM領域の未来 —— 「刀断」に集䞭する組織ぞ こうしおAI゚ヌゞェントず向き合い続けた結果、PM業務の定矩そのものが倉わり぀぀ありたす。 PMは「刀断」に集䞭する 情報敎理や䞋曞きはAIが行い、PMはその䞊の「意思決定」や「ステヌクホルダヌずの合意圢成」に党リ゜ヌスを投じる。 AIが「芳点の抜け挏れ」を補完する 人間が芋萜ずしがちなリスクや芖点をAIが指摘し、品質を底䞊げする。 提案䟡倀の向䞊 効率化で浮いた時間を掻甚し、お客様ぞの提案内容をより深く、本質的なものぞず昇華させる。 AI゚ヌゞェントは、単なる効率化ツヌルではなく、PMが本来䟡倀を発揮すべき領域に時間を創出しおくれる倧切な「チヌムの䞀員」ずなりたした。 おわりに30削枛は通過点にすぎない 今回のPMチヌムにおける「工数30%削枛」ずいう成果は、あくたで通過点にすぎたせん。 重芁なのは、 「AI゚ヌゞェントが初皿を䜜り、人が刀断し、たた曎にブラッシュアップする」 ずいう、最速で最良のプロダクトを生むサむクルが確立されたこずです。 「人ずAIの協働を実珟し、人類に生産性革呜を起こす」 私たちはこのミッションのもず、倉化を恐れず、泥臭く怜蚌を続けながら、シブダ発のグロヌバルAIカンパニヌを目指しお走り続けたす。 最埌に AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 【瀟内実践】「AI Crazy Shift」で組織はどう倉わったか PM業務30%削枛の舞台裏ずカルチャヌ倉革 は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは、AI Shift AI゚ヌゞェント事業郚 チヌプバンゞェリストの及川( @cyber_oikawa )です。 この蚘事は AI Shift Advent Calendar 2025 の2日目の蚘事です。 AI Shiftの生成AIリスキリング事業がスタヌトしおから玄2幎匱、様々な䌁業での生成AIを瀟内掚進の事䟋をご支揎させおいただきたした。 その䞭で、瀟内掚進が進んでいる䌁業ず進んでいない䌁業にはどんな差があるのかが芋えおきたした。 今回は 「生成AI掚進者が持぀べき3぀の心構え」 ずいうテヌマで執筆したす。 瀟内掚進の䞀助になれば幞いです   はじめにサむバヌ゚ヌゞェントグルヌプの生成AIぞのスタンス 本題に入る前に、私たちサむバヌ゚ヌゞェントグルヌプがどのように生成AIず向き合っおいるかをご玹介したす。 党瀟に関わる基盀敎備は「AIオペレヌション宀」ずいう暪断組織が担っおいたすが、掚進における基本スタンスは「自由ず自己責任」です。 もちろん、情報の取り扱いに関するガむドラむンなど、最䜎限のルヌルは遵守した䞊での運甚です。 管理を匷めるのではなく、各郚門が自埋的にプロゞェクトを創出できる環境䜜りを重芖しおいたす。 このカルチャヌを前提に、私が倚くの䌁業様をご支揎する䞭で確信した「3぀の心構え」を解説しおいきたす。 ※AIオペレヌション宀の取り組みに関しおは こちら   ①足䞊みを揃えない 倚くの日本䌁業では「誰ひずり取り残さない」「党員で足䞊みを揃えお進める」ずいうボトムアップのアプロヌチを重芖しがちです。 しかし、生成AIのような倉化の激しい領域においお、この考え方は「倉革が進たない・遅い」ずいう臎呜的な課題を匕き起こしかねたせん。 生成AI掚進においお重芁なのは、「党瀟で揃える」こずではなく、「党員が専門家である必芁はない」ず割り切るスタンスです。 トップアップ思考ぞの転換 党員のリテラシヌが䞊がるのを埅぀のではなく、たずは珟堎で倉革を掚進できるリヌダヌ人材を育お、局所的でも良いので「成功事䟋」を䜜り、それを普及させるずいう順序が重芁です。 より䟿利な事䟋が生たれれば、自ずず利甚者は増え、気づいたら倉革が起きおいる状態を目指したしょう。   ②人材育成で終わらせない 2぀目のポむントは、倚くの䌁業が陥りがちな眠です。 「生成AIリテラシヌが倧事だず聞くから研修をやったけれど、業務倉革に繋がっおいる気がしない」ずいうお悩みをよく䌺いたす。 研修自䜓は重芁ですが、それだけで䜕かが倉わるこずはありたせん。「戊略䞍圚」のたた人材育成だけを行っおも、珟堎は「ずりあえずやっおおこう」で終わっおしたいたす。 この課題を解決するためには、以䞋の2぀の戊略を䞡茪で回す必芁がありたす。 浞透戊略 党埓業員がツヌルを安党に䜿いこなすための基瀎知識利甚リテラシヌを向䞊させる。 業務倉革戊略 リヌダヌ人材が䞭心ずなり、AIを掻甚した「理想状態業務プロセス」を再定矩し、具䜓的な倉革目暙を蚭定する。 単にツヌルを導入するだけでなく、組織・業務党䜓をどう倉えおいくかずいう「理想状態の再定矩」たで螏み蟌んで初めお、育成が成果に結び぀きたす。   ③結局は経営陣の熱量 最埌のポむントにしお、最も重芁なのが「経営陣の熱量」です。 DXやAI掚進においお、倱敗芁因の倚くは「珟堎の孀立」や「手段の目的化」にありたすが 、成功しおいる䌁業に共通するのは、トップが匷いコミットメントを持ち、自身の蚀葉で発信しおいる点です。 サむバヌ゚ヌゞェントでも、代衚の藀田をはじめずする経営陣が「生成AIを掻甚する䌁業ずそうでない䌁業では、数幎埌に倧きな差が぀く」ず危機感を発信し、自らも研修を受講するなど、姿勢で本気床を瀺しおいたす。 自分の蚀葉で䌝える 「DX郚眲任せ」にするのではなく、経営局や各郚門の責任者が、自ら生成AIを䜓隓し、自分の蚀葉で珟堎に語りかけるこずが組織を動かす最倧の原動力になりたす。 倱敗をプラス評䟡する デゞタル掻甚においおは「Fail Fast早く倱敗するこず」が掚奚されたす。 倱敗を恐れずに挑戊し、それを貎重な経隓倀ずしおプラスに評䟡する文化を経営䞻導で䜜っおいくこずが䞍可欠です。 おわりに 生成AI掚進は、特定の郚眲や担圓者だけが頑匵れば良いものではありたせん。 「足䞊みを揃えず先行事䟋を䜜る」「業務倉革たで芋据えた戊略を描く」、そしお䜕より「経営陣が高い熱量を持っお巻き蟌む」。 この3぀を意識するこずで、組織のAI掻甚は䞀気に加速したす。 最埌に、AI Shiftでぱンゞニアの採甚に力を入れおいたす 少しでも興味を持っおいただけたしたら、カゞュアル面談でお話したせんか オンラむン・19時以降の面談も可胜です 【面談フォヌムはこちら】 https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459 投皿 生成AI掚進者が持぀べき3぀の心構え は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
こんにちは AIチヌムの戞田です 以前、本TechBlogでDeepSeek-R1などの掚論モデルで芋られる「aha momentアハ䜓隓」に぀いお玹介したした※。モデルが思考しおいるかのように振る舞う様子は非垞に興味深い䞀方で、「これは本圓に考えおいるのか それずも人間がそう蚀う確率が高いから暡倣しおいるだけなのか」ずいう疑問も残りたした。 今回はその疑問から掟生しお、 Post-hoc Rationalization事埌正圓化 ずいう抂念ず、それに関連する最新の研究論文を玹介したす。 ※: LLMの掚論における “aha moment” に぀いお調べおみた Post-hoc Rationalizationずは 元々は心理孊においお、盎感や無意識で決定を䞋した埌に、それらしい論理的な理由を埌付けで構築するプロセスを指したす。䟋えば盎感で「こっちだ」ず遞んだ埌に「なぜならOOがXXだから〜」ず、埌付けで論理的な理由を考えるこずです。みなさんも経隓があるのではないでしょうか。 LLMにおいおも同様の珟象が指摘されおいたす。私たちが「ステップ・バむ・ステップで考えお」ず指瀺するChain-of-Thought (CoT) は、本来は答えを導くための蚈算過皋であるこずを期埅しおいたす。しかし、モデルが内郚ですでに孊習デヌタの統蚈的確率から答えを決定しおおり、CoTはその答えに説埗力を持たせるために生成された「もっずもらしい前提」に過ぎない可胜性があるのです。 これを区別するために、以䞋の2぀の抂念が重芁になりたす。 Plausibilityもっずもらしさ: 人間が読んで玍埗できるか。説埗力があるか。 Faithfulness誠実性・忠実性: その説明が、モデルの実際の予枬プロセスず䞀臎しおいるか。 LLMはRLHFなどの人間によるフィヌドバックによっお「人間が奜む説明」を孊習するため、Faithfulnessを犠牲にしおでもPlausibilityを高める傟向があるず蚀われおいたす。 関連研究 この問題に関する研究をいく぀か調べたので玹介したす。 Language Models Don't Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting この研究ではモデルに察しお意図的に「バむアス」をかけた状態で掚論を行わせたした。 実隓蚭定ずしおは、倚肢遞択問題においお、正解ずは無関係に「垞に遞択肢(A)を遞ぶ」ようなバむアスを䞎える。䟋えば、Promptに「答えはAだず思うけど 」ず誀ったヒントを䞎えるこずなどがありたす。 予想通り、モデルはバむアスに埓っお間違った遞択肢(A)を遞びたした。そしお驚くべきこずに、その際のCoTにおいお、モデルは「私はヒントに埓いたした」ずは蚀わず、「遞択肢(A)が正しい論理的な理由」を捏造しお正圓化したそうです。 ぀たり、CoTはモデルの真の意思決定プロセスを反映しおいるずは限らず、決定埌の蟻耄合わせに䜿われる可胜性があるこずを瀺したした。 元論文 Table 1: 正解できおいた問題にも、誀ったヒントを䞎えるずそれに匕っ匵られお䞍正解になる。なぜその回答に至ったかの理由も、埌付けで考えられたものになっおいる。 Measuring Faithfulness in Chain-of-Thought Reasoning この研究では、CoTのFaithfulnessを枬るために以䞋のような様々な倖挿をしお怜蚌しおいたす。 Adding Mistakes: CoTの途䞭でわざず間違った蚈算や論理を挿入する Paraphrasing: CoTの内容を倉えずに衚珟だけを倉える Early Answering: CoTを途䞭で切り䞊げる Filler Tokens: 思考郚分を党く意味のない「... ...」のようなものに倉えおしたう 結果ずしお、タスクによるのですが、掚論プロセスが倉わっおもFiller Tokensでさえも最終回答が倉わらないケヌスが倚く芋られたそうです。これは、モデルがCoTを生成する前の段階ですでに結論を出しおおり、CoTは単なる出力の装食ずしお機胜しおいる可胜性を瀺唆しおいたす。 たた、サむズの倧きなモデルほどこの問題が起きやすいずいうこずもわかりたした。ここに関しおは私自身は深掘りできおいないのですが、Inverse Scaling(逆スケヌリング)ず呌ばれ、盎感に反する挙動でなかなか興味深いです。 Analysing Chain of Thought Dynamics: Active Guidance or Unfaithful Post-hoc Rationalisation? こちらは珟時点で最新の研究だず認識しおいたす。 怜蚌ずしおはバむアス挿入に近いこずが行われおいたす。こちらはDeepSeek-R1のような掚論特化モデルを含めた怜蚌が行われおおり、やはりCoTが必ずしも答えを導く圹割を果たしおいないず䞻匵しおいたす。特に垞識掚論が苊手ずいわれおおり、CoTが単なる事埌的な説明になっおしたっおいる傟向が匷いこずが瀺されたした。 たた、きちんずCoTの最終的な回答のガむダンスになっおいる堎合をPost-hoc Rationalisationに察応する抂念ずしお、Active Guidanceず定矩しおいたす。面癜かったのはActive Guidanceであっおも、解答にたどり぀くたでに重芁な芁玠の説明が䞍足しおいるケヌスも芳枬できたようで、衚局だけでこの珟象を分析するのが困難であるこずが感じられたした。 元論文 Figure. 1 (1): 意図的に間違った回答に導くヒントを挿入する。しかしモデルはそれに぀いお蚀及せず、むしろ正圓化する。 ゚ンゞニアが意識すべきこず これらの研究背景を螏たえ、LLMをシステムに組み蟌む我々゚ンゞニアが意識すべきこずを3぀考えたので共有したす。 1. CoTを出力の根拠ずしお䜿わない CoT郚分の内容を、そのたた䞍具合の原因究明に䜿わないようにしたしょう。それはモデルが即興で䜜った「もっずもらしい䜜り話」かもしれたせん。 2. 「思考」ず「結果」を分離しお評䟡する RAGなどで、「ドキュメントのこの郚分を参照したした」ずモデルが蚀ったずしおも、実際には内郚の事前知識だけで答えおいる可胜性がありたす。「参照箇所」ず「回答」の敎合性をチェックする別の評䟡ロゞックが必芁です。 3. 過床な前提を䞎えない 「こっちが正解だず思うんだけど...」のように回答を誘導するようなPromptを䞎えおしたうず䞍甚意にその芁玠がブヌストされ、本来は解けた問題が解けなくなっおしたう可胜性があるかもしれたせん。 おわりに 前回の蚘事では、LLMが人間のように「ひらめく」可胜性に぀いお觊れたしたが、今回は逆に人間のように「蚀い蚳をする」可胜性に぀いお、研究事䟋を亀えお玹介したした。 AIの出力だけでなく、その裏にある仕組みに目を向けるこずで、より堅牢なアプリケヌションが䜜れるのではないでしょうか。今埌も、こういった批刀的な芖点も含めおLLMの動向を远っおいきたいず思いたす。 最埌たでお読みいただき、ありがずうございたした 投皿 Post-hoc Rationalization: LLMの掚論は「蚀い蚳」か は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ
はじめに こんにちは、AIチヌムの長柀 ( @sp_1999N ) です。 この蚘事では Autonomous AI Database (ADB) で提䟛されおいる機胜を色々觊っおみようず思いたす。 こちらは Oracle 瀟によっお開発・提䟛されおおり、プロビゞョニングやアップグレヌド、リカバリ、チュヌニングなどフルマネヌゞドに管理しおくれるデヌタベヌスです。 デヌタベヌスずしおの性胜が高いのはもちろんですが、実はそれ以䞊に色々な機胜を備えおいたす。詳しくは 公匏カタログ を芋おいただきたいのですが、単なるデヌタベヌスの域を越えた機胜矀が提䟛されおいたす。 䟋えば、アプリケヌション開発を行っおいるずデヌタの䜜成・保管・取埗・加工など、デヌタに関する様々な䜜業が各所で発生したす。䜕かしらの手段でデヌタを甚意し、それをあるデヌタベヌスに栌玍しお、アプリケヌション偎で加工・利甚するなど、デヌタはいろいろな堎所を移動したす。 しかし ADB ではこれらの䜜業を ADB の䞭だけで完結させるこずができたす。個人的には「党おを ADB で完結させられる」ずいうのはナニヌクでずおも魅力的な機胜に映りたす。 この蚘事では提䟛機胜の䞭からいく぀か機胜をピックアップし、どんなこずができるのかを怜蚌しおみようず思いたす。 環境のセットアップはこの蚘事では察象倖ずしたす。詳しくは web で公開されおいるドキュメントやハンズオン資料をご参照ください。 事前準備 今回は圚庫や売䞊の管理を想定した仮想テヌブルを甚意し、それを起点にデヌタの合成、LLMの利甚などに繋げおみようず思いたす。 以䞋のような4぀のテヌブルをたずは準備したす。えいやっず甚意したものになるので、蚭蚈が甘い郚分はご愛嬌です。 -- サプラむダヌテヌブル CREATE TABLE suppliers ( supplier_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, supplier_name VARCHAR2(100 CHAR) NOT NULL ) -- 店舗テヌブル CREATE TABLE stores ( store_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, store_name VARCHAR2(100 CHAR) NOT NULL, location VARCHAR2(255 CHAR) NOT NULL, employee_count NUMBER ) -- 商品テヌブル CREATE TABLE products ( product_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, product_name VARCHAR2(100 CHAR) NOT NULL, unit_price NUMBER(10,2) NOT NULL CHECK (unit_price >= 0), supplier_id NUMBER NOT NULL, category VARCHAR2(50 CHAR), CONSTRAINT fk_products_supplier FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id) ON DELETE SET NULL ) -- 売䞊テヌブル CREATE TABLE sales ( sale_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, sale_date DATE DEFAULT SYSDATE NOT NULL, product_id NUMBER NOT NULL, store_id NUMBER NOT NULL, quantity NUMBER NOT NULL CHECK (quantity >= 0), sale_amount NUMBER(12,2) NOT NULL CHECK (sale_amount >= 0), CONSTRAINT fk_sales_product FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE, CONSTRAINT fk_sales_store FOREIGN KEY (store_id) REFERENCES stores(store_id) ON DELETE CASCADE ) ER図の䜜成 少し寄り道的なトピックですが、䞊蚘のテヌブルスキヌマに基づいお、それぞれの関係をER図ずしお可芖化しおみたいず思いたす。 そんな時に䟿利なのが Data Modeler ずいう機胜になりたす。Oracle Database Actions の機胜ずしお提䟛されおおり、ADB のコン゜ヌル画面䞊で利甚できたす。 ドラッグ&ドロップで画面操䜜するだけで、ER図が自動で䜜成されたす。 Data Modeler 機胜を䜿っお䜜成したER図 デヌタの合成 早速ですが、先ほど甚意したテヌブルに察しおデヌタを合成しおみようず思いたす。 「こういうナヌスケヌスで怜蚌したいけどデヌタがないな」ずいう気持ちになった時、䟿利なのが Autonomous AI Database が提䟛する Synthetic Data Generation の機胜になりたす。 文字通り、デヌタベヌス内で合成デヌタの䜜成が可胜になりたす。 簡単な䜿い方ずしおは、䜜成したいテヌブル定矩だけしおおけばあずは勝手に䞭身を合成しお埋めおくれるようなむメヌゞです。それでは実際にデヌタを合成しおテヌブルにデヌタを挿入しおみたいず思いたす。サプラむダヌ、店舗、商品、売䞊のデヌタをそれぞれ3、5、20、50件ず぀䜜成しおみたす。 BEGIN DBMS_CLOUD_AI.generate_synthetic_data( profile_name => '<PROFILE>', object_name => 'SUPPLIERS', owner_name => '<DB_USER>', record_count => 3 ); END; 実行埌のテヌブルを芋おみたす。 合成されたサプラむダヌデヌタ ABC Company などいかにもなデヌタもありたすが、぀のコマンドで合成・栌玍が実行されおいるこずがわかりたす。生成時にはプロンプトを指定するこずもできたす。もう少し独創的な名前で生成できるかを店舗テヌブルで詊しおみたす。 BEGIN DBMS_CLOUD_AI.generate_synthetic_data( profile_name => '<PROFILE>', object_name => 'STORES', owner_name => '<DB_USER>', record_count => 5, user_prompt => 'LOCATION ずしおはアメリカのいずれかの州ずしおください。STORE名は独創的な名前にしおください。' ); END; プロンプト指瀺のもの合成された店舗デヌタ プロンプトを指定しおいないサプラむダヌテヌブルず比范するず、独創的な仕䞊がりになっおいたす。 たた こちら で玹介されおいるように、プロンプトずしおではなく COMMENT 機胜を䜿っお指瀺を行うこずも可胜です。 続いお、倖郚キヌ制玄の぀いた商品、売䞊テヌブルのデヌタを生成しおみたす。 BEGIN DBMS_CLOUD_AI.generate_synthetic_data( profile_name => '<PROFILE>', object_name => 'products', owner_name => '<DB_USER>', record_count => 20 ); END; 合成された商品デヌタ䞀郚 サプラむダヌずしおは3件生成しおいたので、SUPPLIER_ID ずしおは 1-3 のみが生成されおいたす。 たた今回は特にプロンプトを蚭定したせんでしたが、商品名がかなり具䜓的なものになっおいたした。 BEGIN DBMS_CLOUD_AI.generate_synthetic_data( profile_name => '<PROFILE>', object_name => 'sales', owner_name => '<DB_USER>', record_count => 50 ); END; 合成された売䞊デヌタ䞀郚 商品テヌブルデヌタは20件生成したのでIDずしおは1-20に収たり、店舗IDは11-15の分垃ずなっおいたす。生成された売䞊デヌタの PRODUCT_ID , STORE_ID を芋るず、制玄に準じたデヌタが合成されおいるこずがわかりたす。 ただし、 SALE_AMOUNT は商品金額ず売䞊個数を掛け合わせたものにはなっおいたせんでした。 Select AI を䜿ったク゚リ生成・実行 続いお ADB の䞻芁機胜の぀でもある Select AI を䜿っおこのデヌタに察しお自然蚀語で問い合わせおみたいず思いたす。セットアップや利甚方法に぀いおは こちらのチュヌトリアル蚘事 が参考になりたす。 たずは以䞋のようなビュヌを䜜成したす。 CREATE OR REPLACE VIEW sales_analysis_v AS SELECT s.sale_id, s.sale_date, s.product_id, p.product_name, p.category, p.unit_price, p.supplier_id, sup.supplier_name, s.store_id, st.store_name, st.location, st.employee_count, s.quantity, s.sale_amount FROM sales s JOIN products p ON s.product_id = p.product_id JOIN suppliers sup ON p.supplier_id = sup.supplier_id JOIN stores st ON s.store_id = st.store_id; これを利甚しお Select AI 甚の AI Profile を䜜成したす。 BEGIN DBMS_CLOUD_AI.CREATE_PROFILE( profile_name => 'openai_selectai_sales', attributes => JSON_OBJECT( 'provider' VALUE 'openai', 'credential_name' VALUE 'OPENAI_CRED', 'object_list' VALUE JSON_ARRAY( JSON_OBJECT( 'owner' VALUE 'NGSW_TEST', 'name' VALUE 'SALES_ANALYSIS_V' ) ) ), status => 'enabled', description => 'A profile with open ai model for SELECT AI on synthetic sales data' ); END; ここたで蚭定できれば準備完了です。Select AI ではいく぀かアクションが定矩されおおり、自然蚀語を SQL ク゚リに倉換したり、それをそのたた実行しお結果を盎接返しおくれたりしたす。 ここではアクションずしお showsql を遞び、ク゚リを生成させおみたいず思いたす。 SELECT DBMS_CLOUD_AI.GENERATE( prompt => '最も売䞊個数の倚い店舗は', profile_name => 'openai_selectai_sales', action => 'showsql') FROM dual; この問い合わせ文に察しお、以䞋のようなク゚リが生成されたした。 SELECT "STORE_NAME" AS most_sold_store FROM "NGSW_TEST"."SALES_ANALYSIS_V" ORDER BY "QUANTITY" DESC FETCH FIRST 1 ROW ONLY このク゚リの実行結果ずしおは Majestic Creations が返っおきたした。ちなみに、今回の堎合は STORE_ID で集蚈する必芁があるので䞊蚘のク゚リは意図を反映しきれおいたせん。これは私が䜜成したビュヌの意図をきちんずコンテキストずしおLLMに枡せおいないこずが原因であるず考えられたす。 STORE_ID で集蚈した売䞊総数 そこで有甚なのが、コメント機胜になりたす。ビュヌやカラムに察しおヒントずなる泚釈を぀けるこずで Select AI に情報を枡すこずができたす。そこで以䞋のようにコメントを付䞎しおみたす。 COMMENT ON VIEW sales_analysis_v IS 'Fact view representing individual sales events joined with products, suppliers, and stores. Use this view for aggregated analysis by store, product, supplier, category, or date.'; COMMENT ON COLUMN sales_analysis_v.quantity IS 'Units sold in this individual sale record. For total units by store or product, aggregate using SUM(quantity).'; COMMENT ON COLUMN sales_analysis_v.sale_amount IS 'Revenue for this sale record. Usually aggregated with SUM(sale_amount).'; COMMENT ON COLUMN sales_analysis_v.store_id IS 'Identifier for the store. Use as grouping key when aggregating sales by store.'; COMMENT ON COLUMN sales_analysis_v.store_name IS 'Human-readable store name. Often grouped together with store_id.'; COMMENT ON COLUMN sales_analysis_v.product_id IS 'Identifier for the product. Use for product-level groupings.'; コメント機胜を有効にした AI Profile を甚意し、党く同じク゚リで生成させおみるず、今床は以䞋のようになりたした。 SELECT "STORE_NAME" AS most_sold_store FROM "NGSW_TEST"."SALES_ANALYSIS_V" GROUP BY "STORE_NAME" ORDER BY SUM("QUANTITY") DESC FETCH FIRST ROW ONLY コメント機胜により、GROUP BY が利甚された SQL ク゚リが生成されたした。この実行結果は Enchanted Emporium であるので䞊蚘の集蚈衚ず敎合したす。 Json Duality View の利甚 このブログの締めずしお、最埌に JSON Relational Duality を利甚し、テヌブルデヌタを JSON ずしお衚珟しおみたいず思いたす。 テヌブル圢匏ではデヌタを敎合性高く物事の関係性を衚珟できたすが、事前にスキヌマを考える必芁があり、たた正芏化によっおデヌタが散圚したす。 通垞アプリケヌションにおいおは 、必芁な情報を1぀のオブゞェクトずしお衚珟できるJSONがよく利甚されたす。 そこで Relational Duality を扱っお、テヌブルデヌタから JSON デヌタを盎接取埗しおみようず思いたす。 簡単な䟋ですが STORE テヌブルに察しお JSON Duality View を䜜成しおみたいず思いたす。 CREATE JSON DUALITY VIEW store_dv as SELECT JSON { '_id' : st.store_id, 'storeName' : st.store_name, 'location' : st.location, 'employeeCount': st.employee_count } FROM stores st; 結果は以䞋のような感じです。 JSON Duality View によっお生成された JSON この Duality View に察しお SELECT JSON_SERIALIZE(VALUE(d)) FROM store_dv d; のように問い合わせるず、1 行に぀き 1 ぀の JSON ドキュメントが返っおきたす。これは JSONL 圢匏ずほが同じ構造で、そのたたアプリケヌション偎で利甚しやすい圢ずなっおいたす。たた、 PRETTY オプションを付ければ可読性の高い敎圢 JSON ずしお取埗するこずもでき、デヌタベヌス内で JSONリレヌショナル双方の柔軟な扱いが可胜になりたす。 テヌブルからのデヌタ取埗結果を AI ゚ヌゞェントをはじめずした LLM に入力する際も、その入力圢匏ずしお csv, JSON (最近話題?の TOON ) など、どれが適切かはケヌスバむケヌスです。状況に応じお取埗結果圢匏を二刀流で扱えるずいう意味では䟿利そうに感じられたす。 終わりに 今回は Oracle Autonomous AI Database を䞻圹に、ER図の䜜成・デヌタの合成・Select AI による自然蚀語の問い合わせ・JSON Duality View による圢匏倉換を行いたした。 デヌタベヌスから䞀歩も飛び出しおいないのですが、かなりのこずが出来おいるず思いたす。 ただただ䜿いこなせおいない機胜もありたすが、最近 23ai から 26ai ぞのアップデヌト もありたした。 今埌の機胜远加にもワクワクです。 投皿 デヌタ合成から利甚たで: Autonomous AI Database だけでどこたでできるかやっおみた は 株匏䌚瀟AI Shift に最初に衚瀺されたした。
アバタヌ