Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
Search
Yukiya Nakagawa
May 14, 2025
Technology
3
1k
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
AI Developer Meetup in Tokyo #1 でしゃべりました
https://ai-developer-meetup.connpass.com/event/353962/
Yukiya Nakagawa
May 14, 2025
Tweet
Share
More Decks by Yukiya Nakagawa
See All by Yukiya Nakagawa
AIがコードを書いてくれるなら、新米エンジニアは何をする? / komekaigi2025
nkzn
26
19k
JS Temporalを学ぶ人のための JSR-310入門 / jsr310-for-temporal
nkzn
0
51
Cloudflare Workers で作る専門性特化型 MCP サーバー / workers-specialist-mcp
nkzn
1
140
Remix × Cloudflare Pages × Sentry 奮闘記 / remix-pages-sentry
nkzn
1
2.1k
Cloudflareスタックで月間1200万UUの経済メディアにアバター画像生成サービスを作る / Cloudflare Developer Platform for AI avatar service
nkzn
7
4.2k
5分で流し読むCloudflare Developer Platform
nkzn
3
430
次世代Web認証「パスキー」 / mo-zatsudan-passkey
nkzn
32
18k
パスキーについて今日時点の僕が知っていること / What I Know About Passkeys as of Today
nkzn
8
3k
青い空の歩き方 / Flying in the bluesky
nkzn
1
350
Other Decks in Technology
See All in Technology
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
190
寫了幾年 Code,然後呢?軟體工程師必須重新認識的 DevOps
cheng_wei_chen
1
1.4k
初めてのDatabricks AI/BI Genie
taka_aki
0
110
Edge AI Performance on Zephyr Pico vs. Pico 2
iotengineer22
0
140
Microsoft Agent 365 についてゆっくりじっくり理解する!
skmkzyk
0
220
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
140
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
310
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
600
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
340
[CMU-DB-2025FALL] Apache Fluss - A Streaming Storage for Real-Time Lakehouse
jark
0
120
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
270
世界最速級 memcached 互換サーバー作った
yasukata
0
340
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
Done Done
chrislema
186
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
For a Future-Friendly Web
brad_frost
180
10k
KATA
mclloyd
PRO
32
15k
We Have a Design System, Now What?
morganepeng
54
7.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
経済メディア編集部の実務に小さく刺さるAI AI Developer Meetup in Tokyo #1 Yukiya Nakagawa, 2025.5.14
1
自己紹介 なかがわゆきや / なかざん(@Nkzn) 株式会社モニクルで「くらしとお金の社会課題を解 決する」各種事業のインハウス開発に加担 近年はメディア事業のモニクルリサーチ社のCTOに なって経済メディア「LIMO」周辺のお手伝い 技術書典開発チームもやってます 普段使ってるAIツール:Cursor
(チャット欄に住んで ます) 好きなモデル2025-05:Gemini 2.5 Pro 2
会社・事業紹介 3
昨年から事業にAIを取り入れ始めていました https://charatsukuai.limo.media https://speakerdeck.com/nkzn/cloudflare-developer-platform-for-ai-avatar-service 4
今日のお話 実務の課題をAIで解決できないか検討した話 プロダクト開発をAIと二人三脚してみた話 5
実務の課題をAIで解決できないか検討した話 6
現場のペイン アプリメインの会社ではないので、ITの主な役割は業務効率化 プロダクト開発がコードを書いて終わりではなくデリバリーが重要なのと同様 に、Webメディアも記事を書いて終わりではなく、届けるための作業がある その一つが「関連記事の選定」 これからリリースする記事と関係ありそうな既存記事を見つけてくるだけでも一 仕事 現場からの「これAIとかで何とかならないですか」からプロジェクトがスタート 7
こういうやつを決めたい 8
AIのみでなんとかするのは流石に難しかった 雑にAIに最近の記事のCSVファイルを食べさせてみてから、雑に訊いてみた なかなか安定しない プロンプトの工夫で精度を少し上げることはできたものの、ハルシネーションを 排除しきれず 9
AIのことは一旦忘れよう 初心に戻り、素直な技術選定をしてみよう RAG……でもいいけど、今回の用途だとtoo muchっぽい テキストの類似性検索として考えてみれば、シンプルなベクトルDBでいいのでは 10
ベクトルDBといえば よっしゃCloudflare Vectorizeを使ってみよう 昨夏の開発合宿でVectrizeを試していた同僚 もいた → EmbeddingにはCloudflare Workers AIを使う ので、結局AIのお世話にはなった
@cf/baai/bge-m3 を使いました (多言語対応してるやつがあんまりなか ったのでほぼ消去法) 11
こんな感じで使える(保存) const embeddingsResponse = await c.env.AI.run('@cf/baai/bge-m3', { text: [ '
タイトルA\n メタデータA-1\n メタデータA-2', ' タイトルB\n メタデータB-1\n メタデータB-2', ... ], }) let vectors: VectorizeVector[] = []; let id = 1; embeddingsResponse.data.forEach((vector) => { // id とデータを紐づけて保存する(メタデータを添えて取り出したりもできる) vectors.push({ id: `${id}`, values: vector }); id++; }); let inserted = await env.VECTORIZE.upsert(vectors); 12
こんな感じで使える(検索) const embeddingsResponse = await c.env.AI.run('@cf/baai/bge-m3', { text: [' それっぽいクエリ'],
}) let matches = await env.VECTORIZE.query(queryVector.data[0], { topK: 1, }); // matches[0].id => 保存時に決めたID // matches[0].score => クエリとの類似度 // matches[0].metadata => 保存時に添えたメタデータ 13
ざっくり作ってみた 思ったより上手く行った ハンバーガーの話題で探すとパフェの記事が出てきたり(食べ物繋がり) 猫の話題で探すと犬の記事が出てきたり Webアプリ版とSlack版を作って試験運用中 少しだけWebアプリ版のほうが評判がいい チャットで自由な入力を受け付けるとユーザー側が考えることが増えるので、目 的別に最適なUIを提供したほうが受け入れられやすいのかも 14
プロダクト開発をAIと二人三脚してみた話 15
AIと一緒にコードを書く プロトタイピングを早めに終わらせるために、AI Agentに大半のコードを書いても らうことにした とはいえClineのように投げっぱなしというわけではなく、CursorのAgentモードに 随時指示を出す形 ある程度はコンテキストを広く見てほしかったので、Gemini 2.5 Pro固定で実施 16
開発プロセス 1. 解決すべき課題と、大まかに想定しているアーキテクチャを書いたドキュメント を作る(ここは大半が手書き) 2. アーキテクト役でAIに参加してもらう 具体的なアーキテクチャ案を考えてもらう 作業手順を考えてもらう(動作確認のタイミングを多めに盛り込んでもらう のがオススメ) 3.
最初のドキュメントに↑を追記する(ここでコンテキストが永続化される) 4. 手順をひとつずつ実施してもらいつつ、動作確認して細かい動作で気になる点が ないかを確認する 5. 実情に合わせて方針を変えつつ、変えた方針をドキュメントに反映していく 6. できあがり 17
ふりかえり 反省点 アーキテクチャ設計時にそれなりに思慮深いモデルを使っておかないと、本実装 に入ってからめちゃくちゃ迷走する Claude 3.5時代に一度やろうとして頓挫したのが、Claude 3.7やGemini 2.5の時代 になったらあまりにもサクサク進んだのでビビった よかった点
ドキュメントをしっかり整備したり、動作確認のマイルストーンをしっかり挟んで いくことで、頓挫しづらくなった 意図的に考えてもらうスコープが狭くなるようにマイルストーンの調整をしたおか げか、AI側があまり暴走しなかったように見えた 18
ご清聴ありがとうございました We are hiring! お金の診断・相談サービスと経済メディアの両輪で、くらしとお金の社会課題を 解決するモニクルで一緒に働きませんか? フロントエンドもバックエンドもTypeScriptでどっちもやるぜ!という方!どうで すか! https://recruit.monicle.co.jp/ 19