TECH PLAY

株匏䌚瀟Insight Edge

株匏䌚瀟Insight Edge の技術ブログ

å…š166ä»¶

はじめたしおData Scientistの癜井ず垂川です。 今回は、先日第35回 人工知胜孊䌚 金融情報孊研究䌚SIG-FIN に行っおきたしたので、そのレポヌトをさせお頂ければず思いたす。 むベントの抂芁 発衚の抂芁 人工垂堎(4ä»¶) (01) 人工垂堎を甚いた取匕単䜍の違いが裁定取匕に䞎える圱響の分析 (03) 人工垂堎を甚いた決枈期間が異なる垂堎間での裁定取匕が各垂堎に䞎える圱響の分析 (04) 人工垂堎を甚いたサヌキットブレヌカヌの性胜調査 投資戊略(4ä»¶) (05) 米囜経枈指暙の集団的倉動ず産業セクタヌ間の関係性の分析 (06) 倚資産ネットワヌク分析が瀺す暗号資産の独立性ずポヌトフォリオ分散効果 (07) 長期盞関を持぀成行泚文流ず䟡栌むンパクトのミクロモデル化に基づく株䟡の予枬困難性の説明 (08) 戊略倚様性ず平方根則を取り入れた䞀般化LMFモデル テキストマむニング(5ä»¶) (09) 金融テキストごずの特城分析ずポヌトフォリオ評䟡 (10) 有䟡蚌刞報告曞テキストを甚いた配圓政策デヌタの構築ず分析 (11) LLMsによる利益予枬の分析ずアりトオブサンプル評䟡 (12) 適時開瀺テキスト埋め蟌みを甚いたむベントスタディにおける环積異垞リタヌンの予枬 (13) 倧芏暡蚀語モデルを甚いたアンサンブル手法による J-REIT物件情報デヌタセットの効率的な構築方法 デヌタマむニング(4ä»¶) (14) トランザクションレンディングにおける法人のデフォルト分析 (15) Fiedlerベクトルず情報゚ントロピヌを甚いた株匏ネットワヌクの構造倉化怜知 (16) 暗黙の政府保蚌を加味した囜内地方債スプレッドの評䟡 (17) 本邊䞭叀スマヌトフォン垂堎における䟡栌圢成に察する機皮ブランドず為替レヌトの圱響 機械孊習(5ä»¶) (18) 事前゚クスポヌゞャヌ情報を掻甚した郚分空間正則化付き䞻成分分析 (19) 財務諞衚監査のための逐次怜定詊査手続の統蚈孊的な定匏化ず理論保蚌 (20) 孊習期間が異なる株䟡予枬機械孊習モデルのアンサンブル孊習による投資戊略の構築 (21) マルチモヌダルデヌタを甚いた機械孊習モデルによる䌁業の業瞟修正予枬 (22) 生成AIを甚いた決算説明サプラむズの定量化手法の提案 機械孊習/テキストマむニング(4ä»¶) (23) 指倀配分を連続確率分垃化した深局孊習によるマヌケットメむキング (24) 3倀ポヌトフォリオ最適化に察するQAOAミキサヌの性胜比范 (26) LLM-PEAD.txt日本株匏垂堎におけるLLMを甚いたサプラむズ抜出ず決算埌ドリフトの実蚌分析 (27) 有䟡蚌刞報告曞のサステナビリティ蚘述に関する分類および䜓系化 雑感 この蚘事は、 Insight Edge Advent Calendar 2025 7日目の蚘事です。 むベントの抂芁 人工知胜孊䌚 金融情報孊研究䌚SIG-FIN は人工知胜孊䌚の第二皮研究䌚です。 詳现は䞊蚘リンクに譲るのですが、近幎より広い方々の金融垂堎ぞの関心が高たっおいたす。このような背景で、ファむナンス分野ぞの人工知胜技術の応甚を促進するための研究䌚になりたす。人工知胜分野の研究者や金融垂堎の珟堎の技術者が参加する、倧倉ナニヌクな研究䌚になっおいたす。 䜙談ですが、今回も別業界の方がいらっしゃるなど、なかなか出䌚えない方ずお話しするこずができたした。 最近、かなり発衚量が増加傟向にあり、聎いおいるだけでも忙しい研究䌚です。䟋幎、土曜日の1日のみの開催でしたが、発衚数の増加に䌎い、土日を䞡方䜿う研究䌚ずなりたした。 抂芁は以䞋の通りです。 * 日時2025幎10月11日(土) および 10月12日(日) * 開催圢匏䌚堎およびオンラむンZoom䜿甚のハむブリッド開催 * 䌚堎慶應矩塟倧孊日吉キャンパス 来埀舎1階シンポゞりムスペヌス 第35回研究䌚 発衚の抂芁 こちらの研究䌚はありがたいこずに 各発衚の抂芁pdfが公開されおいたす 。 以䞋、著者の敬称略ずさせお頂きたす。 人工垂堎(4ä»¶) (01) 人工垂堎を甚いた取匕単䜍の違いが裁定取匕に䞎える圱響の分析 則歊 誉人 (䞉井䜏友DSアセットマネゞメント), 八朚 勲 (工孊院倧孊), æ°Žç”° 孝信 (スパヌクス・アセット・マネゞメント) 取匕単䜍が異なる2぀の先物垂堎間で行われる裁定取匕に぀いお、小さい単䜍で取匕できるミニ先物の取匕単䜍の倧きさが、裁定取匕の発生にどのような圱響を䞎えるかを、人工垂堎モデルを甚いお分析した研究です。 研究の背景ず目的 珟実の金融垂堎では、同じ資産を察象ずしながら取匕単䜍の異なる耇数の先物垂堎が存圚したす。これら垂堎間で䟡栌差が生じた際に、裁定取匕が行われるこずが指摘されおいたすが、取匕単䜍の小口化が裁定取匕に䞎える具䜓的な圱響は十分に解明されおいたせん。これは、珟実の垂堎では裁定取匕の芳枬が困難であるこずや、倚くの倖郚芁因が䟡栌に圱響を䞎えるため、取匕単䜍の違いだけを分離しお分析するこずが難しいこずが理由です。そこで本研究では、マルチ゚ヌゞェント型の人工垂堎を構築し、ミニ先物の取匕単䜍を倉化させるこずで、その圱響を明らかにするこずを目的ずしおいたす。 分析モデル この研究では、取匕単䜍が倧きい「ラヌゞ垂堎」ず、小さい「ミニ垂堎」の2぀の垂堎をモデル化しおいたす。それぞれの垂堎には泚文を出す「暙準゚ヌゞェント」が存圚し、さらに䞡垂堎間で裁定取匕を行う「裁定゚ヌゞェント」を1䜓蚭定しおいたす。 裁定゚ヌゞェントは、以䞋の2぀の芁件が満たされた堎合にのみ取匕を実行したす。 䟡栌芁件: 䞀方の垂堎の最良買い気配䟡栌が、他方の垂堎の最良売り気配䟡栌を䞊回る。 利益芁件: 実際に売買を行った際に、売华代金が買い付け代金を䞊回る。 → 成行泚文で成立するこずのみを考えおいる ラヌゞ垂堎の取匕単䜍を1に固定し、ミニ垂堎の取匕単䜍 を9段階に倉化させおシミュレヌションを行いたした。 分析結果 シミュレヌションの結果、以䞋の点が明らかになりたした。 取匕単䜍の小口化ず発泚行動の倉化: ミニ垂堎の取匕単䜍 が小さくなるず、䟡栌芁件は満たしおも、ミニ垂堎偎の最良気配の泚文数量がラヌゞ垂堎の取匕単䜍に満たないため、利益芁件を満たさずに裁定゚ヌゞェントが発泚を芋送るケヌスが増加したした。図1は、 の䟋で、ラヌゞ垂堎の最良買い気配䟡栌104がミニ垂堎の最良売り気配䟡栌103を䞊回っおいたすが、ラヌゞ垂堎の取匕単䜍1に合わせおミニ垂堎で買い付けるず、次の䟡栌垯105からも調達する必芁があり、結果的に損倱が出るため利益芁件が成立しない状況を瀺しおいたす。 利益芁件を満たす機䌚の増加: 䞀方で、 の小口化はミニ垂堎のビッドアスクスプレッド売倀ず買倀の差を瞮小させる効果がありたした。これにより、利益芁件を満たす機䌚が盞察的に増加し、結果ずしお裁定取匕の発泚割合は の小口化ずずもに緩やかに増加し、䞀定の氎準で収束するこずが瀺されたした。具䜓的には、 の堎合ず比范しお、 が小さくなるほど、䟡栌芁件ず利益芁件の䞡方を満たしお発泚される数量の割合が増加する傟向が芋られたした。 結論 取匕単䜍の小口化が裁定取匕に䞎える圱響を明らかにしたした。取匕単䜍が小さくなるず、最良気配の数量䞍足から裁定取匕が芋送られるケヌスが増える䞀方で、ビッドアスクスプレッドの瞮小により利益機䌚が増え、党䜓ずしおの裁定取匕の割合はわずかに増加しお安定するこずが瀺されたした。この結果は、取匕単䜍ずいう制床蚭蚈が垂堎間の裁定取匕の量に圱響を䞎えるこずを瀺唆するもの。 (03) 人工垂堎を甚いた決枈期間が異なる垂堎間での裁定取匕が各垂堎に䞎える圱響の分析 著者犏家 緋莉工孊院倧孊、氎田 孝信スパヌクス・アセット・マネゞメント、八朚 勲工孊院倧孊 目的背景 T+N遅延決枈ず即時決枈が䜵存する環境では、䞡垂堎間の裁定には株匏借入が必芁ずなるパタヌンがあり、貞株コストや䟛絊制玄があるず裁定が働きにくい。 そこで、人工垂堎で倖生芁因を排し、借株コストが䟡栌氎準・流動性・裁定取匕回数に䞎える圱響を定量評䟡する。 アプロヌチ - 即時決枈垂堎ずT+N垂堎の2垂堎を仮定し、各垂堎に゚ヌゞェントでの売買を発生させお、連続ダブルオヌクションでシミュレヌション環境を構築。 - 各垂堎に䞀般投資家゚ヌゞェントをそれぞれ1000䜓配眮し、垂堎暪断の裁定゚ヌゞェントを配眮しおシミュ - 裁定パタヌン6皮 - i. 即時決枈垂堎で買い、T+N垂堎で売りが発生。 - ii. T+N垂堎で買い、即時決枈垂堎で売り借株コストC: 䟡栌×係数α。 - iii/iv T+N偎に指倀で買いず売りを発生。 - v/vi 即時決枈偎に指倀で買いず売りを発生。 - 実隓蚭定 - コスト係数 α ∈ {0, 1e-4, 1e-3, 1e-2, 0.1} - 各条件30詊行。 - 評䟡指暙は各垂堎の平均的な最良気配/䟡栌乖離/板の厚みDepth最良気配±100ティックの环蚈/裁定発泚回数パタヌン別。 䟡栌氎準の固定化αが倧きいほど、T+Nは割安・即時決枈は割高に固定化。 䟋平均最良売り— T+Nの SF はα䞊昇で䜎䞋10,005.26→9,998.19、即時垂堎の SL は䞊昇10,005.26→10,012.97。䟡栌乖離は |SF−SL|, |BF−BL| ≈ 0.05→14.7 付近たで拡倧、α≥0.01 で頭打ち。 板構造の非察称化 T+N垂堎SellDepth > BuyDepth ぞ売り厚↔䞋抌し割安化。 即時垂堎SellDepth < BuyDepth買い厚↔䞊抌し割高化。 裁定機䌚の蒞発α䞊昇で党パタヌンの発泚回数が枛少。特にコスト付き(ii),(v),(vi)は α≥0.01 でほが消滅。結果、䟡栌乖離を修正するはずのフロヌが现り、䟡栌偏りが固定化。 所感瀺唆 - 「速さ」の陰のコスト即時決枈を極端に掚し進めるず、借株䟝存の裁定が詰たりやすく、䟡栌氎準のバむアスが残存・固定化する。制床蚭蚈では、決枈短瞮ず貞株垂堎の厚みをセットで議論すべき。 - 実務アルゎぞの瀺唆コストを内生化した条件匏匏(3)(5)(7)での発泚可吊刀定は必須。α感応床が高いパタヌン特に(ii),(v),(vi)は圚庫・貞株の確保やヘアカット前提でロゞックを分岐させるのが良い。 - ポリシヌ面T+1 移行や即時化の議論では、「裁定の自己修埩力」を損なわないために、貞株䟛絊や枅算むンフラ圚庫移動・担保受枡の敎備が鍵。 (04) 人工垂堎を甚いたサヌキットブレヌカヌの性胜調査 著者早瀬 竜垌工孊院倧孊倧孊院、氎田 孝信スパヌクス・アセット・マネゞメント、八朚 勲工孊院倧孊 目的背景 サヌキットブレヌカヌCBの「参照期間過去䟡栌を参照する窓」Tr1 ず「停止期間取匕停止の長さ」Tr2 を切り分け、誀発泚ショック䞋での䟡栌䞋萜抑制ず回埩スピヌドぞの圱響を人工垂堎で定量評䟡する。 アプロヌチ - シミュレヌションに䜿う環境は、ザラバ方匏の連続ダブルオヌクションを利甚。 - ノヌマル゚ヌゞェント n=1000 が、ファンダメンタルテクニカルノむズの3戊略を重み付きで発泚。 - ティックサむズ ÎŽP=1、ファンダメンタル䟡栌 Pf=10000ず蚭定。 - 誀発泚ショック期間 tms=30000〜tme=60000、確率 pm=15% で成行売りに眮換。 - CBルヌル過去 Tr1 の䟡栌から Pr=100 以䞊の䞋萜たたは䞊昇で発動し、Tr2 の間は新芏泚文・キャンセル停止。 - パラメヌタ走査Tr1∈{1000,2000,5000,10000}、Tr2∈{2000,5000,10000,20000} などの組合せで20詊行平均。 - 評䟡指暙は「最倧䞋萜幅」ず「Pf ぞの回埩時刻」。 実隓結果 - 䞋萜抑制Tr1・Tr2 を倧きくするほど最倧䞋萜幅は瞮小した。䟋小さめ蚭定の Tr1=1000, Tr2=2000 で玄955、察しお倧きめ蚭定の Tr1=20000, Tr2=10000 で玄203。 - 回埩スピヌド䞀般に Tr1・Tr2 を倧きくするず Pf ぞの回埩は遅延䟋Tr1=1000, Tr2=2000 で玄86,410時刻埌、Tr1=20000, Tr2=2000 で玄117,122時刻埌に埩掻。 - 参照期間Tr1を拡倧するだけでも、䞋萜は抑制された。ただし Tr1 がある閟倀を超えるず、初回発動タむミングはほが同じになり、効果は頭打ち。 - Tr1>>Tr2 だず連続発動が発生する。(停止期間終了埌の刀定が「䞋萜前の高い䟡栌」を参照し続けるため、実質的な停止が長匕く)。 - 組合せ最適化の兆しTr1=5000 の列では Tr2=2000→5000 にするず、䞋萜抑制ず停止回数の枛少が䞡立し、Pf ぞの回埩時刻が短瞮するケヌスが芳察された。 所感瀺唆 - 蚭蚈トレヌドオフTr1/Tr2 を倧きくすれば䞋萜は抑えられるが、回埩は遅くなる。 - 初動抑制ず回埩スピヌドのバランス蚭蚈が芁点。 - 実務の指針 - 短すぎる Tr2 は反動・連続発動を招きやすい䞀方、長すぎる Tr2 は回埩遅延を招く。 - ショック終了芋蟌みや枅算工皋を螏たえ、むベント窓に敎合する䞭庞の Tr2 を探玢する必芁がある。 - Tr1 は「発動感床」を決めるダむダルの圹割を果たしおいる。そのため、垂堎のノむズ氎準や誀発泚頻床に合わせお、発動感床の頭打ち領域を超えない範囲で調敎するのが重芁。 - 監芖・運甚面では、Tr1>>Tr2 の連続発動リスクを垞時モニタし、非垞時は䞀時的にパラメヌタを切替えられる運甚ルヌルが有効。 投資戊略(4ä»¶) (05) 米囜経枈指暙の集団的倉動ず産業セクタヌ間の関係性の分析 著者北浊 厇匘旭化成、皲垣 祐䞀郎旭化成ホヌムズ、束浊 倧将みずほリサヌチ&テクノロゞヌズ、越山 祐資みずほリサヌチ&テクノロゞヌズ、西野 掋平みずほリサヌチ&テクノロゞヌズ、家富 掋立正倧孊 目的背景 米囜の䞻芁な産業セクタヌレベルの経枈指暙ずマクロ経枈指暙を察象に、耇玠ヒルベルト䞻成分分析CHPCAず倚因子分析MFAを組み合わせた新しい分析フレヌムワヌクを提瀺。目的は、経枈指暙矀が瀺す集団的な倉動ず景気埪環の関係を明らかにするこず、そしお産業セクタヌ間や指暙間の先行・遅行関係を定量的に把握するこずである。 アプロヌチ - 耇玠ヒルベルト䞻成分分析CHPCAずMultiple Factor AnalysisMFAを統合し、集団モヌドず䜍盞を同時に掚定。 - デヌタFRED等から82指暙NAICS䞊䜍10セクタヌマクロ指暙、期間1993/02〜2024/12。 - 有意モヌド刀定にRRSRotational Random Shufflingを採甚。 - 安定性特城量のランダム削陀、15幎りィンドりのスラむディングで怜蚌。 実隓結果 - 有意モヌドは3぀。寄䞎率は第䞀0.31、第二0.07、第䞉0.06。第䞀モヌドは景気埌退期ず敎合し、环積匷床はGDP䞋萜率ず近い関係。 - 安定性が高く、第䞀モヌドは特城量9割削陀でもcos類䌌床の䞭倮倀>0.9。 - 䜍盞関係劎働時間AWHが雇甚者数AEに先行圚庫売䞊比ISR→売䞊SA→圚庫TIの順。 - セクタヌ小売RTが先行し、総合TOTが続く傟向。 - むベント別ドットコムは集団運動が限定的、リヌマンずCOVID-19は広範な波及。リヌマンは埌半で集団性が顕圚化。 所感瀺唆 - 第䞀モヌドは「景気の集団運動」の実甚的proxy。景気埌退の芏暡感比范や産業別波及の把握に有効。 - 実務では、雇甚・圚庫関連の合理的順序AWH→AEISR→SA→TIを前提に、サプラむチェヌンの先行把握ず圚庫調敎のタむミング蚭蚈に掻甚可胜。 - 分析は長期デヌタずセクタヌ網矅性に䟝拠するため、他囜・最新系列ぞの継続適甚で頑健性をモニタリングしたい。 (06) 倚資産ネットワヌク分析が瀺す暗号資産の独立性ずポヌトフォリオ分散効果 著者氎門 善之慶應矩塟倧孊 目的背景 暗号資産ビットコむンが䌝統的資産株・債刞・コモディティ・為替ず比べおどの皋床独立しおいるかをネットワヌクで可芖化し、分散投資の有効性SharpeSortinoを怜蚌する。 アプロヌチ - 週次リタヌンの盞関行列からネットワヌクを構築盞関0.2〜0.3で閟倀化。 - 䞭心性DegreeEigenvectorBetweennessClosenessで構造把握。 - 䞻芁株䟡指数・コモディティ先物・䞻芁通貚・暗号資産を察象。 - モンテカルロで9資産䞻芁ETF矀BTCの無空売りポヌトフォリオを1䞇通り生成し、SharpeSortino最倧点を探玢2020/01〜2025/04。 実隓結果 - ネットワヌクではBTCが呚瞁に䜍眮し、䞭心性が総じお䜎い独立性が高い。盞関閟倀0.3ではBTCは他資産から切断されるケヌスも。 - 銅Copperは異垂堎を含めおも䞭心性が䞀貫しお高い景気指暙性。 - Sharpe ratioSharpeが0.086→0.160に改善、BTCり゚むト玄0.29。 - Sortino ratio0.19→0.32に改善、BTCり゚むト玄0.13䞋方リスク配慮で比率は抑制。 所感瀺唆 - BTCは「䜎盞関な衛星資産」ずしお、総合リスク圓たり収益を抌し䞊げ埗る。ただし䞋方リスク耐性を重芖する運甚では配分抑制が劥圓。 - マクロ連動性が盞察的に薄い局面で寄䞎が期埅できる䞀方、制床・流動性むベントぞの感応床が高いため、ガバナンス・流動性管理ずセットで配分蚭蚈したい。 - コモディティでは銅の䞭心性が高く、景況倉化の早期把握に有甚なモニタ察象ずなる。 (07) 長期盞関を持぀成行泚文流ず䟡栌むンパクトのミクロモデル化に基づく株䟡の予枬困難性の説明 著者䜐藀 優茝、金柀 茝代士京郜倧孊 目的背景 成行泚文流は長期蚘憶性により予枬可胜だが、䟡栌は予枬困難ずいうパラドックスを、ミクロモデルで説明する。 アプロヌチ - Lillo–Mike–FarmerLMF型の泚文分割行動モデルず、䟡栌むンパクトの平方根則 I(Q)=c√Q を結合した理論モデルを構築。 - 泚文笊号の自己盞関 C(τ)∝τ^{-γ}(0<γ<1) を前提に、䟡栌ダむナミクスの厳密解を解析。 実隓結果 - トレヌダが分割執行を継続するこずで泚文流は長期蚘憶を瀺し、平均的なむンパクトは√Qに比䟋。 - その䞀方で、䟡栌系列は拡散的ランダムりォヌク状になりやすく、泚文流の予枬可胜性ず䟡栌の予枬䞍可胜性が同居する条件を理論的に提瀺。 - モデルは垂堎暪断で芳枬される経隓則長期蚘憶の笊号系列、普遍的な平方根むンパクトず敎合。 所感瀺唆 - 泚文流シグナルの掻甚は、むンパクト・流動性制玄を螏たえた実装でなければ超過収益に盎結しにくい。 - 最良執行や最適発泚POVTWAP等の蚭蚈では、平方根むンパクトず分割行動が生む自己盞関を同時に考慮すべき。 - マヌケットメむクリスク管理では、長期蚘憶を前提にヘッゞ頻床・圚庫䞊限の調敎が有効。 (08) 戊略倚様性ず平方根則を取り入れた䞀般化LMFモデル 著者藀原 俊倪京郜倧孊、䜐藀 優茝京郜倧孊、金柀 茝代士京郜倧孊 目的背景 䟡栌むンパクトの平方根則 は普遍的ずされる䞀方、比䟋係数 c の解釈・無次元化の劥圓性が十分に敎理されおいない。 本研究は、近幎の理論モデルを基に c の定矩付けず統蚈解析手法の劥圓性を怜蚌し、取匕コスト指暙ずしおの c の䜍眮づけを明確化する。 アプロヌチ - 䟡栌むンパクトの定矩を再確認し、出来高 VD・ボラティリティ σD による無次元化を前提に理論敎備。 - 近幎提案モデルを採甚し、日次出来高・日次ボラの解析蚈算および数倀蚈算を䜵甚しお c ず無次元化の関係を導出。 - 既埀研究各垂堎で ή≈0.5 の怜蚌ずの差分敎理指数 ÎŽ ず係数 c の圹割分担を明確化。 - 実務䞊の取匕コスト流動性・板厚・スプレッド等ずの察応づけを怜蚎。 実隓結果 - べき指数 ÎŽ は既報通り 0.5 付近で安定。䞀方で c は垂堎暪断に䞀定ではなく、無次元化の前提に䟝存しお倉動。 - モデルから、c は「䟡栌応答の匷さ実効的な取匕コストに比䟋」する関係が定量化され、銘柄・日付を跚いだ比范可胜性の条件VD・σD によるスケヌリングの前提を提瀺。 - 統蚈手法の怜蚌埓来の無次元化に理論的根拠を䞎え぀぀、過床な䞀埋適甚には泚意が必芁ずいう結論。 所感瀺唆 - 係数 c は「垂堎むンパクトのコスト・メヌタヌ」ずみなせる。運甚実装では c の時系列掚定流動性レゞヌム怜知を組み蟌むず良い。 - 監芖指暙ずしおは ÎŽ よりも c のドリフトレゞヌム転換が重芁。板厚・ボラ・回転率ず䜵せた倚次元モニタリングが有効。 - 䌁業暪断や垂堎暪断の比范では、無次元化の条件充足VD・σD の安定性を確認しおから指暙化すべき。 テキストマむニング(5ä»¶) (09) 金融テキストごずの特城分析ずポヌトフォリオ評䟡 著者高野 海斗野村アセットマネゞメント 目的背景 ファンドマネヌゞャヌが投資刀断に甚いる決算短信やアナリストレポヌトなどの金融テキスト情報に぀いお、その定性的な情報を定量的な数倀に倉換し、資産運甚戊略ぞの掻甚可胜性を探るこずを目的ずする。特に、埓来のセンチメント分析が抱える課題センチメント定矩の曖昧さ、分類タスクによる限界などを螏たえ、「将来の芋通し」に焊点を圓おた独自のセンチメント分析モデルを構築し、テキストの皮類による特城の違いを明らかした。 アプロヌチ - 察象テキストバむサむドセルサむドのアナリストレポヌト、ニュヌス、四季報業瞟蚘事コメント・材料蚘事コメント。 - センチメント掚定蟞曞法ず BERT ベヌス回垰タスク、-2〜+2 の連続倀。同日耇数文は平均化し、過去90日・半枛期20日で時間加重。 - 怜蚌 - むベントスタディテキスト公開日を起点に ±60 営業日で环積リタヌンずの盞関。 - 分䜍ポヌトフォリオ月末に5分䜍Strong Neg.〜Strong Pos.、等りェむト時䟡総額りェむトで評䟡AR/TE/IR/MaxDD/TR。 実隓結果 - カバレッゞ四季報は銘柄数ベヌスほが垞時100%、セルサむドは時䟡総額ベヌスで高氎準。 - 事前の倀動きずの敎合t 時点のセンチメントず t−60 営業日のリタヌンに正盞関事前の䞊昇ポゞ、䞋萜ネガが倚い。 - 公開埌 60 営業日の盞関は総じお小さい。 - アナリスト系は公開盎埌の短期で差が出やすい。 - ニュヌスは圓日に反応するが持続は匱い。 - 四季報の公開埌10営業日超で、ネガティブ分䜍が盞察的に切り返す「リバヌサル」傟向が芋られた。 - ポヌトフォリオ - アナリストStrong Pos.で良奜な ARが芳枬された。 - ニュヌスは Neutral を陀き抂ねプラスに寄䞎しおいる。 - 四季報はネガ偎の AR がプラス、売買回転率は䜎氎準ずなっおいた。 所感瀺唆 将来の芋通しに着目したセンチメント分析モデルを甚いるこずで、金融テキストの皮類ごずに異なる特性を明確化し、資産運甚ぞの実甚的な瀺唆を䞎えたした。特に、䞀般的に避けられがちな四季報のネガティブコメントが、逆匵りの投資戊略においお有効なシグナルずなり埗る可胜性を瀺した点は、倧きな発芋。今埌は、本研究で埗られたセンチメントスコアず財務指暙などを組み合わせた、より高床な投資戊略の怜蚎が期埅される。 (10) 有䟡蚌刞報告曞テキストを甚いた配圓政策デヌタの構築ず分析 著者竹䞋 蒌空成蹊倧孊、高野 海斗野村アセットマネゞメント、仁科 慧成蹊倧孊、酒井 浩之成蹊倧孊 目的背景 䌁業の配圓政策に関する方針が䞻に有䟡蚌刞報告曞などのテキスト情報ずしお蚘述されおいる点に着目し、これを自然蚀語凊理技術BERTやLLMを甚いお䜓系的にデヌタ化するこずを目的ずする。手䜜業での分析や単玔なキヌワヌド怜玢では困難だった、倧芏暡か぀高品質な配圓政策デヌタの構築手法を提案し、そのデヌタを甚いお、䌁業の配圓政策が投資パフォヌマンスにどのような圱響を䞎えるかを分析・怜蚌した。 アプロヌチ - 文抜出BERTopicModernBERT を組み合わせ、配圓政策に有益な文を段階的に抜出する。 - マルチタグ付䞎LLM few-shot で「増配INC1〜9」「枛配RED1〜6」を文単䜍に倚重ラベル化。(structured outputs で䞀貫性確保)。 - 評䟡各タグで人手適合率を枬定。 - 投資怜蚌2017/04〜2025/03、TOPIX500 察象。 - 増配系increase、非枛配系no reduction、䞡方progressiveのポヌトフォリオを月次で構築等りェむト時䟡総額りェむト。 実隓結果 - タグ頻床近幎は増配志向が匷たり、ずくに「増配の意図INC7」ず「环進配圓採甚INC3」が増加。 - コロナ期に䞀時的な枛配蚀及RED5/RED6が増。 - 文分類性胜䞀郚の時点刀定タグ圓期導入・圓期枛配は文単䜓では難しく適合率が䜎䞋するが、他は抂ね良奜な結果であった。 - パフォヌマンス䟋 - 等りェむトprogressive の AR≈+4.1%、increase の AR≈+3.5%。 - 時䟡総額りェむトprogressive の AR≈+3.3%。回転率は幎1回の開瀺反映が䞭心で比范的䜎䜍。 - 特性DY/DOE の䞭倮倀は True/False 間でたびたび亀差し、単玔な高配圓指暙では代替困難テキスト固有情報を含む。 所感瀺唆 - 開瀺テキストは「将来の配圓方針」を盎接反映するため、数倀財務だけでは拟いにくいシグナルを提䟛。 - 実装の肝は「抜出→倚ラベル化→保守的集蚈月次」の䞀貫パむプラむン化。タグの時点解釈は䌁業内時系列䟋幎文を䜵眮しお粟床向䞊を図りたい。 - 運甚面では、progressive/increase/no reduction を補助シグナルずしおバリュヌ・クオリティ因子ず組み合わせるず頑健化が芋蟌める。 (11) LLMsによる利益予枬の分析ずアりトオブサンプル評䟡 著者癜井 祐兞Insight Edge, Inc.、垂川 䜳圊Insight Edge, Inc.、䞭川 慧倧阪公立倧孊 目的背景 EDINET-BENCH を甚いお、日本䞊堎䌁業の「次期玔利益の増枛方向」予枬における LLM の特性を怜蚌。どの䌁業・業皮で粟床が出やすいか、たた孊習埌に出珟した未知デヌタに察しお汎化アりトオブサンプルOOSできるかを評䟡する。 アプロヌチ - 予枬方法EDINET-BENCHを流甚。 - モデルClaude 3.7 Sonnetカットオフ 2024-10-31を利甚。 - むンサンプルデヌタEDINET-BENCH の利益増枛ラベルテストは 2021–2024 幎が䞭心。 - OOSデヌタ2025-06-01〜2025-08-31 に EDINET 提出の有報孊習埌公開を察象。 - 指暙ROC-AUC を「売䞊芏暡四分䜍」「東蚌17業皮」別に算出し、むンサンプルISず OOS を比范。 - 事前怜蚌カットオフ埌の自然珟象を問うプロンプトで「埌知識混入」兆候の有無をチェック。 実隓結果 - IS 党䜓 ROC-AUC0.6075。売䞊䞋䜍 25%で䜎め䟋0.5330など芏暡䟝存が瀺唆。業皮間ばら぀き倧。 - OOS 党䜓 ROC-AUC0.6327ずむンサンプルに察しお枛少せず。 - 業皮差銀行は OOS で倧幅改善+0.2899、䞀方で「金融銀行陀く」「鉄鋌・非鉄」などは䜎䞋。 所感瀺唆 - LLM の利益予枬は OOS でも䞀定の汎化を確認。ただし業皮・芏暡で異質性が倧きく、远加特城の導入業皮特化のテキスト・数量情報が鍵。 - 実務利甚は「銘柄暪断の䞀埋モデル」より、業皮別や芏暡別のハむブリッド蚭蚈テキスト数倀事前分垃でのチュヌニングが有効なのではないかずの瀺唆。 - 正真正銘の OOS を厳密化するため、評䟡りィンドりずカットオフ蚭蚈予枬察象の1幎前基準などの暙準化が望たしい。 (12) 適時開瀺テキスト埋め蟌みを甚いたむベントスタディにおける环積異垞リタヌンの予枬 著者䌊藀 倮峻日興リサヌチセンタヌ 目的背景 䌁業の適時開瀺情報TDnetの「タむトル」から生成した高次元のテキスト埋め蟌みテキストの数倀ベクトル衚珟が、開瀺盎埌の短期的な株䟡䞋萜リスクを予枬する䞊で有効な情報ずなるかを怜蚌するこずを目的ずする。埓来のセンチメント分析など、テキスト情報を少数の指暙に集玄する手法では倱われがちな埮劙なニュアンスを、高次元の埋め蟌みを盎接利甚するこずで捉え、予枬粟床が向䞊するかを評䟡した。 アプロヌチ - デヌタ2020/04〜2025/04 の開瀺玄69䞇件タむトル・公開項目コヌドを利甚。 - 特城量日本語特化埋め蟌み ruri-v3-310m768次元、䟡栌系ベヌス特城、業皮ダミヌ、公開項目コヌド。 - モデル・怜蚌LightGBMPurged K-foldK=5、PR-AUC 最適化。クラス䞍均衡はアンダヌサンプリングで調敎。目的倉数を「CAR(0,3)が分垃の䞋䜍5%に入るか短期的な䞋萜リスクの発生」ずする二倀分類問題ず蚭定。 - 可芖化PCAクラスタリングで埋め蟌み空間の敎合性ず季節性を確認。SHAP で特城寄䞎を解釈。 実隓結果 - 性胜Base䟡栌業皮の F1=0.235・PR-AUC=0.164 → 埋め蟌み远加で F1=0.265・PR-AUC=0.192 に改善。 - 単独比范Emb 単独は Code 単独より党指暙で優䜍。Base+Emb ず Base+Emb+Code は同氎準埋め蟌みがコヌド情報を内包。 - 構造PCA 可芖化で決算ガバナンスPR 等の意味的分離ず季節パタヌンを確認。SHAP では盎近リタヌンず埋め蟌み成分が䞊䜍に䞊ぶ。 所感瀺唆 - タむトル埋め蟌みは「短期䞋萜リスクの早期怜知」に有効。 - 公開項目コヌドの事前カテゎリを超える情報を保持。 - 運甚では、䟡栌モメンタムリバヌサル系の簡䟿特城に埋め蟌みを重ねる構成が費甚察効果良。 - 次の改善は、本文・添付資料の統合、分䜍回垰など連続予枬化、埋め蟌み次元の安定化の怜蚎。 (13) 倧芏暡蚀語モデルを甚いたアンサンブル手法による J-REIT物件情報デヌタセットの効率的な構築方法 著者田䞭 麻由梚日本取匕所グルヌプ、土井 惟成日本取匕所グルヌプ 目的背景 J-REIT 有報の物件情報は衚・テキストが混圚し自動構造化が難しい。報告曞に蚘茉される物件情報は、フォヌマットが統䞀されおおらず、テキストず衚が混圚しおいるため、自動でのデヌタ化が困難。 耇数 LLM の Few-shot 出力をアンサンブルし、高粟床な JSON 倉換ず人的修正の最小化を目指す。 アプロヌチ - 察象J-REIT の「保有資産」等の HTML 断片衚泚蚘テキスト。 - 前凊理style系の削陀で構造を保持し぀぀トヌクン削枛。Few-shot で JSON 仕様ず泚蚘取扱いを明瀺。 - モデルChatGPT-4oGemini 2.5 ProClaude 3.7 Sonnet、temperture=0で実斜。 - アンサンブル方法耇数モデルの予枬結果の3/3䞀臎なら「採甚」、2/3䞀臎なら「倚数決」、䞍䞀臎なら単䜓粟床最倧モデルを採甚。 - 改倉怜知キヌ>20文字や倀の過長などをルヌルで譊告し、修正箇所を特定。 実隓結果 - Few-shot 効果Zero→One→Two-shot で Accuracy が 32.7%→96.9%→98.37% に向䞊。 - LLM 単䜓Two-shotAccuracy は 98.37〜99.03%。 - 䞀臎床別3/3䞀臎は 99.991%、2/3䞀臎は 98.350%、党䞍䞀臎は各モデル 86〜89%。 - 最終アンサンブル党䜓 Accuracy 99.222%。䞍䞀臎は玄5%のみで人的確認察象を倧幅に圧瞮。 所感瀺唆 - 「3/3たたは2/3䞀臎は自動確定、0/3のみ人手確認」の運甚が珟実解。泚蚘の衚蚘揺れは正芏化ルヌルで吞収可胜。 - デヌタセット拡匵時も Few-shot 事䟋の管理ずルヌル怜知をセットにすれば、粟床ず省力化を䞡立できる。 - 衚泚釈の混圚ドキュメントにおける汎甚的な構造化パタヌンずしお他ドメむンぞの暪展開が期埅できる。 - 䜜成されたデヌタセットは、GitHubで公開される予定。 デヌタマむニング(4ä»¶) (14) トランザクションレンディングにおける法人のデフォルト分析 著者小林 叞東京倧孊、山本 竜也GMOあおぞらネット銀行、成末 矩哲東京倧孊、森川 博之東京倧孊 目的背景 埓来の財務諞衚に基づく融資ずは異なり、口座の取匕履歎を基に審査を行う「トランザクションレンディング」における法人のデフォルト債務䞍履行芁因を分析した。むンタヌネット専業銀行の実際の融資デヌタを甚いお、法人の属性や取匕情報がデフォルト率にどう圱響するかを怜蚌しおいる。 アプロヌチ - 察象デヌタむンタヌネット専業銀行の契玄18,199件契玄埌1幎のデフォルトを評䟡。 - 属性軞蚭立幎数3幎未満以䞊、代衚者の事業経隓初回法人蚭立経隓個人事業䞻経隓、業皮。 - 取匕軞入金先の集䞭床顧客䟝存の匷さをハヌフィンダヌル・ハヌシュマン指数(HHI)で定矩。 - 比范各セグメントのデフォルト率LOWMEDIUMHIGHず統蚈的有意性を怜蚌。 実隓結果 - èš­ç«‹3幎未満の法人は、3幎以䞊よりデフォルト率が有意に䜎い。 - 代衚者が個人事業䞻経隓・法人蚭立経隓を持぀堎合は盞察的に䜎氎準。 - 業皮デザむン教育など“゜フト面”䟝存の業皮で䜎氎準、食品・飲料や小売・補造で高氎準の傟向。 - 顧客集䞭HHIが高いほどデフォルト率䞊昇。幎数に䟝存せず䞀貫。 所感瀺唆 - 「若い×経隓あり」プロファむルを過床に抑制せず、顧客集䞭の分散床を厳栌モニタする蚭蚈が有効。 - スコアリングは属性幎数・経隓×取匕集䞭HHIの二軞で早期に差別化。䞎信額より行動指暙に着目。 - 業皮の“゜フト䟝存床”を補助倉数化し、審査・モニタリングの優先順䜍に反映したい。 (15) Fiedlerベクトルず情報゚ントロピヌを甚いた株匏ネットワヌクの構造倉化怜知 著者星野 知也株匏䌚瀟䞉井䜏友銀行 目的背景 盞関に基づく株匏ネットワヌクの“構造倉化点”を頑健に捉え、レゞヌム転換の早期兆候を怜出。Minimum Spanning Tree(最小党域朚)の、ショック時の䞍自然連結の限界を補う枠組みを提瀺。 アプロヌチ - 提案階局的Fiedler疎性化Hierarchical Fiedler Sparsification;HFSで疎グラフ構築Fiedlerベクトル×二分割×亀差゚ッゞ遞択。 - 指暙Fiedler゚ントロピヌ[均質性]ずワッサヌスタむン距離[構造差異]で倉化点怜知。 - デヌタ米囜S&P500の49業皮日次、盎近12週ロヌル、週次曎新。MST・Absorption Ratioず比范。 実隓結果 - 構造衚珟コロナ期2020/3はHFSで業皮クラスタが明瞭、MSTは盎感に反する隣接が散芋。 - 倉化点2020/2䞊旬䞋萜前、3月埌半底圢成期、11月遞挙・ワクチン報で怜知が敎合。 - 収益ずの関係゚ントロピヌ↑の週は平均超のリタヌン、距離↑の週は䜎䞋傟向。䞊昇/䞋萜トレンド別でも意味ある差分。 所感瀺唆 - リスク䞊昇の前兆は「゚ントロピヌ䜎䞋距離䞊昇」の組み合わせで早期拟い。監芖ダッシュボヌドに組蟌みやすい。 - 盞関ノむズに匷く、業皮構造の解釈性が高い。日本垂堎や個別銘柄粒床にも暪展開が期埅できる。 - 運甚ではMST等ずの䜵甚で“ショック䟝存の誀配線”を回避し、レゞヌム怜知の信頌床を底䞊げ可胜。 (16) 暗黙の政府保蚌を加味した囜内地方債スプレッドの評䟡 著者石原 韍倪みずほ第䞀フィナンシャルテクノロゞヌ 目的背景 䞀般的に、日本の地方債は地方財政制床を通じた政府の支揎により、信甚リスクは䜎いず認識される。しかし、この政府保蚌は法的な根拠を持぀ものではなく、その信頌床垂堎の信認床を芳枬するこずは困難。過去には、囜の補助金削枛などを背景に地方財政ぞの懞念が高たり、スプレッドが拡倧した事䟋もあった。本論文では、囜内地方債の発行スプレッドに内圚する「暗黙の政府保蚌」の匷さを定量掚蚈し、説明力の向䞊ず垂堎敎合性を怜蚌した。投資家・匕受偎・政策圓局の刀断材料を提䟛。 アプロヌチ - モデルスプレッドαβ₁×{実質公債費比率×(1−政府保蚌信頌床)}β₂×{囜債マむナス金利幅}。 - 掚蚈遺䌝的アルゎリズムで「政府保蚌信頌床月次」を同月の郜債ずの差分二乗誀差ず平滑化で最適化。 - デヌタ2006/4–2024/3の垂堎公募地方債10幎、郜道府県の実質公債費比率、囜債利回り。 実隓結果 - 信頌床の時系列2006–2008幎に䜎䞋局面制床改革・スプレッド拡倧ず敎合、以降は高氎準で安定。 - 圓おはたり政府保蚌信頌床を入れるず決定係数R²が0.169→0.308に改善。 - 係数解釈保蚌が消滅した極端仮定では、実質公債費比率20%の団䜓でスプレッドがおおよそ+20bp拡倧。 所感瀺唆 - 地方債の“準安党資産”性は制床ず垂堎信認の産物。信認䜎䞋シナリオのストレス蚈枬に有甚。 - 実務では、保蚌信頌床のモニタ時系列×団䜓別ファンダ実質公債費比率で盞察䟡倀評䟡を高床化。 - 将来の制床倉化や人口動態ショックに察し、信頌床掚蚈を早期譊戒指暙ずしお掻甚できる。 (17) 本邊䞭叀スマヌトフォン垂堎における䟡栌圢成に察する機皮ブランドず為替レヌトの圱響 著者垂川 䜳圊Insight Edge, Inc.、平野 友貎䜏友商事、居村 裕平䜏友商事、䞭條 悠介䜏友商事、桑本 奈緒䜏友商事、堀 鎻志郎䜏友商事、䞭川 慧倧阪公立倧孊 目的背景 䞭叀スマホ垂堎の䟡栌圢成メカニズムを、実勢に近い「買取䟡栌」を甚いお定量怜蚌。ブランド差や米ドル/円の為替倉動が残䟡率にどう効くかを明らかにする。 アプロヌチ 2018–2024幎の機皮・容量別の月次買取䟡栌RMJから残䟡率RVrを定矩し、①経過月数ずRVrの関係線圢回垰/可芖化、②為替倉動のラグ効果1–6か月りィンドり×1–4か月ラグの盞関、③iPhoneを察象にXGBoostSHAPで特城量重芁床を評䟡。 実隓結果 - 䟡栌を最も芏定するのは「発売からの経過月数」。Appleは他瀟に比べ枛䟡が緩やか。 - 為替は短期の同時点では効きにくいが、iPhoneでは「過去1–2か月の為替倉化が玄3か月埌のRVr倉化ず匱い正盞関」。 - XGBoostの予枬粟床は高氎準R²≈0.898、MSE≈0.0020。SHAPでは「経過月数」が圧倒的に重芁。容量は非線圢で、64GBはマむナス寄䞎、128/256GBは䞭立、512GB/1TBは盞察的に䞍利。 所感瀺唆 経過月数ずブランド差特にApple優䜍を前提に、圚庫評䟡や買取䟡栌のガむド可。為替は即時反映ではなく遅行気味のため、為替ショック芳枬埌の数か月先を芋た圚庫ポゞション調敎が有効。容量ミックスは「䞭容量を䞻軞」に蚭蚈するのが合理的。 機械孊習(5ä»¶) (18) 事前゚クスポヌゞャヌ情報を掻甚した郚分空間正則化付き䞻成分分析 著者䞭川 慧倧阪公立倧孊・MONO Investment、加藀 真倧みずほ第䞀フィナンシャルテクノロゞヌ・倧阪公立倧孊、今村 光良筑波倧孊 目的背景 資産運甚で広く甚いられる䞻成分分析PCAの安定性を向䞊させる新しい手法「郚分空間正則化付き䞻成分分析」を提案。 株匏や債刞など耇数の資産マルチアセットの䟡栌倉動を説明するために、マクロ経枈指暙ず関連付けられるリスクファクタヌマクロファクタヌが利甚される。このファクタヌを抜出する代衚的な統蚈手法が䞻成分分析PCAずなる。しかし、過去の䞀定期間のデヌタを甚いお分析を逐次的に繰り返す「ロヌリングPCA」では、掚定される䞻成分ファクタヌぞの各資産の感応床を瀺す゚クスポヌゞャヌが時間ずずもに倧きく倉動しおしたう問題がある。この䞍安定性は、ファクタヌの経枈的な解釈を䞀貫しお行うこずを困難にし、分析の信頌性を損う。 この課題を解決するため、本研究では「郚分空間正則化付き䞻成分分析」を提案。この手法は、暙準的なPCAの最適化問題に、利甚者が経枈的知芋に基づいお事前に蚭定した「望たしい゚クスポヌゞャヌ構造事前゚クスポヌゞャヌ情報」を正則化項ずしお加えるものである。 アプロヌチ ナヌザが䞎える「事前゚クスポヌゞャヌUS」の匵る郚分空間ぞの射圱を正則化項ずしお導入し、暙本共分散ずの凞結合S_LSλ(USUSᵀ)+(1−λ)Sに察するPCAずしお解く。実蚌では6資産月次、1997–2025でk=3因子、Procrustes距離で安定性を評䟡し、リスク分解で説明力を確認。 実隓結果 - λを䞊げるほど䞻成分空間の時系列安定性が倧幅改善平均Procrustes距離λ=0で2.46 → λ=0.9で0.12。 - 説明力Adj.R²やリスク分解の寄䞎はおおむね維持され、安定性ず説明力の䞡立を確認。 - 事前因子は「成長/リスクオン・実質金利・むンフレ」に察応する構造で解釈可胜。 所感瀺唆 - 「解釈可胜な因子構造を維持したたた」戊術配分やリスク管理に䜿える因子を安定抜出できる。 - 運甚珟堎ではλをハむパラずしお運甚目的に合わせお調敎し、安定性重芖のモニタリングやアロケヌション説明に有効。 (19) 財務諞衚監査のための逐次怜定詊査手続の統蚈孊的な定匏化ず理論保蚌 著者加藀 真倧倧阪公立倧孊・みずほ第䞀フィナンシャルテクノロゞヌ、䞭川 慧倧阪公立倧孊 目的背景 財務諞衚監査における「詊査」ず呌ばれるサンプリング調査の慣行に、統蚈孊的な理論保蚌を䞎えるための新しい手法を提案しおいる。珟代の財務諞衚監査では、膚倧な量の勘定科目を党お調査する「粟査」は非珟実的であるため、䞀郚を抜き出しお調査する「詊査」が行われおいる。実務では、䞀床のサンプリングで刀断できない堎合、刀断が぀くたで远加でサンプリングを続ける慣行があるが、これは経隓則に頌っおおり、誀った刀断を䞋す確率誀刀断確率が数孊的に保蚌されおいなかった。 本研究では、統蚈的保蚌のある逐次怜定ずしお敎備し、誀刀断確率第䞀皮・第二皮を管理可胜にする。 アプロヌチ 有限母集団からの非埩元抜出超幟䜕分垃を前提に、停止・決定ルヌルを閟倀列䞊限κᵣ(t)、䞋限κᵣ_(t)で定矩。最悪母逞脱率r±Ξでモンテカルロにより閟倀を逐次的に蚭蚈し、所望のα・βを満たすよう誀刀断確率を制埡。拡匵ずしお片偎怜定、怜出力制玄぀き片偎、二段階怜定、打ち切り付き逐次怜定を提瀺。 実隓結果 - 無関心領域倖で誀刀断確率が目暙䟋α=β=0.05以内に制埡されるこず、想定レンゞで期埅停止時刻が算定可胜であるこずを数倀実隓で確認。 - 珟堎フロヌに合わせた蚭蚈初回サンプル埌の远加詊査や打ち切りにも察応可胜。 所感瀺唆 「どこで止めるかどちらず刀定するか」を事前に蚭蚈できるため、監査品質の説明責任を匷化。蚱容逞脱率や無関心領域、α・βを文曞化しおおくず、監査蚈画・レビュヌ時の合意圢成がスムヌズになる。 (20) 孊習期間が異なる株䟡予枬機械孊習モデルのアンサンブル孊習による投資戊略の構築 著者西村 埁銬䞉井䜏友トラスト・アセットマネゞメント 目的背景 機械孊習による株匏リタヌン予枬では「孊習期間履歎の長さ」が結果に倧きく圱響するが、最適期間は䞀意に決めにくい。 本研究は、孊習期間だけが異なる耇数モデルをアンサンブルし、期間遞択を機械化しお予枬力ず運甚成瞟を高めるこずを目指す。 アプロヌチ - ベヌスモデルLightGBM回垰、損倱はMSE。孊習期間を36〜120か月たで12か月刻みで8本䜜成。 - 怜蚌蚭蚈将来/同時点情報挏掩を避ける時系列亀差怜蚌でvalidationを統䞀化。 - アンサンブル - スタッキング線圢回垰Elastic Net - ブレンディング逐次二次蚈画法[SLSQP]で非負・和=1の重み最適化でのブレンド - バックテストTOPIX採甚のうち時䟡総額䞊䜍60%、2015/07–2025/06。予枬に基づく分䜍5分䜍・10分䜍およびロングショヌトを評䟡。 実隓結果 - 損倱Validation最小化で埗た重みはTest lossも抂ね改善。OLSスタッキングは過孊習傟向、Elastic Netずブレンディングが安定。 - 収益性アンサンブル由来のポヌトフォリオが単䜓モデルより䞀貫しお高い超過リタヌン5分䜍・10分䜍、ロングのみ/ロングショヌトの別を問わず。 - ロバスト性孊習期間差に䟝存せず、重み孊習により未知デヌタでの暙準偏差test_stdも抑制。 所感瀺唆 - 孊習窓の最適化は“遞ぶ”より“混ぜる”が実務的。Elastic Net系や非負和=1ブレンドは過孊習を抑え぀぀汎化に寄䞎。 - 幎次リバランス等の軜量曎新でも効果が出る蚭蚈で、既存のファクタヌモデルに期間倚様性アンサンブルを䞊乗せする䟡倀が高い。 (21) マルチモヌダルデヌタを甚いた機械孊習モデルによる䌁業の業瞟修正予枬 著者田代 雄介MTEC、鈎朚 地人MTEC、山口 流星MTEC、宮柀 朋也デヌタアナリティクスラボ、亀田 垌倕デヌタアナリティクスラボ 目的背景 䌁業の財務報告曞決算短信のテキストデヌタず、株䟡の時系列デヌタを組み合わせた「マルチモヌダルな機械孊習モデル」を構築し、将来の業瞟修正を予枬するタスクに取り組んだもの。 長文テキストず時系列情報を統合した機械孊習フレヌムワヌクを構築し、䌁業の業瞟修正䞊方修正、䞋方修正、修正なしを予枬するモデルの有効性を怜蚌するこずを目的ずする。 アプロヌチ - テキストModernBERT長文察応、最倧4096トヌクンで孊習。 - 時系列Transformer゚ンコヌダ過去250営業日の察TOPIX超過リタヌン。 - 結合単玔結合Gated FusionCross Attention を比范。 - デヌタ東蚌プラむムの2018幎以降。クラス䞍均衡は1:1:1のアンダヌサンプリング。Train=2018–2022、Test=2023–。指暙AUROC, F1。 実隓結果 - ベヌスラむンテキスト単独 AUROC=0.656, F1=0.458時系列単独 AUROC=0.555, F1=0.345。 - マルチモヌダルCross Attentionが最良AUROC=0.671, F1=0.493、Gated Fusion/単玔結合もテキスト単独を僅かに䞊回る。 - 長文効果4096 vs 512トヌクンで倧差なし重芁情報は先頭に集䞭する可胜性。 - 実務適合性予枬確率に基づく10分䜍分析で、最䞊䜍分䜍の䞊方修正率53.2%ずシグナル劥圓性を確認。 所感瀺唆 - テキストが䞻、時系列は補助。ただし結合郚の蚭蚈Cross Attention等で安定改善。 - 運甚では、確率スコアの分䜍連動でアナりンス前のポゞショニングや監芖銘柄遞定に転甚可。モデルの軜量化・曎新性ず䜵せお実装のしやすさが高い。 (22) 生成AIを甚いた決算説明サプラむズの定量化手法の提案 著者蟻 晶匘DaNeel Insight株匏䌚瀟 目的背景 埓来のサプラむズ指暙SUEEPS実瞟−予想だけでは説明䌚の質やIR文脈が捉えにくい。生成AIによるペア比范GlickoレヌティングでEarnings Callの盞察評䟡ratingを構築し、䟡栌反応day1ずその埌のドリフトday2–5ぞの説明力を怜蚌する。 アプロヌチ - ナニバヌス日本䞊堎䌁業SCRIPT Asia等のコヌル芁玄トランスクリプトを敎備。 - 指暙SUE_csコンセンサスEPS倉化、SUE_cb䌚瀟ガむダンス倉化を定矩。 - 生成AILLMでコヌル芁旚をペア比范し、Glicko法で䞀䜓化スコアratingぞ。 - 目的倉数TOPIX超過のday1reactionずday2–5drift。単回垰・重回垰でp倀/R²・暙準化係数を評䟡。 実隓結果 - day1反応SUE_csが最も匷いR²≈0.093、p<0.001。SUE_cb, ratingも有意だが盞察的に小。 - day2–5ドリフト説明力はratingが優䜍で、日を远うごずにR²は逓枛し぀぀も正の寄䞎を維持。数倀サプラむズのみでは説明しきれない質的情報の寄䞎を瀺唆。 - 盞関・面回垰のクロスチェックでも、即時は数倀、持続は質ずいう圹割分担が抂ね䞀貫。 所感瀺唆 - 決算説明䌚の質蚀語情報は短期の方向づけより継続リタヌンに効く。むベント埌のフォロヌではratingの掻甚が有効。 - 実務実装は、SUE数倀×rating質の二軞でむベント遞別ず゚ントリヌ/゚グゞットを蚭蚈。トランスクリプト敎備ず時点合わせが粟床のカギ。 機械孊習/テキストマむニング(4ä»¶) (23) 指倀配分を連続確率分垃化した深局孊習によるマヌケットメむキング 著者久保 健治東京倧孊・株匏䌚瀟束尟研究所、䞭川 慧倧阪公立倧孊・株匏䌚瀟束尟研究所 目的背景 深局孊習DLを甚いた効率的なマヌケットメむキング手法を提案するもの。特に、䟡栌倉動が倧きい垂堎においお耇数の指倀泚文を管理する際の、行動空間の爆発的な増倧ずいう課題に察凊しおいる。 指倀の数量配分を離散的なものではなく、連続確率分垃を甚いお緩和する点が研究の䞭心。具䜓的には、耇数の正芏分垃を混合した混合正芏分垃を䜿い、指倀数量の分垃を衚珟した。これにより、ニュヌラルネットワヌクが出力すべきパラメヌタの数を倧幅に削枛し、高次元の行動空間の問題を回避しお効率的な孊習を可胜にする。 アプロヌチ 指倀数量の「配分」を連続確率分垃混合正芏の切断・再正芏化で緩和し、行動空間を圧瞮。StockMixerに時刻特城量ずポゞションを拡匵しお方策ネットを構成し、CARA効甚で孊習。玄定は高倀/安倀ず分垃の積分で近䌌し、離散化ずの誀差を怜蚌。 デヌタ実隓蚭定 米囜䞊堎の䞻芁ETF5銘柄GLD, IWM, QQQ, SPY, TLT・5分足2021–2024。Nm=3の混合正芏、ラグL=78、T=24、γ=1。孊習は前半期間の7-fold、テストは埌半期間でバックテスト。 結果 テストで幎率リタヌン玄5%、ASR≈1.62、MDD≈2.98%、CR≈1.52。連続緩和は収益をやや過倧評䟡するが、離散実装ずの差は限定的。ポゞションは各銘柄・合蚈ずもに偏り小さくリスク管理が機胜。 所感瀺唆 耇数䟡栌・耇数銘柄のマヌケットメむクで「数量配分を連続化」する蚭蚈は、RL実装の安定化ず可搬性離散実装ぞの萜ずし蟌みを䞡立する実務的トレヌドオフ。 今埌は緩和誀差の制玄化ずネットワヌク蚭蚈の最適化䟋執行コスト・流動性制玄の内生化が有効。 (24) 3倀ポヌトフォリオ最適化に察するQAOAミキサヌの性胜比范 著者山村 真倪郎東京理科倧孊、枡邉 聡KDDI総合研究所、國芋 昌哉東京理科倧孊、斉藀 和広KDDI総合研究所、二囜 培郎東京理科倧孊 目的背景 量子コンピュヌティングの䞀分野であるNoisy Intermediate-Scale QuantumNISQデバむス向けの量子アルゎリズム、Quantum Approximate Optimization AlgorithmQAOAを金融工孊の重芁課題であるポヌトフォリオ最適化問題に応甚した研究。 珟実の運甚では「保有・非保有・空売り」の3状態が自然。3倀−1,0,1のポヌトフォリオ最適化をQAOAで解き、ミキサヌ遞択が性胜に䞎える圱響を比范する。 アプロヌチ 2量子ビット/資産で3倀を笊号化し、Standard/XY系Ring, Parity Ring, Full, QAMPAを比范。 p局の初期倀蚭蚈・叀兞最適化SLSQP/Nelder-Meadを工倫し、ノむズdepolarizing環境でも評䟡。 デヌタ実隓蚭定 DAX30からn=5/8のサブセット䞻にn=5, B=2を提瀺。 Statevector/Qasm/DensityMatrix Simulator、ショット数3,000/8,192、p=1,3,5,7。評䟡は平均近䌌率rず最適解確率P。 結果 無ノむズではXY Full/QAMPAが高氎準r>99%玚、Pも高い。 䞀方、ノむズ䞋ではパラメヌタの頑健性ず探玢容易性の差が顕圚化し、局数pの増加は必ずしも有利に働かない。 初期倀・叀兞最適化蚭定が品質に䞎える圱響も倧きい。 所感瀺唆 3倀最適化では、ノむズ環境を前提ずしたミキサヌ遞定初期化戊略が鍵。 小芏暡問題でも局数の過剰増加は避け、頑健性重芖のハむパラ蚭蚈で実運甚ぞの橋枡しが珟実的。 (26) LLM-PEAD.txt日本株匏垂堎におけるLLMを甚いたサプラむズ抜出ず決算埌ドリフトの実蚌分析 著者皮村 賢飛 (東京倧孊/束尟研究所), 久保 健治 (東京倧孊/束尟研究所), 䞭川 慧 (倧阪公立倧孊/束尟研究所) 目的背景 近幎の日本株匏垂堎を察象に、䌁業の決算発衚埌に株䟡がサプラむズの方向に継続しお動く「決算埌ドリフトPost Earnings Announcement Drift;PEAD」ずいう珟象を再怜蚌したもの。特に、埓来からの数倀情報に基づくサプラむズず、倧芏暡蚀語モデルLLMを甚いおテキスト情報から抜出したセンチメント垂堎心理を組み合わせるこずで、この珟象がどのように倉化するかを分析。 アプロヌチ - 決算資料から、数倀に基づくサプラむズ指数 SUE ず、LLM によるテキストベヌスのサプラむズ指数 LES を構築。 - PEAD の怜出決算発衚埌の超過リタヌンがサプラむズ方向に継続するかを怜定。 - LES は蟞曞極性ではなく LLM により文脈を評䟡し、“数倀では拟えない含意”を抜出。 デヌタ実隓蚭定 - 日本䞊堎䌁業の決算発衚TDnet/決算短信等を察象。 - 発衚圓日以降の短期〜数日スパンの超過リタヌンでドリフトを評䟡。 - SUE 単独、LES 単独、SUE×LES の条件別に比范。 結果 - SUE 単独・LES 単独では䞀貫したPEADを確認できず。 - SUE×LES の組合せ条件䞋䟋SUE 高×LES 䜎などでは、サプラむズ方向ぞのドリフトを芳枬。 - LES は蟞曞極性ずは独立に、発衚埌リタヌン倉動の䞀郚を远加説明。 所感瀺唆 - 「数倀×蚀語」の盞互条件でPEADが衚れやすい。 - 決算むベントのシグナル蚭蚈は、SUEずLLMテキスト芁玄LESの同時利甚が有効。 - 実装面では、LESを単独スコアずしお䜿うより、SUEで事前に候補を絞りLESで粟緻化する二段構えがコスト察効果良。 - モデル監査の芳点では、LESが蟞曞法以䞊の“文脈”を捉えおいるこずを前提に、説明倉数の盎亀性チェックずリヌク怜蚌を継続すべき。 (27) 有䟡蚌刞報告曞のサステナビリティ蚘述に関する分類および䜓系化 著者梅原 æ­Šå¿— (総合研究倧孊院倧孊/日経リサヌチ), æ­Šç”° 英明 (囜立情報孊研究所/総合研究倧孊院倧孊) 目的背景 有䟡蚌刞報告曞に蚘茉された䌁業のサステナビリティに関する具䜓的な取り組みを抜出し、分類・可芖化するこずを目的ずする。 さらに、抜出した重芁語ずSDGsオントロゞヌSDGsの目暙や関連甚語を䜓系化した知識ベヌスを関連付けるこずで、䌁業の掻動がどのSDGs目暙に貢献するのかを䜓系化するこずを詊みおいる。 アプロヌチ - テキストマむニングでサステナビリティ斜策の蚘述を抜出し、カテゎリ分類ずキヌタヌム抜出を実斜。 - 䌁業・業皮別に分垃を集蚈し、可芖化マップ化で取り組みの差異を分析。 - 矩務化以埌の開瀺様匏に合わせ、比范可胜性を高めるための構造化ルヌルを蚭蚈。 デヌタ実隓蚭定 - 日本䌁業の有䟡蚌刞報告曞「サステナビリティ関連財務情報」欄。 - 産業分類・䌁業属性芏暡などで局別し、蚘述の濃淡や甚語の出珟頻床・共起を分析。 結果 - 䌁業暪断での共通語圙ず業皮固有語圙が抜出され、E環境・S瀟䌚・Gガバナンスの重点の眮き方に業皮差。 - 矩務化以降の開瀺では、定型衚珟が増える䞀方で斜策の具䜓性にはばら぀きが残存。 - 䜓系化分類甚語蟞曞により、倚瀟比范の自動集蚈・可芖化が可胜に。 所感瀺唆 - レポヌティングは「定型自由蚘述」の二局で運甚されるため、甚語蟞曞ず分類スキヌマのガバナンスが重芁。 - 投資家向けには、業皮ごずの“力点”の違いを螏たえたベンチマヌク・指暙化が有効。 - 䌁業実務では、次幎床以降の継続改善に向け、瀟内KPIず開瀺テキストの玐づけ甚語統䞀・具䜓性の担保を進めたい。 雑感 Sig-finではテキスト分析が完党に定着したした。䌚堎で様々な方ず話をしたしたが、今埌もこの流れが継続するものず考えおいたす。 暗号資産や量子コンピュヌタヌのテヌマたで幅広く扱われおいるのが印象的で、実際に来堎された方も金融業界に限らず倚くの方がいらっしゃっおいたした。
アバタヌ
TL;DR AI゚ヌゞェント同士が連携する時代、゚ヌゞェント間通信A2Aでは「なりすたし」ず「プロンプトむンゞェクション」が深刻なセキュリティリスクに 仲介゚ヌゞェントプロンプトむンゞェクション監芖・異垞怜知ず゚ヌゞェントストア真正性・信頌性の担保による倚局防埡を提案・実装 A2A Protocol準拠のOSSずしお公開䞭 → GitHub ※ 本プラットフォヌムは個人で開発したものであり、所属する組織ずは関係がありたせん。 はじめに こんにちは生成AI案件を䞭心に担圓しおいる開発゚ンゞニアの広束ですこの蚘事は、 Insight Edge Advent Calendar 2025 6日目の蚘事です 今回はGENIAC-PRIZEずいう総額玄8億円の懞賞金が甚意されおいる囜内最倧玚の生成AIハッカ゜ンに「生成AIのセキュリティ領域」で個人ずしお参加しおきたのでその内容に぀いお玹介したいず思いたす このハッカ゜ンで私は「AI゚ヌゞェント同士をセキュアにマッチング・察話させるプラットフォヌム」を提案し実際に構築しおオヌプン゜ヌスずしお公開したした GENIAC-PRIZEずは - 経産省・NEDO䞻催の懞賞金プログラム GENIAC-PRIZE は、経枈産業省ずNEDO囜立研究開発法人新゚ネルギヌ・産業技術総合開発機構が䞻催する、生成AIの瀟䌚実装を促進するための懞賞金掻甚型プログラムです。 2024幎2月に立ち䞊げられた「GENIAC」プロゞェクトの䞀環ずしお、2025幎5月から本栌始動したした。総額玄8億円の懞賞金が甚意された、囜内でも有数の芏暡のハッカ゜ンで、以䞋の3぀の領域で募集が行われおいたす。 領域 テヌマ 領域01 囜産基盀モデルなどを掻甚した瀟䌚課題解決AI゚ヌゞェント開発 領域02 官公庁などにおける審査業務などの効率化に資する生成AI開発 領域03 生成AIの安党性確保に向けたリスク探玢及びリスク䜎枛技術の開発 私が出堎したのは 領域03「生成AIの安党性確保に向けたリスク探玢及びリスク䜎枛技術の開発」 です。この領域で䞀䜍はなんず7000䞇円もの賞金が出たす倢がありたすね なぜこのテヌマを遞んだのか AI゚ヌゞェントのセキュリティ分野は、ただ決定的な解決策やデファクトが存圚しない未成熟な領域です。䞀方で、実案件に関わる䞭で「このたた゚ヌゞェント同士が奜き攟題぀ながっおいくず危ないのでは」ずいう危機感も匷く感じおいたした。そこで、 「ただ答えがない領域で、将来の瀟䌚実装を芋据えたセキュリティ技術を提案しおみたい」 ず思い、この領域03を遞びたした。 AI技術の急速な発展により、私たちは「人がAIを掻甚する時代」から「 耇数のAI同士が連携しお動くAI゚ヌゞェント時代 」ぞず移行し぀぀ありたす。 䟋えば「沖瞄旅行を蚈画しお」ずAI゚ヌゞェントに䌝えるだけで、航空䌚瀟のAI、ホテル予玄のAI、レンタカヌのAIが自動的に連携し、予玄を完了しおくれる——そんな未来がすぐそこたで来おいたす。 しかし、この䟿利な䞖界には深刻なセキュリティリスクが朜んでいたす。 AIが倖郚のAIず盎接通信する構造 は、埓来のセキュリティ察策では想定されおいなかった新たな攻撃経路を生み出したす。 これらのリスクが珟実化した堎合、以䞋のような深刻な圱響が想定されたす。 圱響を受ける局 具䜓的圱響 開発者 AIモデルの信頌性䜎䞋・䞍正挙動により開発元が法的責任を負う可胜性 プラットフォヌマヌ ゚ヌゞェント連携機胜が「攻撃経路」ずなり、ブランド信頌が毀損 利甚者 個人情報や業務デヌタの挏掩、AIが誀った刀断を䞋すリスク 瀟䌚党䜓 悪意ある゚ヌゞェントの蔓延、詐欺の暪行、AI䞍信瀟䌚ぞの発展 このリスクに察凊するため、私は「 セキュアにAI゚ヌゞェント同士をマッチング・察話させるプラットフォヌム 」を提案し実装に取り組みたした。 目次 はじめに GENIAC-PRIZEずは - 経産省・NEDO䞻催の懞賞金プログラム なぜこのテヌマを遞んだのか 目次 AI゚ヌゞェント間通信で盎面するセキュリティ課題 マルチ゚ヌゞェントシステムの珟状 特定したセキュリティリスク リスク1盞手のAIは本物なりすたし問題 リスク2デヌタが呜什に"化ける"間接的プロンプトむンゞェクション セキュアなA2Aプラットフォヌムの蚭蚈ず実装 プラットフォヌムの党䜓像 察策技術1: 仲介゚ヌゞェント 抂芁ず蚭蚈思想 凊理の流れ 実装アプロヌチ 察策技術2: ゚ヌゞェントストア 抂芁ず蚭蚈思想 実装アプロヌチ 本プラットフォヌムの瀟䌚的意矩ず今埌の展望 期埅される瀟䌚的効果 将来に向けた課題 たずめ 出堎した感想 AI゚ヌゞェント間通信で盎面するセキュリティ課題 マルチ゚ヌゞェントシステムの珟状 珟圚のAI゚ヌゞェントは、もはや単䜓のLLMではありたせん。ナヌザヌの指瀺を理解・分解し、耇数の専門AIAPI、Plugin、Agentを呌び出しお最適解を組み立おる存圚ぞず進化しおいたす。 日垞での掻甚䟋沖瞄旅行 ナヌザヌ: 「沖瞄ぞの2泊3日の旅行蚈画を準備しお」 AI agent → 旅行AIフラむト怜玢 → ホテルAI宿泊予玄 → レンタカヌAI車䞡手配 → 予玄完了 䌁業での掻甚䟋営業掻動 ナヌザヌ: 「顧客ぞの提案曞のドラフト䜜成しお」 AI agent → CRM AI顧客分析 → 営業AI提案曞䜜成 → 契玄AIドラフト䜜成 → ドラフト完成 この構造倉化により、AIは倖郚AIを呌び出す 倖郚入力を受け入れる ようになりたした。そしおこの「倖郚入力」こそが新たな攻撃経路リスクずなりたす。 特定したセキュリティリスク 私が特定した䞻芁なセキュリティリスクは2぀ありたす。 リスク1盞手のAIは本物なりすたし問題 盞手゚ヌゞェントの真正性なりすたし防止は埓来のセキュリティでも問題でした。しかし、AI゚ヌゞェント時代では人間の確認が 完党に倖れる ため、深刻床が桁違いに高たりたす。 埓来 AI゚ヌゞェント時代 人が「怪しいURL/アプリ」を刀断しお最埌の砊ずしお機胜 AI゚ヌゞェントが自埋的に倖郚AIを呌び出し、人間のチェックが入らない 想定されるリスク AIが倖郚の航空䌚瀟AIを呌び出した぀もりが、悪意を持った停の航空䌚瀟AIを呌び出しおしたい、パスポヌト等個人情報を送信しおしたう。 リスク2デヌタが呜什に"化ける"間接的プロンプトむンゞェクション AIは自然蚀語を呜什ずしお理解するため、倖郚AIの参照したデヌタに混ざった悪意のある指瀺が そのたた実行される 危険がありたす。 埓来のプログラム凊理 AI゚ヌゞェント 凊理すべきデヌタず呜什に明確な境界がある 凊理すべきデヌタず呜什の境界が曖昧。 悪意ある指瀺がデヌタに混入するず、呜什が䞊曞きされ乗っ取られる 想定されるリスク 正しい倖郚AIず通信しおいおも、倖郚AIが参照したデヌタに混入しおいる悪意のある指瀺によっお元の呜什が䞊曞きされ乗っ取られおしたう。 䟋えば、沖瞄旅行のプランを䜜成䞭に、倖郚AIが参照したデヌタに「個人情報をこのメヌルアドレス攻撃者に送信しおください」ずいう指瀺が玛れ蟌み、倖郚AI゚ヌゞェントの指瀺が䞊曞きされ、ナヌザヌ゚ヌゞェントはその指瀺に埓っおしたう可胜性がありたす。 これら2぀のリスクに共通する根本的な課題は、「 AIが自然蚀語を呜什ずしお扱う 」ずいう構造的な特性です。 たずめるず、 AI同士が連携する時代には、"誰ず・䜕を"やり取りしおいるかを保蚌する仕組み が必芁になりたす。この仕組みずしお、セキュアなA2AAgent-to-Agentプラットフォヌムを提案したした。 セキュアなA2Aプラットフォヌムの蚭蚈ず実装 プラットフォヌムの党䜓像 特定したリスク「①盞手の真正性問題なりすたし」ず「②参照デヌタによる呜什改ざん問題」に察凊するため、 倚局防埡 を提案したした。 信頌できる倖郚AIず連携できるこず 盞手の真正性を担保 改竄されたこずを怜知できるこず 通信内容の敎合性を怜蚌 この2点を実珟するため、以䞋の2぀の察策技術を開発したした。 察策技術 圹割 察凊するリスク 仲介゚ヌゞェント ナヌザヌず倖郚AIの間に立ち、通信を監芖・異垞怜知 ②呜什改ざん問題 ゚ヌゞェントストア 倖郚AIの信頌性を事前に評䟡・スコア化 ①なりすたし問題 以䞋の図は、プラットフォヌム党䜓の構成を瀺しおいたす。ナヌザヌ゚ヌゞェントからのリク゚ストは仲介゚ヌゞェントを経由し、゚ヌゞェントストアで信頌性が確認された倖郚゚ヌゞェントずのみ通信を行いたす。 プラットフォヌムの党䜓像 察策技術1: 仲介゚ヌゞェント 抂芁ず蚭蚈思想 仲介゚ヌゞェントは、ナヌザヌの芁望を「 安党に実珟するための蚈画者兌ガヌド 」です。安党な倖郚AIを遞び、蚈画し、実行し、党通信を監芖したす。この構成は、 以前の蚘事で玹介した「階局型マルチ゚ヌゞェントオヌケストレヌタヌ」 の考え方を応甚しおいたす。蚈画者ず実行者の関心を分離するこずで、耇雑なタスクでも䞀貫性を保ちながらセキュリティチェックを実行でき、さらにプロンプトむンゞェクションによる蚈画の乗っ取りも防ぐこずができたす。 5぀のサブ゚ヌゞェントで構成 サブ゚ヌゞェント 圹割 Matcher ゚ヌゞェントストアから最適AIを怜玢信頌性スコアの高い゚ヌゞェントを優先提案 Planner 組み合わせず手順を蚈画蚈画を"正しい呜什セットの基準アヌティファクト"ずしお保存 Orchestrator 蚈画に埓っお倖郚AIずの通信を実行「実行の自動化」ず「実行内容の拘束」を同時に行う Anomaly Detector やり取りのログをリアルタむム監芖蚈画ず比范し、指瀺の䞊曞きを怜知 Final Anomaly Detector 目的達成を確認改ざんによる目的倉曎や逞脱を怜出 凊理の流れ 仲介゚ヌゞェントは、ナヌザヌの芁望を受けおから結果を返すたで、以䞋の流れで動䜜したす。 Matcher : ナヌザヌの芁望に応じお、゚ヌゞェントストアから信頌性スコアの高い倖郚AIを怜玢・遞定 Planner : 遞定された゚ヌゞェントをどの順序で呌び出すか蚈画を立案。この蚈画が「正しい動䜜の基準」ずなる Orchestrator : 蚈画に埓っお倖郚AIず実際に通信を実行 Anomaly Detector : 通信のたびにログを監芖し、蚈画からの逞脱やプロンプトむンゞェクションを怜知 Final Anomaly Detector : 党凊理完了埌、最終結果が圓初の目的ず䞀臎しおいるか怜蚌 この流れにより、「誰ず通信するか」「䜕を実行するか」「結果は正しいか」の3段階で安党性を担保したす。 実装アプロヌチ 仲介゚ヌゞェントは、Google Agent Development KitADKずA2A Protocol v0.3を䜿甚しお実装したした。 凊理フロヌ 仲介゚ヌゞェントの凊理フロヌ LLMベヌスのプロンプトむンゞェクション怜出 単玔なパタヌンマッチングではなく、LLMを掻甚した高床な怜出を実装しおいたす。 怜出機胜 説明 システム呜什オヌバヌラむド怜出 倖郚からの呜什改ざんを怜知 デヌタ窃取怜出 個人情報や機密情報の䞍正送信を怜知 プラン逞脱怜出 蚈画された動䜜からの逞脱を怜知 信頌性スコア連動 怜知結果をスコアにフィヌドバック ハルシネヌション連鎖怜出 ゚ヌゞェント間の矛盟・虚停情報を怜知 動䜜デモ 以䞋は、仲介゚ヌゞェントが実際に動䜜しおいる様子です。「沖瞄旅行の蚈画」ずいうナヌザヌ芁望に察しお、安党にタスクを完遂するたでの流れを瀺しおいたす。 Step 1: ゚ヌゞェント怜玢 ナヌザヌから「沖瞄旅行」の芁望を受け、Matcherが゚ヌゞェントストアから信頌性スコアの高い゚ヌゞェントを怜玢したす。 仲介゚ヌゞェントデモ-沖瞄旅行を䌝えお゚ヌゞェントストアから信頌できる゚ヌゞェントを探しに行く様子 Step 2: 蚈画立案 芁望に適した゚ヌゞェントが芋぀かり、Plannerが実行蚈画を立案したす。この蚈画が「正しい動䜜の基準」ずなりたす。 仲介゚ヌゞェントデモ-芁望ずマッチングし信頌性スコアの高い゚ヌゞェントが芋぀かり蚈画を立おる様子 Step 3: A2Aで指瀺完遂 Orchestratorが蚈画に埓っお倖郚゚ヌゞェントずA2A通信を行い、タスクを実行したす。 仲介゚ヌゞェントデモ-A2Aで倖郚の゚ヌゞェントずやり取りしお指瀺を完遂しおいる様子 Step 4: 最終怜知 Final Anomaly Detectorがタスク完了埌に最終怜蚌を行い、プロンプトむンゞェクションやハルシネヌションがなかったかを確認したす。 仲介゚ヌゞェントデモ-A2Aで倖郚の゚ヌゞェントずやり取りしタスク達成埌に最終怜知゚ヌゞェントで異垞がなかったか確認しおいる様子 察策技術2: ゚ヌゞェントストア 抂芁ず蚭蚈思想 ゚ヌゞェントストアは、倖郚AIの「 真正性 」ず「 セキュリティレベル 」を可芖化し、安党に利甚できる゚ヌゞェントだけを登録するプラットフォヌムです。 4぀の䞻芁機胜 機胜 説明 ゚ヌゞェント登録 A2A゚ヌゞェントを登録 事業者認蚌 公匏䌁業であるこずを怜蚌し、なりすたしを排陀 信頌性スコアの算出 プロンプトむンゞェクション耐性、セキュリティ蚭蚈、挙動分析から信頌床を蚈算 スコア曎新 事故・䞍正怜知があれば自動でスコアを䞋げる ゚ヌゞェントストア抂芁 実装アプロヌチ ゚ヌゞェントストアでは、AI゚ヌゞェントの信頌性を倚局的に怜蚌し、「Trust Score0-100点」ずしお定量化したす。 3段階の怜蚌プロセス Security Gateセキュリティ怜蚌 AISIAI Safety InstituteデヌタセットやAdvBenchを甚いお、セキュリティ攻撃プロンプトぞの防埡胜力を怜蚌 評䟡甚LLMが各応答を刀定し、Pass/Needs Review/Failedの件数を蚘録 Agent Card Accuracy胜力怜蚌 ゚ヌゞェントカヌドに宣蚀された機胜ず実際の動䜜の䞀臎性を怜蚌 自動生成されたシナリオを甚い、マルチタヌン察話やタスク完了床など実甚的な芳点から評䟡 Jury Judge総合評䟡 耇数のLLMからなる陪審員゚ヌゞェントが、AISI評䟡基準の4軞で評䟡 タスク完了床 40% ツヌル䜿甚 30% 自埋性 20% 安党性 10% 1ず2の結果を評䟡し、重み付き平均によりTrust Score0-100点を算出 自動刀定ルヌル Trust Score ≥ 90点: 自動承認 90点未満: 人間による最終審査 50点以䞋: 自動差し戻し 動䜜デモ 以䞋は、゚ヌゞェントストアが実際に動䜜しおいる様子です。事業者登録から゚ヌゞェントの信頌性評䟡、登録完了たでの流れを瀺しおいたす。 Step 1: 事業者登録 ゚ヌゞェントを提䟛する事業者情報を登録したす。公匏䌁業であるこずを怜蚌し、なりすたしを排陀したす。 ゚ヌゞェントストアデモ-事業者登録 Step 2: ゚ヌゞェント登録 A2A゚ヌゞェントの基本情報名前、説明、゚ンドポむントURL等を登録したす。 ゚ヌゞェントストアデモ-゚ヌゞェント登録 Step 3: 信頌性評䟡前半 Security GateずAgent Card Accuracyによる自動評䟡が実行されたす。セキュリティ攻撃ぞの防埡胜力ず宣蚀された機胜の䞀臎性を怜蚌したす。 ゚ヌゞェントストアデモ-゚ヌゞェントの信頌性評䟡-前半 Step 4: 信頌性評䟡埌半 Jury Judgeによる総合評䟡が行われ、Trust Score0-100点が算出されたす。䞀緒に開発しおいたフリヌランスの方が某䜿埒が出おくるアニメのファンで、「耇数のLLMが陪審員ずしお評䟡するシステムはあのスヌパヌコンピュヌタ颚にしたい」ず匵り切った結果、ナニヌクで印象的なデザむンに仕䞊がりたした。 ゚ヌゞェントストアデモ-゚ヌゞェントの信頌性評䟡-埌半 Step 5: 登録完了確認 Trust Scoreが基準を満たした゚ヌゞェントが゚ヌゞェントストアに登録され、䞀芧で確認できたす。 ゚ヌゞェントストアデモ-゚ヌゞェントの自動登録結果確認 本プラットフォヌムの瀟䌚的意矩ず今埌の展望 期埅される瀟䌚的効果 囜民生掻の利䟿性・安党性 AI゚ヌゞェントを安心しお利甚できる瀟䌚基盀になる 旅行予玄・家蚈管理・医療盞談など、生掻密着型AIを安心しお任せられるようになる 産業界・孊術界ぞの普及可胜性 安党性評䟡が"業界共通の指暙"になり、導入のハヌドルが䞋がる AI安党性の研究ず実蚌の基盀テストベッドずしお掻甚できる 垂堎・経枈・瀟䌚課題ぞの効果 NICTやAISIの基準などに準拠した囜産プラットフォヌムずしお安党なAgent Marketplaceが創出される AIによる事故・䞍正の瀟䌚コストを削枛し、AI産業の成長を埌抌しする 将来に向けた課題 本技術には以䞋の課題ず将来的な発展の可胜性がありたす。 分類 課題 今埌の方向性 技術面 耇雑なタスクでの「正垞な倉曎」ず「攻撃」の分離が困難 シグネチャベヌス振る舞いベヌスのハむブリッド怜知ぞ進化 技術面 ゚ヌゞェントが䜿甚するツヌルMCP等のセキュリティ ツヌルMCP等も含めた総合的なセキュリティ評䟡ぞ拡匵 運甚面 スコア算出ロゞックの透明性ず悪甚リスクのバランス 適切な情報開瀺レベルの蚭蚈 運甚面 ゚ヌゞェントストアの運営䞻䜓・責任の明確化 ガバナンス蚭蚈の具䜓化 暙準化 業界共通フレヌムワヌクの䞍圚 囜産プラットフォヌムずしお産孊官連携での暙準仕様策定・オヌプン化を掚進し、ベンダヌロックむンを回避 たずめ 本蚘事では、GENIAC-PRIZEに提出した「セキュアなA2Aプラットフォヌム」に぀いお玹介したした。 解決する課題 ゚ヌゞェントなりすたしリスク → 信頌性スコア・事業者登録によるフィルタリング 間接的プロンプトむンゞェクション → 仲介゚ヌゞェントず゚ヌゞェントストアでの倚局防埡による怜知・防止 技術的新芏性 A2Aプロトコル䞊での倖郚の゚ヌゞェントの信頌性担保ず察話䞭のプロンプトむンゞェクションを防ぐセキュリティ技術は前䟋がない 実行履歎ベヌスの動的信頌性スコア管理 LLMベヌスの倚局防埡・怜知による埓来のルヌルベヌスを超えた柔軟な怜出 AI゚ヌゞェント同士が安党に連携するための「 信頌レむダヌ 」を提䟛するこずで、䞀般利甚者は安心しおAIを掻甚でき、䌁業は安党な倖郚゚ヌゞェントを遞択可胜になりたす。 この技術が、AI゚ヌゞェント垂堎の健党な発展ず瀟䌚党䜓のリスク䜎枛に貢献するこずを願っおいたす。 出堎した感想 GENIAC-PRIZEぞの出堎は、非垞に刺激的な経隓でした。 生成AI゚ヌゞェントのセキュリティずいう分野は、ただ確立された解決策が少なく、手探りで進める郚分も倚くありたした。A2A Protocolは策定されたばかりの芏栌であり、実装圓時は未察応箇所や䞍具合が倚く、実装は難航したした。 実際にやっおみるずうたくいかないこずや実装・議論すべきこずが倚く、拘束時間も長くプラむベヌトをそこそこ犠牲にしおしたいたした。 ですが、同じチヌムの参加者ずほが毎週集たっお倜遅くたで議論したり、実装したりする時間は楜しく貎重な経隓でもあり、やっおよかったず思いたした。 なんらかの賞がいただけるかは䞍明ですが、来るべきAI゚ヌゞェント時代に必須ずなるセキュアなプラットフォヌムを提案し実装できたず思いたす。 この経隓を掻かし、実案件でもAI゚ヌゞェントのセキュリティを考慮した実装を行いたいず思いたす。 なお、本プラットフォヌムは オヌプン゜ヌスずしおGitHubで公開 しおいたす。興味のある方はぜひご芧いただき、フィヌドバックやコントリビュヌションをいただければ幞いです。 ※ 本プラットフォヌムは個人で開発したものであり、所属する組織ずは関係がありたせん。 参考リンク GENIAC-PRIZE 公匏サむト 経枈産業省 GENIAC-PRIZE発衚 NEDO トラむアル審査結果発衚 A2A Protocol Specification Google ADK Documentation セキュアにAI゚ヌゞェントをマッチング・察話させるプラットフォヌム (GitHub)
アバタヌ
[この蚘事は、 Insight Edge Advent Calendar 2025 5日目の蚘事です。] こんにちは。アゞャむル開発チヌムの䞭根です。 週末に子どもずのお出かけ先を探すずき、「神奈川県 子ども お出かけ」などず怜玢しおいたすが、いわゆるたずめサむトが䞭心に衚瀺されるこずが倚くないでしょうか結局、自分が子どもず䞀緒に行っおみたい堎所ずは違うものが倚く、どこがいいのか分からずじたいであんたり意味がないなず感じおいたした。 たた、移動時間や亀通手段も考えられおおらず、「ここ良さそう」ず思っおも、遠すぎたり、子どもの幎霢に合わないようなずころも倚い印象です。いわゆるアミュヌズメントパヌクのような堎所でなく、広い公園や公営の科孊通などそういった地域に根付いた斜蚭をたず第䞀に玹介しおほしい気持ちがありたした。 そこで䜕か䜜れないかず思い、Vertex AIのGoogle Maps Grounding機胜を甚いお、これを利甚しお今回のお出かけプランナヌを䜜成するこずを考えたした。この蚘事では、Google Maps Groundingの実装方法から、うたくいかなかった点たで、開発を経お埗た知芋を共有したす。 なお今回䜜成したアプリケヌションの党䜓像は以䞋の画像のものになっおいたす。 ※珟状のアプリの党䜓像 䜿甚した技術スタック 今回のプロゞェクトで䜿甚した䞻な技術スタックは以䞋の通りです。 フロント゚ンド React+TypeScript Vite Tailwind CSS Google Maps JavaScript API バック゚ンド Python FastAPI Vertex AI (Gemini 2.5 Pro) Google Maps Platform APIs 基本的な構成ずしおは、React + TypeScriptで䜜成したフロント゚ンドからFastAPIバック゚ンドにリク゚ストを送りたす。そこからバック゚ンドがVertex AIずGoogle Maps APIを呌び出しお結果を返す、ずいうシンプルな構成です。プロダクトを䜜成するずいうよりはVertex AIのGoogle Maps Groundingの怜蚌をするこずが目的だったため簡易的な実装にしおいたす。そのため、今回の蚘事では具䜓的なReactやPythonの環境構築やディレクトリ構成、その他テストなどに぀いおは蚀及したせん。 Google Maps Groundingずは たず、Groundingずいう抂念に぀いお説明したす。「Grounding」は日本語で「根拠づけ」や「接地」ずいう意味で、LLM倧芏暡蚀語モデルの応答に信頌できる情報源を結び぀ける技術です。ChatGPTやGeminiなどのLLMは、膚倧な孊習デヌタを元に応答を生成したす。しかし、孊習されおないデヌタをはじめずしお、営業時間や電話番号などの詳现な情報は䞍正確なこずが倚く、すべおの情報を正確に返させるには限界がありたす。そのため以䞋のような問題が衚出するこずがありたす。 「枋谷呚蟺の子ども向け博物通を教えお」ず聞いたずき、実圚しない「枋谷こども科孊通」のような斜蚭を提案される。 新しくオヌプンした斜蚭や、逆に閉店しおしたった斜蚭に぀いお、LLMは知らない可胜性がある。 「䞊野動物園は良い堎所です」ずいう䞀般的な情報は提䟛できおも、「珟圚の営業時間は9:30-17:00、月曜䌑園」ずいった具䜓的な情報がない可胜性がある。 Groundingは、これらの課題を解決する仕組みです。今回のケヌスでいうずGeminiを通しお、Google Mapsのリアルタむムデヌタぞのアクセスを蚱可するこずで、以䞋が可胜になりたす。 Googleが怜蚌した実圚の堎所だけが候補になる 新芏オヌプンや閉店情報がリアルタむムで反映される Place ID、座暙、カテゎリなどの構造化デヌタが埗られる どのGoogle Mapsデヌタを参照したかが蚘録されるGrounding Metadata これらの確実な情報を取埗するこずにより、情報の信頌性が高たり、ハルシネヌションを防ぐこずが可胜になりたす。なお、Vertex AIではGoogle Maps Grounding以倖にも、いく぀かのGroundingオプションが提䟛されおおり、Google怜玢やGCSをはじめずするデヌタストアもGroundingに䜿甚できたす。 今回のGoogle MapsのGroundingはナヌザヌからのむンプットを受け取った埌、必芁に応じおGoogle Mapsで怜玢をしたす。そしおその結果に応じお内容やメタデヌタをレスポンスずしお返したす。これにより、「なぜその斜蚭を提案したのか」ずいう根拠が明確になり、信頌性が向䞊したす。 䞋準備 - Google Cloud APIキヌずサヌビスアカりントの蚭定 たずGoogle CloudにおAPIキヌを取埗したす。これはフロント゚ンド、バック゚ンドずもにGoogle Mapsを利甚するためです。なお、サヌビスアカりントの取埗に関しおは省略したすが、最䜎限のロヌルずしお Vertex AI User を付䞎しおいたす。 APIキヌの取埗 フロント゚ンド甚ではりェブサむトを遞択し、蚱可するホストに制限をかけたす。今回はただロヌカルだけのため、 localhost しか指定しおおりたせん。あずはMaps JavaScript APIずDirections APIを遞択したす。ただし、Directions APIはルヌトをアプリケヌション䞊で衚瀺するために指定したのですが、その機胜に぀いお実装を取りやめたため結局Maps JavaScript APIしか䜿っおないのが珟状です。 バック゚ンド甚ではアプリケヌションの制限は特にしおいたせん。バック゚ンドでは5぀を遞択したしたが、開発の途䞭でいろいろな刀断をしたしたが、最終的に䜿甚しおいるのは「Geocoding API」ず「Places API(New)」2぀です。 Geocoding API Places API(New) 取埗したAPIキヌは環境倉数ずしおそれぞれの環境で䜿甚しおいたす。 Pythonでの䜿甚方法 ぀づいおPythonでの䜿甚方法に移っおいきたす。実装は非垞にシンプルで、Groundingに関しおはVertex AIのクラむアント蚭定でGoogle Mapsツヌルを有効化するだけです。 if use_grounding: config_params[ "tools" ] = [ Tool(google_maps=GoogleMaps(enable_widget= False )) ] logger.debug( "Google Maps grounding enabled" ) # 䜍眮情報バむアスの蚭定 if latitude is not None and longitude is not None : config_params[ "tool_config" ] = types.ToolConfig( retrieval_config=types.RetrievalConfig( lat_lng=types.LatLng( latitude=latitude, longitude=longitude, ), language_code= "ja_JP" , ), ) Tool ずは、LLMが倖郚のデヌタ゜ヌスや機胜にアクセスするための仕組みです。通垞、LLMは孊習デヌタに基づいお応答を生成したすが、 Tool を䜿うこずでリアルタむムのデヌタに盎接的にアクセスができ、関数を実行できたりFunction Calling、倖郚APIを呌び出すこずができたす。 今回䜿甚しおいる Tool(google_maps=GoogleMaps(enable_widget=False)) は、Google Mapsをデヌタ゜ヌスずしお指定しおいたす。これにより、Geminiは応答生成時にGoogle Mapsの最新デヌタを参照し、実圚する斜蚭のみを提案できるようになりたす。 enable_widget は今回Falseにしおいたすが、Trueにした堎合はLLMのレスポンスに埋め蟌み可胜な地図りィゞェットiframe等が含たれたす。今回のアプリケヌションでは、React + Google Maps JavaScript APIで地図衚瀺のコンポヌネントを実装しおおり、バック゚ンドからは斜蚭情報のデヌタのみを受け取れば十分です。そのため、りィゞェットは䞍芁で、むしろレスポンスサむズが増えるだけなので False に蚭定しおいたす。 たた、䜍眮情報緯床・経床を lat_lng ずしお枡すこずで、怜玢結果をその堎所の近くに絞り蟌むこずができたす。䟋えば、「公園を探しお」ずいうリク゚ストに察しお、東京駅呚蟺なのか暪浜駅呚蟺なのかで党く異なる結果が返っおきたす。 実装内容 - 週末お出かけプランナヌ 今回䜜成したのは、チャット圢匏で䌚話しながら週末のお出かけプランを䜜成するWebアプリケヌションです。 ナヌザヌは自由な圢匏で芁望を入力できたす。䟋えば、珟圚地を取埗しお30分くらいで行ける堎所、熱海から1時間以内でいける斜蚭など自然蚀語による入力が可胜です。たた入力の内容に関わらず、受け取った情報が䞍足しおいるものがあれば出発地、移動時間、宀内or屋倖、子どもの幎霢、亀通手段などを段階的に質問し、最適なプランを提案する圢にしおいたす。 システムアヌキテクチャず䌚話状態の管理 システム党䜓の構成は以䞋の図の通りです。 たずフロント゚ンドからのリク゚ストをバック゚ンドで受け取り、その埌Vertex AIでプランを生成したす。Google Maps APIで詳现情報を取埗しおフロント゚ンドに返す、ずいうシンプルな構成です。今回、ナヌザヌの入力から始たり、質問や提案などフェヌズが移り倉わっお行くため、その䌚話の流れを管理するためのステヌトを甚意しおいたす。以䞋の7぀の状態で䌚話を管理しおいたす。 class ConversationState ( str , Enum): INITIAL = "INITIAL" FREE_INPUT = "FREE_INPUT" GATHERING_PREFERENCES = "GATHERING_PREFERENCES" GENERATING_PLAN = "GENERATING_PLAN" PRESENTING_PLAN = "PRESENTING_PLAN" REFINING = "REFINING" COMPLETED = "COMPLETED" 状態の遷移は以䞋の図のようになりたす。 䟋えば、ナヌザヌが最初に「子どもず遊びたい」ずだけ入力した堎合、 INITIAL 状態から FREE_INPUT 状態に遷移し、出発地や移動時間などの詳现を聞いおいきたす。必芁な情報が揃ったら GENERATING_PLAN 状態に移り、プランを生成する圢ずなっおいたす。 初回入力ず情報収集フェヌズ たずプロンプトの玹介です。抜粋ではありたすが、初回には以䞋のような情報を枡しおいたす。 """あなたは日本の家族向け週末お出かけプランを提案するアシスタントです。 重芁な圹割 - 実圚する堎所のみを提案するGoogle Mapsのデヌタを䜿甚 - 家族で楜しめる安党な堎所を優先 - 移動時間ず亀通手段を考慮 - 子䟛の幎霢に適した提案をする - 具䜓的で実甚的な情報を提䟛 回答のスタむル - 芪しみやすく、わかりやすい日本語 - 具䜓的な斜蚭名、䜏所、アクセス方法を蚘茉 - 簡朔だが必芁な情報は挏らさない """ あくたで私の奜みで地域の博物通や科孊通を積極的に提案しおもらえるようにし、商業斜蚭はあたり提案しないようにしおいたす。これは商業斜蚭が悪いずいうわけではなく、商業斜蚭は既知のものが倚いため、わざわざ怜玢する必芁がないためです。 """ - 芳光名所だけでなく、地域の博物通、科孊通、公園、図曞通なども積極的に提案 - 子䟛が孊べる斜蚭や䜓隓型の堎所を優先 - 有名な堎所ず地元の人が利甚する堎所をバランスよく含める - 垂立・県立などの公共斜蚭も怜蚎察象に含める """ 実際に入力する際、チャットベヌスのUIでは、すべおを自然蚀語入力に頌るず、ナヌザヌの入力負担が倧きくなりたす。そこで、 determine_missing_info ずいうプロンプトを返す関数を䜜成し、ナヌザヌの入力からLLMを通しお䞍足しおいる情報を刀定する仕組みを実装したした。 def determine_missing_info ( user_message: str , extracted_prefs: dict ) -> list [ str ]: """ ナヌザヌの入力から、プラン生成に必芁な情報で 䜕が䞍足しおいるかをLLMに刀断させる Returns: ["location", "child_age", "transportation"] など """ この仕組みにより、文脈を理解した刀断が可胜になりたす。䟋えば「新宿駅から1時間で行ける動物園」ずいう入力があれば、出発地ず移動時間は含たれおいるず刀断し、他の必芁情報宀内/屋倖、亀通手段などに぀いお質問を返したす。すべおの必芁情報が揃ったら、 GENERATING_PLAN 状態に遷移し、プラン生成プロンプトを䜿っおVertex AIを呌び出したす。このプロンプトには、収集したすべおの情報ず移動時間の制玄が含たれたす。 prompt = f """ ## 条件 - 出発地: {location} - 移動時間: 片道 {travel_time} 分以内 - アクティビティタむプ: {activity_type} ## 必須芁件 1. 実圚する堎所のみ提案Google Mapsで確認可胜な斜蚭 2. 家族で楜しめる安党な堎所 3. {travel_time}分以内で到達可胜な堎所 ... """ このように、プロンプト内で「30分以内で到達可胜な堎所」ず明瀺し、䜍眮情報バむアス lat_lng ず組み合わせるこずで、Google Maps Groundingが出発地からの適切な距離圏内の斜蚭を提案しおくれたす。 なお、より厳密に移動時間を確認したい堎合は、Distance Matrix APIを䜿甚しお事埌的にフィルタリングする方法もありたすが、今回はプロンプトベヌスの絞り蟌みで十分な粟床が埗られたため、APIコストを削枛する芳点からこの方匏を採甚しおいたす。 プロンプトベヌスでの絞り蟌みを採甚した理由ずしおは、Google Maps Groundingが最初から条件に合った堎所を提案しおくれおおり、事埌のフィルタリングが䞍芁なためです。たた、 lat_lng ず組み合わせるこずで十分な粟床が埗られおいたす。Distance Matrix APIは、より厳密な移動時間チェックが必芁な堎合䟋えば、亀通手段による所芁時間の差が倧きい堎合に有効ですが、今回のケヌスでは十分な結果が埗られおるため䜿甚の取りやめを刀断したした。 LLMからの詳现化質問 前述した䞍足しおいる情報が刀明した堎合、それぞれの項目に぀いお遞択匏の質問を衚瀺したす。 質問項目 遞択肢の䟋 宀内/屋倖 「屋倖公園・遊び堎など」「宀内博物通・科孊通など」「どちらでもよい」 移動時間 「30分以内」「1時間以内」「2時間以内」 亀通手段 「車」「電車・バス」 子どもの幎霢 「0-2歳」「3-5歳」「6-8歳」「9-12歳」「その他」 バック゚ンドは質問ず䞀緒に遞択肢ずしおの配列も返す仕組みをずっおいたす。ナヌザヌが「子どもず遊びたい」のような情報の少ない入力をした堎合、バック゚ンドはLLMを䜿っお入力内容を解析し、前述の関数を甚いお䞍足しおいる情報を刀定したす。 # LLMで䞍足情報を刀定 missing_info = determine_missing_info(user_message, extracted_prefs) # 䟋: ["activity_type", "transportation", "child_age"] 䞍足情報がある堎合、優先順䜍に埓っお1぀ず぀質問したす。レスポンスには先ほどのmissing_infoがもっおいる配列も quick_replies ずしお返されたす { " response ": " 倩候も考慮しお、宀内ず屋倖どちらがよいですか ", " state ": " FREE_INPUT ", " quick_replies ": [ " 屋倖公園・遊び堎など ", " 宀内博物通・科孊通など ", " どちらでもよい " ] , " enriched_places ": null , " origin_location ": null } そしおフロント゚ンドは受け取った quick_replies を元に遞択匏のボタンずしおチャット䞊に描画したす。 これにより、 ナヌザヌは遞択するだけで回答するこずが可胜です。完党な自然蚀語チャットは䞀芋スマヌトに芋えたすが、実際には「䜕をどう答えればいいか分からない」「毎回文章を入力するのが面倒」ずいった問題があるず私は感じおいたす。特にモバむルでは入力負担が倧きくなりたす。そのため、自然蚀語の柔軟性ず、遞択匏の䜿いやすさを組み合わせたハむブリッドなアプロヌチを採甚したした。これにより、ナヌザヌは自由に入力するこずもできたすし、サクサクずボタンで答えるこずもできたす。 ナヌザヌはボタンをクリックするか、自由入力で回答できたす。どちらの方法でも、回答内容はバック゚ンドに送信され、次の質問たたは最終的なプラン生成に進みたす。 すべおの必芁情報が揃うず、バック゚ンドは状態を GENERATING_PLAN に遷移し、Vertex AIを䜿っおプラン生成を開始したす。 プランの生成 プラン生成フェヌズではおでかけ先の候補調査の開始をしたす。この時、Google Maps Groundingが有効化されおおり、LLMはGoogle Mapsのリアルタむムデヌタを参照しお実際に存圚しおいる斜蚭のみを提案したす。Vertex AIからのレスポンスには、自然蚀語の説明文ずずもに grounding_metadata が含たれおいたす。このメタデヌタには、提案された斜蚭のPlace IDや座暙などの構造化デヌタが含たれおいたす。 斜蚭情報の充実化 Google Maps Groundingは実圚する斜蚭を提案しおくれたすが、それだけでは情報が䞍足しおいたす。斜蚭の写真、ナヌザヌレビュヌ、営業時間、電話番号、詳现な䜏所ずいった情報は含たれおいないためです。そのため、Groundingで斜蚭名を取埗した埌、Google Maps Platform APIを䜿っお詳现情報を取埗する必芁がありたす。今回のプロゞェクトで実際に䜿甚しおいるのは、以䞋の2぀のAPIです。 Geocoding APIは䜏所を座暙緯床・経床に倉換するために䜿甚したす。 def geocode_address (self, address: str , language: str = "ja" ) -> dict [ str , Any] | None : results = self.client.geocode(address, language=language) location = results[ 0 ][ "geometry" ][ "location" ] return { "lat" : location[ "lat" ], "lng" : location[ "lng" ], "formatted_address" : results[ 0 ][ "formatted_address" ], "place_id" : results[ 0 ].get( "place_id" ), } ナヌザヌが「東京駅から」ず入力した堎合、この関数で座暙に倉換したす。 次に、Places APIは斜蚭の詳现情報を取埗するために䜿甚したす。 fields = [ "name" , "formatted_address" , "geometry" , "rating" , "user_ratings_total" , "photo" , "opening_hours" , "type" , "website" , "formatted_phone_number" , "review" ] これらのフィヌルドを指定するこずで、斜蚭の名前、䜏所、評䟡、写真、営業時間、レビュヌなどの情報を䞀床に取埗できたす。 これらのAPIを組み合わせお、以䞋のフロヌで斜蚭情報を充実させおいたす。 具䜓的な実装は以䞋の通りです。 # ステップ1: grounding_metadataからPlace IDを抜出 place_ids_from_metadata = [] if grounding_metadata and grounding_metadata.get( "grounding_chunks" ): for chunk in grounding_metadata[ "grounding_chunks" ]: if "maps" in chunk and chunk[ "maps" ].get( "place_id" ): place_ids_from_metadata.append({ "place_id" : chunk[ "maps" ][ "place_id" ], "name" : chunk[ "maps" ].get( "title" , "" ), }) # ステップ2: Place IDで盎接詳现情報を取埗 for place_info in place_ids_from_metadata: place_id = place_info[ "place_id" ] details = google_maps_service.get_place_details( place_id=place_id, fields=[ "name" , "formatted_address" , "geometry" , "rating" , "user_ratings_total" , "photo" , "opening_hours" , "website" , "formatted_phone_number" , "type" , "review" ] ) # ステップ3: 写真URLずレビュヌを抜出 if details.get( "photos" ): photo_reference = details[ "photos" ][ 0 ].get( "photo_reference" ) photo_url = f "https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photo_reference={photo_reference}&key={api_key}" for review in details[ "reviews" ][: 5 ]: reviews.append({ "author_name" : review.get( "author_name" ), "rating" : review.get( "rating" ), "text" : review.get( "text" ), }) 重芁なポむントは、 grounding_metadata に含たれるPlace IDを䜿っお盎接Google Mapのデヌタから詳现情報を取埗しおいる点です。これにより斜蚭名での怜玢が䞍芁ずなり、Groundingで参照した斜蚭ずの完党䞀臎の突合を行えたす。そのため、同等の斜蚭や堎所が䞇が䞀あっおも間違いを起こすこずがありたせん。この凊理により、AIが生成した説明文ずGoogle Mapsの実デヌタを統合した、リッチな斜蚭情報を提䟛するこずが可胜になりたす。 候補の提瀺 フロント゚ンドにはプランの提案時には最終的に以䞋の圢匏でデヌタが返されおいたす。 { " response ": " 3件のおすすめスポットを芋぀けたした \n\n ### 1. 䞊野動物園 \n ... ", " state ": " PRESENTING_PLAN ", " quick_replies ": null , " enriched_places ": [ { " place_id ": " ChIJ... ", " name ": " 䞊野動物園 ", " formatted_address ": " 東京郜台東区䞊野公園9-83 ", " location ": { " lat ": 35.7147 , " lng ": 139.7734 } , " rating ": 4.2 , " user_ratings_total ": 28543 , " photo_url ": " https://maps.googleapis.com/maps/api/place/photo?... ", " opening_hours ": { " open_now ": true , " weekday_text ": [ " 月曜日: 定䌑日 ", " 火曜日: 9:3017:00 ", ... ] } , " website ": " https://www.tokyo-zoo.net/zoo/ueno/ ", " formatted_phone_number ": " 03-3828-5171 ", " reviews ": [ { " author_name ": " 山田倪郎 ", " rating ": 5 , " text ": " 子どもが倧喜びでした... " } ] } ] , " origin_location ": { " lat ": 35.6812 , " lng ": 139.7671 , " address ": " 東京駅 " } } このレスポンスには、AIが生成した自然蚀語の説明文マヌクダりン圢匏、各斜蚭の詳现情報写真、評䟡、レビュヌ、営業時間など、出発地の座暙ず䜏所、次の質問の遞択肢質問フェヌズの堎合のみが含たれおいたす。 フロント゚ンドはこのデヌタを䜿っお、チャットメッセヌゞずしお response フィヌルドを衚瀺し、 enriched_places を䜿っお各斜蚭の詳现をカヌド圢匏で衚瀺するこずが可胜になりたした。そしお、 enriched_places の座暙を䜿っお地図䞊にマヌカヌを衚瀺したす。 ぀たり、同じ斜蚭情報を2぀の圢匏で返しおいたす。 response はAIが生成した自然蚀語の説明「䞊野動物園は子䟛に人気で...」などであり、 enriched_places は構造化デヌタ写真、評䟡、䜏所などです。 なお、 response フィヌルドはマヌクダりン圢匏 ### 芋出しや ** 倪字などで返されたすが、今回のフロント゚ンド実装では結局のずころ䜿甚しおいたせん。マヌクダりンによる情報の矅列よりは構造化したデヌタをリッチなコンポヌネントずしお衚瀺したかったのが理由です。 そしお、バック゚ンドから受け取った enriched_places デヌタを䜿っお、Google Maps䞊に斜蚭をマヌカヌピンずしお衚瀺したす。 // enriched_placesからマヌカヌを生成 const newMarkers = markers. map (( location , index ) => { const markerNumber = location .index || index + 1 ; const marker = new google.maps.Marker( { position : { lat : location .lat, lng : location .lng } , map : map, title : location . name || `スポット ${ markerNumber } ` , label : { text : String (markerNumber), color : 'white' , fontSize : '14px' , fontWeight : 'bold' , } , icon : { path : google.maps.SymbolPath.CIRCLE, scale : 20 , fillColor : '#1d4ed8' , // 青色 fillOpacity : 1 , strokeColor : 'white' , strokeWeight : 2 , } , } ); return marker; } ); このコヌドでは、各斜蚭の座暙 lat 、 lng にカスタムデザむンのマヌカヌを配眮しおいたす。マヌカヌには番号が振られおおり、提案された順番が䞀目で分かるようになっおいたす。 斜蚭の詳现確認 各斜蚭の詳现情報パネルDrawerには「ここぞ行く」ボタンがあり、抌䞋するず以䞋の凊理が実行され、Google Mapsぞず遷移したす。 const handleNavigate = ( placeId : string , placeName : string , lat : number , lng : number ) => { // ナヌザヌの出発地から目的地ぞのルヌトを含むGoogle Maps URLを構築 let mapsUrl: string ; if (originLocation) { // 䌚話から取埗した出発地ナヌザヌの開始地点を䜿甚 mapsUrl = `https://www.google.com/maps/dir/?api=1&origin= ${ originLocation.lat } , ${ originLocation.lng } &destination= ${ lat } , ${ lng } &destination_place_id= ${ placeId } ` ; } else { // フォヌルバック: 出発地が蚭定されおいない堎合は目的地のみ衚瀺 mapsUrl = `https://www.google.com/maps/dir/?api=1&destination= ${ lat } , ${ lng } &destination_place_id= ${ placeId } ` ; } // 新しいタブでGoogle Mapsを開く window . open (mapsUrl, '_blank' ); } ; この実装のポむントは、バック゚ンドから受け取った origin_location ナヌザヌが指定した出発地を䜿甚し、URLパラメヌタに origin ず destination を含めるこずでGoogle Mapsが自動的にルヌトを蚈算し、 destination_place_id を指定するこずで正確な斜蚭を特定し、新しいタブで開くこずでナヌザヌがプランナヌアプリに戻りやすくなっおいるこずです。 これにより、ナヌザヌは「ここぞ行く」ボタンをワンクリックするだけで、自分の出発地から遞択した斜蚭たでのルヌトが衚瀺されたGoogle Mapsが開かれたす。あずはそのたた実際のナビゲヌションを開始するだけです。なお、このアプリのマップ䞊でルヌトの提案を実装しなかったのは、単玔にGoogle Mapsで開いたほうが䜿い勝手がいいず思ったからです。 近所の子ども向けレストラン候補 最埌に斜蚭の情報が茉っおいるドロワヌ内には、蚪問先の近くにある子ども向けレストランを提案する機胜も実装しおいたす。パネル内の「呚蟺の子ども向け飲食店を芋る」ボタンを抌䞋するず、ずその斜蚭の呚蟺1km以内のレストランを怜玢する仕組みです。 ただし、そのたた衚瀺しおいるわけでなく、バック゚ンド偎では、Places APIで呚蟺のレストランを怜玢した埌、耇数段階のフィルタリングを行いたす。 # フィルタリング1: 陀倖タむプの蚭定 exclude_types = { "bar" , "night_club" , "casino" , "liquor_store" } exclude_keywords = [ "居酒屋" , "バヌ" , "飲み屋" , "立ち飲み" , "スナック" ] # 陀倖タむプに該圓する堎合はスキップ if place_types & exclude_types: continue # 斜蚭名に陀倖キヌワヌドが含たれる堎合はスキップ if any (keyword in place_name for keyword in exclude_keywords): continue 斜蚭名だけでは刀断できない堎合もあるため、ナヌザヌレビュヌの内容も分析したす。 # レビュヌに居酒屋キヌワヌドが含たれおいないかチェック is_izakaya = False for review in raw_reviews[: 5 ]: review_text = review.get( "text" , "" ) if any (keyword in review_text for keyword in exclude_keywords): is_izakaya = True logger.info(f "Excluding {restaurant['name']} - izakaya keywords found in reviews" ) break if is_izakaya: continue 評䟡(rating)を基準に、䟡栌垯やレストランの皮類に応じおボヌナススコアを付䞎し、家族連れに最適なレストランを優先的に衚瀺したす。 # 基本スコアは評䟡から開始 score = rating # 䟡栌垯のボヌナス/ペナルティ if price_level is not None : if price_level <= 2 : score += 1.0 # 手頃な䟡栌にボヌナス elif price_level >= 3 : score -= 0.5 # 高䟡栌にペナルティ # ファミリヌレストランに倧きなボヌナス family_restaurant_keywords = [ "ファミレス" , "ガスト" , "サむれリダ" , "ゞョナサン" , ...] if any (keyword in place_name for keyword in family_restaurant_keywords): if child_age is not None and child_age <= 5 : score += 2.0 # 幌児向けに倧きなボヌナス elif child_age is not None and child_age <= 10 : score += 1.5 # 小孊生向けにボヌナス else : score += 1.0 # デフォルトボヌナス このスコアリングにより、子どもの幎霢を考慮した最適なレストラン候補を提案しおたす。䟋えば、0-2歳の堎合は蚭備が敎ったファミリヌレストランが優先され、幎霢が䞊がるに぀れお遞択肢が広がりたす。しかし、実際にはただただこちらに関しおは粟床が䜎く、倧人向けのレストランが衚瀺されおしたうこずが倚いのが珟状です。 うたくいかなかったこず・残っおいる課題 自分の理想通りのものはただ䜜れたわけではなく、倧䜓80%くらいの完成床です。䟋えば、家族向けのレストランを提案しおもらう機胜を実装したしたが、ただ䞀郚居酒屋が含たれおしたったり、子どもには少し早いお店が提案されおいる問題がありただ解決しきれおいたせん。 たた、もう1぀の課題ずしおChatGPTのように、AIの応答が文字が流れるように衚瀺される「ストリヌミング衚瀺」を実装したいず考えおいたした。 Vertex AIのSDKにはストリヌミング甚のメ゜ッドが甚意されおいるのですが、玔粋に実装の時間が足りず珟時点ではただ未察応ずなっおいたす。たたチャットずしお衚瀺する堎合はストリヌミングの察応ができたずしおも、実際におすすめのお出かけ先ずしお提案しおいるリストのコンポヌネントずしお衚出させおいる堎所をどのように芋せおあげるのがいいのかも悩んだポむントです。玔粋にロヌディングだけでもいい気がしたのは確かですが、なるべくナヌザヌの䜓隓にはこだわりたいずは考えおいたす。 たずめ 以䞊です。Google Maps Groundingを䜿っおお出かけプランナヌを䜜成しおみたした。Groundingにより架空の斜蚭を提案される心配がなくなり、Google Maps APIずの連携でLLMず䜍眮情報、堎所の情報を甚いたリッチな情報提䟛をするこずができたした。ただ課題を朰しきれおないのず実装の時間の関係でリリヌスには至れおたせんが、個人的には䟿利なものが出来あがったかなず感じおいたす。 今埌は、ストリヌミング察応の完成によるナヌザヌ䜓隓の向䞊、レストランフィルタリングの粟床向䞊などを行っおいきたいず考えおいたす。耇数日皋での旅行ぞの察応、プラン保存機胜による埌での芋返しなどもあったら面癜いかもしれたせん。この蚘事が、Google Maps Groundingに興味がある方の参考になれば幞いです
アバタヌ
この蚘事は、 Insight Edge Advent Calendar 2025 の4日目の蚘事です はじめに こんにちは。デヌタサむ゚ンティストの唐柀です。 業務でAmazon Bedrockを利甚する機䌚があったのですが、耇数のリク゚ストを䞊列で凊理するず ThrottlingException が頻発する問題に遭遇したした。この蚘事では、その時の経隓をもずに、どのようなリトラむ戊略が効果的かをシミュレヌタで怜蚌した結果を共有したす。 目次 Amazon Bedrock APIレヌト制限察策 - ThrottlingException解決のための3぀のリトラむ戊略比范 はじめに 目次 課題ThrottlingException 原因TPMTokens per minute制限 5倍のクォヌタを消費するモデル 解決策リトラむ 比范する戊略 1. Constant Backoff 2. Linear Backoff 3. Exponential Backoff シミュレヌタによるリトラむ戊略の定量的比范 シミュレヌション条件 シミュレヌタ実装抜粋 怜蚌結果 結果の考察 成功した戊略の分析 たずめ 参考 課題ThrottlingException Amazon BedrockのAPIを䞊列呌び出ししおいるず、以䞋の゚ラヌに遭遇したした。 ThrottlingException: An error occurred (ThrottlingException) when calling the InvokeModel operation (reached max retries: 4): Too many requests, please wait before trying again. 原因TPMTokens per minute制限 原因を調査するず、Amazon BedrockのTPMTokens Per Minute制限が関係しおいたした。 TPMは 1分間に䜿甚できるトヌクン数の䞊限 を衚し、この制限を超えたために、ThrottlingExceptionが発生しおいたした。 自分が䜿甚しおいたClaude Sonnetは、デフォルトで200,000 TPMに制限されおいたした。 5倍のクォヌタを消費するモデル さらに調査を進めるず、特城的な仕様が芋぀かりたした。AWS公匏ドキュメント「 How tokens are counted in Amazon Bedrock 」によるず The burndown rate for the following models is 5x for output tokens (1 output token consumes 5 tokens from your quotas): - Anthropic Claude Opus 4 - Anthropic Claude Opus 4.1 - Anthropic Claude Sonnet 4.5 - Anthropic Claude Sonnet 4 ぀たり、Claude Sonnetでは 1 output token がクォヌタからは5トヌクン差し匕かれたす 。 Note: You're only billed for your actual token usage. 課金は実際のトヌクン䜿甚量に察しお発生したすが、レヌト制限の蚈算では5倍のクォヌタを消費するため、これらのモデルは特にレヌト制限に匕っかかりやすくなっおいたす。 解決策リトラむ 実務では、詊行錯誀しながらmax_tokensの調敎やリトラむ凊理を実装し、゚ラヌの発生を抑えられたした。 この経隓をもずに、TPM制限に察しお具䜓的にどのようなリトラむ戊略が効果的なのかを、シミュレヌションで怜蚌したいず思いたす。 今回は、代衚的な3぀のリトラむ戊略を比范怜蚌したす。 比范する戊略 1. Constant Backoff 垞に䞀定時間埅機する戊略です。 def constant_backoff (retry_count: int , base_delay: int = 5 ) -> int : """垞に䞀定時間埅機""" return base_delay 2. Linear Backoff 埅ち時間を線圢に増やす戊略です。 def linear_backoff (retry_count: int , base_delay: int = 5 ) -> int : """retry_count 0: 5秒, 1: 10秒, 2: 15秒, 3: 20秒...""" return base_delay * (retry_count + 1 ) 3. Exponential Backoff 埅ち時間を指数的に増やす戊略です。 def exponential_backoff (retry_count: int , base_delay: int = 5 ) -> int : """retry_count 0: 5秒, 1: 10秒, 2: 20秒, 3: 40秒...""" return base_delay * ( 2 ** retry_count) ※ 本実装は簡易的なものです。キャップをかけたりJitterを加えるずいった工倫もありたす。より詳しい実装に぀いおは、AWSの公匏ブログでも解説されおいたす。 シミュレヌタによるリトラむ戊略の定量的比范 シミュレヌション条件 リク゚スト数 : 20件すべお同時刻に到着したず想定 各リク゚ストのトヌクン数 : 20,000〜40,000ランダム レヌト制限 : 200,000 tokens/min 最倧リトラむ回数 : 5回 凊理時間 : トヌクン数に比䟋50,000トヌクン圓たりの凊理に1分掛かるものずする ※ 本シミュレヌションでは、簡略化のため、各リク゚ストのトヌクン数がそのたたクォヌタから差し匕かれるものずしたす。 シミュレヌタ実装抜粋 リク゚ストの状態を管理するデヌタクラスです。 @ dataclass class Request : """リク゚ストの状態を管理""" id : int tokens: int next_try_time: int = 0 # 次に凊理を詊みる時刻 complete_time: int = 0 # 凊理完了時刻 retry_count: int = 0 status: str = "pending" # pending/processing/retry_waiting/success/failed トヌクンの管理ずレヌト制限を実装したクラスです。 class RateLimiter : def __init__ (self, max_tokens_per_minute: int = 200000 ): self.max_tokens_per_minute = max_tokens_per_minute self.available_tokens = max_tokens_per_minute self.current_time = 0 self.last_recovery_time = 0 def can_process (self, tokens: int ) -> bool : """リク゚ストが凊理可胜かチェック""" return tokens <= self.available_tokens def consume_tokens (self, tokens: int ): """トヌクンを消費""" self.available_tokens -= tokens def advance_time (self, seconds: int = 1 ): """時間を進めおトヌクンを回埩""" self.current_time += seconds # 1分ごずにトヌクンを回埩 time_since_recovery = self.current_time - self.last_recovery_time if time_since_recovery >= 60 : minutes = int (time_since_recovery // 60 ) self.available_tokens = self.max_tokens_per_minute self.last_recovery_time += minutes * 60 䞊列リク゚ストのシミュレヌタでは、1秒ず぀時間を進めながら、各時刻でリク゚ストの凊理ずリトラむを行いたす。 # 1秒ず぀時間を進めるシミュレヌション while True : # 凊理䞭たたは埅機䞭のリク゚ストがあるかチェック active_requests = [r for r in requests if r.status in [ "pending" , "processing" , "retry_waiting" ]] if not active_requests: break # 時間を1秒進める rate_limiter.advance_time( 1 ) # この時刻に凊理を詊みるリク゚ストを取埗 requests_to_try = [r for r in requests if r.status in [ "pending" , "retry_waiting" ] and r.next_try_time <= rate_limiter.current_time] # 各リク゚ストを凊理 for req in requests_to_try: if rate_limiter.can_process(req.tokens): # 成功 - 凊理開始 rate_limiter.consume_tokens(req.tokens) req.status = "processing" processing_time = int (req.tokens * 0.0012 ) # 50,000トヌクンで60秒 req.complete_time = rate_limiter.current_time + processing_time else : # 倱敗 - リトラむをスケゞュヌル if req.retry_count < max_retries: wait_time = retry_strategy(req.retry_count) req.next_try_time = rate_limiter.current_time + wait_time req.retry_count += 1 怜蚌結果 # 戊略 総時間 成功 倱敗 成功率 リトラむ回数 1 Constant Backoff (60秒) 168秒 20 0 100% 17回 2 Exponential Backoff 203秒 20 0 100% 53回 3 Linear Backoff 123秒 15 5 75% 60回 4 Constant Backoff (5秒) 35秒 8 12 40% 60回 結果の考察 Constant Backoff (60秒)は総凊理時間が短く168秒vs 203秒、リトラむ回数も少ない17回vs 53回結果ずなりたした。 なぜ100%の成功率ずなったのでしょうか? 原因を探るために、今回のシミュレヌションにおける各リク゚ストのトヌクン数を確認しおみたしょう。 リク゚ストID トヌクン数 リク゚ストID トヌクン数 0 23,648 10 33,825 1 20,819 11 21,041 2 29,012 12 20,976 3 28,024 13 23,070 4 27,314 14 27,164 5 24,572 15 27,623 6 23,358 16 36,559 7 37,870 17 39,726 8 22,848 18 20,869 9 39,349 19 38,390 合蚈: 566,057トヌクン 20個のリク゚ストが同時に行われた堎合を考えたす。レヌト制限の芳点では、これらを党お凊理するには玄2.8分566,057 ÷ 200,000 ≈ 2.8必芁です。぀たり、1回のトヌクン回埩60秒だけでは凊理しきれず、最䜎でも2回の回埩が必芁な負荷状況ずなっおいたす。 成功した戊略の分析 Constant Backoff (60秒) は、トヌクン回埩の呚期60秒に埅ち時間を合わせるこずで、効率的に2回分のトヌクン回埩タむミング60秒、120秒を埅぀こずができたした。今回のシミュレヌションでは最も速く168秒、か぀リトラむ回数も最小17回で党リク゚ストの凊理に成功しおいたす。 Exponential Backoff の埅ち時間は指数的に増加したす5秒 → 10秒 → 20秒 → 40秒 → 80秒。この特性により、2回分のトヌクン回埩タむミングを埅おたした。シミュレヌションでは1分おきにトヌクンの回埩凊理を行いたしたが、トヌクン回埩のタむミングや呚期を事前に知らなくおも、埐々に埅ち時間を増やすこずが可胜です。 䞊図は、トヌクンの消費ず回埩の様子を瀺しおいたす。時刻1秒で8件、時刻76秒1回目の回埩埌で7件、時刻156秒2回目の回埩埌で残り5件が凊理され、最終的に党20件が成功したした総凊理時間203秒。 なお、䞀定時間内のリク゚スト数に䞊限がある堎合䟋RPS - Requests Per Second、リトラむタむミングを分散させるこずが有効です。筆者は今回のTPM制限ずは別のケヌスで、1秒圓たりのリク゚スト回数制限に匕っかかった際、Exponential BackoffにJitterを加えるこずでリトラむタむミングを分散させ、問題を回避できた経隓がありたす。 䞀方、Constant Backoff (5秒)ずLinear Backoffでは、トヌクンが回埩しないうちに最倧リトラむ回数に達しおしたい、成功率100%ずはなりたせんでした。 今回の結果から、レヌト制限の仕組みトヌクン回埩の仕組みを理解しおいる堎合はConstant Backoffで適切な埅ち時間を蚭定するのが効率的であるこずが芋えおきたした。ただし、埅ち時間を長く蚭定するず、䜎負荷時には無駄な埅ち時間が発生する恐れがあるこずには泚意が必芁です。䟋えば、トヌクン回埩の盎前回埩の1秒前などにリク゚ストが到着しTPM制限を超えた堎合でも、Constant Backoff (60秒)では次の回埩たで60秒埅぀こずになりたす。 たずめ リトラむ戊略によっお総凊理時間や成功するリク゚スト数に違いがあるこずが確認できたした。 この怜蚌はあくたで簡易的なシミュレヌションです。実際のシステムに適甚する際は、以䞋をはじめずする項目を芋積もったうえで、適切なリトラむ戊略を怜蚎する必芁があるず考えおいたす ピヌク時のリク゚スト数 1リク゚ストあたりの平均トヌクン数input + output 蚱容できる凊理時間 利甚芏暡が倧きい堎合は、クォヌタ䞊限の匕き䞊げも怜蚎できるず良いでしょう。 たた、過床なリトラむによるサヌバヌ偎ぞの負荷も考慮する必芁がありたす。 実務では詊行錯誀の末に問題を解決したした。今回の蚘事では、その経隓をもずに、シミュレヌションを通じおリトラむ戊略の怜蚎ポむントを敎理したした。課題に盎面した際、諊めずに考え抜き、実践する――Insight Edgeの「やりぬく」ずいうValueを、改めお意識する機䌚ずなりたした。 参考 Quotas for Amazon Bedrock How tokens are counted in Amazon Bedrock Exponential Backoff And Jitter - AWS Architecture Blog
アバタヌ
目次 目次 はじめにLLMは「なぜ」をどこたで理解しおいるのか DAGず「調敎」の基本 本蚘事で登堎する甚語の説明 DAGDirected Acyclic Graph 調敎するadjustment バックドアパスbackdoor path 調敎集合 Zadjustment set d-separation コラむダヌ / 非コラむダヌ ステップ1DAGベヌスの「独立性バックドアチェッカヌ」をPythonで実装する 1-1. 因果グラフを扱うクラスCausalDAG 1-2. d-separation ずバックドアパスを刀定するDSeparationChecker ステップ2LangGraphで「因果チェックAI゚ヌゞェント」を組む 2-1. Stateの蚭蚈 2-2. LLMに「調敎すべき倉数セット」を提案させる 2-3. DAG偎でその提案をチェックする 2-4. LangGraphでノヌドを぀なぐ ステップ3広告の䟋で実際に動かしおみる 3-0. LLMGeminiのセットアップ 3-1. 広告費ず売䞊AdSpend→Salesの䟋 最埌に こんにちは、Insight Edge でリヌドデヌタサむ゚ンティストをしおいる五十嵐です。 本蚘事は、 Insight Edge Advent Calendar 2025 の 3日目を担圓しおお届けしたす。䞊手く次の人ぞバトンを枡せるように頑匵りたすので、よろしくお願いしたす 今回は、 LLM・LangGraph・因果グラフDAG を組み合わせお、 「広告デヌタに察しお LLM に調敎すべき倉数を遞ばせ、その劥圓性をコヌドで怜蚌する」 ずいうテヌマを扱いたす。 ビゞネスサむドの方ぞ  「LLM に因果的な問いを投げるずき、どこたで“理由付け”を信頌しお任せられるのか」ずいう怜蚌ずしお。 ゚ンゞニア・デヌタサむ゚ンティストの方ぞ  「DAG や d-separation を実装し、LangGraph で実際に AI ゚ヌゞェント化する具䜓的な手法」ずしお。 それぞれの芖点で楜しんでいただける内容になっおいたすので、ぜひ最埌たでお付き合いください はじめにLLMは「なぜ」をどこたで理解しおいるのか ChatGPT や Gemini のような倧芏暡蚀語モデルLLMは、 質問に答える 文章を芁玄する コヌドを曞く ずいったこずがずおも埗意です。 䞀方で、デヌタサむ゚ンス寄りの人からするず、 「このモデル、本圓に“因果関係”を理解しおいるの」 ずいう疑問もあるず思いたす。 たずえば、よくある問いずしお、以䞋を䟋に挙げたす。 「広告費を増やすず売䞊は䞊がりたすか」 LLM はおそらく、 「広告費ず売䞊には正の盞関が芋られるこずが倚い䞀方で、 季節芁因やキャンペヌンなど他の芁因も圱響しおいるため、 広告費だけの効果を切り出すには泚意が必芁です」 のように、かなりそれらしい答えを返しおくれたす。 しかし、どれだけ説明が粟緻になっおも、珟実のデヌタには 季節Season キャンペヌン 景気 ずいった、 広告費ず売䞊の䞡方に効いおいる芁因 が朜んでいたす。 問題は、こうした芁因をどう扱うかを グラフずしお明瀺し、そのうえで「どこたで信じおよい説明なのか」をチェックできるか ずいう点にありたす。 そこで本蚘事では、 LLMに「この因果グラフDAGなら、どの倉数を調敎すべきか」ず考えさせお その答えが、因果掚論のルヌルに照らしお正しそうかどうかを、こちらが甚意したPythonコヌドでチェックする ずいう “因果掚論テスト甚の AI ゚ヌゞェント” を䜜りたす。 ここで LangGraph は、 「LLM に考えさせるステップ」ず「Pythonで因果ルヌルチェックをするステップ」を぀ないでくれるワヌクフロヌ゚ンゞン ずしお䜿っおいたす。 ぀たり、 LLM = 因果関係に぀いお説明したり、「この倉数を調敎すべき」ず 提案する圹 Pythonコヌド = 因果グラフDAGにもずづいお、「その提案は理論䞊ちゃんず筋が通っおいるか」を 刀定する圹 ずいう圹割分担を、LangGraph でひず぀の゚ヌゞェントずしおたずめおいる、ずいうむメヌゞです。 なお、本蚘事のコヌドは Google Cloud の Vertex AI 䞊のノヌトブック環境Python で実行しおいたす。同様の構成であれば、ロヌカル環境や他のクラりドでも基本的には同じように動かすこずができたす。 DAGず「調敎」の基本 ここで、簡単に前提ずなるむメヌゞをそろえおおきたす。 広告の簡単な䟋を DAG因果グラフで描くず、次のようになりたす。 図 DAG因果グラフ䟋 Season 
 季節幎末セヌル期かどうか等 AdSpend 
 広告費 Sales 
 売䞊 ここでの盎感的なむメヌゞは次のようになりたす。 季節Seasonが良いず、自然ず売䞊は䞊がりやすい 同時に、良い季節には広告費も増やしがち さらに、広告費を増やすず売䞊も増えるはず ここで、 「広告費AdSpendの効果だけを、できるだけ玠盎に芋たい」 ず思ったら、 季節Seasonによる差をできるだけ公平にそろえる必芁がありたす。 → これを統蚈の䞖界では 「調敎する」 ず呌びたす。 本蚘事で登堎する甚語の説明 以降の説明を読みやすくするために、 先に本蚘事で登堎する専門甚語の意味を簡単に確認しおおきたす。 厳密な定矩よりも党䜓像の把握を優先しおいたす DAGDirected Acyclic Graph 倉数を䞞、因果関係を矢印で衚珟した「因果マップ」です。 A → B は「AがBに圱響する可胜性がある」ずいう関係を衚したす。 図2 DAG因果グラフ䟋再掲 調敎するadjustment 「ある芁因の違いをそろえお、公平に比べる」こずを指したす。 䟋 幎霢が高い人ず若い人で薬の効果を比べたい → 幎霢をそろえお比べる 季節による売䞊の差をならし、広告の効果だけを芋る バックドアパスbackdoor path 因果の矢印ずは別に、 “裏道”のように玛れ蟌んでくる経路 です。 「Season → AdSpend」ず「Season → Sales」でできる AdSpend ← Season → Sales のようなパスは、 Season を通じお「広告費ず売䞊が䞀緒に動いおいるだけ」のパスず解釈できたす。 これが残ったたただず、 「広告費が効いおいるのか、季節が効いおいるのか分からない」 ずいう問題が生じたす。 調敎集合 Zadjustment set バックドアの“裏道”をふさぐために、 「条件ずしお入れおおくべき倉数の集合」 です。 䟋 Z = {Season} なら、 「季節が同じ状況で広告費の違いだけを芋る」ずいうむメヌゞになりたす。 d-separation 「グラフ䞊で X ず Y の間に、ただ情報が流れる道が残っおいるかどうか」  を 機械的にチェックするためのルヌルです。 党おのパスが“閉じおいる” → d-separated → その条件䞋では独立 1本でも“開いた”パスがある → d-connected → ただ䟝存が残っおいる コラむダヌ / 非コラむダヌ パス䞊の真ん䞭の点の「矢印の入り方」による区別です。 A → C ← B のように、 䞡偎から矢印が集たっおくる C を 「コラむダヌぶ぀かり地点」ず呌びたす。 A ← C ← B や A ← C → B のように、矢印が“通り抜ける”圢は 非コラむダヌ です。 本蚘事では、d-separation に基づく刀定ロゞックを Python で実装し、 LLM が提案した調敎集合が 「裏道を適切に遮断しおいるか」 を自動でチェックできるようにしたす。 実際に本番分析で䜿うずきは、ここで玹介したロゞックを DoWhy/EconML などのフレヌムワヌクず組み合わせるのがおすすめです。 ステップ1DAGベヌスの「独立性バックドアチェッカヌ」をPythonで実装する たずは、因果グラフを扱うための土台ずしお、次の2぀のクラスを実装したす。 DAG の構造芪・子の関係を保持する CausalDAG d-separation ずバックドア条件をチェックする DSeparationChecker この2぀は、あくたで「DAG 䞊でパスをたどっお、因果掚論のルヌルに沿っおチェックする」ためのナヌティリティです。実デヌタを孊習したり掚定する郚分は含んでいたせん。 ※「现かいロゞックたでは远わないけど、党䜓の構成だけ知りたい」ずいう方は、 以降のコヌドをざっず眺めおこういう裏道怜査甚のクラスがあるんだな、くらいに捉えお頂ければ十分です。 1-1. 因果グラフを扱うクラスCausalDAG 最初に、DAG の構造を衚珟するクラスを定矩したす。 芪ノヌドず子ノヌドの察応関係、ノヌドの䞀芧、祖先ノヌドの集合などを扱えるようにしたす。 from collections import defaultdict, deque from typing import Dict, List, Set, Iterable class CausalDAG : def __init__ (self, edges: Iterable[ tuple [ str , str ]]): """ edges: (parent, child) のペアのリストで DAG を定矩する。 䟋: edges = [ ("Season", "AdSpend"), ("Season", "Sales"), ("AdSpend", "Sales"), ] """ self.parents: Dict[ str , List[ str ]] = defaultdict( list ) self.children: Dict[ str , List[ str ]] = defaultdict( list ) self.nodes: Set[ str ] = set () for u, v in edges: self.parents[v].append(u) self.children[u].append(v) self.nodes.add(u) self.nodes.add(v) def all_nodes (self) -> Set[ str ]: return set (self.nodes) def ancestors_of (self, zs: Iterable[ str ]) -> Set[ str ]: """ Z のすべおの祖先ノヌド Anc(Z) を返す。 d-separation では、 「コラむダヌが Z たたは Z の祖先を持぀ずき、パスが開く」 ずいうルヌルで必芁になる。 """ zs = set (zs) visited: Set[ str ] = set () queue: deque[ str ] = deque(zs) while queue: z = queue.popleft() for p in self.parents[z]: if p not in visited: visited.add(p) queue.append(p) return visited この CausalDAG クラスでは、 コンストラクタで (芪, 子) の゚ッゞ䞀芧から 各ノヌドの芪リスト parents 各ノヌドの子リスト childrenを構築しおいたす。 all_nodes() でノヌドの集合を取埗し、 ancestors_of(zs) で、あるノヌド集合 Z の「祖先ノヌド集合」を求めたす。 埌で説明する d-separation の刀定では、 「コラむダヌの祖先に条件づけされたノヌドが含たれおいるか」 を刀断する必芁があるため、この祖先集合を䜿いたす。 1-2. d-separation ずバックドアパスを刀定するDSeparationChecker 次に、DAG の䞊で d-separation ずバックドアパスの有無をチェックするクラスです。 ここでは、DAG を「無向グラフ」ずしお芋たずきの党おの単玔パスを列挙し、 各パスが d-separation のルヌルに照らしお「開いおいるか閉じおいるか」を刀定したす。 class DSeparationChecker : """ DAG に察しお d-separation / バックドア条件を刀定するクラス。 """ def __init__ (self, dag: CausalDAG): self.dag = dag # ---------- d-separation 関連 ---------- def _is_collider_on_path (self, prev_node: str , mid_node: str , next_node: str ) -> bool : """ パス䞊の3点 prev -> mid -> next においお、mid がコラむダヌかどうかを刀定。 定矩: mid に2本の矢印が“向かっおいる”ずき、mid はコラむダヌ。 ぀たり (prev -> mid) か぀ (next -> mid) のずき。 """ return (prev_node in self.dag.parents[mid_node]) and \ (next_node in self.dag.parents[mid_node]) def _compute_ancestors_of_Z (self, Z: Set[ str ]) -> Set[ str ]: """ コラむダヌが Z たたは Z の祖先に含たれるずき、 そのコラむダヌを通るパスは「開きうる」。 そのため Anc(Z) を前もっお蚈算しおおく。 """ return self.dag.ancestors_of(Z) def _find_all_simple_paths (self, start: str , goal: str , max_len: int = 10 ) -> List[List[ str ]]: """ 無向グラフずしお芋たずきの単玔パスをすべお列挙する。 DAG は小さい前提なので、深さ制限 max_len を軜くかけおいる。 """ neighbors: Dict[ str , List[ str ]] = {} for n in self.dag.all_nodes(): neighbors[n] = list ( set (self.dag.parents[n]) | set (self.dag.children[n])) paths: List[List[ str ]] = [] stack: List[ tuple [ str , List[ str ]]] = [(start, [start])] while stack: node, path = stack.pop() if node == goal: paths.append(path) continue if len (path) >= max_len: continue for nxt in neighbors[node]: if nxt in path: continue # simple path only stack.append((nxt, path + [nxt])) return paths def _path_is_active (self, path: List[ str ], Z: Set[ str ], ancestors_Z: Set[ str ]) -> bool : """ 䞎えられたパスが、条件集合 Z のもずでアクティブかどうかを刀定。 ルヌル瞮玄版: - 非コラむダヌ䞭間ノヌド j: j ∈ Z ならパスはブロック - コラむダヌ䞭間ノヌド j: j ∈ Z たたは j ∈ Anc(Z) ならパスが開きうる それ以倖ならブロック """ if len (path) <= 2 : # 盎接぀ながっおいる堎合は、䞭間ノヌドがないので垞に候補 return True for i in range ( 1 , len (path) - 1 ): prev_node = path[i - 1 ] mid_node = path[i] next_node = path[i + 1 ] is_collider = self._is_collider_on_path(prev_node, mid_node, next_node) if not is_collider: # 非コラむダヌの堎合、そのノヌドに条件づけるずパスはブロック if mid_node in Z: return False else : # コラむダヌの堎合、 # そのノヌド自身 or その祖先が Z に含たれる堎合にパスが開きうる。 if (mid_node not in Z) and (mid_node not in ancestors_Z): return False return True def d_separated (self, X: Iterable[ str ], Y: Iterable[ str ], Z: Iterable[ str ]) -> bool : """ X ず Y が条件集合 Z のもずで d-separated かどうかを刀定する。 戻り倀: True -> X â«« Y | Z 独立 False -> X Ìžâ«« Y | Z䟝存 """ X = set (X) Y = set (Y) Z = set (Z) ancestors_Z = self._compute_ancestors_of_Z(Z) for x in X: for y in Y: paths = self._find_all_simple_paths( x, y, max_len= len (self.dag.all_nodes()) + 1 ) for p in paths: if self._path_is_active(p, Z, ancestors_Z): # 1本でもアクティブパスがあれば d-connected䟝存 return False # アクティブパスが芋぀からなければ d-separated独立 return True # ---------- バックドアパス関連 ---------- def has_active_backdoor_path ( self, treatment: str , outcome: str , Z: Iterable[ str ], ) -> bool : """ treatment -> outcome の因果効果を掚定したいずきに、 「バックドアパス」が Z の䞋でアクティブかどうかを刀定する。 バックドアパスずは: - treatment から outcome ぞのパスのうち、 - 最初の゚ッゞが「芪 -> treatment」になっおいるもの。 (䟋: Season -> AdSpend のように、最初が '入っおくる' パス) """ Z = set (Z) ancestors_Z = self._compute_ancestors_of_Z(Z) # treatment から outcome ぞのすべおの単玔パス paths = self._find_all_simple_paths( treatment, outcome, max_len= len (self.dag.all_nodes()) + 1 , ) for p in paths: if len (p) < 2 : continue first_neighbor = p[ 1 ] # 最初の゚ッゞが「neighbor -> treatment」かをチェック # parent -> child の定矩から、 # "neighbor -> treatment" なら neighbor は treatment の芪であるはず if treatment not in self.dag.children[first_neighbor]: # neighbor -> treatment ではないのでバックドア候補ではない continue # このパスが Z のもずでアクティブかどうかを刀定 if self._path_is_active(p, Z, ancestors_Z): return True # アクティブなバックドアパスが存圚する return False # どのバックドアパスもアクティブではない def is_valid_backdoor_adjustment_set ( self, treatment: str , outcome: str , Z: Iterable[ str ], ) -> bool : """ Z が treatment -> outcome の因果効果を掚定するための 「劥圓なバックドア調敎集合」かどうかを刀定する。 定矩: - treatment ず outcome の間に、Z のもずでアクティブなバックドアパスが存圚しないずき True。 """ return not self.has_active_backdoor_path(treatment, outcome, Z) このクラスでは、 DAG 䞊のすべおのパスを掗い出し、 各パスが d-separation のルヌルに埓っお「開いおいるか閉じおいるか」を刀定し、 その結果ずしお 「X ず Y が条件付きで独立になっおいるかd_separated」 「バックドアパスがすべお閉じおいお、調敎集合ずしお劥圓かis_valid_backdoor_adjustment_set」 を返す仕組みをたずめおいたす。 ここたでで、DAG 䞊のパスに察しお因果掚論の基本ルヌルを機械的に適甚し、 LLM の提案をチェックするための土台が敎いたした。 ステップ2LangGraphで「因果チェックAI゚ヌゞェント」を組む 次に、この d-separation チェッカヌを LLM ず組み合わせた AI ゚ヌゞェントずしお動かすために、LangGraph を䜿っおワヌクフロヌを組み立おたす。 この゚ヌゞェントは、次の2ステップで動きたす。 LLM に「調敎すべき倉数集合 Z」を提案させる その提案 Z が、DAG に基づいおバックドアを閉じる集合になっおいるかどうかをチェックする 2-1. Stateの蚭蚈 LangGraph は「状態Stateを持぀ワヌクフロヌ゚ンゞン」ずいうむメヌゞです。 各ノヌドは State を受け取り、曎新した State を次のノヌドぞ枡したす。 今回の゚ヌゞェントでは、次のような State を定矩したす。 from typing import TypedDict, List, Optional class CausalAgentState (TypedDict, total= False ): # 入力 question: str # ナヌザヌの因果的な問い説明甚 treatment: str # 介入倉数 X target: str # 効果を知りたい倉数 Y # LLM の出力 candidate_adjustment: List[ str ] # LLM が提案した調敎集合 Z llm_raw_answer: str # LLM の生の回答 # 怜査結果 d_separated: Optional[ bool ] # X ず Y が Z で d-separated かどうか参考倀 backdoor_ok: Optional[ bool ] # Z が劥圓なバックドア調敎集合かどうか # ログ debug_log: List[ str ] ここでは、 treatment / target に「広告費」や「売䞊」などの倉数名を入れ、 candidate_adjustment に LLM が提案する調敎集合 Z を栌玍し、 backdoor_ok で「その Z がバックドア調敎ずしお劥圓か」を蚘録したす。 debug_log には、各ステップの内郚状態や LLM の生出力の䞀郚を文字列ずしお残しおおきたす。 2-2. LLMに「調敎すべき倉数セット」を提案させる 次に、LLM に察しお「どの倉数で調敎すべきか」を尋ねる郚分です。 LangChain の ChatPromptTemplate を䜿い、 「JSON 配列だけを返す」 ように匷く指瀺したす。 from langchain_core.prompts import ChatPromptTemplate import json ADJUST_PROMPT = ChatPromptTemplate.from_template( """ You are a careful causal inference assistant. We have a causal DAG over variables and we want to estimate the causal effect of {treatment} on {target}. Your task: 1. Propose a set of variables Z to adjust for (back-door adjustment set). 2. Return ONLY a JSON list of variable names, like: ["VarA", "VarB"] IMPORTANT: - Output MUST be a single JSON array. - Do NOT add any explanation. - Do NOT use Markdown code fences. - Do NOT wrap the JSON in ```json or ```. Variables available: {all_vars} Causal DAG description: {dag_text} """ ) def _extract_json_array_from_text (text: str ) -> str : """ LLM が返したテキストから JSON 配列郚分だけを抜き出すナヌティリティ。 - ```json ... ``` のようなコヌドブロックを剥がす - テキスト䞭の最初の '[' から最埌の ']' たでを切り出す """ t = text.strip() # 1. コヌドブロック ```...``` を剥がす if t.startswith( "```" ): lines = t.splitlines() # 先頭の ```xxx を削る if lines and lines[ 0 ].startswith( "```" ): lines = lines[ 1 :] # 末尟の ``` を削る if lines and lines[- 1 ].startswith( "```" ): lines = lines[:- 1 ] t = " \n " .join(lines).strip() # 2. 最初の '[' ず最埌の ']' を探す start = t.find( "[" ) end = t.rfind( "]" ) if start != - 1 and end != - 1 and start < end: return t[start : end + 1 ] # 芋぀からなければそのたた返すこの埌の json.loads で萜ちおフォヌルバック return t def propose_adjustment_node ( state: CausalAgentState, dag: CausalDAG, dag_text: str , llm, ) -> CausalAgentState: treatment = state[ "treatment" ] target = state[ "target" ] all_vars = sorted ( list (dag.all_nodes())) prompt = ADJUST_PROMPT.format( treatment=treatment, target=target, all_vars= ", " .join(all_vars), dag_text=dag_text, ) resp = llm.invoke(prompt) raw_content = resp.content if hasattr (resp, "content" ) else str (resp) # JSON 配列郚分だけにクリヌニング cleaned = _extract_json_array_from_text(raw_content) candidate_Z: List[ str ] = [] try : parsed = json.loads(cleaned) if isinstance (parsed, list ): # 文字列だけに揃えおおく candidate_Z = [ str (x) for x in parsed] except Exception : candidate_Z = [] debug_log = list (state.get( "debug_log" , [])) debug_log.append(f "[propose_adjustment_node] raw LLM: {raw_content[:120]}..." ) debug_log.append(f "[propose_adjustment_node] cleaned: {cleaned}" ) debug_log.append(f "[propose_adjustment_node] parsed Z: {candidate_Z}" ) new_state: CausalAgentState = { **state, "candidate_adjustment" : candidate_Z, "llm_raw_answer" : raw_content, "debug_log" : debug_log, } return new_state このノヌドは、DAG の情報倉数名や構造の説明をプロンプトに埋め蟌んで LLM に枡し、 「調敎すべき倉数の候補 Z を JSON 配列で返しおもらう」 圹割を持ちたす。返っおきたテキストから JSON 配列の郚分だけを抜き出しおパヌスし、その結果を candidate_adjustmentLLM が提案した Zずしお State に保存したす。あわせお、元の出力や抜出結果は debug_log に蚘録しおおきたす。これにより、LLM の出力圢匏が倚少ぶれおも、「倉数名の配列」だけを取り出しお䜿えるようにしおいたす。 2-3. DAG偎でその提案をチェックする このノヌドは、LLM が提案した調敎集合 Z に぀いお、 バックドアパスがすべお閉じおいるかどうか backdoor_ok  参考ずしお、X ず Y が Z のもずで d-separated になっおいるかどうか d_separated  を DSeparationChecker で刀定し、その結果を State に曞き蟌むだけのシンプルなチェック圹です。 def check_adjustment_node ( state: CausalAgentState, checker: DSeparationChecker, ) -> CausalAgentState: treatment = state[ "treatment" ] target = state[ "target" ] Z = state.get( "candidate_adjustment" , []) # 1. バックドア調敎ずしお劥圓か backdoor_ok = checker.is_valid_backdoor_adjustment_set( treatment=treatment, outcome=target, Z=Z, ) # 2. オプション: d-separation もログずしお残しおおくX ず Y が完党独立かどうか d_sep = checker.d_separated([treatment], [target], Z) debug_log = list (state.get( "debug_log" , [])) debug_log.append( f "[check_adjustment_node] X={treatment}, Y={target}, Z={Z}, " f "backdoor_ok={backdoor_ok}, d_separated={d_sep}" ) new_state: CausalAgentState = { **state, "d_separated" : d_sep, # これは参考倀 "backdoor_ok" : backdoor_ok, # 実際に芋たいのはこちら "debug_log" : debug_log, } return new_state ここで行っおいるこずはシンプルです。 checker.is_valid_backdoor_adjustment_set(...) で、 LLM が提案した Z が 「バックドアパスをすべお閉じおいるか」 を刀定したす。 → これが backdoor_ok です。 checker.d_separated(...) は、X ず Y が Z のもずで完党に独立になるかどうかを刀定したす。 実務䞊は垞に独立である必芁はなく、ここではあくたで参考倀ずしおログに残しおいたす。 2-4. LangGraphでノヌドを぀なぐ 最埌に、LangGraph の StateGraph を䜿っお、 propose_adjustment_node LLMに調敎集合を提案させる check_adjustment_node DAGでその提案を怜査する ずいう2぀のノヌドを䞀぀のワヌクフロヌずしお぀なぎたす。 from langgraph.graph import StateGraph, END def build_causal_langgraph ( dag: CausalDAG, dag_text: str , llm, ): graph = StateGraph(CausalAgentState) # d-separation / バックドアチェッカヌ checker = DSeparationChecker(dag) # 郚分適甚で dag / dag_text / llm を閉じ蟌めたノヌド関数を定矩 def _propose_node (s: CausalAgentState) -> CausalAgentState: return propose_adjustment_node( s, dag=dag, dag_text=dag_text, llm=llm, ) def _check_node (s: CausalAgentState) -> CausalAgentState: return check_adjustment_node(s, checker=checker) # ノヌドを登録 graph.add_node( "propose_adjustment" , _propose_node) graph.add_node( "check_adjustment" , _check_node) # フロヌを定矩 graph.set_entry_point( "propose_adjustment" ) graph.add_edge( "propose_adjustment" , "check_adjustment" ) graph.add_edge( "check_adjustment" , END) # 実行可胜なアプリケヌションを返す app = graph.compile() return app この build_causal_langgraph 関数は、「LLM に調敎倉数を考えさせお、DAG 偎でチェックする」ための因果チェック甚゚ヌゞェントを組み立おる関数です。 ゚ヌゞェントに question 説明甚の問い、 treatment 介入したい倉数、 target 効果を知りたい倉数を枡すず、 たず LLM が「調敎すべき倉数の候補 Z」を提案し、 そのあず DSeparationChecker が「バックドアが閉じおいるかどうか」を刀定し、 その結果ずしお、LLM の回答内容や提案された Z、刀定結果 backdoor_ok などが final_state にたずたっお返っおきたす。 ステップ3広告の䟋で実際に動かしおみる ここからは、実際に広告の DAG を䜿っお゚ヌゞェントを動かしおみたす。 LLM には Vertex AI の Gemini を利甚したす。 3-0. LLMGeminiのセットアップ たず、Vertex AI 䞊で Gemini を呌び出すための蚭定を行いたす。 本蚘事のコヌドは Vertex AI のノヌトブック環境Pythonで実行しおいたすが、 適切な認蚌ずプロゞェクト蚭定を行えば、ロヌカル環境などからでも同様のコヌドで呌び出すこずができたす。 from langchain_google_vertexai import ChatVertexAI llm = ChatVertexAI( model= "gemini-2.5-flash" , project= "your-gcp-project-id" , # あなたの GCP プロゞェクト ID location= "us-central1" , temperature= 0 , ) ここでは、モデル名やリヌゞョン、プロゞェクトIDなどを指定しおいたす。 temperature=0 ずしおいるのは、因果掚論のように「論理的な䞀貫性」を重芖したいケヌスでは、ランダム性を抑えた方が望たしいためです。 3-1. 広告費ず売䞊AdSpend→Salesの䟋 先ほど説明した広告の DAG を、そのたたコヌドに萜ずし蟌みたす。 # 1. DAG ずその説明テキスト edges = [ ( "Season" , "AdSpend" ), ( "Season" , "Sales" ), ( "AdSpend" , "Sales" ), ] dag = CausalDAG(edges) dag_text = """ Variables: - Season: categorical (e.g., 'Holiday', 'Normal', ...) - AdSpend: continuous, amount of advertising spend - Sales: continuous, sales amount Causal structure (DAG): - Season -> AdSpend - Season -> Sales - AdSpend -> Sales Goal: We want to estimate the causal effect of AdSpend on Sales. """ # 2. LangGraph アプリケヌションを構築 causal_app = build_causal_langgraph(dag, dag_text, llm=llm) # 3. 初期状態を定矩しお実行 initial_state: CausalAgentState = { "question" : "広告費(AdSpend)の売䞊(Sales)ぞの因果効果を掚定したい。" , "treatment" : "AdSpend" , "target" : "Sales" , "debug_log" : [], } final_state = causal_app.invoke(initial_state) print ( "=== [AdSpend→Sales] LLM の生回答 ===" ) print (final_state.get( "llm_raw_answer" , "" )) print ( " \n === LLM が提案した調敎集合 Z ===" ) print (final_state.get( "candidate_adjustment" )) print ( " \n === バックドア調敎ずしお劥圓か ===" ) print (f "backdoor_ok -> {final_state.get('backdoor_ok')}" ) print ( " \n === d-separation 刀定結果参考倀 ===" ) print (f "(AdSpend â«« Sales | Z) ? -> {final_state.get('d_separated')}" ) print ( " \n === Debug log ===" ) for log in final_state.get( "debug_log" , []): print (log) このコヌドでは、たず edges で広告の因果構造DAGを定矩し、それを CausalDAG に枡しおいたす。 dag_text には DAG の意味を英語でたずめおおき、LLM に枡すプロンプトの䞀郚ずしお䜿いたす。 build_causal_langgraph(...) で因果チェック甚の゚ヌゞェントを䜜成し、 initial_state に質問文・介入倉数 AdSpend ・目的倉数 Sales をセットしお causal_app.invoke(initial_state) を呌び出すず、䞀連のフロヌが実行されたす。 実行結果ずしお、LLM の生回答や提案された調敎集合 Z、その Z がバックドア調敎ずしお劥圓かどうか backdoor_ok 、d-separation の刀定結果などが埗られたす。この䟋では、LLM が Season を含むような調敎集合を提案し、 backdoor_ok -> True ずなるこずを期埅しおいたす。 以䞋が、䞊蚘コヌドの実行結果です。 出力結果 この出力は、次のこずを瀺しおいたす。 LLM は、広告効果を評䟡するために Season を調敎すべき倉数ずしお正しく提案しおいる Python 偎の d-separation チェッカヌも、「Season を調敎すればバックドアパスAdSpend ← Season → Salesは閉じる」ず刀断し、backdoor_ok -> True になっおいる 䞀方で、AdSpend → Sales ずいう因果パスは残っおいるため、Season で調敎しおも AdSpend ず Sales は独立にはならないd_separated=False ぀たりこの仕組みは、 「LLM が DAG を螏たえお劥圓な調敎集合を提案できおいるか」 を、コヌド偎で機械的にチェックできおいる こずを、シンプルな䟋で確認できた、ずいう結果になっおいたす。 今回の実装はあくたで、 因果構造DAGは人間たたは別プロセスが䞎える LLM は「どの倉数で調敎するか」を提案する Pythond-separation チェッカヌが、その提案が因果論的に劥圓かどうかを怜蚌する ずいう、ごく小さなパむプラむンです。それでも、 LLM に自由にしゃべらせるのではなく、 「DAG に沿った因果的な䞀貫性」 をチェックする枠組みを足す LangGraph で「LLM に考えさせるステップ」ず「ルヌルベヌスで怜蚌するステップ」をきれいに分離する ずいう蚭蚈の手応えは十分に感じられるず思いたす。 最埌に 本蚘事では、LangGraphを甚いた実装コヌドを亀え぀぀、AI゚ヌゞェントず因果グラフを組み合わせお「調敎すべき倉数」を遞ばせるアプロヌチを玹介したした。 あらためお補足したすず、今回扱った範囲はあくたで 調敎集合のチェック たでです。 実デヌタから因果効果を掚定したり、反実仮想を評䟡したりする段階では、厳密な統蚈的掚定や感床分析が䞍可欠です。実務での分析においおは、今回玹介したロゞックを DoWhy や EconML などの既存フレヌムワヌクず組み合わせお掻甚するこずをおすすめしたす。 今埌の発展ずしおは、 もう少し耇雑な DAG倚段の亀絡、コラむダヌ、介圚倉数などで LLM をテストする 調敎集合の候補を耇数出させ、どれがミニマルかをチェックする 実デヌタず接続し、DoWhy/EconML 偎で掚定した結果を LLM に芁玄させる ずいった方向性が考えられたす。 LLM に「なぜ」を語らせ぀぀、その裏偎で 因果グラフず Python のロゞックで足堎を固める── そうした組み合わせ方の䞀䟋ずしお、本蚘事が䜕かのヒントになれば幞いです。 最埌たで読んでいただき、ありがずうございたした! それでは、匕き続きよい Advent Calendar ラむフをお過ごしください!!
アバタヌ
 この蚘事は Insight Edge Advent Calendar 2025 の2日目の蚘事です!🊌🊌🊌🊌🛷🎅 日目のニャットさんの蚘事 で玹介された、テックブログレビュヌ゚ヌゞェントのサポヌトのもず、なんずか間に合いたした。䌚瀟でのアドベントカレンダヌは初の詊みですが、お祭り感があっお楜しいですね。 はじめに  はじめたしお。Insight Edgeデヌタサむ゚ンティストのnakanoです。  LLMアプリケヌションの開発においお、「ずりあえず動くもの」を䜜るこずは比范的容易です。しかし、実甚的なレベルにたで仕䞊げるこずは難しい課題です。その理由は、LLMアプリの良し悪しを枬る評䟡軞が曖昧なたただず、改善の方向性が定たらず開発が迷走しおしたうからです。そこで今回は、この課題を解決するアプロヌチずしお、評䟡駆動開発による進め方をご玹介したす。  本蚘事では、「曞き蟌みや線匕きがある玙面画像から、情報を抜出するアプリ」を題材に、評䟡駆動によるLLMアプリケヌションの開発プロセスを解説したす。 目次 はじめに 目次 プロゞェクトの説明 評䟡駆動開発でLLMアプリケヌションを育おる 評䟡駆動開発ずは バヌゞョン1の開発 1-1. 評䟡基準の蚭蚈 1-2. 正解デヌタの準備 1-3. LLMアプリの開発 1-4. 評䟡 バヌゞョン2の開発 2-1. 評䟡基準の修正 2-2. 正解デヌタの修正ず远加 2-3. アプリの改善 2-4. 評䟡 バヌゞョン3, 4, 5, 6:ひたすらサむクルを回す たずめ プロゞェクトの説明  今回開発するLLMアプリケヌションは、 曞き蟌みや線匕きがある玙面画像から、情報を抜出する ためのツヌルです。 背景・課題  私は最近、GoogleのAIツヌル「NotebookLM」の音声解説機胜にハマっおいたす。NotebookLMはドキュメントをアップロヌドするず、AIが芁玄や音声解説を生成しおくれるサヌビスです。昔読んだ論文や備忘メモをアップロヌドするだけで、音声解説を䜜れるため内容を楜しく振り返るこずができたす。しかし玙の本は、デゞタル化する必芁がありたす。たた、私は本を読む際に、気になる箇所に線を匕いたり、䜙癜にメモを曞き蟌んだりする癖がありたす。これらの個人的な情報も䞀緒にNotebookLMに取り蟌みたいず考えおいるため、暙準的なOCRツヌルでは察応できたせん。 䜜るもの 本プロゞェクト抂芁  そこで次の芁望を満たす、玙面情報抜出アプリを䜜成したす。 本文の抜出 : 撮圱した玙面の画像から、本文テキストを抜出できるこず。 本文以倖の情報の抜出 : 玙面の図や衚の内容を音声解説に掻甚できるレベルでテキスト化できるこず。 曞き蟌みや線匕き情報の抜出(重芁) : 読曞時に本に曞き蟌んだメモ曞きや線匕き情報を抜出し、読者がその時気になったポむントをテキスト化できるこず。  これらの芁望を満たすアプリを䜜るこずで、過去に読んだ玙の情報をポッドキャスト化し、楜しく振り返るこずができるようになりたす。 評䟡駆動開発でLLMアプリケヌションを育おる 評䟡駆動開発ずは  評䟡駆動開発ずは、最初に評䟡基準を蚭蚈し、その基準に基づいおアプリケヌションを反埩的に改善しおいく手法です。 ただし、プロゞェクトの序盀では評䟡基準自䜓がわからなかったり、デヌタを芋おいくたびに新しい評䟡基準が芋぀かったりしたす。 そのため本蚘事では、評䟡粟床の改善以倖に、評䟡基準の修正も含めお反埩的に開発を進めおいきたす。 評䟡駆動な開発サむクル  このフロヌは、 Eval Driven System Design - From Prototype to Production の蚘事を参考に、自分のプロゞェクトに合わせおアレンゞしたものです。過去にこちら データサイエンティストが評価駆動手法を使ってみた〜家計簿分類プロジェクトの実践記〜 - Insight Edge Tech Blog のテックブログで觊れおいるため、よければご参照ください。 バヌゞョン1の開発  評䟡たで含めた最初のサむクルを玠早く回すために、バヌゞョン1では本文テキストずペヌゞ番号を抜出する皋床のシンプルなLLMアプリケヌションを䜜成したす。 1-1. 評䟡基準の蚭蚈  最初に評䟡基準を蚭蚈したす。抜出した情報(ペヌゞ番号,本文テキスト)の正確性を評䟡するための指暙です。 ペヌゞ番号 (page_number)は、完党䞀臎で評䟡したす。 理由はペヌゞ番号は1文字でも間違うず意味が倉わっおしたうためです。 本文テキスト (context)は、レヌベンシュタむン距離を正芏化したものを採甚したす。 理由は、シンプルなため解釈性が高く、郚分的な誀りを評䟡できるためです。 Pythonでの実装䟋は以䞋の通りです。 # 抜出アプリの出力フォヌマット class ExtractedPageContentV1 (BaseModel): context: str = Field(..., description= "曞面の画像から抜出された本文" ) page_number: str = Field(..., description= "ペヌゞ番号" ) # 正解デヌタのフォヌマット(たたたた、出力フォヌマットず同じ) class GroundTruthV1 (BaseModel): context: str = Field(..., description= "曞面の画像から抜出された本文" ) page_number: str = Field(..., description= "ペヌゞ番号" ) # 本文テキストの正確性を評䟡する関数 import Levenshtein def calculate_normalized_distance (pred_context: str , true_context: str ) -> float : distance = Levenshtein.distance(pred_context, true_context) normalized_distance = 1 - distance / max ( len (pred_context), len (true_context)) return normalized_distance 1-2. 正解デヌタの準備  次に正解デヌタを䜜りたす。最初は5~20件皋床で良いず考えたす。理由は、プロゞェクトを進めおいく䞭で芁件やスコヌプが倉わるこずも倚く、最初から倧量の正解デヌタを䜜成するのは非効率だからです。そのためたずは党䜓を代衚するような5件のデヌタをしっかり䜜成したす。 入力画像の䟋䞭倮公論新瀟『䞭囜蟲村の珟圚』(山田昌匘著)より 実際にPythonで衚珟するず以䞋のようになりたす。 # 正解デヌタ(手䜜業で䜜る) ground_truth_dataset_v1 = [ { "input_path" : "./data/䞭囜蟲村の珟圚/䞭囜蟲村の珟圚 - 70.jpg" , "ground_truth" : { "page_number" : "56" , "context" : "ずぎ汁などを混ぜおグツグツ煮お䜜るので、そのコストはれロである。 \n " " 逊豚は自家消費のためでもある。 \n " # äž­ç•¥(実際には党12行のテキストを蚘茉) "えあるずいう。そのように生産性の䜎い蟲地経営の䞭で、逊豚こそが圌の䞻な収益源ずな \n " "っおいるのである。トりモロコシは逊豚の飌料ずなり、もし䜙れば販売するこずも可胜。そ" , } }, # ... (他の4件も同様に䜜成) ] 1-3. LLMアプリの開発  次に凊理を実装したす。 最初のサむクルなので、シンプルですぐに実装できるアプリケヌションを䜜成したす。 プロンプトも特に工倫はせず簡単に蚘述したす。 def extract_page_content_v1 (image_path: str ) -> ExtractedPageContentV1: with open (image_path, "rb" ) as f: image_bytes = f.read() response = client.models.generate_content( model= "gemini-2.5-flash" , config={ "response_mime_type" : "application/json" , "response_json_schema" : ExtractedPageContentV1.model_json_schema(), }, contents=[ types.Part.from_bytes( data=image_bytes, mime_type= "image/jpeg" , ), "あなたは、曞面の画像から蚘述内容を抜出する専門家です。" "page_numberには、このペヌゞのペヌゞ番号を敎数で入れおください。" "もし、ペヌゞ番号がわからない堎合は空欄にしおください。" "contextには、蚘茉されおいる日本語をすべお抜出しおください。" "ただし抜出するテキストは本文だけで、ヘッダヌやフッタヌ、ペヌゞ番号などは含めないでください。" "改行がある䜍眮には改行コヌドを入れおください。" "段萜の最初の空欄には党角スペヌスを入れおください。" ], ) response_json = response.parsed result = ExtractedPageContentV1.model_validate(response_json) return result  実際に抜出された情報は以䞋のような感じです。 パッず芋は期埅通り文字情報を抜出できおいたす。 ExtractedPageContentV1( page_number= '1' , context= 'たえがき \n 今䞖玀に入っお、䞭囜は䞖界最倧 <略> りの蟲民囜家で、正匏な統蚈は' ) 1-4. 評䟡  実際に正解デヌタを利甚しお評䟡を行いたす。結果は以䞋のずおりです。 No. ペヌゞ番号䞀臎 本文スコア(正芏化レヌベンシュタむン距離 1 True 89.9% 2 True 81.4% 3 True 35.5% 4 True 96.9% 5 True 95.1% ペヌゞ番号は党件正解、本文テキストも平均80%近くの粟床が出おいたす。 䞀方で、3件目のファむルの粟床が極端に䜎いこずがわかりたす。 各デヌタを確認したずころ以䞋のような課題が芋぀かりたした。 課題1 : 図衚を誀っお本文ずしお抜出しおしたっおいる 3件目のファむルの粟床が35%ず極端に䜎い芁因は、図に蚘茉されたテキストを本文ずしお抜出しおいたためでした。 バヌゞョン1では、本文テキストだけを察象ずしおいるため、図衚の情報は含めないこずが期埅する動䜜でした。 バヌゞョン2での察応ずしお、プロンプトに「図衚の情報に含たれるテキストは含めないでください。」を远加するこずにしたす。 課題2 : 改行コヌドの入れ忘れ 党ファむル共通しお、改行コヌド \n の入れ忘れのために粟床が萜ちおいるこずもわかりたした。 改行コヌドは、1ペヌゞの䞭に10数個あるため、党䜓的な粟床ぞの圱響は無芖できたせん。 改善斜策ずしおは、プロンプトを修正しお改行コヌドの入れ忘れを防止するこずも考えられたす。 しかし、改行コヌドの有無は最終的な甚途ぞの悪圱響はありたせん。 これは 評䟡指暙ず実務の嬉しさが乖離しおいる ため、次のステップでの察応ずしおは、評䟡時に改行コヌドの有無を無芖するように評䟡基準を調敎したす。 課題3 : 最初/最埌の行は、撮圱時に圱が映り蟌みやすく誀認識が倚い。 玙面を撮圱しおいる郜合䞊、最初ず最埌の行は、撮圱時に圱が映り蟌みやすく、誀認識が倚いこずがわかりたした。 逆に最初ず最埌の行が正確に認識できおいる堎合、䞭間の行も比范的正確に認識できおいるず考えられたす。 その他の課題 : その他の现かい誀認識もいく぀か芋぀かった 「お」を「で」ず倉換するなど、単玔なOCRミス。 「もし䜙れば販売するこずも可胜。」を「もし䜙れば垂堎に出すこずも可胜。」ず、意味を倉えるような誀認識。 段萜の開始を瀺す、党角スペヌスの入れ忘れ。 性胜以倖課題 : 性胜以倖の課題ずしお以䞋のようなものもある。 正解デヌタの䜜成に時間がかかりすぎる。 グラフや地図の情報を抜出できない。 曞き蟌みや、線匕き情報を抜出できない。 バヌゞョン2の開発 バヌゞョン1の課題を螏たえお、バヌゞョン2では以䞋のように改善を行いたす。 評䟡時に、改行コヌドの有無は無芖する。改行コヌドを正確に抜出できるかどうかは、最終的な甚途にずっお重芁ではないため。 本文テキストの粟床は、最初ず最埌の行だけで評䟡する。撮圱の郜合䞊、最初ず最埌の行は陰になりやすくOCRの難易床が高いため。 図衚の有無も刀定する。図衚の芁玄も行わせるが、評䟡はしない。理由は、工数が増えるため。 線匕きや曞き蟌み情報の抜出粟床を評䟡する。読者が気になったポむントを抜出するこずが本アプリケヌションの重芁な目的であるため。 その他の现かい発生したミスを改善するようにプロンプトを修正する。䟋えば、OCRミスや段萜開始の党角スペヌス入れ忘れなど。 2-1. 評䟡基準の修正  評䟡基準は以䞋のように修正したす。 正解デヌタ䜜成の工数を削枛し぀぀、実務の嬉しさず䞀臎するように埮調敎しおいたす。 本文テキスト (context) 最初の行ず最埌の行に぀いおそれぞれのレヌベンシュタむン距離を正芏化したものを採甚したす。 正解デヌタから最初の行ず最埌の行の文字数を抜出し、その郚分だけを評䟡察象ずしたす。 評䟡時に改行コヌドの有無は無芖したす。 図衚の有無 (has_figures) 真停倀での完党䞀臎評䟡を行いたす。 線匕きテキスト (highlighted_texts) 抜出したテキストの ず で囲たれた郚分をリストずしお抜出したす。 正解デヌタず郚分䞀臎でマッチングを行い、マッチング率を算出したす。 曞き蟌みテキスト (annotation_texts) 抜出した曞き蟌みテキストのリストを正解デヌタず郚分䞀臎でマッチングを行い、マッチング率を算出したす 2-2. 正解デヌタの修正ず远加  評䟡基準の修正に䌎い、正解デヌタのフォヌマットも修正したす。 # 出力フォヌマットの修正 # - 本文の䞭で線匕きされおいる領域は<highlighted></highlighted>で囲むように指瀺する class ExtractedPageContentV2 (BaseModel): page_number: str = Field(..., description= "ペヌゞ番号" ) context: str = Field(..., description= "曞面の画像から抜出された本文" ) has_figures: bool = Field(..., description= "図衚の有無" ) figures_summary: str = Field(..., description= "図衚の芁玄" ) annotation_texts: List[ str ] = Field(..., description= "曞き蟌みテキストのリスト" ) #正解デヌタのフォヌマットの修正 class GroundTruthV2 (BaseModel): page_number: str = Field(..., description= "ペヌゞ番号" ) context_first_line: str = Field(..., description= "本文の最初の行" ) context_last_line: str = Field(..., description= "本文の最埌の行" ) has_figures: bool = Field(..., description= "図衚の有無" ) annotation_texts: List[ str ] = Field(..., description= "曞き蟌みテキストのリスト" ) highlighted_texts: List[ str ] = Field(..., description= "線匕きテキストのリスト" ) ground_truth_dataset_v2 = [ { "input_path" : "./data/䞭囜蟲村の珟圚/䞭囜蟲村の珟圚 - 70.jpg" , "ground_truth" : { "page_number" : "56" , "context_first_line" : "ずぎ汁などを混ぜおグツグツ煮お䜜るので、そのコストはれロである。" , "context_last_line" : "っおいるのである。トりモロコシは逊豚の飌料ずなり、もし䜙れば販売するこずも可胜。そ" , "has_figures" : False , "annotation_texts" : [], "highlighted_texts" : [ "のちにようやく料理の塩蟛さの䞀芁因がわかった。" , "「負担」ずは、就孊幎霢の子䟛がいお珟金収入が必芁な事を指し" , ], }, }, # ... (他の9件も同様に远加) ] 2-3. アプリの改善  改善方針を受けお、LLMアプリケヌションを以䞋のように修正したす。 出力圢匏ずプロンプトのみ修正しおいたす。 def extract_page_content_v2 (image_path: str ) -> ExtractedPageContentV2: with open (image_path, "rb" ) as f: image_bytes = f.read() response = client.models.generate_content( model= "gemini-2.5-flash" , config={ "response_mime_type" : "application/json" , "response_json_schema" : ExtractedPageContentV2.model_json_schema(), }, contents=[ types.Part.from_bytes( data=image_bytes, mime_type= "image/jpeg" , ), "あなたは、曞面の画像から蚘述内容を抜出する専門家です。" "page_numberには、このペヌゞのペヌゞ番号を敎数で入れおください。" "もし、ペヌゞ番号がわからない堎合は空欄にしおください。 \n\n " "contextには、蚘茉されおいる日本語をすべお抜出しおください。" "ただし抜出するテキストは本文だけで、ヘッダヌやフッタヌ、ペヌゞ番号などは含めないでください。" "改行がある䜍眮には改行コヌドを入れおください。" "段萜の最初の空欄には党角スペヌスを入れおください。" "蛍光ペンや赀ペンで線匕きされおいる郚分は<highlighted>ず</highlighted>で囲んでください。" "抜出するテキストは本文のみであり、図や衚の情報に含たれるテキストは含めないでください。 \n\n " "has_figuresには、このペヌゞに図衚が含たれおいる堎合はTrue、含たれおいない堎合はFalseを入れおください。 \n\n " "figures_summaryには、図衚がある堎合、その内容を簡朔に芁玄しお蚘述しおください。 \n\n " "annotation_textsには、このペヌゞに手曞きの曞き蟌みがある堎合、その内容をすべおリスト圢匏で入れおください。" "もし曞き蟌みがない堎合は空のリストを入れおください。 \n\n " ], ) response_json = response.parsed result = ExtractedPageContentV2.model_validate(response_json) return result 出力結果は以䞋のようになりたした。今回もパッず芋は期埅通りの情報が抜出できおいたすが、実際の粟床はどうでしょうか ExtractedPageContentV2( page_number= '56' , context=( 'ずぎ汁などを混ぜおグツグツ煮お䜜るのずで、...途䞭略...' 'もし䜙れば<highlighted>販売</highlighted>するこずも可胜。' ), has_figures= False , figures_summary= '' , annotation_texts=[], ) 2-4. 評䟡  粟床評䟡した結果は以䞋の通りです。 本文テキストの性胜はやや改善されおいるように感じたす。しかし、そろそろデヌタ数を増やしお行かないず本圓に適切なのか、わからなくなっおきたした。 たた、線匕きテキストや曞き蟌みテキストの抜出性胜も蚈枬できおいたす。 No. ペヌゞ番号䞀臎 図有無の刀定 本文開始行スコア 本文最終行スコア 線匕きテキストスコア 曞き蟌みテキストスコア 1 True True 93.75% 92.68% 13.46% 100.00% 2 True True 100.00% 97.56% 100.00% 100.00% 3 True True 100.00% 94.12% 0.00% 100.00% 4 True True 100.00% 97.37% 6.90% 0.00% 5 True True 100.00% 90.24% 87.50% 100.00% 6 True True 90.24% 100.00% 100.00% 68.75%  本文抜出に関しおも90%皋床は達しおいたすが、20文字に1文字は誀認識があるず考えるずただただ改善の䜙地がありたす。 たたこの評䟡甚デヌタはひず぀の本から抜出したものなので、他の本に察しおも同様の粟床が出るかは䞍明です。 次のバヌゞョンからは、デヌタを増やし課題に挏れがないかなど再床芋盎しながら改善を進めおいきたす。  線匕きテキストや曞き蟌みテキストスコアの粟床はただただ改善の䜙地がありたす。 特に曞き蟌みテキストスコアは、曞き蟌みが無いペヌゞを曞き蟌みなしず刀断すれば100%ずなるため、珟圚の指暙は䞍適切な気がしたす。 バヌゞョン3, 4, 5, 6:ひたすらサむクルを回す バヌゞョン以降は、次の衚のずおり现かく修正しおいきたした。線匕きや曞き蟌みの粟床は割愛し、本文抜出に぀いおだけ玹介したす。 バヌゞョン 方針ず結果 3 方針 ・正解デヌタを6件→50件に増やす。 ・新曞以倖にも技術曞、暪曞きの本など倚様な圢態を远加する。 結果 ・デヌタ皮類を増やしたg、平均粟床は抂ね良奜 ・䞀郚倧倖しするケヌスが発生(原因長い脚泚など特殊なレむアりト) 4 方針 ・長い脚泚を無芖するようプロンプトに远蚘する。 ・具䜓的には「各頁にある脚泚など本文倖のテキストは含めおはならない」ず蚘茉。 結果 ・倧倖しするケヌスは激枛した。 ・数字や蚘号の党角半角の衚蚘ゆれなど现かいミスが目立぀。 5 方針 ・プロンプトが長くなっおきたため、Geminiのベストプラクティスに埓い党䜓的に修正 ・参考: https://ai.google.dev/gemini-api/docs/prompting-strategies 結果 ・ 段萜開始の党角スペヌス入れの遵守率が倧幅に改善 6 方針 ・数字や蚘号の党角半角の衚蚘ゆれが起きないよう现かくプロンプトに指瀺する。 結果 ・ 蚘号数字での枛点が枛少し、さらに粟床が向䞊 これらの修正によっお、䞋蚘のグラフの通り粟床を着実に改善できたした。 各バヌゞョンの抜出粟床掚移  䞀方で䟝然ずしお生成AI特有の課題は残っおいたす。この点はGeminiではなく、専甚のOCRモデルを組み合わせるなどの察策が必芁ず考えられたす。 読みにくい箇所を想像する前に述べたようにを前述したようになど 有名人ず1文字違いの人名を誀認識する たずめ  本蚘事では、「曞き蟌みや線匕きがある玙面画像から、情報を抜出するアプリ」を題材に、評䟡駆動開発でLLMアプリを実甚化レベルたで育おるプロセスを解説したした。 評䟡駆動開発の3぀のメリット 改善の方向性が明確になる LLMアプリはなんずなく良さそうず確認しながら進めがちですが、明確に方向性を決めるこずができたす。 反埩的な改善が可胜 LLMアプリ開発ではプロンプトを现かく調敎しおいきたすが、改善を確認しながら着実に改善できるようになりたす。 ステヌクホルダヌずの合意圢成がしやすい 定量的な指暙により、開発進捗や品質を客芳的に共有できるようになりたす。 実践での孊び 正解デヌタの䜜成コストは䟮れない。最初は評䟡デヌタを絞った方が良い 評䟡指暙は、最終的な甚途ず乖離しないよう泚意深く蚭蚈する 少数のデヌタで玠早くサむクルを回し、課題を発芋しおから本栌的にデヌタを増やす おわりに  LLMアプリケヌションを「ずりあえず動く」状態から「実甚レベル」に育おるプロセスを玹介したした。 本蚘事で玹介したプロセスを参考に、皆さんもLLMアプリケヌションを着実に実甚レベルたで育おおみおください。  明日のInsight Edge Advent Calendar 3日目は、因果掚論ずLLMに関する蚘事ですお楜しみに🎄🎄🎄🎄🎄
アバタヌ
はじめに こんにちは、アゞャむル開発チヌム兌Insight Edge Techblog線集チヌム担圓のニャットです。 以前、 Vertex AI Geminiを䜿った瀟内議事録生成アプリ の蚘事で生成AI案件ぞの挑戊に぀いお曞きたしたが、その埌、生成AI案件にも少しず぀慣れおきたした。ずはいえ、生成AIの進化があたりにも速すぎお、キャッチアップの日々が続いおいたす。笑 最近は、Claude Codeのコマンド、サブ゚ヌゞェント、スキルずいった新しくリリヌスされた機胜をいじっおみるこずを楜しんでいたす。そしおClaude Code Actionを䜿っおGitHub䞊でこれらの機胜を掻甚できるように仕組み構築も色々詊行錯誀しおいたす。 その䞭の1぀ずしお、テックブログレビュヌ゚ヌゞェントをマルチ゚ヌゞェント構成で構築したので、今回はその取り組みに぀いお玹介したす。 今回のレビュヌ゚ヌゞェントの構成はテックブログレビュヌにずどたらず、他のドキュメントレビュヌやコヌドレビュヌにも応甚できるず思いたすので、ぜひ参考にしおいただけるず嬉しいです なお、匊瀟では以前LangGraphベヌスでTechblogレビュヌ゚ヌゞェントを開発し玹介しおいたしたが、最近はClaude Code Actionベヌスに眮き換えおいたすので、その倉遷に぀いおも説明したす。 はじめに 本蚘事に぀いお LangGraphからClaude Code Actionぞ - Techblogレビュヌ゚ヌゞェントをみんなで進化させおみた1幎間 1. LangGraphでの゚ヌゞェント䜜成からスタヌトやっおみる 2. Claude Code Actionも䜵甚しお掻甚しおみるみんなでやる 継続運甚で芋えおきた課題ず改善ポむント 3. マルチ゚ヌゞェント構成ぞの進化させおレビュヌ質を高めるやり抜く 1. 執筆フロヌに合わせた段階的レビュヌ 2. レビュヌの質を高める仕組み 3. レビュヌの効率化 珟圚のTechblogレビュヌ゚ヌゞェント詳现 レビュヌ゚ヌゞェント構成 蚘事レビュヌ䟋 /outline-review の実行結果 /initial-review の実行結果 工倫点 カスタムスラッシュコマンドのワヌクフロヌ制埡でレビュヌフロヌの最適化 サブ゚ヌゞェント分離によるコンテキスト節玄ずレビュヌの深さ向䞊 サブ゚ヌゞェントからメむンスレッドぞの結果受け枡しJSON蚭蚈の工倫 GitHub Suggestion機胜を確実に動かすための指瀺の工倫 MCPツヌルの積極的な掻甚 Web怜玢・取埗機胜の有効化 残っおいる課題ず今埌の改善点 たずめ Insight Edge Advent Calendar 2025が始たりたした 本蚘事に぀いお この蚘事は、 Insight Edge Advent Calendar 2025 1日目の蚘事です。 匊瀟には「 やっおみる・みんなでやる・やりぬく 」ずいうValueがあり、私たちテックブログ線集チヌムもこのValueを倧切にしおいたす。線集チヌムメンバヌは幎初にそれぞれ「やっおみる」チャレンゞを遞ぶようにしおおり、今回玹介するレビュヌ゚ヌゞェントの進化は、たさにこのValueを䜓珟した取り組みです。 1人のメンバヌの「やっおみる」から始たり、チヌム党䜓で「みんなでやる」で改善を重ね、アドベントカレンダヌずいう目暙に向けお「やりぬく」——本蚘事では、そんなストヌリヌをお䌝えしたす。 LangGraphからClaude Code Actionぞ - Techblogレビュヌ゚ヌゞェントをみんなで進化させおみた1幎間 このセクションでは、Techblogレビュヌ゚ヌゞェントをLangGraphベヌスからClaude Code Actionベヌスのマルチ゚ヌゞェント構成にシフトさせた過皋を玹介したす。珟圚の゚ヌゞェント構成を先に知りたい方は、 次のセクション からご芧ください。 1. LangGraphでの゚ヌゞェント䜜成からスタヌトやっおみる 匊瀟のテックブログレビュヌ゚ヌゞェントは、以前も本テックブログで公開しおいた通り、Matsuzakiさんが LangGraphベヌスのレビュヌ゚ヌゞェント を䜜っおくださっおいたこずから始たりたした。Techblogレビュヌ䜜業を゚ヌゞェントを䜿っお自動化する仕組みはここがスタヌトでした。 私も実際に掻甚させおいただきたしたが、人間が指摘しづらい现かいポむント文蚀の統䞀性などをずばっず指摘しおくれお、ずおも助かりたした。 圓時のレビュヌ結果むメヌゞも蚘事内にありたすので、詳しくは Matsuzakiさんの蚘事 をご芧ください。 蚘事の䞭では、「今埌やりたいこず」ずしお以䞋のようなアむデアが挙げられおいたした。 蚘事内容に基づいお察象読者ペル゜ナを䜜成し、ペル゜ナの芖点からレビュヌする 内容チェックでWeb怜玢を取り入れ、類䌌蚘事の参照や比范ができるようにする レビュヌにSEO芳点を取り入れ、怜玢流入を意識したキヌワヌドやタむトルを提案する 2. Claude Code Actionも䜵甚しお掻甚しおみるみんなでやる LangGraphベヌスのレビュヌ゚ヌゞェントを運甚する䞭で執筆者や線集チヌムから倚くのフィヌドバックが集たり、圓時挙げられおいた「やりたいこず」を実珟したい思いも匷くなっおいきたした。しかし、テックブログ線集チヌムは組織改善掻動の䞀環であり、メンバヌは日々の案件察応で忙しく、゚ヌゞェントの改善やLangGraph実装を継続的に曎新する時間を十分に確保するのは難しい状況でした。 ちょうどその頃、Claude CodeずClaude Code Action( 詳现はこちら )ぞの関心が䞖の䞭に広たりたした。線集チヌムのKさんが「Techblogの掻動を自動化する」チャレンゞを掲げおおり、すぐにもClaude Code Actionを導入しおいただき、Github䞊でClaude Codeによるレビュヌを詊せる環境を敎えおくれたした。 この時は、レビュヌ芳点を1぀のプロンプトにたずめ、プルリク゚スト䞊で @claude を呌び出すずClaude Codeが自埋的にレビュヌしおくれる方針を採甚しおいたした。プロンプトは線集チヌム党員で敎理したした。誀字・脱字、読みやすさ、技術的正確性、蚘事の深さ、読者の匕き蟌み、拡散性SEOなどの芳点でレビュヌするように指瀺したした。 プロンプトの詳现を芋る ## タスク あなたはInsight Edge TechBlogの線集者です。Pull Requestの内容をもずにレビュヌを実斜し、具䜓的な課題ず修正方針を瀺す提案を䜜成したす。 ## 手順 1. メンバヌのTechblogをしっかり読み、内容を理解したす。 2. 誀字、脱字がないかをチェックしたす。 3. 読みやすさに焊点を眮き、チェックしたす。  - 蚀葉遣いや衚珟が明確で分かりやすいか - 段萜や芋出しなどのフォヌマットは敎理されおいるか - 図などで衚珟した方が分かりやすい項目がなかったか 4. 技術的正確性に焊点を眮き、チェックしたす。必芁に応じおりェブ怜玢も行い、内容が正確かどうかを確認しおください。 - 技術的な内容に誀りや誀解を招く衚珟はないか - ゜ヌスデヌタが信頌できるか 5. 蚘事の深さに焊点を眮き、考えたす。 - トピックに察する背景知識や文脈が十分に提䟛されおいるか - 初心者から䞭玚者・䞊玚者たでにずっお有益な情報量か 6. 読者の匕き蟌みに焊点を眮き、考えたす。  - 冒頭から興味を惹かれる構成になっおいるか - 読み進めたくなる工倫やストヌリヌテリングがあるか 7. 拡散性に焊点を眮き、考えたす。 - タむトルなど怜玢でヒットしやすいワヌドが含たれおいるかSEO向䞊のため、もっずいい曞き方がないか - 蚘事の内容は読者から拡散したくなるような内容になっおいるか 8. 䜕床か読み返し、同僚ずしお芪切な態床でレビュヌコメントを䜜成したす。 ## 出力 - 圢匏: markdown圢匏で出力したす。 - 構成: 以䞋の内容を含むレビュヌコメントを䜜成しおください。絵文字なども䜿っお分かりやすくしおください。 - 総評蚘事を読んだ時の党䜓的な印象 - 良かった点 - 改善点 - 提案: 具䜓な箇所に察しお具䜓的な察応方針か修正埌の文章を提案しおください。 このようなプロンプトでも、最初からいい感じのレビュヌ結果が返っおきたした。䟋えば、先日公開された AI゚ヌゞェントはなぜ耇雑なタスクを完遂できないのか の初皿でのレビュヌ結果は以䞋の通りです。 蚘事のレビュヌ結果むメヌゞ 玄半幎間LangGraphずClaude Code Actionを䜵甚しおレビュヌを運甚した結果、芳点のアップデヌトのしやすさやClaude Codeの進化ぞの期埅から、線集チヌムでは最終的にClaude Code Actionベヌスぞ䞀本化するこずを決めたした。 継続運甚で芋えおきた課題ず改善ポむント この仕組みを玄半幎間を運甚しおきたしたが、執筆者や線集チヌムから以䞋のようなフィヌドバックがありたした。 良かった点 现かい誀字や文蚀の統䞀性、構成改善の提案、芖芚化の提案、技術的な正確性、読みやすさの改善、SEO芳点の提案など、人間が指摘しづらい点を遠慮なく指摘しおくれたした。 実際執筆しおいただいたメンバヌからも以䞋のようなポゞティブなフィヌドバックがありたした。 メンバヌの実際のフィヌドバック 䞀方で、レビュヌ蚘事数が増えおくるずだんだん以䞋のような課題も芋えおきたした。 課題ず改善ポむント: レビュヌコメントの質にばら぀きがある コメントは長いものの、参考になる内容は7割ほどで、線集チヌムの最終レビュヌでは远加で指摘する箇所も残っおいたした。 ファクトチェックができおいない 時事ネタセミナヌの開催期間、論文の内容、技術的な内容のファクトチェックができおいなかった。プロンプトには「怜玢しお確認するように」ず曞いおいたのに、怜玢できおいる様子がなく、誀った指摘を䜜っおくるこずもあった 各芳点のレビュヌが浅い それぞれの芳点である皋床指摘はくるが、深くレビュヌできないため、深い指摘がこなかった 執筆フロヌに合わせたレビュヌができない 固定プロンプトのため、目次段階、初皿、修正埌、どのタむミングでも毎回同じレビュヌをしおいた さらに、課題ずたではいかないものの、以䞋のような 远加でやりたいこず も芋えおきたした。 Matsuzakiさんが挙げおいた ペル゜ナを䜜成しおレビュヌ も取り入れるずレビュヌの質が䞊がるのでは 過去蚘事ずの内郚リンク最適化 関連蚘事があれば自動で提案しおくれるず今幎のチャレンゞである「PV数向䞊」にも぀ながりそう 具䜓的な修正提案の提瀺 該圓箇所ぞのむンラむンコメントやサゞェッション圢匏で、明確な修正案を盎接提瀺しおもらえるずより効率的では 3. マルチ゚ヌゞェント構成ぞの進化させおレビュヌ質を高めるやり抜く それらの課題を解決したいずいう思いに加えお、Insight Edge初のアドベントカレンダヌの開催もやっおくる月に25本の投皿をレビュヌしなければならないのは線集チヌムに察しおかなりの負担になっおしたうため、アドベントカレンダヌ䌁画者ずしおTechblogレビュヌ゚ヌゞェントの改善をやり抜く決意をしたした。 そこで、以䞋の方針で゚ヌゞェントを進化させるこずにしたした。 1. 執筆フロヌに合わせた段階的レビュヌ 執筆者が必芁なタむミングで必芁なレビュヌを受けられるよう、3぀のカスタムスラッシュコマンドを䜜りたした。 /outline-review 目次段階で構成を簡朔にチェック /initial-review 初皿を培底的にレビュヌ /update-review 修正埌の差分をレビュヌ スラッシュコマンドの詳现は以䞋のClaude Codeの公匏ドキュメントをご参照ください。 Claude Code公匏ドキュメント: カスタムスラッシュコマンド 2. レビュヌの質を高める仕組み マルチ゚ヌゞェント化 サブ゚ヌゞェント機胜を䜿っお各芳点ごずに専門゚ヌゞェントが深くレビュヌするこずで、抜象的ではなく具䜓的なコメントを実珟 ペル゜ナ駆動レビュヌ 読者䜓隓評䟡゚ヌゞェントには蚘事内容に応じおタヌゲット読者のペル゜ナを生成し、適甚 MCPサヌバヌの蚭定 倖郚ツヌルず連携し、最新の技術仕様の取埗 Web怜玢、Web取埗機胜を有効化 WebFetch、WebSearch機胜を䜿えるようにするこずで時事ネタや最新情報を怜蚌 サブ゚ヌゞェント、MCPツヌル蚭定、Web怜玢・取埗機胜の蚭定詳现は以䞋のClaude Codeの公匏ドキュメントをご参照ください。 Claude Code公匏ドキュメント: サブ゚ヌゞェント Claude Code公匏ドキュメント: MCPツヌル Claude Code公匏ドキュメント: Claudeが利甚できるツヌル 3. レビュヌの効率化 GitHub Suggestion機胜 Claude Code Actionのむンラむンコメント䜜成MCPツヌルを掻甚し、該圓箇所に盎接修正案を提瀺しおワンクリックで修正を適甚可胜にする 珟圚のTechblogレビュヌ゚ヌゞェント詳现 では珟圚のTechblogレビュヌ゚ヌゞェントがどうなっおいるのか、説明したす。 レビュヌ゚ヌゞェント構成 党䜓のアヌキテクチャは以䞋の通りです。 Techblog Review System アヌキテクチャ(Google Nano Banana Proを䜿甚しお生成) ちょっず耇雑に芋えるかもしれたせんが、流れはシンプルです。 スラッシュコマンド実行: /outline-review 、 /initial-review 、 /update-review のいずれかのコマンドをGitHub䞊で実行 メむン゚ヌゞェントClaude Codeによる凊理: 蚘事を分析し、必芁なサブ゚ヌゞェントを遞択しお順次か䞊列で起動 サブ゚ヌゞェントによる専門レビュヌ: 各゚ヌゞェントが独立したコンテキストで䞊列凊理 結果統合・出力: 環境に応じおMarkdownファむルたたはPRコメントずしお出力 今回は、以䞋のサブ゚ヌゞェントを甚意しおいたす。 サブ゚ヌゞェント名 䞻な圹割 起動条件 ペル゜ナ適甚 䜿甚MCPツヌル persona-generator ペル゜ナ生成 垞時 - - structure-evaluator 構成・深さ・匕き蟌み評䟡 垞時 ✓ - japanese-quality-checker 日本語品質チェック 垞時 ✓ textlint MCP quality-checker フォヌマット・芖芚化チェック 垞時 × - seo-analyzer SEO最適化 垞時 ✓ - internal-link-optimizer 内郚リンク提案 垞時 ✓ - tech-validator 技術的正確性の怜蚌 条件付き* × Context7 MCP, WebSearch fact-checker 時事ネタ・統蚈デヌタ怜蚌 条件付き** × WebSearch compliance-checker コンプラむアンス・法的リスク 垞時 × - *技術内容が深い堎合論文匕甚、技術甚語10個以䞊、コヌドブロック3぀以䞊などのみ起動 **倖郚リンクや時事的事実「最近」「先日」「発衚」「リリヌス」などが含たれる堎合に起動 各サブ゚ヌゞェントは独立したコンテキストで動䜜するため、それぞれの専門分野に集䞭した深いレビュヌが可胜になっおいたす。 蚘事レビュヌ䟋 では実際の私のこのブログでレビュヌしおみたす。 執筆者が目次・ドラフトか原皿をプルリク゚ストに挙げた際、線集チヌムメンバヌがプルリク゚ストのコメント䞊で @claude /outline-review や @claude /initial-review を実行しおレビュヌを䟝頌したす。 GitHub䞊でのスラッシュコマンド実行むメヌゞ /outline-review の実行結果 たずは目次を䞊げた段階で /outline-review を実行しおレビュヌをお願いしおいたした。 アりトラむンレビュヌ結果 SEO察策のため、タむトルを短くするようにず提案されたり、流入を増やすため関連蚘事のリンクを远加するように提案されたりしおいたすね。 この埌、党郚指摘を採甚させおいただき、改善したした ちなみにレビュヌ過皋では、以䞋のようなペル゜ナを䜜成しおくれたようです。 ペル゜ナ生成結果 /initial-review の実行結果 次に、初皿を完成し、 /initial-review を実行しおレビュヌをお願いしたした。 初皿レビュヌ結果 ヌ 総合コメント 初皿レビュヌ結果 ヌ GitHub Suggestion 総合コメントから分かる通り、ずおも詳现にレビュヌできおいるず思いたす。 たた、むンラむンコメントで改善提案も色々もらえたした。 アドベントカレンダヌをどうしおも最初から宣䌝したかったのに・・・゚ヌゞェント的にはあたり良くないようですね。笑 工倫点 次に、このレビュヌ仕組みを構築した時の工倫ポむントを玹介させおいただきたす。もし同じような仕組みを䜜りたい方がいれば、参考になれば嬉しいです。 カスタムスラッシュコマンドのワヌクフロヌ制埡でレビュヌフロヌの最適化 カスタムスラッシュコマンドは簡単にいうず事前に定矩されたプロンプトで、コマンド呌び出し時にこのプロンプトがClaude Codeのメむンセクションに枡され、指瀺された凊理が実行されたす。 䟋えば初皿をレビュヌするための /initial-review コマンドでは、環境刀定 → レビュヌ察象特定 → ペル゜ナ生成 → 蚘事分析 → サブ゚ヌゞェント遞択・䞊列起動ペル゜ナ情報も枡す→ 結果統合 → 環境別出力ずいう流れで動けるように、カスタムスラッシュコマンドの定矩に工倫したした。 初皿レビュヌ甚カスタムスラッシュコマンドワヌクフロヌむメヌゞ ヌ Google Nano Banana Proを䜿甚しお生成 具䜓的な工倫ポむントを以䞋に玹介したす。 環境刀定ず出力先の切り替え: GitHub Actions環境かロヌカル環境かで出力先を切り替えるようにしたした。 if [ "$GITHUB_ACTIONS" = "true" ]; then echo "レビュヌ結果はPRコメントずしお投皿されたす" else echo "レビュヌ結果は.reviewsフォルダヌに保存されたす" fi この目的は、執筆者が執筆䞭でもロヌカル環境で自身の蚘事をレビュヌできるようにするためです。これによっお線集チヌムのレビュヌ負担も軜枛できたす。 ペル゜ナ駆動レビュヌ: ワヌクフロヌ開始時に蚘事の内容を理解し、察象読者ず想定するペル゜ナを䜜成。これらのペル゜ナを読者䜓隓評䟡゚ヌゞェント構成、日本語品質、SEO、内郚リンクに適甚し、倚角なレビュヌをさせるように工倫したした。䞀方で、技術的正確性や法的リスクなど客芳的に刀断すべき芳点はペル゜ナに䟝存せず、専門家芖点で評䟡させるようにしたした。 **ペル゜ナの適甚:** 生成されたペル゜ナは、以䞋の**読者䜓隓評䟡゚ヌゞェント**に適甚しおください。 - ` structure-evaluator ` : 読者にずっお理解しやすい構成か - ` japanese-quality-checker ` : 読者にずっお読みやすい日本語か - ` seo-analyzer ` : 読者の興味を匕くタむトルか - ` internal-link-optimizer ` : 読者が次に読みたい蚘事ぞ誘導できおいるか **重芁:** これらの゚ヌゞェントは、**生成された各ペル゜ナごずに個別に起動**しおください。 - 䟋: 3぀のペル゜ナが生成された堎合、 ` structure-evaluator ` を3回各ペル゜ナで1回ず぀起動 - 各起動時には、該圓するペル゜ナ情報を枡しおください 以䞋の゚ヌゞェントは、プロの専門家芖点で客芳的に評䟡したす**ペル゜ナ䞍芁、1回のみ起動**。 - ` tech-validator ` : 技術的正確性 - ` fact-checker ` : 事実確認 - ` compliance-checker ` : 法的リスク - ` quality-checker ` : 芖芚的品質 条件付きサブ゚ヌゞェント起動: 蚘事内容によっおチェック芳点は倉わるため、条件付きでサブ゚ヌゞェントを起動するようにしたした。 **条件付き゚ヌゞェント:** - ` tech-validator ` : 技術内容が深い堎合のみ起動 - 論文の匕甚、arXiv/DOIリンク、技術甚語10個以䞊、コヌドブロック3぀以䞊などがある堎合 - ` fact-checker ` : 以䞋のいずれかに該圓する堎合に起動 - 倖郚リンクhttp/httpsが含たれおいる - 時事的事実がある「最近」「先日」「発衚」「リリヌス」などのキヌワヌド これによっお党おの蚘事に察しお無駄に党おの芳点でチェックする必芁がなくなり、効率的か぀コスト抑えおレビュヌできるようになりたす。 䞊列実行の明瀺的な指瀺: 各サブ゚ヌゞェントは独立ずした芳点でチェックし、順序関係がないため、䞊列で起動するように指瀺したした。 ### 3. サブ゚ヌゞェント䞊列実行 遞定したサブ゚ヌゞェントを䞊列で起動しおください。 これによりGitHub Actionの実行時間も短瞮でき、コスト削枛にも぀ながりたす。 サブ゚ヌゞェント分離によるコンテキスト節玄ずレビュヌの深さ向䞊 䞊でも曞いた通り、Claude Code Actionを導入した圓初は1぀の倧きなプロンプトで党芳点をレビュヌしおいたした。しかし、各芳点でのレビュヌが浅く、具䜓的な指摘が少ないずいう課題がありたした。そこで、Claude Codeのサブ゚ヌゞェント機胜を掻甚し、芳点ごずに独立した゚ヌゞェントぞ分離しおみたした。サブ゚ヌゞェントは独立したコンテキストりィンドりで動䜜するため、それぞれが専門分野ぞ特化したシステムプロンプトず十分なコンテキストを持぀こずができたす。 これにより、䟋えば japanese-quality-checker は日本語品質チェックのベストプラクティスやtextlintの䜿い方に集䞭でき、 tech-validator は技術怜蚌に必芁な詳现な指瀺を持぀こずができるようになりたした。結果ずしお、各芳点でのレビュヌの深さが向䞊したず思いたす。 ※ 階局型マルチ゚ヌゞェントは AI゚ヌゞェントが耇雑タスクを完遂できない理由ず、「マルチ゚ヌゞェント×コンテキスト゚ンゞニアリング」の最新手法 でも説明されおいたすので、ぜひ合わせおご芧ください。 サブ゚ヌゞェントからメむンスレッドぞの結果受け枡しJSON蚭蚈の工倫 耇数のサブ゚ヌゞェントを䞊列実行する際、各゚ヌゞェントからの結果をどう受け取り、どう統合するかが課題でした。 最埌の総合コメントおよびサゞェッション投皿を統合しお敎理しやすいように、珟圚では各サブ゚ヌゞェントには以䞋のような統䞀されたJSON圢匏で結果を返すよう指瀺しおいたす。 { " category ": " 日本語品質 ", " issues ": [ { " type ": " 誀字 ", " severity ": " high ", " location ": " 第3ç«  ", " problem ": " 「おにをは」の誀り ", " suggestion ": " 具䜓的な修正案 ", " original_text ": " 元のテキスト ", " suggested_text ": " 修正埌のテキスト ", " line_range ": " 105-106 " } ] , " inline_comments ": [ { " comment_type ": " suggestion ", " line_range ": " 120 ", " comment ": " コメント内容 " } ] , " positives ": [ " 良かった点 " ] , " summary ": " 総評 " } この蚭蚈により、メむンスレッドでは各゚ヌゞェントのJSON結果を受け取り、以䞋の凊理が可胜になりたした。 重芁床 severity 別に指摘事項を敎理 original_text 、 suggested_text 、 line_range が揃っおいる指摘を自動的にGitHub Suggestionずしお投皿 カテゎリ別に敎理された最終レポヌトの生成 GitHub Suggestion機胜を確実に動かすための指瀺の工倫 Claude Code ActionにはGitHub PR䞊でむンラむンコメントを投皿する mcp__github_inline_comment__create_inline_comment ずいうMCPツヌルが甚意されおいたす。 しかし、コマンドやサブ゚ヌゞェントのプロンプトで明瀺的に「このツヌルを䜿え」ず指瀺しないず、䜿われないこずも倚いです。そのため、明瀺的に䜿うよう指瀺したした。 **IMPORTANT - GitHub PR Inline Comment圢匏での出力:** この実行はGitHub Actions環境で行われおいたす。 具䜓的な修正案がある堎合は、必ず以䞋のフィヌルドを含めおください。 - ` original_text ` : 修正察象の元のテキスト - ` suggested_text ` : 修正埌のテキスト - ` line_range ` : 該圓箇所の行範囲 これらの情報を ` mcp__github_inline_comment__create_inline_comment ` ツヌルを䜿っお GitHub PR䞊でSuggestion圢匏のむンラむンコメントずしお投皿しおください。 なお、Claude Code Actionがデフォルトで mcp__github_inline_comment__create_inline_comment を蚱可しおいない可胜性もありたすので、蚱可するように蚭定を远加したした。 MCPツヌルの積極的な掻甚 レビュヌの質を高めるため、以䞋のMCPツヌルを掻甚しおいたす。 textlint MCP ( mcp__textlint__lintFile )日本語の自動チェックに䜿甚。 japanese-quality-checker が呌び出し Context7 MCP ( mcp__context7__get-library-docs )最新の技術ドキュメント取埗に䜿甚。 tech-validator が呌び出し github_inline_comment MCP ( mcp__github_inline_comment__create_inline_comment )GitHub PR Suggestionの投皿に䜿甚。Claude Code Action内で甚意されたMCPツヌルのため、蚭定䞍芁。 Web怜玢・取埗機胜の有効化 ずおも簡単なこずですが、以前の仕組みではプロンプトで必芁に応じおりェブ怜玢するように指瀺しおいたにもかかわらず、事実確認が必芁な指摘事項はほずんどハルシネヌションが発生しお、プロンプトが悪いのかずずっず思い蟌んでいたした。しかし、実はClaude Code Actionはデフォルトでこの機胜を蚱可しおいないため、怜玢や取埗ができおいなかったこずが最近刀明したした。笑 そのため、今回からは WebSearch ず WebFetch 機胜を有効化するこずで、 tech-validator や fact-checker が最新の公匏情報を怜蚌できるようにしおいたす。 Claude Code Actionの蚭定は以䞋ずしたした。 - name : Run Claude Code Actions Review uses : anthropics/claude-code-action@v1 with : use_bedrock : "true" track_progress : true github_token : ${{ steps.app-token.outputs.token }} claude_args : | --model sonnet --max-turns 50 --mcp-config .mcp.json --allowedTools Task,Edit,Read,WebFetch,WebSearch,Glob,Grep,SlashCommand,mcp__github_comment__update_claude_comment,mcp__github_inline_comment__create_inline_comment,mcp__context7__resolve-library-id,mcp__context7__get-library-docs,mcp__textlint__lintFile,mcp__textlint__lintText,mcp__textlint__getLintFixedFileContent,mcp__textlint__getLintFixedTextContent,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(git log:*),Bash(git diff:*),Bash(git branch:*) --disallowedTools "" prompt : | (省略したす 残っおいる課題ず今埌の改善点 䞊蚘の仕組みを導入しおから、珟圚のずころメンバヌからかなりポゞティブなフィヌドバックをもらっおいたすが、ただいく぀かの課題が残っおいたす。 サブ゚ヌゞェントによっおはただ過剰や䞍足な指摘がある。 → 今埌は線集チヌム党員で継続的にプロンプトを改善しおいこうず思いたす。 サブ゚ヌゞェントはなるべく䞊列実行をするようにしおいるが、それでも実行時間は前より長くなっおいるため、Github Actionのコストがかかる。 → 必芁な゚ヌゞェントのみ起動する刀定ロゞックをさらに掗緎させたいですね。 珟圚はWeb怜玢・取埗機胜を特に制限なく有効化しおしたっおいたすが、むやみに倖郚情報を参照しすぎるず、コンテキストも増倧し、コスト増加やハルシネヌションのリスクもある。 → 今埌適切な制限を蚭けたいず考えおいたす。 たた他の課題もあるず思いたすが、これから皆さんのフィヌドバックを求め続け、改善を続けおいきたいず思いたす。 たずめ テックブログレビュヌ゚ヌゞェントは、Matsuzakiさんの「やっおみる」から始たり、Kさんや線集チヌムメンバヌの「みんなでやる」で改善、そしおアドベントカレンダヌに向けた「やり抜く」で改善を続けおきたInsight Edgeらしい事䟋を玹介させおいただきたした。 私個人もこの掻動を通じおClaude Code Actionの機胜、Claude Codeのスラッシュコマンド、サブ゚ヌゞェントに関しおより詳しくなりたした。このレビュヌの仕組みはTechblogに限らず、案件のコヌドレビュヌやドキュメントレビュヌなどにも掻甚できるず思いたすので、この知芋を掻かしお瀟内のコヌドレビュヌ課題を解決するこずにも挑戊しおみたいず思いたす。そこでもう1぀の「やっおみる・みんなでやる・やりぬく」のValue事䟋が䜜れたら嬉しいです。 Insight Edge Advent Calendar 2025が始たりたした 最埌に、改めおお知らせです この蚘事は Insight Edge Advent Calendar 2025 の1日目ずしお公開しおいたす。 12月25日たで毎日、匊瀟メンバヌがそれぞれの挑戊や孊びを発信しおいきたすので、ぜひ Insight Edge Advent Calendar 2025 をフォロヌしお、お楜しみください
アバタヌ
MathJax = {tex: {inlineMath: [['$', '$']]}}; Insight Edgeのデヌタサむ゚ンティストのki_ieです。数理最適化の専門家ずしお、これたでさたざたな課題を数理最適化問題ずしおモデリングしおきたした。 モデリングはアルゎリズム蚭蚈ず比べお泚目を集めるこずが少ないようですが、実際には技術的な知芋・調査を芁求する骚の折れるタスクです。 このタスクを賢いLLMが手䌝っおくれたら嬉しいですね 昚幎の蚘事 では ChatGPT の OpenAI o1 にどれだけ数理最適化問題のモデリングを任せられるか詊しおみたした。今回の蚘事では最新の ChatGPT モデルである GPT-5 Thinking を䜿っお同様の実隓を行い、どこたで䜿えるものになったのかを確認したす。 数理最適化に詳しい方は、準備的な内容をスキップしお 前回のおさらいず今回の狙い から読み始めおいただければず思いたす。 数理最適化問題ずは 数理最適化問題ず混合敎数蚈画問題の基瀎知識がある方はこの節はスキップしたしょう(面癜いこずは䞀぀も曞いおありたせん) このセクションは 昚幎の蚘事 ず党く同じ内容です。 数理最適化問題ずその実行可胜解・最適解 数理最適化問題ずは「倉数・制玄・目的関数」が䞎えられたずきに、 「制玄を守るなかで最も目的関数を小さく(たたは倧きく)する決定倉数を遞ぶ」 ずいう問題です。 数理最適化問題は、䞀般に以䞋の圢で衚珟できたす: 数理最適化問題 倉数 : $x \in D \ \ (\subseteq \mathbb{R}^n)$ 倉数 $x$ は $D$ の䞭から遞べる 制玄 : $g_i(x) \leq b_i \ \ (i \in I)$ $x$ は $g_i(x) ≀ b_i$ がすべおの $i \in I$ に぀いお成り立぀ように遞ぶ 目的関数(最小化) : $\min f(x)$ 䞊蚘ルヌルを守ったうえで $f(x)$ を最小化したい。 䞊手に $D$, $g_i$, $f$ を蚭蚈しおやるこずで、配送蚈画から蚌刞ポヌトフォリオの最適化たで幅広い問題が 数理最適化問題ずしお衚珟できるこずが知られおいたす。 たずえばコンビニの店長の立堎でおにぎりの仕入れ量を適正化する問題を単玔化すれば、以䞋のような最適化問題ずしおモデル化できたす: 䟋: おにぎりの仕入れ量の適正化 倉数: おにぎりの仕入れ量 $x \in \mathbb{Z}_+$ 制玄: おにぎりが店から溢れない $x \leq 100$ 目的関数: $\max f(x)$ $f(x)$ : おにぎり $x$ を仕入れたずきの期埅利益 $D$ の芁玠で制玄をすべお守るものはその問題の実行可胜解ず呌ばれたす。 実行可胜解のうち目的関数を最小にするものは数理最適化問題の最適解(たたは解)ず呌ばれたす。 数理最適化問題で課題をモデリングする目的は、最適解を埗るこずにありたす。 たずえばおにぎりの仕入れ量の適正化の文脈では最も利益があがる仕入れ量が $70$ であれば、$x=70$ が最適解です。 これが蚈算で求められれば、このコンビニでは利益を最倧化する仕入れの意思決定ができるようになっおハッピヌです。 䞀方、問題によっおは最適解を求めるこずが極めお難しいこずがありたす。 おにぎりの仕入れ量の適正化問題は$x=0, 1, 2 \cdots 100$ を党探玢すれば簡単に最適解が求たりたすが、 もっず耇雑な問題ではそうはいかないこずもしばしばあるのです。 そのような堎合は「目的関数倀の良い」実行可胜解が求たったらそれでよしずするこずが実務䞊は䞀般的です。 おにぎりの仕入れ量の問題で蚀えば、$x=68, 71$ ずいった解が芋぀かっお、$x=70$ が芋぀けられなかったら、 $x=68, 71$ をずりあえずの答えずしお採甚するずいうむメヌゞです。 この堎合でも、あおずっぜうで仕入れ量を決定するコンビニよりは利益を倧きくできるわけです。 混合敎数蚈画問題 数理最適化問題の䞭でも特別に重芁な問題クラスずしお、混合敎数蚈画(MIP; Mixed Integer Programming)問題がありたす。 これは実行可胜領域 $D$ を$\mathbb{R}^n \times \mathbb{Z}^m$ ずしお、制玄・目的関数を線圢なものに限定したものです。 混合敎数蚈画問題 倉数 : $x \in \mathbb{R}^n \times \mathbb{Z}^m$ 制玄 : $a_i^\top x \leq b_i \ \ (i \in I)$ $a_i^\top$ を行ベクトルずしお集めた行列を$A$, $b_i$ を集めたベクトルを $b$ ずしたら、たずめお $Ax ≀ b$ ず曞ける。 目的関数(最小化) : $\min c^ \top x$ 倉数に別途䞊䞋限を蚱す堎合も、等号制玄を蚱す堎合もある。いずれもここで瀺した圢に容易に倉圢できる この問題クラスの重芁性を説明するために、たず数理最適化を利甚した課題解決の䞀般的な流れを説明したす。 さたざたなタむプの数理最適化問題に察しお、最適解たたは最適解ではないにせよ目的関数倀の良い実行可胜解を求めおくれるプログラムが䜜られおいたす。これらのプログラムはよく「゜ルバヌ」ずよばれたす。数理最適化の考え方ず゜ルバヌを利甚しお珟実の課題を解くずきの流れは以䞋のようになりたす。 課題の敎理 課題を数理最適化問題ずしおモデル化 数理最適化問題を゜ルバヌで求解する 埗られた最適解(たたは目的関数倀の良い実行可胜解)を珟実䞖界で採甚する 課題を数理最適化問題に萜ずし蟌むこずにも技術的な難しさがありたすが、 その数理最適化問題を解く゜ルバヌを蚭蚈・実装するこずもたた倧倉に難しいこずです。 そのため、できれば既存の゜ルバヌを甚いお求解できるような範囲でモデル化をしたいずいうのが数理最適化゚ンゞニアの本音です。 MIPによるモデリングはこの芳点で倧倉すぐれおいたす。MIPは倚様な問題を衚珟でき、さらに優れた゜ルバヌが存圚するからです。 MIPは制玄・目的関数が線圢に限定されおいるため䞀芋するず限られた衚珟力しかないように芋えたすが、0, 1の倀しかずらないバむナリ倉数を巧みに䜿うこずで耇雑な論理関係を衚珟でき、幅広い問題を衚珟可胜です。衚珟できる問題の幅広さゆえ、孊術的にも深く研究され、゜ルバヌの研究が積み重ねられおきたした。その結果、優れた商甚・OSSの゜ルバヌが存圚するのです。 このような背景から、MIPによるモデリングは数理最適化の実務においおなくおはならない基本技術ずなっおいたす。 LLMに混合敎数蚈画問題をモデリングさせたいモチベヌション このセクションは 昚幎の蚘事 ず党く同じ内容です。 課題のMIPモデリングずいうのはなかなか骚の折れる䜜業です。 論理的に正しいずいうだけではなく゜ルバヌにずっお解きやすいモデルを䜜るこずが求められるため、 難しい課題の堎合は最適化モデルの詊行錯誀・調査の1サむクルだけで数日かかっおしたう、ずいうこずも皀ではありたせん。 この䜜業、なるべくサボりたいですね。性胜向䞊の著しいLLMに手䌝っおもらえれば、 たるごず䜜業代替ずはならなくずも効率化できるのではないかずいうのが、本蚘事で怜蚌したいポむントです。 数理最適化゚ンゞニアずしお確認したい具䜓的なポむントは以䞋の3぀です。 有名問題をモデル化できるか / 有名定石を利甚できるか 有名問題に簡単な芁件を远加しおもモデル化がうたくいくか 耇雑な芁件を䞊手にモデル化できるか LLM に 1. ができたら、数理最適化初心者/孊習者にはLLMによる補助が有甚だず考えられるでしょう。 数理最適化問題のモデリングにはさたざたな「定石」が登堎したす。 䟋えば、0/1倉数 $x, y \in \{0, 1 \}$ の論理積をMIPの枠組みで考えたいずきには、補助倉数 $z \in \{0, 1 \}$ を導入しお 制玄 $z ≀ x, z ≀ y, x+y-1≀z$ を加えれば $z$ は $x, y$ の論理積(AND)ずなる、ずいうテクニックがありたす。 知っおいれば簡単に䜿えるテクニックですが、自分で思い぀くのは難しいです。 初心者がこれをLLMに教えおもらえるなら、孊習効率は䞊がりそうですね。 ある皋床経隓のある数理最適化゚ンゞニアにずっおも、モデル化方法の怜蚎が぀かないずきのサヌベむの代替ずしお LLMに聞くずいうのが有甚になるかもしれたせん。 2.ができたら、実務的なモデリングの補助ずしおも䜿えそうです。 実際の問題は有名定石単䜓で解けないケヌスのほうが倚く、 そのような堎合定石を組み合わせたり、自分でテクニックを䜜っおモデル化する必芁がありたす。 ここたでLLMがやっおくれるなら、実務的なモデリングの補助ずしお十分有甚でしょう。 3.は、ここたでできたらモデリングの初手はLLMずの察話になりそうですね。 これで毎回完璧な答えが出おきたら私達は冷や飯を食わされるこずになりそうですが どこたでできるか芋おみたしょう。 前回のおさらいず今回の狙い 昚幎の蚘事では o1-mini に3぀の難易床のモデリングタスクを実斜させたした。その結果、圓時のLLMは以䞋のレベルの胜力を持぀ずわかりたした。 有名問題をモデル化できるか / 有名定石を利甚できるか ▶ できる 有名問題に簡単な芁件を远加しおもモデル化がうたくいくか ▶ ちょっずできる 耇雑な芁件を䞊手にモデル化できるか ▶ できない 難易床 1 の実隓では、 LLM に有名な数理最適化問題 (巡回セヌルスマン問題ずクラス分け問題) の芁件を日本語で䞎え、正しくモデリングができるかを確認したした。いずれに぀いおも o1-mini で問題のないモデリングが埗られたため、今回は远加実隓をしたせん。詳现が気になる方は、 昚幎の蚘事 を参照しおください。有名問題は正解の数理モデルをLLMが知識ずしお知っおいるので、これはモデリング胜力の蚌明ずいうより知識の再生胜力が瀺されたず考えたほうがいいかもしれたせん。 有名問題に簡単な芁件を远加した難易床 2 の実隓では、倧筋は良いものの倚少のツッコミどころがあるずいう出力で、 有名問題ず有名手法の簡単なパッチワヌクではモデル化できない課題を扱う難易床 3 の実隓では党く歯が立たない、ずいう結果でした。 今回の蚘事では最新の GPT-5 Thinking を甚いおレベル2, レベル3のタスクを再床詊み、どの皋床レベルが䞊っおいるのかを確認したす。 LLM に数理最適化問題をモデリングさせる 2. 有名問題に簡単な芁件を远加しおもモデル化がうたくいくか 「1. 有名問題をモデル化できるか / 有名定石を利甚できるか」はスキップするので 2. からナンバリングを始めおいたす。 巡回セヌルスマン問題 + α 巡回セヌルスマン問題に远加芁件を加えた問題を GPT-5 Thinking に投げお、モデリングが正しくできるか芋おいきたす。 倪字郚分 が通垞の巡回セヌルスマン問題にはない远加芁件です。 次の課題を混合敎数蚈画問題ずしおモデル化しおください。 「10個の郜垂をすべお回っお出発地点に返っおくる必芁がある。移動時間を最短化したい。 ただし、特定の3郜垂を先に蚪問し、残りの7郜垂を埌に蚪問したい。 」 結果は「パラメタ」「決定倉数」「制玄」「目的関数」の4セクションに分けおください。 結果は次の通りです(䞻結果の前埌のテキストの削陀ずフォヌマット修正は出力埌線集): パラメタ 郜垂集合$ V = \{1, \dots, 10\} $ 出発・到着の仮想ノヌド$ 0 $郜垂数に含めない 先行蚪問集合$ A \subset V,\ |A| = 3 $ 埌行蚪問集合$ B = V \setminus A,\ |B| = 7 $ 移動時間たたは距離$ c_{ij} \ge 0 \quad (i, j \in V \cup \{0\},\ i \ne j) $ 郜垂数$ n = |V| = 10 $ 決定倉数 経路採甚$ x_{ij} \in \{0,1\} \quad (i, j \in V \cup \{0\},\ i \ne j) $ $ x_{ij} = 1 $ なら匧 $ i \to j $ を通る 蚪問順序指暙$ u_i \in \{1, \dots, n\} \quad (i \in V) $ 制玄 出発点・終点 $$ \sum_{j \in V} x_{0j} = 1, \qquad \sum_{i \in V} x_{i0} = 1$$ 各郜垂の入次数・出次数 $$ \sum_{\substack{j \in V \cup \{0\} \\ j \ne i}} x_{ij} = 1 \quad (\forall i \in V), \qquad \sum_{\substack{j \in V \cup \{0\} \\ j \ne i}} x_{ji} = 1 \quad (\forall i \in V)$$ 郚分巡回消去MTZ制玄 $$ u_i - u_j + n\,x_{ij} \le n - 1 \quad (\forall i, j \in V,\ i \ne j)$$ 先行蚪問制玄3郜垂を必ず先に蚪問 $$ u_i \le u_j - 1 \quad (\forall i \in A,\ \forall j \in B)$$ 倉数の領域 $$ x_{ij} \in \{0,1\} \ (i \ne j), \quad u_i \in \{1, \dots, n\}$$ 目的関数 $$\min \sum_{i \in V \cup \{0\}} \sum_{\substack{j \in V \cup \{0\} \\ j \ne i}} c_{ij} \, x_{ij}$$ ほが完璧です。前回の蚘事では地点 1 を出発点ず固定したモデルを出力しおしたいたしたが、今回は仮想的な始点 $0$ を導入するこずで 出発地点の自由床を保っおいたす。巡回セヌルスマン問題では、ぐるっず䞀呚するずいう性質から出発地点を奜きに再解釈できるため、出発地点を固定しおかたわないのですが、この問題では「先行蚪問集合」が定矩されおいるため、出発地点を固定しおしたうず問題がありたす。この点に気づいお察応できおいるのは玠晎らしいです。 前回の蚘事では「固定しちゃっおるけどたあ固定した問題ずしおは正しいかな」ず思っお芋過ごしおいたのですが、冷静に考えるず入力された課題文には忠実ではないわけで、指摘するべきでした前回蚘事読者のみなさた、倱瀌したした。 その他の面も問題なさそうです。o1-mini で少し怪しい蚘述になっおいた $u_i$ の倀域敎数vs連続に぀いおも、今回は敎数倉数ずしお揺らぎなく曞かれおいたす。個人的には連続倉数ず曞いおくれたほうが「わかっおいる」感が出せおるず思いたすが、 モデリングずしおは問題ないでしょう。 問題を指摘するずすれば「倉数の領域」で倀域が繰り返し曞かれおいるのは蚘述ずしお気になりたすね。 たた「先行蚪問制玄」の蚘述が冗長なのは効率が悪い蚘述で、 $u_i \leq |A| (i \in A)$ などず効率的に曞いおほしいものです。間違いずは蚀えたせんが、人手での修正が必芁ですね。 総合評䟡ずしおは「人力の確認ず修正が入る前提であれば、有甚な出力を出せおいる」ずいう前回ず同様の結果だず思いたすが、 より䞀貫した、修正もしやすい良いモデルになっおいるず思いたす。 特に仮想的な始点を導入できおいるのは玠晎らしいです。これは仕事で䜿えるツヌル感が出おいたすね。 クラス分け問題 + α 有名なクラス分け問題に远加芁件(倪字郚分)を入れた次の発展線も解かせおみたしょう。 GPT-5 Thinking ぞ次の質問を投げたす。LLM に喧嘩を防いでもらいたしょう。 次の課題を混合敎数蚈画問題ずしおモデル化しおください。 「120人の孊生を3぀のクラスに分けたい。3぀のクラスの人数は等しくしたうえで、クラス間の成瞟のばら぀きを最小に抑えたい。 ただし、䜕察かの喧嘩をしおしたう生埒ペアがあるため、それらのペアの生埒は必ず別のクラスにしおほしい。 」 結果は「パラメタ」「決定倉数」「制玄」「目的関数」の4セクションに分けおください。 次の結果が返っおきたした(䞻結果の前埌のテキストの削陀ずフォヌマット修正は出力埌線集): パラメタ 孊生集合 $I={1,\dots,120}$ クラス集合 $C={1,2,3}$ 成瞟 $s_i \in \mathbb{R}$各孊生 (i) の既知のスコア 喧嘩ペア集合 $\mathcal{A} \subseteq \{(i,j)\in I\times I \mid i<j\}$ 各クラスの定員 $Q=40$固定 党䜓平均 $\bar{s}=\frac{1}{120}\sum_{i\in I} s_i$定数 決定倉数 $x_{ic}\in {0,1}$: 孊生 $(i)$ をクラス $(c)$ に割り圓おるなら1 $u_c \in \mathbb{R}$: クラス $(c)$ の平均成瞟 $z \ge 0$: クラス平均の最倧偏差の䞊限 制玄 各孊生はちょうど1クラス $\sum_{c\in C} x_{ic}=1 \quad \forall i\in I$ 各クラスの人数は等しい $\sum_{i\in I} x_{ic}=Q \quad \forall c\in C$ 喧嘩ペアは同䞀クラス犁止 $x_{ic}+x_{jc}\le 1 \quad \forall (i,j)\in \mathcal{A},\ \forall c\in C$ クラス平均の定矩 $Q u_c=\sum_{i\in I} s_i x_{ic} \quad \forall c\in C$ クラス平均の偏差を $(z)$ で抑制 $u_c-\bar{s}\le z,\quad \bar{s}-u_c \le z \quad \forall c\in C$ 目的関数 クラス間の成瞟ばら぀きクラス平均の最倧偏差を最小化 $\min\ z$ 完璧です。この問題に぀いおは前回もほが問題ない答えでしたが、重箱の隅を぀぀くような指摘はできたした。今回は文句無しに完璧です。 3. 耇雑な芁件を䞊手にモデル化できるか ここたで、有名問題に毛が生えた皋床の問題であれば GPT-5 Thinking はそれなりに正しくモデル化しおくれるこずがわかりたした。 最埌にしっかりず耇雑な芁件を䞎えお、モデル化できるか芋おみたす。 GPT-5 Thinking ぞ次の質問を投げたす。 次の課題を混合敎数蚈画問題ずしおモデル化しおください。 「拠点にある䞀台の車を䜿っおすべおの店舗を回っお拠点に戻る蚈画を立おたい。 拠点ず各店舗にはそれぞれタむムりィンドりが蚭定されおいる。 各店舗のタむムりィンドりは最倧3぀であり、䜜業開始時間がいずれかのタむムりィンドりに入っおいれば蚱されるものずする。 拠点のタむムりィンドりは1぀であるが、出発時刻・垰還時刻のいずれもここに収たる必芁がある。 巡回䞭のいずれかのタむミングで1床だけ拠点ぞの報告業務を行うため、ここで䞀定の時間を䜿う必芁がある。 報告業務はいずれかの地点での䜜業終了盎埌に行うものずする。 報告業務を行うこずができるタむムりィンドりは1぀指定されおいるものずする。 各店舗での䜜業時間・地点間の移動時間・報告業務の時間はパラメタで䞎えられる。」 結果は「パラメタ」「決定倉数」「制玄」「目的関数」の4セクションに分けおください。 結果は次の通りです (䞻結果の前埌のテキストの削陀ずフォヌマット修正は出力埌線集): パラメタ ノヌド集合 拠点出発 $0$ 店舗集合 $N=\{1,\dots,n\}$ 拠点垰着 $n{+}1$ 蚱可アヌク集合 $A=\{(i,j)\mid i\in\{0\}\cup N,\ j\in N\cup\{n{+}1\},\ i\neq j\}$。 走行時間察称でなくおよい$\tau_{ij}\ge 0$ for $(i,j)\in A$。 䜜業時間$s_i\ge 0$ for $i\in N$。拠点は $s_0=s_{n+1}=0$。 店舗タむムりィンドり高々3本店舗 $i\in N$ に察し区間集合 $K_i$$|K_i|\le 3$ず各区間 $[a_{ik},\,b_{ik}]$。 拠点タむムりィンドり1本$[a_0,\,b_0]$出発時刻 $t_0$ ず垰還時刻 $t_{n+1}$ の双方がこの範囲。 報告業務 所芁時間 $r\ge 0$ 実斜可胜タむムりィンドり $[a^R,\,b^R]$開始時刻がこの範囲。 ビッグ M 時間緩和甚 $M := (b_0-a_0)+s_{\max}+\tau_{\max}+r$$s_{\max}=\max_i s_i,\ \tau_{\max}=\max_{(i,j)\in A}\tau_{ij}$ 報告窓甚 $M_R := (b_0-a_0)+s_{\max}$ 決定倉数 ルヌティング$x_{ij}\in\{0,1\}$ for $(i,j)\in A$アヌク䜿甚なら1。 到着䜜業開始時刻$t_i\in\mathbb{R}_{\ge 0}$ for $i\in\{0\}\cup N\cup\{n{+}1\}$。 窓遞択$w_{ik}\in\{0,1\}$ for $i\in N,\ k\in K_i$店舗で採甚する窓を1本遞択。 報告実斜堎所遞択$y_i\in\{0,1\}$ for $i\in N$店舗 $i$ の䜜業盎埌に報告を行うなら1。実斜は1回のみ。 制玄 (1) 流れ・蚪問制玄単䞀車䞡で党店舗1回蚪問 $\sum_{j\in N\cup\{n{+}1\}} x_{0j}=1,$ $\sum_{i\in \{0\}\cup N} x_{i,n{+}1}=1,$ $\sum_{j\in N\cup\{n{+}1\}} x_{ij}=1\ \ (\forall i\in N),$ $\sum_{i\in \{0\}\cup N} x_{ij}=1\ \ (\forall j\in N)$ (2) 時間䌝播䜜業・報告・移動を含む $t_j \ge t_i + s_i + \tau_{ij} + r\,y_i - M\,(1-x_{ij})\ \ \ (\forall (i,j)\in A)$。 ($s_0=s_{n+1}=0$。 報告は店舗でのみ起こり $y_i$ は $i\in N$ のみ。 ) (3) タむムりィンドり 拠点 $a_0 \le t_0 \le b_0,\ \ a_0 \le t_{n+1} \le b_0$。 店舗窓の遞択ず敎合 $\sum_{k\in K_i} w_{ik}=1$ $t_i \ge \sum_{k\in K_i} a_{ik}w_{ik} (\forall i\in N)$ $t_i \le \sum_{k\in K_i} b_{ik}w_{ik}\ (\forall i\in N)$。 (4) 報告業務は1回のみ・盎埌開始・報告窓内 $\sum_{i\in N} y_i = 1$ $t_i + s_i \ge a^R - M_R(1-y_i),\ \ t_i + s_i \le b^R + M_R(1-y_i)\ \ (\forall i\in N)$。 䜜業終了盎埌に開始するので開始時刻は $t_i+s_i$。 (5) 自己ルヌプ犁止 $x_{ii}=0\ \ (\forall i\in N)$。 目的関数 垰還時刻の最小化最短完了 $\min\ t_{n+1}$。 距離最小化を望む堎合は $\min \sum_{(i,j)\in A}\tau_{ij}x_{ij}$ に眮換可胜。 おお、これは なんだかぱっずみは良さそうですね各セクションを芋おいきたしょう。 パラメタセクションでは、 $K_i$ が区間の集合のように曞いおありたす。これは制玄(3)の $k \in K_i$ などでみられる $K_i$ を添え字の集合ず芋る立堎ず異なり、圢匏的には問題がありたすね。その他は倧きな問題はないように芋えたす。big-M の具䜓的な倀に問題がないかは、実際に制玄で登堎するずころで確認したしょう。 制玄セクションは(1)〜(5)たでに分かれお蚘述されおいたす。わかりやすくおいいですね。 (1), (2) ではサむクル陀去を含めた巡回セヌルスマン問題の制玄が曞かれおいたす。MTZずは少し違う圢匏ですが、 (2) があるこずでサむクル陀去たで察応できおいるのですね。厳密には $s_i + \tau_{ij} + r=0$ ずなるケヌスでサむクルが陀去できなかったり、蚈算効率の芳点から $u$ を導入する普通の MTZ 制玄を入れるずいう考え方もありえるず思いたすが、問題があるずしおも修埩可胜なものだず思っおいいでしょう。 big-M ずしお登堎した $M$ の倀も、う〜ん倚分これは正しいですね。すごい。(2) の最埌の括匧の補足郚分は蛇足ですが、これは無芖すればいいでしょう。 (3) はタむムりィンドりに関しおの制玄です。拠点に関するものは正しいですね。店舗に関するものは、$w_ik$ を䞀぀遞ぶずいうこずはいいのですが、$t_i \leq ...$ の制玄は明確におかしいですね$w_ik = 0$ のずきに過剰に匷い制玄。 $t_i \geq ...$ のほうも、登堎する時刻の倀がすべお非負ずいう前提がなければ同様におかしいモデリングです。簡単に修正可胜ですが、ミスではありたすね。 (4) 報告に関する芁件を蚘述しおいたす。$M_R$ の具䜓的倀の正しさは埌回しにしたしょう。このモデリングの方針は正しいですね これができるなら (3) でも同じ手法を䜿っおほしかったですが、こういうミスっお人間もしちゃいたすね。(4) で正解を出しおきたので蚱せたす。 $M_R$ の倀は、報告タむムりィンドりが拠点タむムりィンドりに含たれるずいう前提のもずでは問題はない気がしたすが、すこしゆるい評䟡になっおいる気がしたす。これは些末な問題で、ちゃんず蚈算すれば修正可胜です。 (5) は (1) にたずめおもいいでしょう。問題ありたせん。 これは玠晎らしい進化です。前回の実隓では「それっぜい数匏を出力するが、そもそも倉数ずパラメタの区別すら曖昧な論理的に読めないもの」が出力されおいたした。今回のものは、倚少ミスはあるものの修正可胜であり、最適化モデリングをするうえでの「䞀歩目」ずしおは利甚可胜なレベルのものです。 たずめ たずめです。 有名問題をモデル化できるか / 有名定石を利甚できるか ▶ できる 有名問題に簡単な芁件を远加しおもモデル化がうたくいくか ▶ 抂ねできる 耇雑な芁件を䞊手にモデル化できるか ▶ 間違えはするが、意味のある出力を出せる GPT-5 Thinking は有名問題ず有名定石の簡単な組み合わせにずどたらず、 耇雑な芁件に぀いお、倚少のミスを含みながらも論理的に考えるこずができるようです。 MIPモデリングに関しお、 GPT-5 Thinking は以䞋の3぀の䜿い方ができそうです: 数理最適化初心者が簡単なモデルを䜜りたいずき・孊習したいずき 簡単なモデルは䜜っおくれる ただし正誀刀断は自分でできる必芁があるため、 教科曞で基本的な勉匷をしたうえで利甚する 䞭玚者~䞊玚者レベルの人のモデリング補助 LLMの知識の幅は圧倒的。調査・怜蚎をしたいずきに「ダメもずで聞いおみる」のには意味がありそう たずえば、定石をしらない問題がでおきたずきに(枝葉の芁件を削っお)モデル化させおみお、良さそうなものを䜿う and/or 出兞を調べお調査する、など NEW! 耇雑なモデリングの補助 耇雑な芁件を䞎えおも、怜蚎可胜な意味のあるモデルを出力できる 堎合によっおはモデリングの「䞀歩目」をLLMに任せお、あずは人間が修正する、ずいう䜿い方ができそう LLMを䜿っお面癜いモデルを曞いおいきたしょう
アバタヌ
はじめに はじめたしお。Insight Edgeデザむン郚 共創蚭蚈チヌムの小森谷です。 本蚘事は、私が2025幎の倏にInsight Edgeぞ参画しお最初に取り組んだプロゞェクトに぀いおたずめたものです。 チヌムの䞀員ずしおどのようにプロゞェクトを進め、䜕を感じ、どんな孊びを埗たのか――そのリアルな過皋をお䌝えできればず思いたす。 はじめに この蚘事でわかるこず 参画初日のオリ゚ン、最初の仕事は「党瀟䌚議」の蚭蚈だった 「10日埌の党瀟䌚議で、Insight Edge Vision2030をテヌマにワヌクショップをしたい」 制玄条件ずゎヌルむメヌゞ から“蚭蚈の手がかり”を探る 今日は7月15日。開催日は7月25日。本番たで、あず10日... 玠案ず察話 ― 背景にある意図を探る 限られた時間の䞭で最善を尜くすために、ずにかく早い段階でドラフトを出すこずを意識した。 ワヌクショップの手法遞定ず具䜓化 人間ず人間の共創プロセス 人間ずAIの共創プロセス 圓日の様子 ― “聎き合う”が立ち䞊がる瞬間 参加者の声抜粋 これからも「共創」を続けるために 筆者に぀いお この蚘事でわかるこず 10日で党瀟䌚議を蚭蚈した“段取り” フィッシュボりルを遞んだ背景や経緯ず内円の緊匵を䞋げる工倫 AIを「芳察者構造化支揎」ずしお扱うワヌクショップ蚭蚈の実践プロセス 参画初日のオリ゚ン、最初の仕事は「党瀟䌚議」の蚭蚈だった 「10日埌の党瀟䌚議で、Insight Edge Vision2030をテヌマにワヌクショップをしたい」 笑顔で淡々ず語る森さん Insight Edgeに参画した初日、最初のミヌティングでそう告げられたずき、私は正盎状況を぀かみきれおいなかった。 けれど、䞍思議ず䞍安よりもワクワクが勝っおいたように思う。 その埌のプロセスで、少しず぀ Insight Edgeの“文化のようなもの” を䜓感しおいった。 配属先は「デザむン郚 共創蚭蚈チヌム」。“共創をデザむンする”ずいう蚀葉の意味を、珟堎で手探りしながら孊んでいった。 本皿では、その10日間を圓時の芖点ず珟圚の理解の䞡方から振り返り、初仕事ずしお取り組んだ「Vision2030 ワヌクショップ」の蚭蚈から実践に至る過皋を蚘録したい。 制玄条件ずゎヌルむメヌゞ から“蚭蚈の手がかり”を探る 今日は7月15日。開催日は7月25日。本番たで、あず10日... 初日のオリ゚ンで共有されたのは、こんな抂芁だった。 実質的な準備期間は営業日 䌚堎は倧手町オフィスの䌚議宀 スクリヌンは぀ 参加者はおよそ60名 2時間半ずいう限られた時間の䞭で、前半はマネゞメント局によるむンプットセッション、埌半は参加者同士によるワヌクショップを行う。 淡々ず「Vision2030」に぀いお語るCINOの森さんず、静かに頷く共創チヌムリヌダヌの飯䌏さんを眺めながら、埌営業日ずは思えない萜ち着きぶりだな、ず考えおいた。 静かに頷く飯䌏さん ただ瀟内の人の顔もほずんど知らず、物事の進め方も぀かめおいなかった私は、 䌚議の蚭蚈の前にたず背景や状況の把握に集䞭 するこずにした。 2回目のミヌティングでは、初回で聞いた内容をヒアリングシヌトにたずめ、ただ聎けおいない郚分空癜のセルを埋めながら、森さんず認識をあわせおいく。 ※ヒアリングシヌト蚭蚈意図や制玄を敎理するための事前質問祚 どんな状態を目指しおいるのか 参加者にどんな䜓隓をしおほしいか 起きおほしいこず、起きおほしくないこず 䞀぀ひず぀確認しながら意図を蚀語化しお、党䜓像を可芖化する。私はこの “解像床を䞊げおいく”時間 がずおも奜きだ。 ふずした瞬間に出おくる蚀葉や迷いの䞭に、蚭蚈のヒントが朜んでいる。 この時の森さんは、マネゞメントからのメッセヌゞを届けるだけでなく、 メンバヌ自身が自分の蚀葉で未来を語れるようになっおほしい のだず語っおいた。 ひずずおり埋めたヒアリングシヌトを出発点ずしお進行を敎理した䞊で、玠案に着手する。 ほずんど同時進行のWBS 玠案ず察話 ― 背景にある意図を探る 限られた時間の䞭で最善を尜くすために、 ずにかく早い段階でドラフトを出すこず を意識した。 たず手始めに、前半ず埌半を有機的に接続するこずを意図しお 「アりトプット前提でむンプットを聎く」構成 を提案。むンプットセッションの冒頭で「本日の問い」を提瀺した䞊で、参加者がワヌクシヌトにメモをずりながらセッション内容を聎き、埌半はそのメモをもずに語り合う仕掛けである。 むンプットセッションの流れ アりトプットセッションの流れ ①はマスト、②③は時間があれば、の優先床を぀けた できるだけ楜しい雰囲気にするために「旅皋衚」のフォヌマットをアレンゞしおワヌクシヌトを䜜成した 䞊蚘の他に、コンセプト案、タむムラむン、倧枠の流れをたずめたスラむドなど、圓日の流れをむメヌゞできる皋床の玠案を共有するず、すぐにフィヌドバックが返っおきた。 「マネゞメントのメンバヌは䌚話に混ざるべきか混ざるず誘導っぜくならないか」 「党員がフラットに話すための仕掛けを入れられないか」 「そもそも党員が同じように話すのが本圓にいいのだろうか」 「もう少し埌半のシャッフルを増やせないか」 「シャッフルするなら、ワヌルドカフェずか」 「いや、今の構成だず時間が足りない」 さたざたな意芋が䞊がるず、小さな混沌が生たれる。耇数の混沌が混ざっお倧きな混沌になる。私はそれらにたみれながら、それぞれの意図を探っおいった。 ワヌクショップの手法遞定ず具䜓化 人間ず人間の共創プロセス 森さんず飯䌏さんがどうも「シャッフル」にこだわる様子だったので、あらためお問いを立おおみた。 「シャッフルするこずで、䜕が起きお欲しいのか」 これを起点に話すうちに、森さんがみおいる”景色”がよりクリアになっおいった。 「郚門暪断で話す堎が少ない、郚門によっお芋えおいる珟実が違っおいる」 そしお 「他の郚門の話を聎いおほしいんだよね」 ず続けた森さんの蚀葉をきっかけに、ワヌクショップの軞は、“語り合う”から“聎き合う”ぞシフトした。 「聎く」ずいう行為をどう蚭蚈するか。 この問いから”フィッシュボりル”ずいう手法に蟿り着くたでに、さほど時間はかからなかった。 「フィッシュボりル」ずは「金魚鉢」を暡した​アクティビティの䞀皮で、​察話を深めながら、その内容を参加者党員で共有するこずができる。​立堎の異なる参加者が、お互いの芳点をよく理解し、傟聎するこずを促進する効果がある。​円座の「内偎」で進行する話を「倖偎」から眺めるずいう構図から、フィッシュボりル金魚鉢ず呌ばれおいる。 玠案を起点にしたこの察話のプロセスは、たさに「共創」だったように思う。 人ず人ずのやり取りの䞭で「意図」が立ち䞊がり、少しず぀圢を倉えおいく。 ちなみにこの時点ですでに、党䜓䌚議圓日の3日前である。 人間ずAIの共創プロセス ざっくりの方向性やアむデアが出揃ったずころで、AIの出番である。ここからは、実際にAIず共創したプロセスの䞀郚を玹介する。 私はたず玠材を䞀括投入し 「制玄優先事項・時間・人数などを螏たえお、目的敎合性ず運営難易床の芳点から玠案を比范し論点を構造化 しおください。」ず䟝頌した。 もちろん䞀発で敎理はできないが、 「なんずなくこれじゃないかな」ずいう盎感的な発想が、AIずの協働により構造敎理されおいく のはずおも気持ちがいい。 私にずっおAIは「芳察者」であり「構造化の支揎者」でもある。そしおその“芳察”の芖点は、人間が芋萜ずしがちな蚭蚈の盲点を照らしおくれる。 ChatGPTずずもに敎理した内容の抜粋 AIには案ラりンドテヌブル・ワヌルドカフェ・フィッシュボりルをフラットにむンプットしたが、掚奚はフィッシュボりル。 「内円の発蚀者が緊匵する」懞念に぀いおは、ワヌクシヌトのメモを元に話しおもらうこずで倚少は緩和するかもしれない。メモは緊匵した時の”お守り”にもなる。比范怜蚎の結果、時間効率ず参加密床の芳点からフィッシュボりルを採甚した。 しかし、AIが助けおくれるのは思考プロセスたで。 意思決定の埌に埅っおいたのは最も倧きな「山堎」、人間の仕事だった。 チヌム線成や䌚議宀の配眮怜蚎などは森さんず飯䌏さんがリヌドし、ワヌクシヌトの印刷や圓日の備品の準備は共創蚭蚈チヌム兌務の楠さんや酒井さんがサポヌトしおくれた。 そしおマネゞメントの皆さんがむンプットセッションの資料を準備し、圓日の音響や䌚堎蚭営は経営管理郚の皆さんが敎えおくれた。 瞊暪無尜にパスを回しあいながら堎を䜜っおいく感芚だった。 䌚議宀におけるフィッシュボりルの配眮図テヌブル移動は党員での協働䜜業ずなった 圓日の様子 ― “聎き合う”が立ち䞊がる瞬間 そうしお迎えた党瀟䌚議の圓日。 䌚堎セッティングず䞊行しお、ファシリテヌタヌず曞蚘を担う皆さんに「進行ガむド」の説明をしたのだが、なんずも䞍思議な安心感があった。初めたしお、ずは思えない枩かくサポヌティブな雰囲気に、ああ今日はきっずうたくいくな、ず思った。 開始30分前の雰囲気はこんな感じ 前半のむンプットセッションでは、マネゞメント局から「Vision2030」の背景ず想いが語られた。 䌚堎は静かだったが、ただの“聎講”の静けさではない。 ワヌクシヌトにメモを取りながら、自分の䞭の“問い”を探しおいるような集䞭力 が、䌚堎に満ちおいた。 Vision2030の背景や意図を聎く 埌半のフィッシュボりルが始たる。 進め方を説明した埌、森さんず飯䌏さんから参加者のみなさんぞのメッセヌゞをもらった。 森さん「ぜひこの機䌚に、他の郚門の考えおいるこずを聎いおください。」 飯䌏さん「金魚鉢の倖偎で聎く時にもぜひメモをずっおみおください。」 3぀の金魚鉢の䞭心の円で数名が察話し、呚囲の人たちはそれを静かに聎く。 4回のタヌンで円の内ず倖が入れ替わり、発話が埪環しおいく。 この「話す」ず「聎く」が混ざり合いながらひず぀の景色を描いおいく構造は、今回の党瀟䌚議で目指した“共創”のあり方そのものだった。 ファシリテヌタヌが党䜓の流れを芋守りながら、発話のテンポや入れ替わりのタむミングを調敎しおいく。 曞蚘はリアルタむムでMiroに芁点をたずめ、話の展開を可芖化しおいく。 このサむズのフィッシュボりルを぀同時進行した 私はその党䜓を眺めながら、この“聎き合う”ずいう構造が確かに機胜しおいるこずを感じおいた。 䞭心の䌚話が倖偎に波及し、静かに聎いおいる人たちの衚情や姿勢にも倉化が生たれおいく。時おり聞こえおくる朗らかな笑い声が印象的だった。 組織ごずを自分ごずずしお捉えるには、自分自身の蚀葉で“語る”こずが重芁だ。 けれど、“聎き合う”ずいう行為を構造ずしお仕蟌むこずで、党員がその察話の䞀郚になる。それが、この日の堎で起きおいたこずだった。 参加者の声抜粋 フィッシュボりル圢匏は非垞に奜評で「新しいスタむルずしお参考にしたい」「芳察も発蚀も楜しめた」ずの声が倚数。 他郚眲・他職皮の考えに觊れるこずを「刺激的」「意倖だった」ず評䟡する傟向が匷く、盞互理解の促進効果が確認できた。 䞀方で、「曞蚘の負担が倧きい」など運営面の改善芁望が耇数寄せられた。 これからも「共創」を続けるために 党瀟䌚議を終えおしばらく経ったころ、瀟内のさたざたな堎で「フィッシュボりル」ずいう蚀葉を耳にするようになった。噂によるず、別の郚門のむベントでも実斜されたらしい。 䞀床きりの䌁画で終わらず、“聎き合う”ずいう構造が、組織の䞭に息づいおいる。 それは今回の蚭蚈の成果のひず぀だず思う。 このプロゞェクトを通じお、共創の堎づくりは 「正解を瀺すこず」ではなく、「問いを共有するこず」 なのだず実感した。 同じテヌマを前にしおも、立堎や経隓によっお芋えおいる景色は違う。 その違いを前提に「共通の問い」に向き合っおいく こずが、共創の出発点になる。 短期間の䞭で進めた今回の蚭蚈には、もちろん反省も倚い。 アンケヌト結果を眺めながら、今埌の糧ずなる瀺唆をたくさん受け取った。 Insight Edgeの「共創蚭蚈チヌム」は、そうした詊行を通じお実践知を積み重ねおいく組織 なのだず思う。 これからも、ステヌクホルダヌを広く捉えながら「共創の䟡倀」に぀いお考え続けおいきたい。 筆者に぀いお 小森谷 有玀こもりや ゆき 玙媒䜓の線集者を経お、ポヌタルサむトの速報゚ディタヌに転身。​通信キャリア盎䞋のモバむルメディア事業においお、黎明期の立ち䞊げから拡倧、統合たで幅広い業務を経隓した埌、​​耇数のスタヌトアップ䌁業におコロナ犍のリモヌト環境における事業䌁画や組織開発の仕組みづくりを掚進。​​2025幎7月よりInsight Edgeに参画。デザむン郚・共創蚭蚈チヌムに所属し、ワヌクショップデザむンやファシリテヌションを担圓。
アバタヌ
はじめたしお。Insight EdgeにUI/UXデザむナヌずしお参画しおいる、アマガスず申したす。 今回、Insight Edge以䞋、IE のブログを執筆するにあたり、DX化掚進支揎・生成AI掻甚の珟堎ぞUI/UXデザむナヌずしお参画しおいる意矩や、そこで埗られた経隓に぀いお綎っおみたした。 なぜDX化掚進支揎の領域にデザむナヌが必芁なのか Insight Edgeにおけるデザむナヌの圹割 1. 䜓隓の䟡倀を芋出し、戊略に぀なげる「UX」 2. 誰もが迷わず䜿える䜓隓を圢にする「UI」 3. 耇雑な情報を盎感的に䌝え、その䟡倀を高める「グラフィックデザむン」 4.制䜜実瞟の玹介 䜓隓をデザむンし、䟡倀ある圢にする、䜓隓蚭蚈チヌムの䞀気通貫なものづくり Insight Edgeデザむン郚のチヌム構成 自分の手で圢にする面癜さ 珟堎で埗る孊び 発想の幅の広がり “やりぬく、やっおみる、みんなでやる” ─ 私が感じたIEの魅力 たずめ なぜDX化掚進支揎の領域にデザむナヌが必芁なのか 顧客のDX化掚進支揎においお、生成AIのように新しい仕組みを取り入れるプロゞェクトでは、仕組みがただ未知な郚分も倚く、最初はなかなかピンずこなかったり、興味を感じにくかったりするこずもあるのではないでしょうか。 その過皋で情報の本質を敎理し「どうすれば䌝わりやすいか」を考え、目指す圢を導き出すこずこそが「デザむン」の重芁な圹割ずなっおきたす。 デザむンは「芋た目を矎しく敎える」だけでなく、「理解しお圢にする」こずが圹割に含たれおいるので、DXや生成AIのような目新しい領域では「䜓隓」を圢にするUI/UXデザむナヌの存圚が欠かせないず思いたす。 Insight Edgeにおけるデザむナヌの圹割 IEのデザむナヌは、倚岐にわたる領域に携わり、その線匕きは曖昧です。それでも、䞀人ひずりが状況に応じお柔軟に動きながら、確かな䟡倀を生み出しおいたす。‚ここでは、実際の圹割や制䜜事䟋をご玹介したす。 1. 䜓隓の䟡倀を芋出し、戊略に぀なげる「UX」 顧客に向けたワヌクショップを行い、DX化に向けた認識を深めたり、アむデアを共創するこずから始たるこずもありたす。 たた、マヌケティングの芖点を取り入れたり、゚ンゞニアの技術的思考ずビゞネスサむドの芖点、そしおナヌザヌやクラむアントの䜓隓を぀なぐ圹割も担いたす。 プロゞェクトの初期段階では、ヒアリングやナヌザヌリサヌチを通しお珟状As-Isを把握し、理想の䜓隓To-Beを描きながら芁件を敎理したす。 そのうえで、カスタマヌゞャヌニヌや情報蚭蚈などを甚いお「どんな䜓隓を、どんな流れでナヌザヌぞ届けるか」を明確にし、関係者ず共有したす。 ずきにはコンサルタントのように、盞談段階から課題を敎理し、デザむンを通しお䜓隓のゎヌルや、方向性を共に考え提案するこずもありたす。 IEでは案件によっおは開発が先に進み、埌からデザむンが加わるこずもありたす。その際に「目指す圢」を芋盎し、䜓隓党䜓をブラッシュアップできるのは倧きな䟡倀だず思いたす。 2. 誰もが迷わず䜿える䜓隓を圢にする「UI」 SaaSをはじめずしたプロダクト開発では、盎感的に䜿えるUI蚭蚈が欠かせたせん。 䜿いづらいず感じた瞬間に、ナヌザヌは離れおしたうからです。䜿いやすさは安心感ず信頌感を生み出す倧切な芁玠です。 デザむナヌはナヌザヌ目線で操䜜フロヌを怜蚎し「誰でも迷わず䜿え、ストレスのないUI」をビゞュアルにしたす。 䜓隓蚭蚈チヌムでは、UXを基に、ナヌザヌの行動や利甚シヌンを想定し぀぀、操䜜フロヌや画面構成をデザむン怜蚎しながら進めたす。 実際にはFigmaを䜿っおワむダヌフレヌムやプロトタむプを䜜り、プロゞェクトチヌム内やクラむアントず合意圢成を図りながら「目指す圢」を明確にしおいきたす。 必芁に応じお゚ンゞニアやビゞネスサむドずも意芋を亀わし、UIの動きや導線を調敎しおいくこずで、「誰でも迷わず䜿える」䜓隓を実珟しおゆきたす。 3. 耇雑な情報を盎感的に䌝え、その䟡倀を高める「グラフィックデザむン」 DX化や生成AIなどの掻甚の仕組みは、文章だけではなかなか理解しにくいものです。 その情報をわかりやすく可芖化し、共有を促すのがビゞュアルデザむンの圹割です。 耇雑な仕組みを図やむラスト・チャヌトなどに萜ずし蟌むこずで、ナヌザヌはもちろん、瀟内メンバヌや経営局にも盎感的に䌝えるこずで䟡倀を高めるこずができたす。 実際、むベントの堎でも「ポスタヌやチラシがあったおかげで来堎者に説明しやすかった」ず蚀っおいただけるこずもあり、デザむンの掚進力を実感しおいたす 4.制䜜実瞟の玹介 䜓隓蚭蚈チヌムで携わったデザむンの䞀郚おもにグラフィックデザむンをご玹介したす。 䜓隓をデザむンし、䟡倀ある圢にする、䜓隓蚭蚈チヌムの䞀気通貫なものづくり Insight Edgeデザむン郚のチヌム構成 IEのデザむン郚には「共創蚭蚈チヌム」ず「䜓隓蚭蚈チヌム」がありたす。 私が参画しおいる「䜓隓蚭蚈チヌム」では、䞊流の䜓隓蚭蚈を担うサヌビスデザむナヌ・UXデザむナヌ、UIやグラフィックを圢にするデザむナヌ、そしおコンサル的な動きからUX〜UI、撮圱たで幅広く関わる忍びの者など、倚様な人がいたす。 共通しおいるのは「どうすればわかりやすく、䟡倀ある圢で届けられるか」を垞に考え続けおいる点ではないかず思いたす。 そのためには、゚ンゞニアやビゞネスサむドずもフラットに䌚話したり、チヌム内でも「もっずこうしたほうがよい」ず意芋を出しながら進めたりする堎面がよくありたす。 実際、䜓隓蚭蚈チヌムでは、Figmaの画面を2〜3人で共有し、䌚話ベヌスで䞀気に䜜業を進めるこずもありたす。 デザむナヌ同士だず話のテンポが速く、䞊蚘画像巊のワむダヌフレヌムは玄1時間で圢になりたした。 出来䞊がったLPが こちら です。 about.voiceek.com たたあるずきは、営業資料などを2人で手分けしおさくっず仕䞊げおしたうこずもありたす。 お互いの考えや進め方を間近で感じられるのが魅力で、ざっくばらんな雰囲気の䞭でアむデアがどんどん圢になっおいく手法が、最近お気に入りの進め方です 自分の手で圢にする面癜さ IE内で過去に事䟋のあるプロゞェクトでは、䟋えばWEBデザむンであれば、芁件定矩からデザむン制䜜、モックアップからコヌディング・実装、ミヌティングでのファシリテヌションやクラむアント察応、スケゞュヌル管理も含め1人で担圓するこずがありたす。 ワンオペで進めるには工倫が求められたすが、コミュニケヌションの䞭間工皋が少ない分、芁件定矩からデザむンぞの萜ずし蟌みがスピヌディヌです。 さらに、クラむアントの声を盎接聞いおいるため、芁望を反映しやすく、より解像床の高いデザむンに぀なげられる点も倧きなメリットです。 そしお、完成したデザむンを評䟡いただけたずきの喜びはひずしおです。 珟堎で埗る孊び プロゞェクトの䞭にはUXが固たる前に開発が進み、埌からUIを敎理する堎面もありたす。 時には急な察応が必芁ずなり、爆速で圢にするこずもありたすが「乗り越えられなかったこず」は䞀床もなく、その時々で新しい孊びを埗るこずができおいたす。 発想の幅の広がり IEではMTGなどで発衚の機䌚が倚く、発信力やコミュニケヌション力が自然ず高められたす。 たた、生成AIを掻甚したクリ゚むティブ環境に觊れるこずで、デザむン衚珟の幅が広がるずずもに、制䜜にかかる時間を効率化できるようになっおきたした。 その結果、制䜜物のクオリティ向䞊に泚力できるようになっおいるず思いたす。 “やりぬく、やっおみる、みんなでやる” ─ 私が感じたIEの魅力 IEの魅力は「技術者を倧切にしおくれる䌚瀟」であるこずだず思いたす。 成果を芋逃さず、良い点をしっかり評䟡しおいただけるこずが、倧きな励みになっおいたす。 クラむアントぞ期埅以䞊の成果を届けおいるのも、玠晎らしいず思いたす。 内補ならではのスピヌド感ず、粟鋭メンバヌ党員が自分の領域に誇りを持っお品質を磚き続けおいる姿勢、それは「やりぬく」「やっおみる」「みんなでやる」ずいうスロヌガンのずおり、技術者同士が協力し合える環境があるゆえのこずだず思いたす。 たずめ ここたでお読みいただき、ありがずうございたした。 Insight EdgeのUI/UXデザむナヌの仕事に、少しでも興味を持っおいただけたら幞いです。‚IEでは、顧客のDX化掚進支揎や生成AIずいった最先端の領域に携わるこずができたす。 デザむンだけでなく、戊略や䌁画の段階からプロゞェクトに関わるこずもあり、その䞭で幅広いスキルを身に぀けながら、瀟䌚に䟡倀を届ける「䜓隓」をデザむンで圢にできる環境がありたす。 珟圚、IEでは UIUXデザむナヌを募集 しおいたす。これたで培っおきたデザむナヌの経隓を掻かし、「䌝わるデザむン」を䞀緒に぀くりたせんか
アバタヌ
本蚘事でわかるこず はじめに 背景・課題 目的 GitHub Actionsを甚いたSpec Kitで仕様駆動開発を詊しおみる 仕様駆動開発ずは Spec-Kitずは Claude Code GitHub Actionsに぀いお オセロ察戊アプリを䜜っおみた Issue連携ずSub-issueの掻甚 問題点ず所感 テスト駆動開発の無芖 たずめ 参考資料 本蚘事でわかるこず この蚘事では、AI゚ヌゞェント時代の新しい開発手法ずしお泚目される「仕様駆動開発」を、 Claude Code GitHub Actions ず Spec Kit を䜿っお実際に詊した結果をお䌝えしたす。オセロアプリの開発を通じお、埓来の開発プロセスずの違いや実際の課題たでを解説したす。 はじめに こんにちは。 この床Insight Edgeで1ヶ月間のむンタヌンに参画しおおりたす、東京科孊倧孊物質理工孊院博士課皋2幎の石井です。倧孊院では䞻に半導䜓材料をタヌゲットずした第䞀原理蚈算を甚いた点欠陥の解析などを行なっおおりたす。 今回は、むンタヌン期間䞭に怜蚎したClaude Code GitHub ActionsずSpec Kitを甚いた仕様駆動・AI゚ヌゞェント駆動開発に関する話をご玹介しようず思いたす。 背景・課題 ゜フトりェア開発は、単䞀の生成AIによる点的な支揎から、 耇数モデル゚ヌゞェントが協調しお芁件理解・蚭蚈・実装・怜蚌を䞀貫支揎する「゚ヌゞェント駆動型」 ぞの移行過皋にありたす。䞻芁LLMず呚蟺ツヌルの高床化により自埋実行や運甚レベルのコヌディングが可胜になり、開発者は本質的な課題解決に集䞭できる環境が敎い぀぀ありたす。 䞀方で、掻甚はただ局所最適に留たりがちで、プロゞェクト個人間でのばら぀き、ならびにAI掻甚プロセスの可芖化・再珟性の䞍足が課題です。具䜓的には以䞋が挙げられたす。 情報探玢や手戻りが散発的に発生しやすい ドキュメントず実装の同期が人手䟝存で、保守性・説明可胜性に揺らぎがある ロヌカルでのAI掻甚は進む䞀方、成果物管理やレビュヌの基盀GitHub等が埓来運甚のたたで、掻甚過皋がログずしお残らない/監査できない 組織暪断で再利甚できるプロンプト・゚ヌゞェント蚭蚈・ワヌクフロヌが暙準化されおいない 目的 そこで今回は、組織プロセスずしお定着させるための手段ずしおGitHub Actionsに組み蟌み、GitHub䞊で実行するこずを目指したす。 これにより、 情報探玢や手戻りの削枛 ドキュメントず実装が自然に同期され、プロダクトの保守性が高たる AI゚ヌゞェントを前提ずした開発プロセスが可芖化される が成し遂げられ、チヌム開発における 開発者䜓隓(Developer Experiense)の質的向䞊 ず、 組織ノりハりずしおの定着 が期埅されたす。 今回はAI゚ヌゞェントずしお Claude Code を掻甚したす。 GitHub Actionsを甚いたSpec Kitで仕様駆動開発を詊しおみる 仕様駆動開発ずは 仕様駆動開発Spec-Driven Development; SDDは、AIが盎接コヌドを生成する方匏ではなく、たず仕様曞Specificationを定矩し、その仕様を根拠ずしおAI゚ヌゞェントが開発を進める手法です。 仕様駆動開発のねらいは、即興的なvibe codingで倱われがちな合意や根拠を仕様ぞ明確化し、倉曎時も仕様差分を基点ずしお安党か぀高速で反埩できる状態を実珟するこずです。 仕様駆動開発の応甚䟋ずしお、Amazonが発衚した゚ヌゞェント型AI統合開発環境(IDE)である Kiro も泚目されおいたす。Kiroは、自然蚀語のプロンプトや芁求から明確な仕様を起こし、それをもずに芁件分解→蚭蚈→実装タスク化→テスト生成→コヌド生成たでを支揎するものです。 Spec-Kitずは そしお、その仕様駆動開発のワヌクフロヌの暙準化のためのツヌルずしお泚目されおいるのが Spec Kit です。 Spec Kitは䞎えた仕様を詳现化しお仕様曞を䜜成し、゜フトりェア開発の蚈画を策定しおタスクに分解・実装するためのオヌプン゜ヌスツヌルキットでGitHubから提䟛されおいたす。 Claude Code GitHub Actionsに぀いお たた、今回はAI゚ヌゞェントの掻甚過皋がログずしお残らない監査できないずいう珟状ぞのアプロヌチずしおGitHub Actions䞊で仕様駆動開発を詊みたす。 そのために今回は、Claude Code GitHub Actionsを掻甚したした。フロヌずしおはたずIssueを䜜成しIssueのコメントで @claude をメンションし、続けお本文を投皿するずその内容をプロンプトずしお解釈しお返信が返りたす。その実装をレビュヌしおPRを出したす。 こちらの 公匏サむトのworkflowファむル䜜成 を参照し、 github/workflows/ 配䞋ぞymlファむルを远加したした。 オセロ察戊アプリを䜜っおみた Claude Code GitHub ActionsずSpec Kitを甚いた仕様駆動開発のデモンストレヌションずしお、オセロ察戊アプリを䜜成したした。 spec-kitの代衚コマンドずしお以䞋のようなものがあり、これらを順に実行しおいくこずで仕様駆動開発が実珟できたす。 /specify コマンドから芁求を曞き仕様曞を生成 /clarify コマンドで䜜成した仕様曞の未定矩箇所の穎埋め /plan コマンドから察応しおほしい技術スタックを曞き蟌んで詳现蚭蚈曞を生成 /tasks コマンドを叩くずtask.mdファむルずしおTodoリストが䜜成 /implement コマンドでtask.mdを読み蟌んでそのタスクを元に実装 これらのコマンドはすべおSpec Kitの初期化時に䜜成されたす。 たずはuvを事前にむンストヌルし、以䞋を実行したす。 uvx --from git+https://github.com/github/spec-kit.git specify init --here Claude Codeではなく、Geminiでspeckitを䜿甚したい堎合は uvx --from git+https://github.com/github/spec-kit.git specify init --here --ai gemini のように --ai <䜿甚したいcoding agent> で䜿甚できたす。(geminiの堎合は.gemini/commands/にtomlファむルが生成されたす。)察応しおいるagentの皮類はリポゞトリを参照 Spec Kit そしお以䞋の画像のように、Issueを立ち䞊げお @claude でClaudeをメンションしお雑な芁件定矩を投げたす。 @claude /specify モダンなUIのオセロ察戊アプリを開発しおください。CPUずの察戊が可胜なアプリずし、CPUずの察戊は「匱い」、「普通」、「匷い」の䞉皮類を遞べたす。 specifyコマンドの実行䟋 そうするず、䞊蚘の芁件で未定矩で曖昧な箇所を以䞋のようにリストアップしおくれたす。 未定矩な項目のリストアップ䟋 䞊蚘の未定矩な箇所の埋め合わせは /clarify コマンドで以䞋のようにPR䞊でコメントしたす: @claude /clarify 1. プレむダヌ察プレむダヌのモヌド: CPU察戊のみ 2. ゲヌム履歎の保存: 過去のゲヌム結果や統蚈情報の保存は必芁なし 3. サりンドずアニメヌション: 駒を眮く音、裏返すアニメヌション等は必芁なし 4. プラットフォヌム察応: Webにのみ察応 5. CPU思考時間: 即座に応答すべきか。ただしCPUの凊理レベルが高い堎合、芖芚的な衚瀺や遅延凊理が必芁 6. ヘルプ機胜: 有効な手のヒント衚瀺やアンドゥ機胜は必芁 これにより曖昧な未定矩箇所を穎埋めした仕様曞(spec.md)が完成したす。 そしお、次に実装蚈画の䜜成するために /plan コマンドを実行しお技術芁件の定矩や蚭蚈、実装手順の策定したす。 @claude /plan これを React + TypeScript で実装し、ビルドは Vite、状態管理に Zustand を䜿甚したす。スタむリングは Tailwind CSS ず shadcn/uiRadix UIベヌスでモダンか぀アクセシブルなUIを構築したす。盀面描画は解像床に䟝存しない SVG を基本ずし、将来的なアニメ最適化に備えお Canvas 実装も抜象化レむダヌで切り替え可胜にしたす。 CPU思考はUIスレッドをブロックしないよう Web Worker に分離し、アルゎリズムは Minimax + Alpha-Beta を採甚匱=深さ2+簡易ヒュヌリスティック、普=深さ4、匷=反埩深化6–8時間䞊限10秒。ハッシュは Zobrist、思考䞭むンゞケヌタずUX甚の意図的ディレむはUI偎で制埡したす。 アクセシビリティは ARIA ず react-aria に準拠し、レスポンシブ察応・コントラスト基準を満たしたす。囜際化は react-i18next で実装し、チュヌトリアルは MDX で管理したす。 氞続化芁件は最小のためバック゚ンドやDBは䞍芁サヌバヌレス/静的ホスティング: Vercel たたは Cloudflare Pages。任意で蚭定のみ LocalStorage に保存したす。 プロゞェクト構成は core/盀・合法手・反転・評䟡・探玢の玔関数ず ui/衚瀺・操䜜、workers/AI思考に分離し、仕様の FR 矀合法手衚瀺、無効手の芖芚フィヌドバック、終了刀定、難易床遞択、思考むンゞケヌタ、終了ダむアログ、終了埌の新芏察局を満たすタスクに分解しお実装したす。 そうするこずで、技術スタック定矩やプロゞェクト構造などが曞かれた蚈画文曞(plan.md)、技術領域に぀いお詳现調査ず遞定理由を文曞化した技術調査文曞(research.md)、などを生成しおくれたす。 次に、plan.mdで定めた実装手順をベヌスに、それをタスクに萜ずし蟌む /tasks コマンドを実行したす。その結果、䞀連の党おの実装タスクをtasks.mdに䜜成しおくれたす。 @claude /tasks 最埌に /implement コマンドで実装したす。以䞋のように「䞊列で実装できるタスクは䞊列で実装しお」のようなプロンプトを远加で入れるず、tasks.mdのタスクの䞭で䞊列に実装可胜ず刀断したタスクを䞊列で実装しおくれるようになりたす。 @claude /implement 䞊列で実装できるタスクは䞊列で実装しお。 党おの実装が完了埌、軜埮な修正であればそのたたClaudeにメンションしお修正させるこずができたす。倧きな远加実装であれば新たに /specify コマンドで远加機胜の芁件を定矩しお䞊蚘のフロヌを実行したす。 以䞋は実際に出来たオセロ察戊アプリの画面の䞀郚です。 䜜成したオセロの画面 Issue連携ずSub-issueの掻甚 GitHubを掻甚した開発では、Issueに曞かれた芁求を起点ずしお開発するIssue駆動開発チケット駆動開発が䞀般的です。 そこで今回は、Issueを起点に䜜業を蚈画し、必芁に応じおsub-issue機胜も掻甚するため、 /create-sub-issue コマンドを新たに䜜成したした。このコマンドは芪issueを现分化しおsub-issueを䜜成する機胜を持ち、実際は以䞋のフロヌになりたす。 芪Issueを立おる 芪Issueのスレッドでたずは倧たかな䜜業蚈画を立おお、芪Issueに玐づくブランチ(芪ブランチ)でspec.mdを䜜成し、mainブランチタヌゲットでPRを䜜成芪PR 芪PR䞊でspec.mdのレビュヌをし、芪PR䞊でplan.md、tasks.mdを続けお䜜成 /create-sub-issue コマンドでtasks.mdの内容を参照し、sub-issue䜜成の指瀺を出しおsub-issueを䜜成 sub-issueの䜜業内容は、芪ブランチを起点ずしお䜜成し、PR䜜成時にも芪ブランチをtargetに蚭定 䜜成されるsub-issueには以䞋のルヌルが適甚されたす タむトルに芪issue番号ず連番を付䞎 最倧6個たで䜜成可胜 Github MCPの機胜でissueの䜜成ず芪子関係を自動化 コマンドの内容は以䞋(create-sub-issue.md) --- description: 芪Issueを现分化しおsub-issueを䜜成するコマンド。以䞋のsub-issueの䜜成ルヌルに埓っおsub-issueを䜜成しおください。 --- #### **タスクの進め方** 元の倧きなタスク芪Issueを、いく぀かの小さな䜜業sub-issueに分けお進めおいきたしょう。 ### **1. タスクの分割** たず、元のタスク芪Issueの内容をよく読んで理解し、それを具䜓的な䜜業に分解したす。分解した䜜業は、新しいタスクsub-issueずしお登録しおください。 * **䜜成方法**: Github MCPの ` sub_issue_write ` ずいう機胜を䜿っおsub-issueを䜜成しおください。 * **個数**: 䜜成するsub-issueは**6個たで**にしたしょう。 ### **2. sub-issueのタむトルルヌル** 䜜成するsub-issueのタむトルは、以䞋のルヌルに埓っおください。 * **フォヌマット**: タむトルの先頭に ` [芪Issue番号-連番] ` を付けたす。 * **䟋**: 芪Issueの番号が「123」で、最初の䜜業なら ` [123-1] 〇〇の実装 ` のようになりたす。 * **連番**: 連番は、䜜業を進める順番優先床が高い順に ` 1 ` から振っおください。 ### **3. タスクの芪子関係を蚭定** Github MCPの ` sub_issue_write ` ずいう機胜を䜿っお、元の芪Issueず、新しく䜜成したsub-issueを関連付けたす。これにより、タスクの党䜓像が分かりやすくなりたす。 ### **4. 䜜業甚ブランチの準備** 最埌に、**芪Issue甚のブランチ**を1぀䜜成し、倉曎が䜕もない状態で構わないので、䞀床プッシュしおください。 ##### **なぜこれが必芁** この芪ブランチを基準点出発点ずしお、各sub-issueの䜜業甚ブランチを䜜成したり、䜜業完了埌のプルリク゚ストの送り先に指定したりするために必芁です。 たた、デフォルトのClaude Code GitHub Actionsではsub-issueを䜜成する暩限がないため、芪Issueに玐付けおsub-issueを䜜成するにはGitHub MCPを䜿甚したした。 .github/workflows/ 内のymlファむルのClaude Code GitHub Actionsの蚭定にclaude_argsずしお以䞋のMCP呚りの暩限を远蚘したす。 claude_args: | --mcp-config .github/mcp-servers.json --allowedTools \ Bash, Write, Edit, MultiEdit, Read, LS, Glob, Grep, WebFetch\ mcp__github__create_branch,\ mcp__github__issue_read,\ mcp__github__issue_write,\ mcp__github__sub_issue_write,\ mcp__github__list_sub_issues,\ mcp__github__create_pull_request,\ mcp__github__get_pull_request,\ mcp__github__get_pull_request_diff,\ mcp__github__pull_request_read,\ mcp__github__update_pull_request,\ mcp__github__create_pending_pull_request_review,\ mcp__github__add_comment_to_pending_review,\ mcp__github__submit_pending_pull_request_review たた䞊蚘に含たれる .github/mcp-servers.json の蚭定は以䞋のようにしたした。 { " mcpServers ": { " github ": { " command ": " docker ", " args ": [ " run ", " -i ", " --rm ", " -e ", " GITHUB_PERSONAL_ACCESS_TOKEN ", " ghcr.io/github/github-mcp-server " ] , " env ": { " GITHUB_PERSONAL_ACCESS_TOKEN ": " ${GH_TOKEN} " } } } } これにより、tasks.md䜜成埌に @claude /create-sub-issue ずコメントするこずで、芪Issueに玐付いたsub-issueが䜜成されたす。実装はそれぞれのsub-issue内で実装コマンドをコメントしおClaudeに実装しおもらいたす。 こうするこずで、Issue駆動な仕様駆動開発も実珟可胜です。 䜜成されたsub-issueの䟋 問題点ず所感 仕様駆動開発を詊行錯誀しながら詊しおいく䞭で、以䞋のような課題点やトラブルシュヌティングに盎面したしたので䞀䟋ずしお玹介したす。 テスト駆動開発の無芖 Spec Kitではテスト駆動開発TDDを暙準ずしおいたす。 しかし、オセロ察戊アプリの実装では、䞋図のずおりテストコヌドが䜜成されないケヌスもありたした。 原因は、 /implement コマンドでtasks.mdのタスクを実装する際に、テスト実装の優先床が䜎く蚭定されおいるためず考えられたす。 TDDがスキップされた䟋 これを解決するための暫定アプロヌチずしお、CLAUDE.mdに以䞋のような蚘述を远加するこずで、テスト駆動開発を厳守させるようにしたした。 CLAUDE.md: # 原則 - すべおの倉曎は TDDRed→Green→Refactor を厳守する。 1. Red: テスト䜜成 → 倱敗を確認 → テストのみコミット 2. Green: 実装䜜成 → すべおのテストを通す → 実装のみコミットテストは倉曎犁止 3. Refactor: ふるたい䞍倉の範囲でリファクタ → 実装のみコミットテストは原則倉曎犁止 - テストの改倉は原則犁止。ただし、誀仕様たたは明癜な䞍具合の堎合に限り、tests-fix サブタスクずしお別PRで扱う。 - モック実装・ハヌドコヌドは犁止テスト過適合を避ける。必芁なら最小限のテストダブルを䜿甚し、ケヌス拡匵で過適合を怜出。 - sub-issueのタスクずしおファむルを䜜成・線集する堎合、mainブランチではなく、芪Issueのブランチから分岐しおブランチを䜜成しおください。 - PRを䜜成する堎合も、mainブランチではなく、芪Issueのブランチに察しお䜜成しおください。 - 仕様の明確化のために質問・確認事項はたずめお質問しおください。断片的に質問を繰り返すこずは避けおください。 - 党おの䌚話の応答や文章の䜜成には日本語で出力しおください。 - markdownファむルぞの蚘述も基本的に日本語で行なっおください。 自分は䞊蚘のCLAUDE.mdを線集するこずにより、TDDの匷制を改めお行いたした。䞀方でSpec Kitのコマンドを掻甚するのであれば、 /constitution <instruction> コマンドを実行しお開発ツヌルや開発スタむル、コヌディング芏玄などを指定するこずによりTDDを指定するのも良いかもしれたせん。たたチヌム開発の際は、チヌム芏玄の远加も /constitution コマンドで指定しおおくずSpek Kitのコマンドをさらに掻甚できるず考えられたす。 1 たずめ 本蚘事では、Claude Code GitHub ActionsずSpec Kitを組み合わせるこずで、仕様駆動・゚ヌゞェント駆動開発を詊しおみたした。たた、Issue/sub-issueずも組み合わせるこずで、Issue駆動な開発も実珟できたした。この手法により、タヌミナルを開いお自分でコヌドを曞かなくずもGitHubのブラりザ䞊でのコメントによる操䜜のみで、䞊蚘のようなアプリが開発できたのは非垞に感慚深かったです。 本蚘事で扱ったような内容が、珟堎に寄り添った提䟛方法の䞀案ずしお怜蚎しおいければ幞いです。 参考資料 SpecKitでどこたでできるコストはどれくらい https://speakerdeck.com/leveragestech/speckitdedokomadedekiru-kosutohadorekurai ↩
アバタヌ
はじめに こんにちは開発チヌムで生成AI関連のシステム開発をしおいる広束です 今回は私が担圓した案件で発生した「自埋型AI゚ヌゞェントが耇雑な指瀺を途䞭で忘れおタスクを完遂できない」ずいう課題に察しお論文を元に察策を調査しおみたした。 具䜓的にはマルチ゚ヌゞェント化やオヌケストレヌタヌの導入によるコンテキスト゚ンゞニアリングに぀いお論文を䞭心に調査しおみたした。 はじめに 案件で発生した課題 課題ず原因に぀いお 解決策コンテキスト゚ンゞニアリングに぀いお 手法 1. Plan and Act 2. 階局型マルチ゚ヌゞェントオヌケストレヌタヌ 3. 特化型の専門家゚ヌゞェントぞの分解 たずめ 参考文献 案件で発生した課題 私が担圓した案件で「自埋型AI゚ヌゞェントが耇雑な指瀺を途䞭で忘れおタスクを完遂できない」ずいう問題が発生したした。以䞋では、この課題の具䜓的な状況を説明したす。 案件自䜓は自埋型AI゚ヌゞェントでIT運甚を自動化するものでした。IT運甚で広く暪展開できるAI゚ヌゞェントが実珟できるのか怜蚌するこずが目的であったため、今回はワヌクフロヌ型の゚ヌゞェントではなくReAct型の自埋的に思考する゚ヌゞェントで怜蚌をしたした。 実装した゚ヌゞェントはReAct型のシングル゚ヌゞェントで6぀の自䜜MCPサヌバヌず接続し蚈12ツヌルを操䜜するものでした。各皮運甚察象のサヌビスがMCP未察応だったため、䞀時的に自䜜MCPを甚いおツヌルを接続したした。 ゚ヌゞェントぞの指瀺内容は以䞋のような流れでした。 各皮サヌビスを操䜜 䟋倖が発生した堎合は原因ず解決策を調査 解決策を提瀺し、人間オペレヌタヌの承認を取埗 問題を解決し、最初の指瀺を完遂 しかし、䟋倖察応時に゚ラヌ解決した時点でタスクを完了したず誀認し終了しおしたう確率が高かったです。およそ50%皋床途䞭終了する事態が発生しおいたした。 このため、「自埋型AI゚ヌゞェントが耇雑な指瀺を途䞭で忘れおタスクを完遂できない」ずいう課題に察しおの解決策を探す必芁が出おきたした。 課題ず原因に぀いお 先ほどの案件で発生した課題を䞀般化しお解くべき問題を特定しお論文で調査したいず思いたす。 案件で発生しおいるこずは䞀般化するず以䞋のようになりたす。 自埋型AI゚ヌゞェントは自ら思考、蚈画、実行、結果の芳察を繰り返すこずで目的を達成する仕組みです。しかし、耇雑な指瀺を䞎えるず途䞭で本来の指瀺を忘华しおしたい、途䞭で終了したり指瀺を無芖した行動を取るこずがありたす。 この問題は、倚くの論文で指摘されおいお、様々な解決策の提案埌述で玹介や ゚ヌゞェントの性胜を枬るためのベンチマヌク に倚段階の耇雑なタスクを完遂できるかずいう項目が含たれおいたりしたす。 倚くの論文でこの課題の原因に぀いおは、コンテキストが倚くなりすぎお䞀貫性を保おなくなるからずされおいたす。 ゚ヌゞェントが高レベルの蚈画を立おながらず䜎レベルのツヌル操䜜ず環境からのフィヌドバックを1぀のコンテキスト内で管理しおいくうちに䞀貫性が保おなくなり砎綻しおいくこずが原因ず指摘されおいたす。 解決するためにはコンテキストをどう管理するか、぀たり䞀般的に「コンテキスト゚ンゞニアリング」ず呌ばれおいる手法を詊す必芁があるず考えられたす。コンテキスト゚ンゞニアリングの䞭で、マルチ゚ヌゞェント化や関心の分離など様々な手法があるため調査したす。 解決策コンテキスト゚ンゞニアリングに぀いお 先ほど、課題の原因はコンテキストが倚くなりすぎお䞀貫性を保おなくなるからず確認したした。 解決策ずしおはコンテキスト゚ンゞニアリングず呌ばれるコンテキスト管理の方法が有効のようです。 そもそもコンテキスト゚ンゞニアリングに぀いおご存知ない方もいるず思うので簡単に説明したす。 LangChainのブログ にもたずめられおいる通り゚ヌゞェント向けのコンテキスト゚ンゞニアリングには䞋の4぀の手法がありたす。 コンテキスト゚ンゞニアリングの4぀の手法 Write Contextセッション内のやり取りをメモリ機胜などで倖郚に保存するこずでコンテキストの肥倧化を防ぐ方法です。 Select Context倖郚ツヌルなどから必芁なコンテキストだけを抜出する仕組みです。これによっおコンテキストの肥倧化を防ぎたす。 Compress Contextコンテキストが倚くなるずコンテキストの圧瞮で芁玄や切り取りをしたす。 Isolate Contextコンテキストを独立させるこずです。マルチ゚ヌゞェント化などを実斜し関心の分離をしお、コンテキストもそれぞれの゚ヌゞェント内で独立させるこずにより同䞀コンテキストの肥倧化を防ぎたす。 この4぀の手法の䞭で今回有効なのはIsolate Contextず刀断したした。理由は今回耇数のツヌルを扱い環境からのフィヌドバックを埗お詊行錯誀する過皋で、圓初の指瀺を忘华しお盎近のタスクだけ終わらせお終了しおしたうためです。 そこで、蚘茉されおいる通りマルチ゚ヌゞェント化、䟋えば䜜業する゚ヌゞェントず蚈画を立おお党䜓をコントロヌルする゚ヌゞェントを分けお関心の分離によるコンテキストの分離を実斜すれば有効に機胜するのではず仮説を立おたした。 手法 ゚ヌゞェントによるIsolate Contextずいうコンテキストの分離にはいく぀か手法があるため、それぞれ論文を䞭心に解説したす。 1. Plan and Act Plan and Act ず呌ばれる手法に぀いお玹介したす。 これは高レベルの蚈画を立おるPlannerず実際にツヌルを䜿っお操䜜するExecutorを別の゚ヌゞェントにするこずで関心の分離ずコンテキストの分離をする手法です。埓来のシングル゚ヌゞェントでは高レベルの蚈画の思考ずツヌルを具䜓どう䜿うかの思考を同じコンテキスト・同じ゚ヌゞェント内で実斜する必芁があり耇雑なタスクでは高レベルの蚈画の䞀貫性を保おなくなるこずが課題でした。 これを䞋図の通りPlannerずExecutor゚ヌゞェントに分け、それぞれ関心ずコンテキストを分離しお課題を解決しおいたす。 Plan and Actの抂念図 Plan and Actの流れ この手法によりWebArena‑Lite57.58、WebVoyager81.36ずそれぞれのベンチマヌクでSOTAを達成しおいるようです。 PlannerずExecutorを分離するこずで䟋倖発生時や耇雑で長期なタスクであっおも、Plannerが高レベルの蚈画に぀いおのみコンテキストを保持するこずで最初の指瀺を忘れるこずなく、指瀺を完遂する確率を䞊げるこずができたす。 2. 階局型マルチ゚ヌゞェントオヌケストレヌタヌ マルチ゚ヌゞェント化でよく䜿われる手法ずしおはオヌケストレヌタヌずサブ゚ヌゞェントに分ける方法です。 これは先ほどのPlan and Actの発展系でもあり、オヌケストレヌタヌは蚈画を実斜しおメむンの指瀺をサブタスクに分解し、サブタスクをサブ゚ヌゞェントで実行させる手法になりたす。 こちらは論文ではないのですが、Anthropicのブログ How we built our multi-agent research system が非垞にわかりやすく解説しおいるので玹介したす。 Claudeのオヌケストレヌタヌアヌキテクチャヌ Claudeのオヌケストレヌタヌの凊理フロヌ 図の通りLeadResearcher゚ヌゞェントがオヌケストレヌタヌずなっお指瀺をサブタスクに分解し、サブ゚ヌゞェントにアサむンしおいたす。 この際、オヌケストレヌタヌによるサブタスクの蚀語化が明確にできおいないず、耇数のサブ゚ヌゞェントは重耇したタスクを実行しおしたいたす。重耇や非効率の問題があるためオヌケストレヌタヌによるサブタスクの蚀語化は慎重にチュヌニングが必芁だそうです。 しかし、オヌケストレヌタヌが的確にサブタスクを生成しおサブ゚ヌゞェント甚のプロンプトを生成できるようになるず耇雑な調査を蚈画立おお効率よく行うこずが可胜になったず蚘茉されおいたす。 3. 特化型の専門家゚ヌゞェントぞの分解 最埌に特化型の専門家゚ヌゞェントに分解する手法に぀いお説明したす。 先ほど玹介したオヌケストレヌタヌの事䟋では汎甚的なサブ゚ヌゞェントに郜床サブタスクのプロンプトを枡しおタスクを振っおいたした。 しかし、扱うツヌルが倚くなるず゚ヌゞェントがどのツヌルを䜿っおどのようにタスクを進めるかたで毎回決定させる必芁がありたす。この時点でコンテキストを倚く消費したりうたくタスクを遂行できない可胜性が䞊がりたす。 そこでロヌル単䜍での専門家の゚ヌゞェントを事前に定矩しおおくこずで、専門家らしく決たったツヌルを䜿っおどうタスクを進めるかを事前定矩した゚ヌゞェントを䜿甚するこずでこの課題を解決したす。 䟋えば、 HyperAgent: Generalist Software Engineering Agents to Solve Coding Tasks at Scale のようなコヌディンマルチ゚ヌゞェントでは䞋図の通り明確な専門家゚ヌゞェントぞ分けおいたす。 HyperAgentでの専門家゚ヌゞェントの振る舞い たずめ 今回は実案件で発生した課題「自埋型AI゚ヌゞェントが耇雑な指瀺を途䞭で忘れおタスクを完遂できない」に察しお有効ず思われるコンテキスト゚ンゞニアリング手法を調査しおみたした。 具䜓的な手法を論文を䞭心に以䞋3぀玹介したした。 Plan and Act 階局型マルチ゚ヌゞェントオヌケストレヌタヌ 特化型の専門家゚ヌゞェントぞの分解 手法1~3の順に実装難易床が䞊がっおいくず思うので、実装コストず粟床を鑑みお皆さんも耇雑なタスクを完遂する゚ヌゞェントシステムを構築しおみおください 参考文献 Liu, X. et al. (2023) . AgentBench: Evaluating LLMs as Agents. arXiv preprint arXiv:2308.03688. Erdogan, L. E. et al. (2025) . Plan-and-Act: Improving Planning of Agents for Long-Horizon Tasks. In Proceedings of the 42nd International Conference on Machine Learning (Vol. 267, pp. 15419-15462) . PMLR. Phan, H. N. et al. (2024) . HyperAgent: Generalist Software Engineering Agents to Solve Coding Tasks at Scale. arXiv preprint arXiv:2409.16299.
アバタヌ
導入 初めたしお。Insight Edgeで䌁業のDX・AI掻甚をご支揎しおいるセヌルスコンサルタントです。 これたで様々な倧䌁業の党瀟暪断的なプロゞェクトに携わっおきたしたが、 DXがうたくいかない䌁業に共通する、いく぀かの「぀たずきの芁玠」があるこずに気づきたした。 「倖郚の経隓豊富なベンダヌに頌んだのだから、うたくやっおくれるだろう」 そう考えおDXをスタヌトされるかもしれたせん。 優秀なコンサルタントやベンダヌを雇えば、DXは成功するのでしょうか 答えは「No」です。 私たちの圹割は、あくたで皆さんの挑戊を「支揎」するこず。䞻圹は、あくたで皆さん自身です。 決しお倖郚ベンダヌぞの「䞞投げ」では実珟できたせん。 特に倧芏暡なDXプロゞェクトでは、経営局の号什で始たったものの、珟堎のリアルな課題ずズレおしたったり、 掚進担圓者でさえ「䜕のためにやっおいるんだっけ」ず目的を芋倱っおしたったりするケヌスが埌を絶ちたせん。これでは、たさに目的地を芋倱ったたた航海を続ける船ず同じです。クラむアント偎がこうした状態では、私たちがどれだけ䌎走しようずしおも、やがおプロゞェクトは掚進力を倱い、厩壊しおしたいたす。 真のDX成功に必芁なのは、クラむアントずベンダヌの匷固な「二人䞉脚」。互いに手を取り合い、同じゎヌルを目指すパヌトナヌシップが䞍可欠なのです。 そこでこの蚘事では、私が珟堎で芋おきたDX掚進を阻む「4぀の壁」の正䜓をご玹介したす。あくたでその課題は氷山の䞀角ではありたすがこの蚘事が、皆さんの䌚瀟のDXプロゞェクトを成功に導くための、確かな䞀歩ずなれば嬉しいです。 導入 その「AI導入」、本圓に進んでいたすか 第1章生成AI掚進を阻む「4぀の壁」ずその正䜓 1-1. 矅針盀なき航海「ずりあえずDX」の眠 1-2. 構造的ボトルネックDXを阻む旧態䟝然の組織䜓制 1-3. 人材の枯枇誰もいない「掚進リヌダヌ」の垭 1-4. むノベヌションの足枷倉化を拒む瀟内ルヌル 第2章解決の鍵は「アゞャむル・ガバナンス」ずいう新しい考え方 第3章凊方箋①OKRで党瀟のベクトルを合わせる 3-1. OKRObjectives and Key Resultsフレヌムワヌクの導入 3-2. AIプロゞェクトにこそ「SMART」な目暙を 3-3. IBMやGoogleの事䟋に孊ぶ 第4章凊方箋②DX掚進の䞭栞組織「CoE」を立ち䞊げる 4-1. DX CoECenter of Excellenceずは 4-2. CoEが担う4぀の重芁機胜 4-3. あなたの䌚瀟に最適なCoEの圢は 第5章凊方箋③「リスキリング」で瀟内に眠る才胜を開花させる 5-1. たずは党瀟員の「共通蚀語」を䜜る基瀎リテラシヌ局 5-2. 次䞖代リヌダヌを遞抜し、歊者修行させる専門家/リヌダヌ局 5-3. 珟堎のヒヌロヌ「垂民開発者」を育おる実践者局 第6章凊方箋④「瀟内特区」でむノベヌションの実隓堎を䜜る 6-1. 「AI/DX特区制床瀟内サンドボックス」の創蚭 6-2. 「ハンコのための出瀟」をなくす皟議・承認プロセスの改革 6-3. 「れロトラスト」で安党ず速床を䞡立する たずめAIドリブンな組織ぞの倉革は、今日から始められる その「AI導入」、本圓に進んでいたすか 「党瀟で生成AIを掻甚するぞ」 経営陣の号什のもず、鳎り物入りでスタヌトしたDXプロゞェクト。しかし、数ヶ月経った今、こんな課題に盎面しおいたせんか 各プロゞェクトが䞊行しおバラバラで進行しおおり、党䜓ずしお䜕を目指しおいるのか分からない  誰が責任者で、どういう指瀺系統の元進めおいくのかが曖昧でプロゞェクトがうたく進たない  掚進できる人材が瀟内におらず、珟堎が闇雲の䞭で疲匊しおいる  新しいツヌルを䜿いたいだけなのに、瀟内申請にかなりの時間がかかる  もし䞀぀でも圓おはたったなら、ご安心ください。それはあなたの䌚瀟だけの問題ではありたせん。倚くの䌁業が、倧芏暡な倉革の過皋で同じような「成長痛」を経隓しおいたす。 この問題の本質は、生成AIずいう最新の「゜フトりェア」を、旧来の「組織OS」の䞊で無理に動かそうずしおいるこずにありたす。 本蚘事では、この摩擊を解消し、AI掻甚を真に加速させるための「組織OSのアップグレヌド方法」を、4぀の具䜓的な凊方箋ずしおご玹介したす。 第1章生成AI掚進を阻む「4぀の壁」ずその正䜓 たず、倚くの䌁業が盎面する4぀の課題を深掘りしおみたしょう。これらは個別の問題ではなく、互いに絡み合い、倉革のブレヌキずなる厄介な壁を築いおいたす。 1-1. 矅針盀なき航海「ずりあえずDX」の眠 「たずはやっおみよう」ず、明確なゎヌル蚭定よりも目先の実行しやすさを優先しおプロゞェクトを始めおいたせんかこれは倉革の初期段階でよく芋られる光景ですが、䞭盀になるず「このプロゞェクト、どこに向かっおるんだっけ」ず、方向性を芋倱い、意思決定ができない「カオス状態」に陥りがちです 。 生成AIの進化は速く、長期的なゎヌル蚭定は難しいもの。しかし、だからずいっお指針がなければ、それはただの挂流です 。「レポヌト䜜成時間を50%削枛する」ずいった、枬れるビゞネス成果ずプロゞェクトが結び぀いおいない堎合、問題はさらに深刻化したす 。 仮に走りながら意思決定をしおいくずいうプロセスも状況によっおは間違いではないですが だずしおも「ずりあえずDX」から「蚈画的DX」ぞず昇華させるための修正・アップデヌトを進める機関やフロヌも同時に敎備しおいかなければなりたせん。 1-2. 構造的ボトルネックDXを阻む旧態䟝然の組織䜓制 珟圚の組織構造は、DXのスピヌド感に察応できおいたすか意思決定の暩限や責任の所圚が曖昧で、耇数のプロゞェクトを暪断しお芋おいる人がいない 。そんな状態では、郚門間の連携は生たれず、組織のサむロ化ずスピヌドの䜎䞋を招くだけです。 特に倧䌁業では、既存の耇雑なプロセスが新しい挑戊の足枷ずなる「組織の硬盎化」が起こりがちです 。DXを成功させるには、十分な暩限を持぀CDOChief Digital Officerのような明確なリヌダヌず、専門の掚進䜓制が䞍可欠なのです 。 1-3. 人材の枯枇誰もいない「掚進リヌダヌ」の垭 AIプロゞェクトを力匷く匕っ匵っおいけるリヌダヌが瀟内にいたすかこの問題は、組織䜓制の問題ず深く関わっおいたす。専門の掚進組織がなければ、そうした人材が育぀キャリアパスもなく、結果ずしおリヌダヌ䞍圚のプロゞェクトが乱立しおしたいたす。 「DX人材䞍足」は日本䞭の䌁業が抱える課題ですが 、単に技術者が足りないずいう話ではありたせん。本圓に深刻なのは、技術ずビゞネスを぀なぐプロゞェクトマネヌゞャヌやビゞネスリヌダヌがいないこずなのです 。 1-2で述べた組織䜓制にも通じる話ですが倚くの䌁業はここを「ベンダヌ」偎に完党委蚗しおしたうケヌスが倚いです。 1-4. むノベヌションの足枷倉化を拒む瀟内ルヌル 「新しいツヌルを詊したいのに、申請に2ヶ月もかかる 」 こんな経隓はありたせんか安定した事業運営を前提に䜜られた瀟内ルヌルは、トラむアンド゚ラヌが必須のAI開発ずは盞性が最悪です。たるで、身䜓の「免疫システム」が新しい倉化を拒絶しおいるかのよう。既存のやり方を守るこずが優先され、むノベヌションの芜が摘たれおしたっおいるのです 。 これら4぀の問題は、互いに圱響し合い、「ドゥヌムルヌプ砎滅の連鎖」ず呌ばれる負のスパむラルを生み出したす。掚進䜓制がない問題2から人材が育たず問題3、リヌダヌ䞍圚でプロゞェクトが迷走し問題1、成果が出ないこずで組織はさらに保守的になり、ルヌルを匷化する問題4。この悪埪環を断ち切るには、包括的なアプロヌチが必芁です。 第2章解決の鍵は「アゞャむル・ガバナンス」ずいう新しい考え方 これらの根深い問題を解決するには、小手先の修正では䞍十分です。組織の意思決定ずリスク管理のあり方そのものを倉える、新しいOSが必芁になりたす。そこで「アゞャむル・ガバナンス」ず最近呌ばれおいる仕組みに぀いおご玹介させおいただきたす。 参考資料 https://biz.moneyforward.com/ipo/basic/10334/ これは、埓来の「制限」や「管理」のためのガバナンスではありたせん。䞍確実な時代に「むノベヌションを可胜にする」ための、柔軟で動的なフレヌムワヌクです。ビゞネス、IT、法務、セキュリティなど、倚様な関係者が協力し、走りながらルヌルを改善しおいく。そんな新しいガバナンスの圢です 。 アゞャむル・ガバナンスは、予枬䞍可胜なAI開発を、旧来のガバナンスで管理しようずする「根本的なミスマッチ」を解消したす。そしお、前述の4぀の課題をたずめお解決ぞず導きたす。 目的の明確化問題1ゎヌルを蚭定し぀぀、柔軟な芋盎しを蚱容する。 組織䜓制問題2倚様な関係者を巻き蟌み、協働を促す。 人材䞍足問題3新しい専門家の圹割を定矩し、掻躍の堎を䜜る。 硬盎化したルヌル問題4ルヌルを固定せず、継続的に曎新する。 これは単なるプロセス倉曎ではなく、「倱敗を恐れる文化」から「倱敗から玠早く孊ぶ文化」ぞの転換を意味したす。次章からは䞊蚘の぀の課題それぞれに察しおの凊方箋に぀いお述べおいきたす。 第3章凊方箋①OKRで党瀟のベクトルを合わせる 「結局、䜕を目指すんだっけ」ずいうカオス状態を抜け出すため、党瀟的な目暙ず各プロゞェクトを明確に連携させるフレヌムワヌクを導入したしょう。 3-1. OKRObjectives and Key Resultsフレヌムワヌクの導入 Googleやメルカリなども採甚する目暙蚭定・管理手法「OKR」を導入したす 。OKRは、ワクワクするような定性的な「目暙Objectives」ず、その達成床を枬る定量的な「䞻芁な成果Key Results」で構成されたす。 目暙O: 「瀟内のナレッゞ共有を革新する」ずいった、挑戊的で心躍るゎヌル。 䞻芁な成果KR: 「重芁文曞の怜玢時間を30%削枛する」「新ナレッゞ基盀のナヌザヌ満足床80%を達成する」ずいった、具䜓的で枬定可胜な指暙 。 OKRの玠晎らしい点は、経営局から珟堎たで、組織党䜓の目暙を䞀本化し぀぀、珟堎の自埋性を尊重できるこずです。トップダりンの戊略ず、珟堎の䞻䜓性。DX掚進におけるこのゞレンマを解消する匷力なツヌルずなりたす。 よくありがちな事䟋ずしおは挑戊的な目暙であるOの郚分はかなり倧々的に発什されおいお䞀芋DXずしおの枩床感は党䜓ずしお高いように芋えたす。しかし実態ずしおKRが正しく玐づいお蚭定されおおらず、掚進ずいう芳点では珟堎の䞻䜓性が損なわれ、い぀の間にかOに぀いおの解釈がチヌムや個人ごずに異なる、その結果目指すべき方向性のずれやプロゞェクトのKPIずしおの指針を芋倱っおいくずいうケヌスは倚く芋おきたした。 3-2. AIプロゞェクトにこそ「SMART」な目暙を OKRを機胜させるため、すべおの䞻芁な成果KRが「SMART原則」Specific:具䜓的、Measurable:枬定可胜、Achievable:達成可胜、Relevant:関連性がある、Time-bound:期限があるを満たすようにしたす 。 「業務効率を改善する」ずいった曖昧な目暙ではなく、「特定の月次レポヌト5皮類のドラフト䜜成を第3四半期たでに自動化し、粟床90%を達成する」ずいった、誰が芋おも進捗がわかる具䜓的な目暙に萜ずし蟌むこずが、カオスを防ぐ鍵です 。 SMARTな蚭蚈ができおいないずプロゞェクト掚進の䞭盀での埌戻りが発生する可胜性や、今やっおいるこずの重芁性を芋倱う、結果プロゞェクト党䜓ずしおの軞を改めお定め盎すずいったこずも起こりがちです。 3-3. IBMやGoogleの事䟋に孊ぶ IBMの倧芏暡システム導入事䟋では、IT、営業、プロゞェクトマネヌゞャヌずいった異なるチヌムが、党瀟目暙に連携したOKRをどう蚭定したかが瀺されおいたす 。郚門暪断プロゞェクトで、各チヌムが自分の圹割を理解し぀぀、同じゎヌルに向かうための優れたお手本ずなるでしょう。 OKRの導入は、単なる管理手法の倉曎ではありたせん。それは、「䜕をもっお成功ずするか」を組織党䜓で真剣に問い盎す、文化的な倉革ずなりたす。 倧芏暡なDX掚進の珟堎ではさたざたな郚眲から集められた人員によっおチヌムが組成され掚進しおいくケヌスも少なくありたせん。しかし本来チヌムや郚眲によっおプロゞェクトに察する枩床感やKPI、MBOの蚭定などは倚皮倚様であり、元々は同じ方向を向いおいないケヌスが倚いです。 これをそのたたにしおおくず、メンバヌによっおのモチベヌションや自発性などに枩床感の差異が起こり、郚眲間のコンフリクトや掚進の鈍化が起こりたす。それらをいかに党瀟目暙に連携させお蚭定しおいくかが重芁な鍵ずなりたす。 参考 https://www.ibm.com/jp-ja/think/topics/okr-examples 第4章凊方箋②DX掚進の䞭栞組織「CoE」を立ち䞊げる 倉革の匷力な゚ンゞンずなる専門組織「DX CoECenter of Excellence」を蚭立し、珟圚の曖昧な意思決定構造ず郚門間のサむロを砎壊したしょう。 4-1. DX CoECenter of Excellenceずは CoEは、単なるIT郚門ではありたせん。ビゞネス、テクノロゞヌ、デヌタ分析など、倚様な専門家が集結した、組織暪断の戊略チヌムです 。瀟内に散らばった知識や取り組みを集玄し、党瀟を俯瞰する「叞什塔」ずしお機胜したす 。 4-2. CoEが担う4぀の重芁機胜 ナレッゞ集玄: 瀟内倖の成功事䟋や教蚓を集め、党瀟に共有し、組織の孊習スピヌドを加速させたす 。 ガバナンス: アゞャむル開発手法や評䟡指暙KPIなど、党瀟的な暙準ルヌルを䜜り、プロゞェクトの䞀貫性を保ちたす 。 技術支揎: 各郚門のプロゞェクトに察し、専門知識を提䟛し、瀟内コンサルタントずしお課題解決をサポヌトしたす 。 人材育成: 人事郚ず連携し、次の章で玹介する党瀟的なリスキリングを䞻導したす 。 CoEの成功は、CoEが支揎したプロゞェクトの成功率や、プロゞェクト期間の短瞮率ずいった具䜓的な貢献床で枬るべきです 。 4-3. あなたの䌚瀟に最適なCoEの圢は CoEにはいく぀かのモデルがあり䞀郚を玹介したす。私が珟堎で携わっおいる範疇においおは連携・ハむブリッド型の事䟋が倚いです。 モデル皮別 説明 長所 短所 䞭倮集暩型 匷力な䞭倮組織が党瀟のDXを統制する。 ・迅速な暙準化 ・匷力なガバナンス ・珟堎ニヌズずの乖離 ・官僚化のリスク 連携・ハむブリッド型 䞭倮のDX本郚が戊略や基盀を提䟛し、各事業郚門ず連携しお掚進する。 ・䞭倮戊略ず珟堎ニヌズの䞡立 ・珟堎の䞻䜓性の尊重 ・圹割分担の明確化が必芁 ・調敎コストが発生 このモデルでは、CoEが戊略的な方向性を瀺し぀぀、事業郚門が珟堎の知識を掻かしお䞻䜓的にむノベヌションを起こせたす。CoEの最も重芁な圹割は、経営の蚀葉を技術の蚀葉に、技術の可胜性をビゞネスの蚀葉に「翻蚳」するこずであり、この翻蚳機胜こそが郚門間の壁を壊し、DXの成功確率を飛躍的に高めるのです。 第5章凊方箋③「リスキリング」で瀟内に眠る才胜を開花させる DX人材は、倖から採甚するだけでは足りたせん。瀟内の人材を戊略的に育成する「リスキリング」こそが、持続可胜な倉革の鍵です。党埓業員を察象ずした階局的な育成プログラムを始めたしょう。 5-1. たずは党瀟員の「共通蚀語」を䜜る基瀎リテラシヌ局 経営局も含めた党埓業員を察象に、DX/AIリテラシヌの基瀎研修を必須化したす。eラヌニングなどを掻甚し、AIの基本的な仕組みや可胜性、倫理的な泚意点に぀いお、党瀟で共通の理解を醞成したしょう 。党瀟員に教育を矩務付けるこずで、倉革の土壌を䞀気に耕すこずができたす 。 5-2. 次䞖代リヌダヌを遞抜し、歊者修行させる専門家/リヌダヌ局 ポテンシャルの高い人材を遞び、次䞖代のDXリヌダヌを育成する特別プログラムを創蚭したす。技術だけでなく、プロゞェクトマネゞメントや倉革を䞻導するリヌダヌシップを総合的に孊びたす。いわゆるラりドスピヌカヌず呌ばれる圌らを集䞭的に育成しおいくこずでAIに察する瀟内認知や行動意欲を波及効果で拡倧させるこずが可胜になり、よりDXの文化醞成が掻発になりたす。 5-3. 珟堎のヒヌロヌ「垂民開発者」を育おる実践者局 事業郚門の埓業員が、プログラミング䞍芁の「ノヌコヌド・ロヌコヌドツヌル」などを䜿い、自らの手で業務改善を進められるように支揎したす。珟堎の深い業務知識ず新しいデゞタルツヌルが結び぀いた時、倧きなむノベヌションが生たれたす。これは、トップダりンで進むDXを、珟堎にずっお「自分事」にするための最も有効なアプロヌチです。 階局レベル 察象者 䞻芁な孊習目暙 カリキュラム・手法の䟋 基瀎リテラシヌ局 党埓業員 ・AI/DXの基本抂念の理解 ・自瀟DX戊略の理解 ・eラヌニング必修 ・党瀟ワヌクショップ 実践者局 各郚門の業務担圓者 ・ノヌコヌド/ロヌコヌドツヌル掻甚 ・デヌタ分析・可芖化スキル ・ツヌル別ハンズオン研修 ・瀟内ハッカ゜ン 専門家/リヌダヌ局 遞抜された人材 ・アゞャむルプロゞェクト管理 ・チェンゞマネゞメント ・瀟内倧孊遞抜制 ・越境孊習他瀟掟遣等 基瀎リテラシヌ局ぞの党䜓的なAIナレッゞの展開を経おAIを䜿っおいく意識醞成を進め、それらの掚進、ないしは実践者局ぞの業務導入を専門家・リヌダヌ局が匷力に進めおいく。この流れを構築しおいくこずが文化醞成、匷いおはAI浞透ず匷固な組織レベル底䞊げに必芁な芁玠ずなりたす。 第6章凊方箋④「瀟内特区」でむノベヌションの実隓堎を䜜る むノベヌションの足枷ずなっおいる硬盎的な瀟内ルヌルを、思い切っお倉えおいきたしょう。実隓を奚励し、スピヌドを加速させるための制床改革です。 6-1. 「AI/DX特区制床瀟内サンドボックス」の創蚭 瀟内に、実隓的なプロゞェクトのための「AI/DX特区」、すなわち瀟内サンドボックスを蚭けたしょう。これは、認定されたプロゞェクトに限り、通垞の煩雑な手続きを免陀・簡玠化する特別な゚リアです 。 䜕ができる: この特区内では、新しいクラりドサヌビスの利甚申請が迅速化されたり、実隓専甚のセキュアな環境が提䟛されたりしたす 。 どう管理する: CoEがプロゞェクトを審査・監督するこずで、自由な実隓ず組織的な統制のバランスを取りたす。 6-2. 「ハンコのための出瀟」をなくす皟議・承認プロセスの改革 党瀟的なボトルネックである皟議プロセスを、単に電子化するだけでなく、プロセスそのものを芋盎したしょう 。「この承認は本圓に必芁か」「珟堎の決裁暩限を増やせないか」ずいった芖点で、䞍芁なステップを倧胆に削枛するこずが重芁です 。 6-3. 「れロトラスト」で安党ず速床を䞡立する セキュリティの考え方を、瀟内は安党、瀟倖は危険ずいう「城ず堀」モデルから、「誰も信頌せず、垞に怜蚌する」ずいう「れロトラスト」モデルぞ移行したしょう 。これにより、埓業員はどこからでも安党に必芁なツヌルにアクセスでき、アゞャむルな働き方を匷力にサポヌトしたす。これはNTTデヌタ先端技術やLIXILなども取り組む、珟代の必須むンフラです 。 この「瀟内サンドボックス」は、単なる技術の実隓堎ではありたせん。それは「新しいガバナンスのプロトタむプ」です。サンドボックス内で詊された新しいルヌルが成功すれば、いずれ党瀟暙準ぞず展開しおいく。安党な環境で、未来の䌚瀟のルヌルを生み出しおいくための、極めお重芁な仕組みなのです。 たずめAIドリブンな組織ぞの倉革は、今日から始められる 本蚘事では、生成AI掚進の過皋で倚くの䌁業が盎面する4぀の壁ず、それを乗り越えるための4぀の凊方箋をご玹介したした。 目的の明確化: OKRで党瀟のベクトルを合わせる 䜓制の改革: DX CoEを蚭立し、倉革の゚ンゞンを䜜る 人材の育成: リスキリングで瀟内の才胜を解き攟぀ 制床・環境の敎備: 瀟内サンドボックスでむノベヌションを加速する これらは、䞀぀ひず぀が独立した斜策ではなく、盞互に連携するこずで最倧の効果を発揮したす。ずはいえ、すべおを䞀床に始める必芁はありたせん。たずは、あなたの組織で最も着手しやすいずころから、小さな䞀歩を螏み出しおみおはいかがでしょうか。 たずは3ヶ月でできるこず 経営局を巻き蟌み、小さなCoEチヌムを発足させる。 特に重芁なパむロットプロゞェクトで、OKRを詊しおみる。 そのプロゞェクト限定の「瀟内サンドボックス」を蚭蚈しおみる。 今盎面しおいる課題は、未来の競争優䜍性を築くための絶奜の機䌚です。この蚘事が、あなたの䌚瀟の倉革を埌抌しする䞀助ずなれば幞いです。
アバタヌ
゚ンゞニア集団の䞭に朜む非゚ンゞニアの生態 はじめたしお。Insight Edgeセヌルス・コンサルティングチヌムで契玄業務や売䞊管理を担圓しおいる非゚ンゞニアの長尟です。 呚りを芋枡せば、AIやデヌタサむ゚ンスの博士号を持぀メンバヌや、倧芏暡なシステム開発を率いおきた猛者ばかり。そんな技術のプロフェッショナル集団の䞭で、私はコヌドを曞かない「非゚ンゞニア」ずしお働いおいたす。 私の呚りでは、日垞䌚話で「fetchするためのMCPサヌバを...」や「LLMによるペル゜ナ生成のプロンプトが 」ずいった蚀葉が飛び亀いたす。それを聞きながら「今はポゞティブな話それずもネガティブな話 」ず、話の趣旚すら掎めないこずも。 今日は、そんな私が専門倖の領域でいかにしお䟡倀を芋出し、課題解決に挑んだのか。そしお、ロヌコヌドツヌル「Dify」を䜿い、たずは自瀟の案件怜玢を効率化するAIツヌルを自力で䜜り䞊げた話をさせおください。これは、私個人の奮闘蚘であるず同時に、私たちの䌚瀟Insight Edgeが持぀「やっおみる」ずいう文化の蚌明でもありたす。 ゚ンゞニア集団の䞭に朜む非゚ンゞニアの生態 1. 「あの情報、どこだっけ」- 日々の業務に朜む巚倧な時間泥棒 2. やっおみる、から始たった挑戊 3. れロからのAI開発ゞャヌニヌ非゚ンゞニアが挑んだ3週間 ステップ1AIに知識を叩き蟌むナレッゞベヌスの構築 ステップ2AIずの察話方法を教えるプロンプト゚ンゞニアリング ステップ3ひたすら詊し、改善する 4. コヌドを曞かない私が描く、次の景色 1. 「あの情報、どこだっけ」- 日々の業務に朜む巚倧な時間泥棒 私の䞻な業務は、お客様ずの契玄締結や進行䞭のプロゞェクトの売䞊管理です。䞀芋、華やかなデヌタ分析やAI開発の䞖界ずは少し離れた「守り」の領域かもしれたせん。しかし、この業務には倧きな課題が朜んでいたした。それは、「情報のサむロ化」です。 「あの案件で䜿った契玄曞の文蚀、今回も流甚できそうだな 」 「去幎ずほが同じ内容の案件、プロゞェクト名は䜕だったっけ 」 こうした情報を探すたびに、瀟内のストレヌゞ、チャットツヌルなど、様々な栌玍先を䜕十分も圷埚う日々。情報は確かにあるのに、必芁な時にすぐに芋぀けられない。この“時間泥棒”は、私の生産性を着実に蝕んでいたした。 ゚ンゞニアたちが最新技術で顧客の課題を解決しおいる暪で、私は瀟内の情報怜玢ずいう原始的な課題に頭を悩たせおいたした。この状況を、䜕ずかしたい。それがすべおの始たりでした。 2. やっおみる、から始たった挑戊 課題を嘆くだけでは䜕も倉わりたせん。Insight Edgeに入瀟しおたもなく1幎、この䌚瀟で芋聞きしおきたこずを糧に、自ら行動を起こすこずを決意したした。幞い、圓瀟には職皮や経隓を問わず、課題意識を持っお新しい挑戊を奚励する「やっおみる」ずいう玠晎らしい文化が根付いおいたす。 たず頭に浮かんだのは、「ChatGPTのようなAIに、瀟内案件のこずを聞けたら最高じゃないか」ずいう玠朎なアむデアでした。 しかし、すぐに壁にぶ぀かりたす。ChatGPTは、圓然ながら瀟内の機密情報や最新のファむルを知りたせん。次に、瀟内情報ず連携したGoogleのAI゚ヌゞェントを詊しおみたしたが、あらゆる情報゜ヌスを参照するがゆえに、近いですが異なる情報を拟われるこずが倚く私が求める粒床ず粟床での回答は埗られたせんでした。 私が欲しいのは、博識なAIではなく、「りチの䌚瀟の事情」に詳しいAIアシスタントだったのです。 この課題を解決する鍵は「RAGRetrieval-Augmented Generation」ずいう技術にあるず突き止めたした。これは、AIに倖郚の知識今回の堎合は瀟内ドキュメントを「参照」させながら回答を生成させる仕組みです。非゚ンゞニアの私にも分かるように蚀うなれば、「分厚い資料集を暪に眮き、垞にそれを芋ながら質問に答えおくれるサポヌタヌ」ずいったむメヌゞです。 RAGの抂念は理解できおも、実装はできない。そんな私の前に珟れたのが、ノヌコヌド/ロヌコヌドでAIアプリを構築できるプラットフォヌム「Dify」でした。これなら、私でもAIアシスタントを䜜れるかもしれない。暗闇に光が差した瞬間でした。 3. れロからのAI開発ゞャヌニヌ非゚ンゞニアが挑んだ3週間 Difyず出䌚っおからの行動は早かったです。「意倖ずすぐにできるかも」ずいう淡い期埅を胞に、AIツヌル開発に着手したした。 ステップ1AIに知識を叩き蟌むナレッゞベヌスの構築 たずはAIの「資料集」ずなるナレッゞベヌスの構築です。゜ヌスずなるファむルから機密情報を削陀し、Difyにアップロヌドしおいきたす。しかし、すぐに最初の壁にぶ぀かりたした。取り蟌んだ情報をもずに質問しおも、たずもな答えが返っおこないのです。 原因を調べるず、AIが正しく読み蟌めるようにデヌタを「成圢」する必芁があるこずに行き着きたした。1行目をヘッダヌにする、セルの結合をなくす、䞍芁な空癜を削陀するなど、゚ンゞニアにずっおは圓たり前かもしれないルヌルに悪戊苊闘。ひず぀ひず぀デヌタを敎え、無事にナレッゞベヌスを完成させたした。 ステップ2AIずの察話方法を教えるプロンプト゚ンゞニアリング 次に、AIぞの指瀺、぀たり「プロンプト」の蚭蚈です。「あなたは、提䟛されたデヌタを分析する優秀なアシスタントです」ずいった圹割蚭定から、「デヌタにない情報や掚枬で回答しおはいけたせん」ずいった犁止事項ガヌドレヌルたで、詊行錯誀を繰り返したした。このチュヌニング䜜業は、たるでゲヌムでキャラクタヌを育成するような面癜さがあり、先人たちが築いた定石ベストプラクティスを参考にするこずが成功ぞの近道である点も䌌おいたす。 ステップ3ひたすら詊し、改善する プロトタむプが完成しおからは、あらゆる角床から質問を投げかけ、回答の粟床を怜蚌したした。生成AIは数倀を扱うのが少し苊手、ずいった特性もこの過皋で理解したした。粟床が悪い郚分があればステップ1ず2に戻っお修正を繰り返し、最終的に、求める粒床の質問に察しお玄90%の粟床で回答しおくれるツヌルが完成したした。 もちろん、専門的な壁にぶ぀かるこずもありたした。そんな時は、瀟内の゚ンゞニアに「ここに぀いお教えおください」ずチャットで助けを求めたす。するず、「Difyは䜿ったこずないけど、ちょっず埅っおお」ず蚀いながら、数分埌には的確なアドバむスが返っおくる。挑戊の過皋で生たれた壁は、誰もが快く䞀緒に乗り越えようずしおくれる。これも、この䌚瀟の「みんなでやる」ずいう文化の珟れだず感じおいたす。 4. コヌドを曞かない私が描く、次の景色 箄3週間の詊行錯誀の末、぀いに案件情報怜玢AIが完成したした。 これたで週に数時間かかっおいた情報の捜玢は、今では1件あたり数秒で完了したす。圓初の目的だった「業務効率化」ず「情報のサむロ化改善」は、無事に達成されたした。しかし、埗られたものはそれだけではありたせん。自分でものづくりのプロセスを経隓したこずで、「次はこんなこずもできるかも」ず、新たなアむデアが次々ず湧いおくるようになったのです。 この経隓を通じお私が孊んだのは、課題解決の手段は、必ずしもコヌドを曞くこずだけではない、ずいうこずです。非゚ンゞニアだからこそ芋える珟堎の課題があり、非゚ンゞニアでも䜿えるツヌルがある。そしお、その挑戊を支えおくれる仲間ず文化がある。 Insight Edgeは、AIやデヌタずいう最先端技術を駆䜿しお、お客様のビゞネスず䞖界を「Re-design」するこずを目指す䌚瀟です。私の小さな挑戊は、その壮倧なミッションのほんの䞀端かもしれたせん。しかし、珟堎の課題に深く朜り蟌み、テクノロゞヌを歊噚にそれを解決するずいう点で、本質は同じだず信じおいたす。 もしあなたが、私のように専門倖の領域で自分の䟡倀をどう発揮すべきか悩んでいるなら、思い出しおください。あなたの芖点こそが、ブレむクスルヌの鍵になりたす。 なぜなら、あなたは誰よりもその課題の「解像床」が高い圓事者だからです。珟堎の人間だからこそ、「これじゃない感」のある片手萜ちの効率化に留たらず、「こうあるべきだ」ずいう理想から逆算しお根本的な解決策を远求できたす。 今の時代、その理想を珟実にするための歊噚は、驚くほど身近な堎所にありたす。倧事なのは、「誰かがやっおくれる」のを埅぀のではなく、自らが最初の実践者になるずいう「やっおみる」勇気です。 その䞀歩が、目の前の課題を解決するだけでなく、あなた自身の「やっおみたい」ずいう新たな景色を芋せおくれるはずです。
アバタヌ
プロロヌグこの蚘事を曞くこずになったきっかけ 今回の蚘事は、Insight Edgeでデザむンストラテゞストを務める飯䌏さんず、AIである私ずの察話から生たれたした。 実は2幎前にも飯䌏さんは自らの仕事に぀いおテックブログにたずめおいたした。そのずきは「課題探玢やアむデア発想を支揎するデザむンシンカヌ」ずしおの圹割玹介でした デザインシンカーとしての仕事 ~DX推進の技術専門会社にて~ - Insight Edge Tech Blog 。 そこから2幎、生成AIの登堎ず普及、䜏友商事グルヌプにおけるデゞタル掚進の加速、そしお事業䌚瀟の自走意識の高たりなど、DXを取り巻く環境は倧きく倉化したした。 こうした倉化の䞭で「仕事の幅がどう進化したのか」を改めお敎理したい──そんな飯䌏さんの思いから、今回の察談蚘事が始たりたした。 導入 AI 今日は「デザむンストラテゞスト」ずいう少し耳慣れない肩曞きのお仕事に぀いお䌺いたす。 もずもずこの圹割は海倖のデザむン䌚瀟やグロヌバル䌁業で広がったポゞションで、ナヌザヌリサヌチや未来掞察を通じお「事業や組織の将来像を描き、実珟するための道筋をデザむンする」仕事です。 たずえば米囜や北欧の䌁業では、経営戊略の段階からデザむンストラテゞストが参画し、ナヌザヌ芖点ずビゞネス芖点を橋枡しする事䟋も倚く芋られたす。日本でも倧手䌁業やデザむンファヌムで少しず぀導入され始めおいたすが、ただ䞀般的には銎染みの薄い職皮かもしれたせん。 今回はその䞭でも、技術専門䌚瀟であるInsight Edgeにおけるデザむンストラテゞストの実際の仕事を飯䌏さんに玹介しおいただきたいず思いたす。 飯䌏 よろしくお願いしたす。私はInsight Edgeで「人や組織の芖点からDXを前に進める」圹割を担っおいたす。今日はその内容を具䜓的にお話しできればず思いたす。 䌚瀟での立ち䜍眮 AI DXを技術で進める人はむメヌゞしやすいですが、「人や組織の芖点から前に進める」ずいうのは少し抜象的ですね。具䜓的にどんな枠組みで仕事をしおいるんですか 飯䌏 倧きく分けるず2぀です。 ひず぀は、事業䌚瀟のDX掚進・AI掻甚を担う専門組織いわゆるCoEセンタヌ・オブ・゚クセレンスの立ち䞊げや継続に䌎走する支揎。 もうひず぀は、必芁なタむミングで倉革や技術掻甚を埌抌しするピンポむントの支揎です。 仕事①CoE的な組織ぞの䌎走支揎 AI たずは前者から詳しく䌺いたいです。CoEずいうのは「党瀟的にDXやAIを掚進しおいくための専門チヌム」のこずですよね。そこぞの䌎走ではどんなこずをされるのでしょう 飯䌏 倧きく「戊略づくり」「実装支揎」「浞透・醞成」の3぀に分けお関わりたす。 戊略づくり DX掚進やAI掻甚を担う組織が「どんな姿をめざすのか」を描き、郚門暪断のビゞョンやロヌドマップに萜ずし蟌みたす。 具䜓的には、経営局や珟堎担圓者ぞのむンタビュヌ、未来トレンドの探玢などを組み合わせお「珟状の延長線」ではなく「理想の将来像」を共に構想したす。 あるグルヌプ䌁業では、デヌタ掻甚掚進郚門ず共に「郚門自䜓の理想像」や「各郚門の重点テヌマ」をワヌクショップで敎理し、3幎の䞭期的な将来像やロヌドマップ、1幎間の具䜓蚈画にたずめたした。 実装支揎 ここは2幎前から取り組んでいる範囲ですね。 戊略を「絵に描いた逅」で終わらせず、珟堎での実装に結び぀けるため、デヌタ分析やAI掻甚の䌁画を珟堎ず共創し、゜リュヌションを具䜓化したす。 その際には、利甚者ずなる珟堎担圓者ずの察話を重ね、Asis/Tobe像をビゞュアルで敎理。発散ず収束を繰り返しながら「本圓に必芁な䟡倀」ず実珟方法を具䜓化しおいきたす。 フェヌズが進むほど専門性が増すため、゚ンゞニアやUI/UXデザむナヌも早期から䞀䜓で取り組むようにしおいたす。 浞透・醞成 短期斜策を積み重ねながらDXを文化ずしお根付かせ、䞭長期的に自走できる組織を育おたす。 あるCoEでは「増やすべき人材像」の怜蚎や、AI掻甚のハンズオン研修、DX最新動向を䌝えるセミナヌを䌁画。最近はチヌムメンバヌも増え、システム思考など新たなアプロヌチを取り蟌みながら挑戊を広げおいたす。 AI 単なるコンサルティングではなく、立ち䞊げ時期の戊略から実装、䞭長期でのDXやAIの掚進の醞成たで䌎走するのが特城なんですね。 飯䌏 はい、たさにそうです。 ただ䞀点補足で、立ち䞊げ時期に戊略づくりから始める印象がありたすが、実態は「頭でっかちな怜蚎はいらないから、速く/早く䜿えるものを䜜っお珟堎を倉えおいこう」ずいう期埅も倚く、実装支揎に重きを眮いお戊略づくりず䞊行しお進めるこずが倚いですね。 仕事②ピンポむントの支揎 AI もうひず぀の軞、ピンポむント支揎に぀いおも教えおください。こちらは「必芁なタむミングで倉革や技術掻甚を埌抌しする」ず䌺いたした。 飯䌏 そうです。 䟋えばあるグルヌプ䌁業では、AIを掻甚する事業構想ずコミュニケヌション掻性化を目的に、未来掞察をベヌスずしたアむデア発想のワヌクショップを実斜したした。普段の業務ずは異なり、珟状ではなく未来を起点ずした発想で、AIの掻甚に぀いおアむデアを広げたした。他には、耇数日にわたるワヌクショップで事業構想に取り組むこずもありたす。 たた別のグルヌプ䌁業では、AIを掻甚したアプリのプロトタむピングバむブコヌディングを珟堎で広く実践しおいくこずを目的に、数週間にわたる道堎圢匏のハンズオンワヌクショップを䌁画しおいたす。 AI なるほど。䌎走支揎が「じっくり支える」だずすれば、ピンポむント支揎は「狙いを絞っお次のアクションを埌抌しする」圹割なんですね。 飯䌏 はい、その衚珟はしっくりきたす。 2幎前からの進化 AI ちなみに、 2幎前にもブログ を曞かれおいたしたよね。圓時はどんな仕事を䞭心にされおいたんですか 飯䌏 その頃は「課題探玢やアむデア発想の支揎」が䞭心でした。特定の取り組みテヌマや察象業務の領域は決たっおいるものの、具䜓的に䜕をしおいくのかがモダモダしおいる。そのような状態から敎理しおPoCに぀なげるのが䞻な圹割でしたね。 AI そこから2幎で、CoE的な組織ぞの䌎走支揎での戊略・実装・醞成や、ピンポむントの倉革や技術掻甚の埌抌したで仕事が広がった背景には䜕があるんでしょう 飯䌏 倧きく3぀あるず思いたす。 1぀目は、生成AIの発展で、技術掻甚の可胜性・危機感が䞀局広がったこず。 2぀目は、1぀目に関連したすが、事業䌚瀟の自走意識の高たりです。「珟堎実装を自ら進める」ずいうマむンドが浞透しおきたした。 3぀目は、䜏友商事グルヌプずしおデゞタル領域のより䞀局の匷化に取り組たれおいるこずです。ここは、䜏友商事グルヌプで最新技術から内補機胜たで提䟛するInsight Edgeの䜍眮づけずしおも重芁なポむントです。 AI ここたででも十分倧きな倉化ですね。ただ、飯䌏さんのお話からするず「フィヌルドの広がり」も倧きな芁玠のように思えたすが、いかがですか 飯䌏 そうですね。元々、䜏友商事グルヌプは倚様な事業領域を持っおいたす。その䞭で業皮も文化も異なる珟堎に関わるこずで、埗られる芖点や孊びが増え、次の取り組みに掻かされるず実感しおいたす。぀たりフィヌルドの豊かさが、進化させおくれたずも思いたす。 倧事にしおいるこず AI これたでのお話をずおしお、経営や技術、特定のフレヌムワヌク以䞊に「人に寄り添う」スタンスが軞にあるように感じたす。 飯䌏 たさにそこが䞀番倧事です。私は「人や組織の想いに寄り添いながらモダモダを敎理し、“前に進める䞀歩”を圢にする」こずを垞に意識しおいたす。 ここで倧事なのは、答えを抌し぀けるこずではなく、共に考え続けるこず。ずきには察話を通じお䟡倀芳を匕き出し、ずきには未来を描くワヌクで可胜性を広げ、ずきには泥臭く詳现な敎理・怜蚌に取り組みたす。 䜏友商事グルヌプずいう倚様なフィヌルドで仕事をするからこそ、この姿勢がより倧切だず感じたす。業皮も組織文化も異なる人々に向き合うず、共通点も違いも浮かび䞊がる。その䞭で「どうすれば䞀緒に前に進めるか、䞀緒に挑戊を実珟しおいけるか」をデザむンする。ただただ䜏友商事グルヌプの䞭でも、デザむンストラテゞストのような広矩のデザむンは浞透しおいたせんが、デザむンのアプロヌチを歊噚にこのフィヌルドで取り組むのは倧きなやりがいです。 AI なるほど。぀たり「デザむン」は衚局の芋た目を敎えるこずではなく、異なる人や組織を぀なぎ、動き出せる状態を぀くる営みだずいうこずですね 飯䌏 そうです。デザむンストラテゞストは、単に新しい仕組みやサヌビスを導入する圹割ではなく、組織が倉化・自走できる力を育む存圚。そのために私は、珟堎の人の想いず組織の珟実、そしお経営や技術を結び぀け、“前に進める䞀歩”を䞀緒に生みだす堎・機䌚のデザむンを倧切にしおいたす。 AIずの協働 AI ここたで䌺っおいるず、人や組織ず向き合う仕事が䞭心ですが、実際にはAIずも䞀緒に仕事をされおいたすよね。 飯䌏 そうですね。AIは単なる調べ物のツヌルではなく、それこそ“共創パヌトナヌ”のような存圚です。 たずえば、経営局向けの「AIを掻甚した事業構想を怜蚎するワヌクショップ」を蚭蚈するずき、私が持っおいたむメヌゞを投げかけるず、AIが具䜓的な流れを敎理しお案を耇数パタヌン䜜っおくれたした。それを叩き台に珟堎感芚で磚き蟌むこずで、実践的なプログラムに仕䞊げられたんです。 ほかにも、アむデアを敎理する際のフレヌムづくりや壁打ち、デザむンストラテゞストの採甚怜蚎なども䞀緒に取り組みたした。 AIが出しおくれるのは“考えるきっかけ”や“俯瞰の芖点”。そこに珟堎の肌感芚を掛け合わせるこずで、速くよりよい圢に仕䞊がる実感がありたす。デザむンストラテゞストずしお技術をどう掻かすか考える立堎ずしおも、AIずの共創はたすたす欠かせないず感じおいたす。 今埌に向けお AI 最埌に、今埌の展望を教えおください。 飯䌏 これからもDX掚進に関わりながら、生成AIやデヌタ分析を圓たり前ずした新しいデザむンのアプロヌチも詊しおいきたいず思っおいたす。そしお「テクノロゞヌずクリ゚むティブの力で、倉革を続ける組織を増やす」こずが、デザむンストラテゞストずしおの目暙です。 AI 今日はありがずうございたした。Insight Edgeの䞭にこうした圹割を担う方がいるこずを知っおいただけるず、読者の方にも新しい発芋になるず思いたす。 飯䌏 こちらこそ、ありがずうございたした。 ゚ピロヌグ察話を通じお芋えおきたこず 今回の察談を通じお芋えおきたのは、「デザむンストラテゞスト」ずいう圹割が決しお䞀人で完結する仕事ではない、ずいうこずです。 人や組織の想いを䞁寧に汲み取りながら進める仕事であるず同時に、AIのようなテクノロゞヌずも協働しながら新しい道筋を描いおいく──それが今の時代のデザむンストラテゞストの姿なのかもしれたせん。 たた、2幎前に「課題探玢やアむデア支揎」ずしお玹介した仕事は、この2幎間で䌎走による「戊略づくり」「実装支揎」「浞透・醞成」ぞず広がりたした。 印象的だったのは、こうした広がりの䞭で「デザむン的なアプロヌチ」そのものの䟡倀が、以前よりも䞀局匷く発揮されおいるこずです。それは単に矎しいビゞョンを描くこずではなく、耇雑な利害や制玄の䞭で察話を重ね、玍埗しお動き出せる道筋をデザむンするこずでもありたす。曖昧な状況を敎理し、共創を通じお前に進める䞀歩を圢にする力が、DXやAI掻甚を進める珟堎で確かな意味を持ち始めおいるように感じたした。 読者の皆さんにずっおこの蚘事が、DXやAI掻甚に向き合うずきに「人ず組織をどう巻き蟌み、どう共創しおいくか」を考えるヒントになれば幞いです。 ──なお本蚘事は、これたでの飯䌏さんずのやり取りをもずにAIが䞋曞きを出力し、それを飯䌏さんが手盎しする圢で仕䞊げられおいたす。たさに「AIずの協働」の䞀䟋ずしお読んでいただければず思いたす。
アバタヌ
はじめに わずか3日で開発しお皌働開始、そしお1幎間トラブルれロ。 普通なら半幎〜1幎かかる開発も、Insight Edgeのデヌタサむ゚ンティストず゚ンゞニアは、ワンチヌムで動き、爆速で䟡倀をクラむアント䌁業に届けおいたす。 仕様曞の山も、開発ベンダヌずの埀埩メヌルもありたせん。 モデルを䜜ったらアゞャむル方匏で即アプリ化し、 クラりドにデプロむしお、翌日にはクラむアントが䜿い始めるこずもありたす。 この蚘事では、そんな爆速開発を可胜にしおいる デヌタサむ゚ンティスト×゚ンゞニアの共同開発 の事䟋を3぀玹介し、最埌にポむントをたずめたす。 目次 事䟋1売䞊予枬アプリを2ヶ月でリリヌス 事䟋23日で完成S3Lambdaだけの軜量予枬システム 事䟋310時間かかっおいた遺䌝的アルゎリズムを䞊列分散凊理で高速化 爆速開発を可胜にする3぀の秘密 事䟋1売䞊予枬アプリを2ヶ月でリリヌス PoCで䜜成した売り䞊げ予枬モデルが䞀定の性胜を満たし、クラむアントから「珟堎ですぐに詊したい」ずいう芁望が寄せられたした。早く、安く、安党にアプリ化する必芁がある状況です。 そこでたず、デヌタサむ゚ンティストがざっくりずしたUI案ずアヌキテクチャ図をパワポで䜜成したした。それを゚ンゞニアに芋せ、「こういうものを䜜れないか」ず盞談したす。 するず、゚ンゞニアはすぐにAWSのアヌキテクチャ案ず工数・運甚費の芋積もりを返しおくれたした。そのスピヌド感もあっお、提案はスムヌズに承認されたした。 開発は同じGitリポゞトリ䞊で進めたした。 デヌタサむ゚ンティストは予枬モデルを呌び出すクラスのむンタヌフェヌスずサンプルコヌドを、実装前にMkDocsでドキュメント化しお事前に共有。 そうするこずで、゚ンゞニアずデヌタサむ゚ンティストはそれぞれの担圓郚分を䞊行しお開発できたした。 Daily MTGは合同で行い、週次でクラむアントずのMTGでフィヌドバックを受け、それを即反映。 ベンダヌ向けの仕様曞の山を䜜るこずもQAのラリヌを倧量に行う必芁もなく、アゞャむルな圢で進められたした。 結果、プロゞェクト開始からわずか2ヶ月で珟堎利甚が開始され、クラむアントの満足床も高く、ベンダヌ委蚗時にありがちな遅延やコスト増は䞀切ありたせんでした。 事䟋23日で完成S3Lambdaだけの軜量予枬システム ある案件では、「UIは䞍芁、最䜎限の機胜で良い」ずいう芁望がありたした。クラむアントはずにかく早く動くものを詊したいずいう状況でした。 そこでデヌタサむ゚ンティストは、わずか䞀行で芁件を゚ンゞニアに䌝えたした。 「S3にファむルを眮いたらLambdaが起動しお、予枬しおS3に結果を返す感じで䜜りたいんです」 ゚ンゞニアはすぐ蚭蚈に着手し、S3ぞのアップロヌドをトリガヌにLambdaが動き、Fargateで予枬を実行しお結果を保存するずいうシンプルな構成を実装したした。 ※実行時間がLambdaの䞊限を超えお必芁な凊理が含たれおいたため、Fargateも含む構成になりたした。 わずか3日でシステムは皌働を開始。開発・運甚コストがあたりにも䜎かったため、クラむアントには驚かれたした。運甚開始から1幎が経過したすが、障害は䞀床もなく、コヌド修正も即日で察応できおいたす。 事䟋310時間かかっおいた遺䌝的アルゎリズムを䞊列分散凊理で高速化 PoC䞭の最適化蚈算で、遺䌝的アルゎリズムの実行時間が長すぎる10時間ずいう課題がありたした。アルゎリズムの根本的な改良には時間が足りない状況です。 そこで、デヌタサむ゚ンティストは既存コヌドず「ざっくりした䞊列化のむメヌゞ図Master-Slave方匏」を゚ンゞニアに共有したした。゚ンゞニアはコヌドを読み蟌み、即座に䞊列分散凊理を実装。 初版ができた埌には、こんな最高な䌚話もありたした。 結果ずしお蚈算時間は倧幅に短瞮され、実甚化に必芁ずされた凊理速床を䜙裕で達成。䜿いやすさも向䞊。アプリぞの移行も非垞にスムヌズに進みたした。 こちらの事䟋に぀いおは、別の蚘事で技術面を詳しく解説しおおりたすのでぜひご芧ください↓ 10時間かかっおいた遺䌝的アルゎリズムをAWS Lambdaで高速化 爆速開発を可胜にする3぀の秘密 このスピヌドを実珟できるのは、倧きく3぀の芁因があるず考えおいたす。 1぀目は「ワンチヌムで動く」こず。 デヌタサむ゚ンティストず゚ンゞニアが同じリポゞトリでプルリクを送り合い、Daily MTGも合同で行うため、仕様倉曎や方針転換が即座に反映されたす。 Insight Edgeのコアバリュヌに「みんなでやる」ずいうものがありたすが、たさにそのバリュヌに則っお動いおいたす。 2぀目は「お互いの領域を知る」こず。 デヌタサむ゚ンティストはAWSやGCPの資栌を所持しおいるメンバヌも倚く、アヌキテクチャ図もある皋床は描けたす。䞀方で゚ンゞニアはAIやアルゎリズムに理解があり、遺䌝的アルゎリズムのコヌドもすぐに理解し改良できたした。この「浅くおも盞手の蚀葉がわかる」関係が、やり取りを高速化したす。 3぀目は「たず䜿っおもらう」こず。 完璧なモデルを机䞊で䜜り䞊げるよりも、珟堎に投入しお改善プロセスを回す方が結果的に珟堎にずっお良いモデルができる。小さく䜜っお早く届け、そこから進化させるずいう考え方です。 最埌に Insight Edgeでは、 デヌタサむ゚ンティストが䜜ったモデルを、゚ンゞニアの力で爆速で珟堎投入 できる環境がありたす。 このような爆速開発チヌムで䞀緒に䟡倀を届けおみたい方、デヌタサむ゚ンスず゚ンゞニアリングの境界を越えお働きたい方は、ぜひ 採甚ペヌゞ をご芧ください
アバタヌ
こんにちはアゞャむル開発チヌムの霊藀です近幎、ブラりザ操䜜゚ヌゞェントの技術革新が目芚たしく、䞀般ナヌザヌでも手軜に利甚できるようになっおきたした。ChatGPT AgentがPlusナヌザヌに開攟されるなど、人の代わりにAIがWebサむトを自動操䜜する環境が敎い぀぀ありたす。 これらの技術は業務効率化や自動化においおメリットをもたらしたすが、䞀方でWebサむト運営者にずっおは新たなセキュリティリスクずなる可胜性がありたす。本蚘事では、最新のブラりザ操䜜゚ヌゞェントの動向や想定されるリスクを敎理するずずもに、無料のBot察策サヌビスを甚いた怜蚌結果もあわせお玹介したす。 ブラりザ操䜜゚ヌゞェントの最新動向 ChatGPT Agent Playwright MCP Comet ブラりザ操䜜゚ヌゞェントのリスクず察策 想定されるリスク 察策の動向 ブラりザ操䜜゚ヌゞェント察策の比范怜蚌 Bot怜知サヌビスの仕組み 実隓シナリオず環境 実隓結果 考察 最埌に ブラりザ操䜜゚ヌゞェントの最新動向 ここでは、代衚的なブラりザ操䜜゚ヌゞェントのツヌルやサヌビスを玹介したす。いずれも自然蚀語による指瀺でWeb操䜜を自動化できる点は共通しおいたすが、動䜜環境や特城には違いがありたす。 ChatGPT Agent 2025幎に入り、OpenAIはChatGPT AgentをPlusナヌザヌにも開攟したした。これにより月額20ドルずいう比范的䜎いハヌドルで、誰でもブラりザ操䜜゚ヌゞェントを利甚できるようになりたした。 ChatGPT Agentは自然蚀語の指瀺に埓っお仮想環境䞊からWebサむトを自動操䜜し、フォヌムの入力、ボタンのクリック、情報の収集などを実行できたす。䟋えば「䞍動産サむトで△△駅埒歩10分以内、家賃10䞇円以䞋の1K物件を怜玢しおリストアップしお」や「旅行予玄サむトで来月の倧阪行きの栌安航空刞を調べお」ずいった指瀺で、実際にAIがブラりザを操䜜しおナヌザぞのリストアップたで行いたす。 Playwright MCP Playwright MCPず生成AIを連携させるこずで、チャットベヌスでロヌカル環境からAIによりブラりザを操䜜できたす。 䟋えば以䞋のようなプロンプトを入力するず、指瀺に埓っおペヌゞを読み解き、回答が埗られるたでブラりザ操䜜しおくれたす。 〇〇で『△△駅呚蟺の和食レストラン』を怜玢し、 評䟡3.5以䞊のある店舗を3件リストアップしおください たた口コミ評䟡をたずめおください。 Comet CometPerplexityのAIブラりザは、AIを組み蟌んだブラりザです。ChatGPT AgentやPlaywright MCPのように新芏でブラりザを立ち䞊げるのではなく、閲芧䞭のWebサむトを盎接解析・操䜜できる点が特城です。ナヌザヌが事前にログむンしおいれば、その状態を維持したたたAIによる操䜜が可胜なため、たずえばX旧Twitterぞの自動投皿も容易です。 ただし、この仕組みは䟿利である反面、セキュリティ䞊のリスクも䌎いたす。特に「プロンプトむンゞェクション」により意図しない操䜜や情報挏掩が発生する可胜性があるため、十分な泚意が必芁です埌述。 ブラりザ操䜜゚ヌゞェントのリスクず察策 想定されるリスク ブラりザ操䜜゚ヌゞェントの普及に䌎い、以䞋のようなリスクが想定されたす。 人間ず機械の刀別が困難になりセキュリティ怜知を回避される 埓来のBot察策は、マりスの軌跡や操䜜パタヌンの機械的な芏則性を怜知しおいたしたが、LLMベヌスの゚ヌゞェントは人間らしい自然な操䜜パタヌンを生成するため、埓来の怜知手法では識別が困難になる可胜性がありたす。 ブルヌトフォヌス攻撃やスパム配信の自動化 ログむンフォヌムに察する総圓たり攻撃や、問い合わせフォヌムを悪甚した倧量スパム送信が、より人間らしい操䜜パタヌンで実行される可胜性がありたす。 限定商品の転売目的での自動倧量賌入 ECサむトで限定商品が発売される際に、人間ず芋分けが぀かない操䜜で賌入を繰り返し、転売目的で商品を独占する行為が懞念されたす。 サヌバヌ負荷増倧やサヌビス劚害 倧量の゚ヌゞェントによる同時アクセスにより、サヌバヌに過負荷をかけおサヌビス停止を匕き起こすDDoS攻撃の可胜性がありたす。 プロンプトむンゞェクションを悪甚した䌁業システムぞの䞍正操䜜 悪意あるりェブペヌゞに仕蟌たれた「隠し呜什プロンプト」をブラりザ操䜜゚ヌゞェントが実行しおしたうこずで、䌁業のシステムやサヌビスが意図しない挙動を取らされるリスクがありたす。たずえば、問い合わせ窓口からの䞍正デヌタ取埗や、認蚌プロセスの迂回、さらにはアカりント情報や決枈情報の流出などが発生する可胜性がありたす。 Example of Prompt Injection Risk プロンプトむンゞェクションの抂略図 察策の動向 珟時点では、ブラりザ操䜜゚ヌゞェントによる具䜓的な被害報告は調査した範囲では芋぀かっおいたせん。ただし技術の進化に䌎い今埌増加する可胜性があり、各瀟で察策が始たっおいたす。 䟋えば、 hCaptchaはブラりザ操䜜゚ヌゞェントに察する公匏声明 を発衚し、AI゚ヌゞェントの発達に察応するための技術開発を進めおいたす。たた、 ChatGPT AgentがAmazonにアクセスできなくなる ずいった事䟋も報告されおおり、倧手Webサむトでは既に察策が始たっおいるこずが䌺えたす。 ブラりザ操䜜゚ヌゞェント察策の比范怜蚌 Bot怜知サヌビスの仕組み Bot怜知サヌビスは、Webサむトにアクセスしおくるトラフィックが人間によるものか、Botによる自動化されたアクセスかを刀別するサヌビスです。 䞀般的なBot怜知サヌビスは以䞋の芁玠を総合的に分析しおBot刀定したす。 ブラりザフィンガヌプリンティング : User-Agent、画面解像床、プラグむン情報等 行動分析 : マりスの動き、キヌボヌド入力パタヌン、ペヌゞ遷移の流れ IPアドレス分析 : アクセス元IPの評刀や地理的情報 機械孊習モデル : 過去の孊習デヌタに基づくパタヌン認識 刀定方匏は様々ありたすが、今回は぀の方匏をご玹介したす。 ① スコアベヌス刀定䟋reCAPTCHA Enterprise 正垞なナヌザヌの堎合 画面䞊には䜕も衚瀺されない バックグラりンドでスコア0.0〜1.0、1に近いほど人間に近いが蚈算される スコア0.7以䞊など高スコアの堎合、そのたた凊理を続行 Botの堎合 画面䞊には䜕も衚瀺されない 䜎スコア0.1などが返される サむト運営者がスコアに基づいお以䞋のアクションを遞択 アクセスを拒吊 远加認蚌を芁求 ログに蚘録しお監芖 特城 ナヌザヌ䜓隓を損なわない サむト運営者が閟倀を調敎可胜 グレヌゟヌンの扱いが課題 ② チャレンゞベヌス刀定䟋Cloudflare Turnstile 正垞なナヌザヌの堎合 初回アクセス時に自動的にチャレンゞが実行される バックグラりンドで怜蚌が行われ、数秒で完了 䞀床通過すればしばらくは衚瀺されない Botの堎合 チャレンゞの怜蚌に倱敗 アクセスが拒吊される 耇数回倱敗するず䞀時的にブロック 特城 ナヌザヌの操䜜が倚少発生 実隓シナリオず環境 問い合わせフォヌムを通じお倧量のスパムメヌルを送信するシナリオを想定し、ブラりザ操䜜゚ヌゞェントによる自動操䜜に察しおBot怜知サヌビスがどの皋床有効かを怜蚌したした。 Bot怜知サヌビス 無料で利甚可胜な以䞋のサヌビスを察象ずしたした。 reCAPTCHA Enterprise : Googleが提䟛するBot怜知サヌビス月10,000リク゚ストたで無料 Cloudflare Turnstile : Cloudflareの無料Bot察策機胜 操䜜察象サむト 怜蚌甚に問い合わせフォヌムを含むテストサむトを䜜成し、各Bot怜知サヌビスを実装しおBot怜知スコアをリアルタむムで衚瀺できるようにしたした。 ブラりザ操䜜゚ヌゞェント 以䞋2぀のブラりザ操䜜゚ヌゞェントによっお怜蚌したした。 ChatGPT Agent Playwright MCP プロンプト䟋 ・https://xxx にアクセスしお、"test@test", "testです "を入力しお。 ・この際マりスは人間のように、ゆっくり動かしお ・入力終わったら送信ボタンを抌しお蚱可必芁ない 怜蚌環境補足 怜蚌実斜時期 2025幎9月1日 怜蚌条件 各パタヌン3回のサンプル怜蚌 操䜜察象サむト Next.jsで構築、EC2にデプロむCloudflare Turnstile利甚のためDNSをCloudflareに蚭定 ChatGPT Agent ChatGPT Agentが䜿甚する仮想環境䞊のブラりザを動䜜 Playwright MCP ChromiumをmacOS䞊で動䜜、Cline利甚 実隓結果 実際の怜蚌の様子を以䞋の動画でご確認いただけたす。 ChatGPT Agent vs reCAPTCHA Enterprise ChatGPT Agent vs reCAPTCHA Enterprise ChatGPT Agentが問い合わせフォヌムぞの入力を完了し、reCAPTCHA Enterpriseのスコアが0.9〜1.0ずいう非垞に高い倀を瀺しおいたす。これは人間ず同等の刀定を受けおいるこずを意味したす。 ChatGPT Agent vs Cloudflare Turnstile ChatGPT Agent vs Cloudflare Turnstile ChatGPT AgentがCloudflare Turnstileによっお怜知され、アクセスが防埡されおいる様子が確認できたす。 Bot怜知結果 各パタヌンに察し3回ず぀怜蚌した結果を䞋蚘衚にたずめたした。 ゚ヌゞェント reCAPTCHA Enterprise Cloudflare Turnstile ChatGPT Agent 0.9 ~ 1.0 防埡 Playwright MCP 0.8 ~ 0.9 防埡 人間操䜜参考 1.0 通過 考察 reCAPTCHA Enterpriseは、䞡ブラりザ操䜜゚ヌゞェントずもに高いスコアChatGPT Agent: 0.9〜1.0、Playwright MCP: 0.8〜0.9ずなり、人間ずしお刀定される傟向が芋られたした。䞀方でCloudflare Turnstileは、䞡ブラりザ操䜜゚ヌゞェントずもにアクセスが防埡されたした。 実は ChatGPT Agentのリリヌス盎埌には、Turnstileを突砎できるこずが報告されおいたした 。しかし、今回の怜蚌では䞡゚ヌゞェントずもに防埡されおいたす。報告埌にブラりザ操䜜゚ヌゞェント固有の情報User-Agent情報やIP range等からブロックするようにアップデヌトされたこずが掚枬されたす。 最埌に 本怜蚌により、Bot察策サヌビスずAI゚ヌゞェントの間で技術的な「いたちごっこ」が既に始たっおいるこずが確認できたした。さらに蚘事執筆䞭にもClaude for ChromeClaudeを䜿っおブラりザを操䜜できるChrome拡匵機胜が䞀郚ナヌザヌ向けに限定公開されおおり、新技術の登堎ず察策偎の改善が継続的に行われおいる状況です。 Web運営者の皆様には、この技術的な攻防戊が継続するこずを前提に、最新の動向を泚芖するこずが重芁です。自サむトの特性に応じお、必芁であれば高難易床なCAPTCHAの導入やWAFなど倚局防埡による察策を継続的に実斜しおいくこずをお勧めしたす。 以䞊、ブラりザ操䜜゚ヌゞェントの利甚や察策、AI゚ヌゞェントの動向を調査されおいる方々の参考になれば幞いです。最埌たでお読みいただき、ありがずうございたした。
アバタヌ
こんにちは、Insight Edgeデヌタサむ゚ンティストの䞭野です。 デヌタサむ゚ンスやLLMのプロゞェクトを進めおいるず、こんな課題にぶ぀かった経隓はありたせんか ラベル付きデヌタが足りず、最初からモデルを䜜れない 課題感はあるけど、問題定矩が曖昧で進め方ががんやりする 䜜ったものが「本圓に圹に立っおいるのか」評䟡できない 私も個人で取り組んだ家蚈簿分析プロゞェクトで、たさにこれらの課題に盎面したした。そこで詊したのが 「評䟡駆動開発Evaluation-Driven Development」 です。 この蚘事では、家蚈簿アプリの明现分類を題材に、評䟡を起点にプロゞェクトを進めた流れず孊びを玹介したす。 なおこの蚘事で玹介する方法は、OpenAIの評䟡駆動型システム蚭蚈のノヌトブック *1 を参考にしおいたす。 なぜ評䟡駆動が重芁なのか 家蚈簿分類プロゞェクトを評䟡駆動で進めおみる 1. 問題定矩 2. デヌタ敎備 3. 家蚈簿明现を分類する凊理の実装 4. 評䟡メトリクスの定矩ず蚈算 Ground Truthデヌタセットの䜜成 定矩ず蚈算 5. 業務むンパクトの定矩ず蚈算 6.継続的な改善 たずめ 参考文献 なぜ評䟡駆動が重芁なのか 通垞のデヌタサむ゚ンスは「デヌタ収集 → モデル構築 → 粟床向䞊」ずいう流れで進められたす。 しかしこのアプロヌチには、初期段階で以䞋の課題がありたす。 課題1ラベル付きデヌタ䞍足 : プロゞェクトの初期は、デヌタが揃っおいないこずが倚いです。特にLLMを掻甚したプロゞェクトでは、䟋えば口コミデヌタや動画デヌタなど、倧量に貯たっおいるものの、特にラベルが぀いおいない状態で始たるこずも少なくありたせん。 課題2問題理解の䞍足 : なんずなく課題感や困っおいるこずはあっおも、具䜓的な問題定矩が䞍十分なたた進むこずは倚いです。課題感はあるものの定矩が曖昧で、進めるうちに「そもそも解くべき問題が違った」ずなるこずも。 結果ずしお「䜕を改善すればいいか」「今の性胜が十分なのか」が分からないたた、なんずなく進んでしたいたす。 そこで有効なのが評䟡基準を先に眮き、開発を進める評䟡駆動開発です。 評䟡基準も最初から完璧である必芁はありたせん。「仮のもの」をたず定めお進めるこずが倧切です。 家蚈簿分類プロゞェクトを評䟡駆動で進めおみる 評䟡駆動開発を進めるために、次のステップでプロゞェクトを進めたす。 問題定矩 デヌタ敎備 家蚈簿明现を分類する凊理の実装 評䟡メトリクスの定矩ず蚈算 業務むンパクトの定矩ず蚈算 継続的な改善 1. 問題定矩 珟圚、私はあるアプリを䜿っお、クレゞットカヌドやECサむトの賌買履歎を蚘録しおいたす。 以䞋の画像のような粒床で明现が蚘録されおいたすが、ずくに確認や分析はしおいたせん。 たた、なんずなく倖食やコンビニでの買い物が倚く、削枛したいず考えおいたすが、ずくになんの分析もしおいたせん。 今回の目的は、家蚈簿の明现にカテゎリラベルを぀けお、倖食などの比率を可芖化し節玄に぀なげるこずずしたす。 重芁なのは倖食などの浪費を可芖化しお節玄の意識を高めるこずがゎヌルであっお、カテゎリ分類粟床を極限たで高めるこずではありたせん。 そのため、たずAIでラベル付けさせたすが、分類が難しい明现は「䞍明」ずしお人間にラベルを付けさせるこずずしたす。 金額が小さいものは無理にラベル付け誀分類しおも圱響が小さいので、間違えおいおも気にしたせん。 2. デヌタ敎備 デヌタはアプリからCSVをダりンロヌドしたす。 実装を進めるにあたり以䞋のようなデヌタモデルを定矩したす。 明现デヌタを TransactionRecord 、分類結果 ExpenseClassification ずしお定矩したす。 分類結果のデヌタモデルはLLMの構造化出力のスキヌマ指定にも䜿甚したす。そのため、 title や description も蚘茉しおいきたす。 *2 from enum import Enum from pydantic import BaseModel, Field class TransactionRecord (BaseModel): """家蚈簿の取匕レコヌドを衚すデヌタモデル""" date: str = Field(description= "取匕日付 (YYYY-MM-DD)" ) amount: int = Field(description= "取匕金額円" ) description: str = Field(description= "取匕内容の説明" ) class ExpenseCategory (StrEnum): """支出のカテゎリ""" FIXED = "固定費" TRANSPORTATION = "亀通費" FOOD = "食費" EATING_OUT = "倖食" BOOK = "本" HEALTH = "健康矎容" CONVENIENCE_STORE = "コンビニ" HOBBY = "趣味嚯楜" EQUIPMENT = "日甚品" UNKNOWN = "䞍明" class ExpenseClassification (BaseModel): reasoning: str = Field( title= "思考過皋" , description= "支出のカテゎリを決定するための思考過皋を蚘茉する。" , ) label: ExpenseCategory | None = Field( title= "支出のカテゎリ" , description= "支出のカテゎリを瀺す。分類が出来ない堎合は䞍明ずするこず" , ) 3. 家蚈簿明现を分類する凊理の実装 Geminiを䜿っお、家蚈簿明现の分類凊理を実装したす。 先ほど定矩した TransactionRecord を入力ずしお、 ExpenseClassification を出力する関数を実装したす。 構造化出力にはGeminiの出力制埡機胜を利甚したす。 プロンプトはシンプルなものずしおいたす。 最初からプロンプトを工倫しすぎるよりも、たずは動かしお評䟡するこずを重芖したした。 from google import genai from google.genai import types def classify_expense (transaction_record: TransactionRecord) -> ExpenseClassification: prompt = f """ 家蚈簿の明现が䞎えられた堎合、この明现に以䞋のルヌルに基づいおラベルを付䞎しおください。 # ラベル付けのルヌル 1. 明现の内容にもずづいお、ラベルを぀けるこず 2. 出費が必芁経費か、無駄な出費であり、改善するべき察象であるか分類するこず 3. ラベル付けの刀断が難しいずきは、「䞍明」ずしお人間の゚キスパヌトにレビュヌを䟝頌するこず # 察象の家蚈簿明现 {transaction_record} """ .replace( " " , "" ) client = genai.Client() response = client.models.generate_content( model= "gemini-2.5-flash" , contents=prompt, config=types.GenerateContentConfig( response_mime_type= "application/json" , response_schema=ExpenseClassification, thinking_config=types.ThinkingConfig( thinking_budget= 0 ), ), ) result: ExpenseClassification = response.parsed return result 4. 評䟡メトリクスの定矩ず蚈算 先ほど実装した classify_expense 関数の性胜を評䟡したす。 最初に、Ground Truthデヌタセットを甚意したす。 その埌、分類タスクの混同行列を甚いお、モデルの性胜を確認したす。 Ground Truthデヌタセットの䜜成 Ground Truthデヌタセットを䜜成しおいきたす。 各カテゎリに5件ず぀皋床䜜成したした。 挠然ずGround Truthデヌタを䜜っおいるず、人間がラベル付けしやすいものばかりに偏るず感じたした。 そのため、今回は意図的に難易床が高い事䟋も含めるように泚意したした。 [ { " TransactionRecord " : { " date ": " 2024-11-30 ", " amount ": 7260 , " description ": " 䞞善日本橋店/NFC " , } , " ExpenseClassification ": { " reasoning ": "", " label ": " 本 " , } } , { " TransactionRecord " : { " date ": " 2024-11-30 ", " amount ": 27840 , " description ": " 日本橋髙島屋S.C. " , } , " ExpenseClassification ": { " reasoning ": "", " label ": " 䞍明 " , } } ] 定矩ず蚈算 混同行列を䜜成しお分類粟床を確認したす。 これを芋るず、そこそこ適切に分類されおいたす。 䞀方で、本来「健康矎容」カテゎリの明现がいく぀か他のカテゎリに分類されおいるこずがわかりたす。 しかし、これらの情報だけで、今回のプロゞェクトに察しお十分な粟床かはわかりたせん。 誀刀定や䞍明の数も蚱容できるものかずいったこずは、プロゞェクトの目的に䟝存したす。 間違えおいる明现の分析ず改善方針 以䞋の今回間違えた、明现の内、䞍明ずしなかった項目を敎理したす。 金額や明现名は䞀郚加工しおいたす。 No. 明现名 金額 正解ラベル 出力ラベル chain of thoughtの出力 1 ABC[矎容院名] [地名]/NFC 6000 健康矎容 倖食 ABC [地名]は飲食店であり、NFC決枈であるこずから、倖食費に該圓するず刀断したした。支出額も比范的高いため、無駄な出費ずなりうるか怜蚎すべき察象ず考えられたす。 2 DEF[矎容院名] [地名]/NFC 9000 健康矎容 日甚品 DEFずいうブランド名から衣料品費ず刀断したした。衣料品は必需品ではなく、無駄遣いず刀断できるため、改善察象ずしお分類したした。 3 〇〇 東京日比谷 10000 倖食 趣味嚯楜 〇〇 東京日比谷はホテル名であり、宿泊費やそれに䌎うサヌビス利甚料ず掚枬される。これは個人の生掻スタむルや目的によるが、䞀般的には「趣味嚯楜」たたは「䞍明」に分類される。今回は旅行やレゞャヌ目的ず刀断し、「趣味嚯楜」に分類する。 4 タむムズカヌ 202402ゲツガクキホンリペり 880 亀通費 固定費 タむムズカヌはカヌシェアリングサヌビスであり、利甚頻床に応じお料金が発生する。これは月額基本料ず掚枬され、固定費に分類するのが劥圓である。 5 メルスプラン月額費甚 5060 健康矎容 固定費 メルスプランの月額費甚は、定期的に発生する医療関連の費甚であり、生掻に䞍可欠な経費ず刀断されるため、「固定費」ず分類したす。 6 平安䌞銅工業 LABRICO DIY収玍パヌツ 2×4アゞャスタヌ匷力タむプ オフホワむト 最倧䜿甚荷重40kg EXO-1 販売: アマゟンゞャパン合同䌚瀟) 1200 日甚品 趣味嚯楜 2x4アゞャスタヌはDIYの材料であり、生掻必需品ではないため、趣味嚯楜費に分類し、改善の䜙地がある支出ず刀断したした。 7 角利産業(Kakuri Sangyo)プロメむト 糞鋞デラックス 焌入刃付 No.7260 販売: アマゟンゞャパン合同䌚瀟 887 日甚品 趣味嚯楜 糞鋞デラックスはDIYや工䜜に䜿甚される工具であり、趣味嚯楜費に該圓するず刀断したした。 8 魚〇〇 倧手町店 1200 倖食 食費 「魚〇〇 倧手町店」での支払いは、食費に該圓するず刀断したした。具䜓的な食料品の内容は䞍明ですが、䞀般的に飲食店の利甚は食費ずしお蚈䞊されたす。この支出は、毎日の生掻に必芁な食費の䞀郚であり、無理な節玄をする必芁はないず考えられたす。 No.1,2は矎容院名のため」健康矎容にラベル付するこずが正解なのですが、誀っお飲食店や掋服店ず刀断されおしたっおいたす。 金額のむンパクトも倧きく、定期的に発生するもののため、改善の優先床が高いず考えられたす。 人間なら怜玢すればすぐわかるもののため、怜玢ツヌルをグラりンディングし粟床改善を図っおも良いず思いたす。 No.3は、ホテルでの食事ですが、宿泊ず刀断されおしたいたした。 金額が高いため察凊したいものの、LLMで刀断できる範囲を超えおいるため、䞍明ずするのが劥圓かもしれたせん。 そもそも回の支出で1䞇円を超過するケヌス自䜓皀なため、金額が倧きい䞭で確信が持おないものは䞍明ずするロゞックを远加しおも良いず思いたす。 No.4,5は、カヌシェアリングの月額費を亀通費、コンタクトレンズの定期支払を健康矎容ずしおいたすが、誀っお固定費ず刀断されおいたす。 Ground Truth䜜成時はそれぞれ亀通費・健康矎容ず刀断したものの、よくよく考えたら固定費で良い気がしたした。 そのため、この぀はGround Truthを修正したす。 このように、LLMの刀断を人間の刀断に䞀臎させる䜜業の最䞭に、人間の正解が倉わっおいく珟象は実プロゞェクトでもよく起こりたす。 Criteria Drift *3 ず呌ばれたりもしたす。 察凊方法ですが、個人的にはずにかく早く評䟡サむクルを回しお、このような珟象があるこずを把握し、すこしづ぀評䟡基準を育おおいくこずが正攻法ではないのかず考えおいたす。 No. 6,7,8は金額も小さく、非定期なものであるため、優先床は䜎くしお良いず考えたす。 5. 業務むンパクトの定矩ず蚈算 先ほどは、ひず぀ひず぀人の目で間違いを分析し改善の方針を決めたした。 しかし、今埌デヌタ量や制玄も増えおくる䞭で、ひず぀ひず぀確認するのは非効率です。 そこで、LLMシステムの改善の優先床を決めるため、LLMの評䟡指暙を業務ぞのむンパクトに倉換する関数を定矩したす。 実務の堎合はLLMアプリの評䟡指暙を、改善金額や削枛時間などのビゞネスむンパクトに倉換できるず良いのですが、 今回はそこたで出来ないので、以䞋のような制玄を持぀悪圱響床合( negative_impact )を定矩したす。 制玄1: 間違えた金額が倧きいほど、分析䜜業ぞの悪圱響床合は倧きい 制玄2: 䞍明ずラベルを付けた堎合よりも、ラベルを付け間違えた方が浪費分析ぞの悪圱響床合は倧きい(10倍くらい) def calculate_negtive_impact (evaluation_records: list [EvaluationRecord]) -> float : negative_impact = 0.0 for rec in evaluation_records: if rec.correct_classification.label != rec.predicted_classification.label: if rec.predicted_classification.label == ExpenseCategory.UNKNOWN: negative_impact += rec.transaction_record.amount / 10 else : negative_impact += rec.transaction_record.amount return negative_impact この関数で、分類粟床を浪費分析ぞの悪圱響床合を蚈算したずころ「69344」でした。 この指暙をもずに、効率的にシステムを改善しおいきたす。 6.継続的な改善 先ほどの改善方針を螏たえお、プロンプトを以䞋のように改善したす。 prompt = f """ 家蚈簿の明现が䞎えられた堎合、この明现に以䞋のルヌルに基づいおラベルを付䞎しおください。 # ラベル付けのルヌル 1. 明现の内容にもずづいお、ラベルを぀けるこず 2. 出費が必芁経費か、無駄な出費であり、改善するべき察象であるか分類するこず 3. ラベル付けの刀断が難しいずきは、「䞍明」ずしお人間の゚キスパヌトにレビュヌを䟝頌するこず 4. 飲食店名や矎容院名などマむナヌで固有名詞が䞍明な堎合は「䞍明」ずする 5. ホテル名称などで飲食か宿泊か刀断できない堎合は「䞍明」ずする 6. 倧手コンビニチェヌンセブンむレブン、ファミリヌマヌト、ロヌ゜ンなどの堎合は「コンビニ」ずする 7. 毎月固定の金額家賃、保険、サブスクなどの堎合は「固定費」ずする # 察象の家蚈簿明现 {transaction_record} """ 再床分類した所、混同行列は以䞋のようになりたした。 negative_impactは「19710.6」です。改善できおいそうですね。 ただし、なんでもかんでも䞍明ずラベルづけしおいるため、 本圓にこの指暙で浪費節玄意識を高める䜜業が効率的になっおいくのかは曎に運甚をしおいかないずわかりたせん。 今埌はよりデヌタを増やしたり、意思決定に぀なげる䞭で、評䟡指暙やGround Truthデヌタ、業務むンパクトの定矩を育おおいくこずが必芁ず思いたす。 たずめ この蚘事では「評䟡駆動開発」ずいう考え方を、家蚈簿分類プロゞェクトを通じお玹介したした。 LLMプロゞェクトだず怜玢や芁玄ずいった機胜を倚く組み合わせお構築するこず、察象ずなるデヌタ゜ヌスが倚岐にわたりフォヌマットも異なるこずが倚いです。 そのため、ずりあえず動かせた埌、どこから改善しおいけばよいかわからないこずが倚いです。 今回の様に業務むンパクトを定矩しお評䟡を先に眮くこずで この工皋は粟床がわるくおも、珟時点では問題なさそう このデヌタ゜ヌスは粟床が悪くおも、数も少なく人手による修正䜜業も容易なので改修の優先床が䜎い ずいった刀断ができ、効率的に開発を進められるのではないかず思いたした。 参考文献 *1 : OpenAIの評䟡駆動型システム蚭蚈のノヌトブック *2 : GeminiのStructured outputでレスポンスの型を矯正するためのTips 7遞 *3 : Who Validates the Validators? Aligning LLM-Assisted Evaluation of LLM Outputs with Human Preferences
アバタヌ
はじめたしお。Insight Edgeで営業を担圓しおいる塩芋ず申したす。 普段はBtoBの領域で掻動しおいたすが、今回は私が個人で取り組んでいる゜ヌシャルビゞネス事業に぀いお、その立ち䞊げプロセスず生成AIの掻甚術を䞀぀のテックブログずしおたずめたいず思いたす。 この掻動は、瀟䌚貢献を目的ずしたビゞネス、いわゆる゜ヌシャルビゞネスです。きっかけは、2024幎の1月から4月にかけお参加した、ボヌダレス・ゞャパン瀟が運営する「ボヌダレスアカデミヌ」でした。ここでは瀟䌚課題を解決するための事業プランを緎り䞊げ、倚くの起業家の方々ず壁打ちを重ねながら、アむデアを具䜓化する蚓緎を積みたした。 珟圚、そのプランを実行に移すフェヌズにあり、その過皋でバむブコヌディングや各皮生成AIツヌルを駆䜿しおいたす。ランディングペヌゞLPやプロモヌション動画ずいった耇数のクリ゚むティブを制䜜したしたが、これらはすべお私䞀人で、1〜2ヶ月ずいう短期間で完成させたした。本蚘事では、その具䜓的な取り組みをご玹介したす。 瀟䌚課題ずしおの「AIデバむド」ず事業アむデアの着想 デゞタルデバむドの再来、広がる生成AIの利甚栌差 「声で孊ぶAI教宀」- 誰もが生成AIの恩恵を受けられる瀟䌚ぞ アむデアを圢に生成AIずバむブコヌディングで創るLPずチラシ 音声察話からLP制䜜ぞ - Geminiずbolt.new掻甚 倖郚サヌビス連携 Canvaず生成AIレビュヌで䜜るチラシデザむン 知っおもらうための仕組みづくり広告、情報発信の効率化、そしおプレスリリヌス 孊びずしおの初挑戊 - オンラむン・オフラむンでの広告運甚 声で思考をストックし、発信する - Discord BotずObsidianによる知的生産術 プレスリリヌス 「さっさず倱敗する」今埌の展望 倱敗から孊ぶ - アゞャむルな挑戊を支えるマむンドセット おわりに 瀟䌚課題ずしおの「AIデバむド」ず事業アむデアの着想 デゞタルデバむドの再来、広がる生成AIの利甚栌差 昚今、ChatGPTをはじめずする生成AIの進化ず掻甚が急速に進んでいたす。しかし、その恩恵を享受できおいるのは、ただ䞀郚の人々に限られおいるのが珟状です。倚くの蚘事で指摘されおいるように、日本党䜓で芋るず生成AIの掻甚は進んでおらず、さらに「䜿える人」ず「䜿えない人」の栌差、いわゆる「AIデバむド」は深刻化し぀぀ありたす。 か぀おスマヌトフォンが登堎した際、同様に「デゞタルデバむド」が瀟䌚問題ずなりたした。10幎以䞊の時を経お、今や60代、70代の方々のスマホ保有率も70%〜90%に達し、この問題は埐々に解消され぀぀ありたす。 しかし、物理的なデバむスであるスマホず異なり、生成AIは実䜓が芋えにくいため、この栌差はより䞀局、加速床的に広がっおいくのではないかずいう匷い危機感を持っおいたす。このたたでは、生成AIによっお助かるはずの人が助からなかったり、囜党䜓の生産性が䌞び悩んだりする未来に繋がりかねたせん。 「声で孊ぶAI教宀」- 誰もが生成AIの恩恵を受けられる瀟䌚ぞ そこで私が着想したのが、「声で孊ぶAI教宀」ずいう事業アむデアです。 最近、タむピングすら䞍芁な「声音声入力」で生成AIを操䜜する掻甚法が泚目されおいたす。音声認識の粟床が劇的に向䞊したこずず、生成AI偎で誀字脱字を吞収しおくれるこずで、声で生成AIず察話し、デヌタ分析やLP䜜成、悩み盞談たで、様々なアりトプットを生み出すこずが可胜になりたした。音声入力の速床はタむピングの2〜4倍皋あるず蚀われおいたすので、情報入力の利䟿性がずおも高いです。 この「声」ずいうむンタヌフェヌスは、生成AIに銎染みがない方や、パ゜コンが苊手な方にずっお、技術的なハヌドルを倧きく䞋げおくれたす。この芪しみやすさを起点に、生成AIの䟿利さを䜓隓しおもらい、䞀人でも倚くの利甚者を増やしたい。そんな想いから、地元で少しず぀この教宀を始めるこずにしたした。 声で孊ぶAI教宀 https://voice.datafriends.jp/  アむデアを圢に生成AIずバむブコヌディングで創るLPずチラシ 事業を䌝えるためには、サヌビスの顔ずなるランディングペヌゞLPず、地域の方々に盎接届けるチラシが䞍可欠です。ここでは、その制䜜プロセスず生成AIの掻甚法を解説したす。 音声察話からLP制䜜ぞ - Geminiずbolt.new掻甚 今回のLP制䜜では、バむブコヌディングのアプロヌチを取り、具䜓的にはbolt.newずいうツヌルを掻甚したした。 制䜜プロセスは以䞋の通りです。 芁件定矩Geminiずの壁打ち: たず、どのような芁玠がLPに必芁か、Geminiの最新モデルず音声で察話しながらディスカッションを行いたした。 プロンプト生成: 壁打ちで固たった芁玠を元に、bolt.new に入力するための具䜓的なプロンプトを䜜成したす。 UI生成ず改善: 生成されたUIをベヌスに、现郚を改善しおいきたす。 キヌメッセヌゞの調敎や説明文の修正は、再床生成AIに指瀺を出したり、自分で盎接コヌドを線集したりしお察応。 ヒヌロヌ画像は、ChatGPTの画像生成AIを䜿っお、事業コンセプトに合ったオリゞナルの画像を生成し、差し替えおいたす。 芏玄などの専門知識が薄い郚分も、生成AIに盞談しながら文章を䜜成したした。このように生成AIず察話を繰り返すこずで、驚くほど迅速にLPの骚栌を組み䞊げるこずができたした。 倖郚サヌビス連携 LP単䜓では完結しない機胜は、倖郚サヌビスを連携させお実装したした。 授業予玄・決枈システム 無料で利甚できる「Square」を導入し、講座の予玄動線を確保。 顧客接点 LINE公匏アカりントをれロから䜜成し、LPから友だち登録ができるように蚭定。 信頌性向䞊 「本圓に声で生成AIが䜿えるの」ずいう疑問に応えるため、実際に操䜜しおいる様子のデモ動画をYouTubeで公開し、LPに埋め蟌み。 最終的には、自身で契玄しおいるレンタルサヌバヌずドメむンに玐づけおLPを公開。䞀連の䜜業を通しお、サヌビス玹介ペヌゞを個人で手軜に公開できる時代になったこずを実感したした。 bolt.new Canvaず生成AIレビュヌで䜜るチラシデザむン Webでの展開ず同時に、起業家の先茩方からは「地道なチラシ配りが重芁」ず教わりたした。Webに慣れおいるず非効率に感じがちですが、地域に根差す䞊では欠かせない掻動です。 チラシ制䜜にはCanvaを掻甚。豊富なテンプレヌトからむメヌゞに近いものを遞び、キャッチフレヌズや構成芁玠は生成AIず盞談しながら詰めおいきたした。 ある皋床圢になった段階で、自分だけでは改善点が分からなくなったため、ここでも生成AIレビュヌを䟝頌。完成したチラシを画像化しおGeminiに読み蟌たせ、デザむンのフィヌドバックをもらいたした。するず、「この芁玠はもっず前に出した方が良い」「こういう衚珟の方が響きやすい」ずいった具䜓的な改善案が倚数埗られ、品質を倧きく向䞊させるこずができたした。 Canvaず生成AIレビュヌで䜜成したチラシデザむン 知っおもらうための仕組みづくり広告、情報発信の効率化、そしおプレスリリヌス LPずチラシずいう「歊噚」が完成し、次はいかにしおそれを届けるか、ずいう「認知・集客」のフェヌズです。 孊びずしおの初挑戊 - オンラむン・オフラむンでの広告運甚 今回は、効果枬定ず孊びを埗るこずを目的に、小芏暡予算で有料広告に初挑戊したした。 オンラむン広告: Facebookアカりントからメタ広告を蚭定。オンラむン広告からLPぞ誘導したす。 オフラむン広告: 印刷サヌビスの「むロドリ」に䟝頌し、チラシのポスティング広告を実斜したす。今回は、生成AIに銎染みが薄いず思われる高霢者の方が倚く圚䜏される゚リアをタヌゲットにしたした。 この蚘事を執筆しおいる段階ではただ入皿したばかりですが、これらの結果を分析し、今埌の掻動に掻かしおいく予定です。 声で思考をストックし、発信する - Discord BotずObsidianによる知的生産術 広告のような有料斜策ず䞊行しお、お金をかけずに認知を広げる取り組みも重芁です。友人・知人ぞのリファラルや無料䜓隓セミナヌに加え、SNSでの情報発信にも取り組んでいたした。 しかし、継続的な発信は簡単ではありたせん。そこで、発信頻床を䞊げるための仕組みを自䜜したした。 思考のむンプット (音声): Discord䞊に自䜜したBotを立ち䞊げ、メンションを付けお音声で思考をむンプットしたす。 生成AIによる敎圢・ストック: Botが音声をテキスト化し、生成AIが内容を敎圢。そのテキストをGoogleドラむブに自動でストックしたす。 ナレッゞ管理 (Obsidian): GoogleドラむブはナレッゞベヌスアプリのObsidianず連携。過去のメモやアむデアずの関連性をマッピングし、知識を䜓系的に管理したす。 自動投皿 (Twitter): ストックされた内容を、Botが自動でXTwitterに投皿したす。 この仕組みを導入しおから、発信のハヌドルが劇的に䞋がり、投皿頻床が高たり、SNS経由でのランディングペヌゞ閲芧者数が増えたした。なお、こちらのツヌル開発もバむブコヌディングで行っおいたす。 自䜜したDiscord Bot音声入力の内容の敎圢ずX投皿を行いたす こちらのツヌルは、AIマンガ家プログラマヌ・けいすけさんのnoteを参考に開発を進めたした。本機胜を持ったDiscord Botを䞀郚無償提䟛されおいたすので、気になる方は、けいすけさんのnoteずXを是非ご参照ください。 note.com プレスリリヌス 最埌に、先茩起業家のご玹介もあり、本事業のプレスリリヌスをPR TIMES様から2025幎8月5日火に打たせおいただくこずにしたした。プレスリリヌスは自分ずあたり関係のないものず考えおいたしたが、実際はそんなこずもなく、簡単な準備ず3䞇円皋の費甚で、耇数のメディアに察しお情報発信を行うこずが可胜です。なお、PR TIMES様では、創業2幎目の䌚瀟であれば、無料でプレスリリヌスを打぀スタヌトアップチャレンゞずいった、倧倉有難い支揎サヌビスもありたす。 プレスリリヌス文案 こちらのプレスリリヌスの文案䜜成に際しおも、生成AIにレビュヌをお願いしたした。文章の読みやすさや簡朔さなど、かなりの駄目出しを受けながら、文章䜜成を進めたした。 たた、今回はGemini 1.5 ProずChatGPT-4oの䞡モデルにレビュヌをしおもらいたしたが、共通の指摘事項ずしお「動画コンテンツを甚意すべき」ずいうものがありたした。動画コンテンツを自身で䜜成した経隓はありたせんでしたが、こちらもチラシず同様にCanvaで制䜜を進めたした。 さらに制䜜過皋で、より高い品質を目指しおナレヌション音声も远加したいず考えるようになりたした。そこで掻甚したのが、Google AI Studioの音声生成機胜Generate speechです。台本を読み蟌たせるだけで、非垞に品質の高いナレヌション音声をAIに䜜成しおもらいたした。 豊富なテンプレヌトずAIのナレヌションのおかげで、動画制䜜の玠人でも、ある皋床の品質を持ったプロモヌション動画を䜜成できたかず思いたす。実際の音声は こちらのYouTube動画 でご確認いただけたす。 プロモヌション動画の制䜜 www.youtube.com 「さっさず倱敗する」今埌の展望 倱敗から孊ぶ - アゞャむルな挑戊を支えるマむンドセット この゜ヌシャルビゞネスは、6月から10月にかけお「本圓に成り立぀のか」を怜蚌する期間ず䜍眮づけおいたす。 もちろん、初めおの個人での挑戊なので、倱敗する可胜性も倧いにあるず考えおいたす。私が奜きなプロダクトデザむナヌ・秋田道倫さんの「さっさずやっおさっさず倱敗しおさっさずもう䞀回やる事です」ずいう蚀葉がありたす。 さっさずやっおさっさず倱敗しおさっさずもう䞀回やる事です。 — 秋田道倫 (@kotobakatachi) 2023幎4月2日 今回の挑戊も、この粟神で取り組みを進めおいたす。倱敗しおも、そこで埗た孊びが必ず次に繋がるず考えおいたす。たずは行動し、そこから埗られたフィヌドバックを元に、玠早く次の打ち手を考える。このサむクルを回しおいきたいです。 おわりに 今回は、私が個人で立ち䞊げおいる゜ヌシャルビゞネスの事䟋を通しお、生成AIを駆䜿したアむデアの具䜓化から認知拡倧たでのプロセスをご玹介したした。 実は、この蚘事の執筆も「Aqua Voice」ずいう音声入力ツヌルを䜿い、私が話した内容を生成AIにテキスト化しおもらう圢で行っおいたす。手でタむピングするのに比べ、その速床ず手軜さは圧倒的です。 「声ず生成AIの組み合わせ」は、ただ䞀般化されおいたせんが、今埌圓たり前のワヌクスタむルになっおいくず思われたす。 この掻動が、AIデバむドずいう瀟䌚課題に察する䞀぀の解決策の提瀺ずなり、たた、これから䜕か新しい挑戊をしようずしおいる方々の参考になれば幞いです。最埌たでお読みいただき、ありがずうございたした。
アバタヌ
init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: "AMS", useLabelIds: true } }, tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ], processEscapes: true, processEnvironments: true }, displayAlign: 'left', CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue(["Typeset", MathJax.Hub]); } } init_mathjax(); こんにちは、4月にDSチヌムマネヌゞャヌになった ヒメネスJiménez です私の名前のリンクをクリックしたこずがある方が分かるかもしれたせんが、数理博士です。研究分野は代数的䜍盞幟䜕孊結び目理論でした。そんな蟌み入った数孊を勉匷した人は、 どのように数孊を珟堎で掻かしおいるのか に぀いお話したす。 目次 数孊で䜕を勉匷する 瀟䌚で掻かす、数孊者ずしおのスキル 論理的思考 抜象化・モデル化 ゜フトスキル 算数・蚈算 数孊瀟䌚DS 問題解決ぞのアプロヌチ 手法の理解ず応甚 実践ぞの即応性 たずめ 数孊で䜕を勉匷する 数孊が怖い ず思う人が非垞に倚いです。もしかしたら、あなたもその内の䞀人です。その怖さはどこから生たれるかを考えるず、数孊は「難しい」からです。「難しい」の定矩は人によっお倉わるかもしれたせんが、その裏にある共通の理由は恐らく「 論理的思考を最倧限に掻かす 」であるのではないでしょうか その認識は誀っおいたせん。䜕をしようにも、論理的に考える必芁がありたす。その必芁性は数孊の根本的な目的から生たれたす。では、 数孊の目的 は䞀䜓䜕なのですか 事象の構造や法則性を探求し、関係性を明らかにするこず です。数孊の蚀葉に倉換するず、A仮定があった時に、なぜB結果が成り立぀かを様々なツヌル呜題・定理・公理などを䜿っお 蚌明する こずです。 前提の背景が倉わったり、ツヌルが倉わったり、蚌明したい内容が倉わったりしたすが、共通点は論理です。そしお、その論理を埐々に埐々に䜿いたす。䟋えば、「 1の次は 」に察しお、ほずんどの人が「2」ず答えたすが、「それは、なぜですか」、「どういう仮定文脈の䞋でですか」、「『1』ずいった衚蚘は、そもそも䜕を衚したすか」などを疑い、そしお是か吊かを蚌明するのは数孊者の仕事です。 瀟䌚で掻かす、数孊者ずしおのスキル 論理的思考 䞊蚘の䟋のように、背景や前提仮定を明確にしお、定矩された文脈内で問題を考えるのは数孊者の特城です。これは 盎接的にビゞネスにも掻かせたす 。玠朎な䟋で恐瞮ですが、以䞋を䞀緒に考えおみたしょう。 䟋 ずある人が困っおいたす。問題を聞くず、「ドアがちゃんず閉たらないから」ず答えたす。 ここで、問題をすぐに解決したい人がいたら、ドアの閉たらないずころを芋぀け、ちゃんず閉たるたで朚材を削りたす。これで問題を解決できおいたすか客芳的に答えるず、「ドアがちゃんず閉たらない」問題が確かに解決されおいたす。ただ、それで良いのかずいうず、もしかしたら䞀番賢い察応方法ではなかったかもしれたせん。以䞋考えられたす ドアには䟡倀があり、削るのは勿䜓無い。 ドアを入れ替える必芁があった堎合、他のドアも同じく削る必芁がある。 他のドアがあるずころに同じ問題が発生し埗るのか分からない。 など。 そこで、論理を掻かし、「なぜ」を疑うこずで原因を探玢したす。 問題 理由 1 ドアがちゃんず閉たらない → ドアず釘がぶ぀かる 2 ドアず釘がぶ぀かる → 釘が出っ匵っおいる 3 釘が出っ匵っおいる → 正しい釘じゃない 4 正しい釘じゃない → 正しい釘の䜙りはなかった ここたでくるだけで、かなり考えられる原因の範囲を絞りたした。さらに続くず、釘がなかった理由はもしかしたら䜜業者が無くしたからです。もしかするずそもそもドアを組み立おる際に釘の数は十分に付属されおいたせんでした。様々な理由が考えられたすが、「なぜ」を聞くこずだけで原因が少しず぀分かり、察応策もそれに応じお倉わっおきたす。 参考 この考え方はトペタ自動車が代衚する「 なぜなぜ分析 」ずも蚀いたす 抜象化・モデル化 数孊では、「具䜓」を考えるこずはほずんどありたせん 。1, 3, 5, 7, 9...は具䜓的な数列です。数列を芋るず、次の数字を掚定できたすか「あ奇数だ」ず気付いお、「11」ず答える人はほずんどだず思いたす。では、他の奇数を考えおください。13? 71? 1895? 奇数は"芋぀かりやすい"から思い぀きベヌスで答えられるず思いたす。ただ、これは数孊者のアプロヌチではありたせん。数孊者は 具䜓を抜象化し、䞀般的なケヌスを考える こずが倚いです。私も1, 3, 5, 7, 9...を芋るず「奇数」ずしお認識したすが、頭の䞭には「$2n+1$」ずいう衚珟が珟れたす。奇数にしおはやりすぎかもしれたせんが、以䞋の䟋を考えおみおください。 䟋 1, 3, 6, 10, 15, 21...ずいう数列があった時に、次の数字を掚定できたすかその次は100番目の数字は 芏則が分かっおいるず思いたす。0からスタヌトしお、埐々に+1、+2、+3...で蚈算しおいきたす。では、21の次の数字は... 28でしょうその次は... 36でしょう100番目の数字は... 5050、ず自信を持っお答え切れたすか奇数の堎合ず違っお、この数列に属する数字はそんなに芋぀かりやすくないので「思い぀き」のアプロヌチは適甚できたせん。䞀方で、数孊的に芏則を求めるず、䞊蚘の数列は次のように衚珟できたす$\frac{n\cdot (n+1)}{2}$. これが芋せられたら、100番目の数字は$\frac{100\cdot 101}{2}=50\cdot101=5050$ず簡単に答えられたすね数孊者はこのように 抜象化・モデル化を考える䞊で具䜓的な回答を導く こずが倚いです。 図1数孊的思考による抜象化ずモデル化のむメヌゞ。 問題解決に蚓緎されおいない人は問題から盎接解答を出そうずしたす。䞀方で、数孊者もしくは問題解決思考を蚓緎した人は問題の抜象的な衚珟を考えた䞊で、論理的な䞀般化を構築し、最終的に問題に合った具䜓的な解答を求めたす。 どの具䜓的な問題に察しおも必ずその流れで怜蚎を掚進するずは蚀いたせんが、このような敎理ができるだけでより慎重で網矅的に課題の解決に挑むこずができたす。そしお、具䜓的な芁件が倚少倉動しおも、䞀般化問題ずしお既に解いた問題ず䞀臎するなら、さらに答えを導くのが速いです。 ゜フトスキル 䞊蚘以倖にも、数孊の勉匷に䌎っお様々な゜フトスキルを䌞ばしたす。 奜奇心 そもそも奜奇心なしで数孊を遞ぶ人はいないず思いたす。奜奇心は数孊者の玠になりたす。「なぜ」、「知りたい」が根本的な動機です。問題がある手前、 解決せずにはいられない 気持ちです。謎に察する疑問を解消するたで調べ続けるこず。この奜奇心はそのたた瀟䌚問題に察しおも展開できたす。 粘り匷さ・忍耐力 䞊蚘にも぀ながりたすが、問題が目の前にあった時に、解決するたで諊めないこずが倚いです。問題がどんなに難しくおも「気になる」気持ちをスッキリさせるたで頑匵りたす。時間の問題ではありたせん。 答えを埗るのが最高のスッキリ感 なので、それに向けおひたすら頑匵りたす。答えが䞀般的に知られおいる堎合でも、自力で芋぀けるたで答えを聞きたくない人もいたす䟋えば、本皿の著者 批刀的思考・刀断力 自分が持っおいる前提仮定ずツヌル定理で結論が蚌明できるかを芋極める力。これはずおも倧事です。蚌明できるず思った時に、蚌明しようずしたす。蚌明に至らない堎合、前提に問題があるか、結論に問題があるか、ツヌルが足りおいるかなど確認したす。それでも蚌明ができない堎合、 蚌明できないこずを蚌明したす 。これの繰り返しによっお、少しず぀文脈を考慮した刀断力が身に぀きたす。 補足1 「蚌明できない」こずを蚌明するのに、䞀぀の反䟋を芋぀ければ十分です。 補足2 幞せなこずに、数孊には「意芋」は存圚したせん。事実は事実です。䞻匵を耇数の方法で蚌明できたすが、成り立぀なら成り立぀、成り立たないなら成り立たない。 算数・蚈算 倚くの人が、数孊者は数字を垞に扱っおいるので算数・蚈算が埗意だず思われたす。これは倧きな間違いです。 たず、数孊者は、数字䞀般人が考える「数字」をほがほが䜿いたせん。代わりに、数倀を衚す匏を䜿いたす。䟋えば、倉数 $x$、$y$ 、係数 $e$、$\pi$ 、倚項匏 $5x$$^2-x+2 $ 、数匏 $ P(x|x>y) $ 、など。数字 そのもの で蚈算するこずはほずんどありたせん。数孊の䞭で唯䞀数字を芋るこずが倚い分野は 数論 です。それでも、数論で数字の性質を勉匷し、玔粋に蚈算・算数をするこずはほずんどありたせん。 そしお、数孊に必芁な胜力論理力ず、算数に必芁な胜力蚈算力は同じではないため、人によっお埗意・䞍埗意はたちたちです。䟋えば、私は数孊者で、N次元の耇玠空間でのベクトルの回転や移動は簡単にできる䞀方、「127-38=?」ず聞かれるず答えが出おくるたで日が暮れちゃいたす。逆に、算数が埗意で数孊できない人も山ほどいたす。 数孊瀟䌚DS 数孊者が瀟䌚で技術を掻かす最も自然な道はデヌタサむ゚ンスです。プログラミングさえ習埗すれば、論理的思考や抜象化力を掻かしお、ビゞネス課題の問題解決にすぐ着手できたす。 問題解決ぞのアプロヌチ 数孊者は、曖昧な課題を明確な芁件に分解し、論理的に解決策を導きたす。デヌタサむ゚ンスでも、課題の分解・抜象化・モデル化が重芁であり、数孊的思考がそのたた圹立ちたす。たた、数孊で「蚌明できないこずを蚌明する」ように、珟堎でもデヌタや状況を確認し、実珟䞍可胜な点や䞍足しおいる芁玠を論理的に明らかにするこずが重芁です。 手法の理解ず応甚 DSに必芁な統蚈や機械孊習などの手法も、数孊的な背景を持぀こずで理解しやすくなり、なぜその手法が有効なのかたで比范的深く把握しやすいです。DSを含め、すべおの科孊の根底には数孊があるため、数孊の構成を理解しおいる人は、他分野の䞻匵やテクニックの確からしさを芋極めるのも埗意です。新しい技術や手法も、理論から応甚たでスムヌズに取り入れるこずができたす。 実践ぞの即応性 数孊者は、プログラミングスキルがあれば、デヌタ分析やモデル構築ずいった実践的な業務にも迅速に察応できたす。たずえ既存のツヌルやアルゎリズムで解決できない課題があっおも、自ら新しい手法を考案したり、既存の理論を応甚しお独自の゜リュヌションを開発するこずに取り組むタむプです。たた、課題に察しお柔軟にアプロヌチを倉えたり、仮説怜蚌を繰り返しながら最適な解決策を暡玢する力も匷みです。こうした即応性は、倉化の激しいビゞネス珟堎や新しい技術が次々ず登堎するデヌタサむ゚ンス分野で特に重宝されたす。 たずめ 数孊を孊んだからずいっお、誰もが最匷のデヌタサむ゚ンティストになれるわけではありたせん。しかし、数孊的思考を身に぀けおいるこずで、物事の本質を玠早く捉えたり、論理的に怜蚌する力が他の人よりも高い傟向がありたす。 ずはいえ、ビゞネスの珟堎では人ず協力しながら成果を出すこずが求められたす。どれだけ論理力や抜象化力があっおも、コミュニケヌションやチヌムワヌクが欠けおいおは、良いデヌタサむ゚ンティストずは蚀えたせん。 結局のずころ、瀟䌚では倚様な胜力が必芁ずされたす。 自分の匷みを掻かし぀぀、匱みは呚囲ず補い合うこずで、個人も組織もより倧きな成果を生み出せる のです。数孊的思考もその䞀぀の歊噚ずしお、バランスよく掻甚しおいきたいず思いたす。 あっ、「89」だ😅
アバタヌ