æ¡åŒµåãªããã¡ã€ã«ãæ¹åããCloudflare AI Searchã«ç»é²ããæ¹æ³
Cloudflare AI Searchããæ£ããHTTP Content-Typeãæã€æ¡åŒµåãªããã¡ã€ã«ãR2ããã€ã³ããã¯ã¹åã§ããããã«ãªããŸããããªããŒã å·¥çšãçããæ¡ä»¶ãæ®ãåæã»æ€èšŒäœæ¥ãã¡ã¿ããŒã¿ä¿®åŸ©æã®R2ã³ã¹ããWorkersã§ã®å®è£ æ¹æ³ãç§»è¡åã«ç¢ºèªãã¹ãå¶éãå®åç®ç·ã§è§£èª¬ããŸãã
å ¬éæ¥

Cloudflare AI Searchã¯2026幎9æ11æ¥ãR2ãžã®åã蟌ã¿ã§åé¡ã«ãªã£ãŠãããã¡ã€ã«åã®å¶çŽãç·©åããŸãããæ¡åŒµåãªããã¡ã€ã«ãå®å®ããããŒã§ä¿åããŠããŠãã察å¿ããHTTP Content-Typeãåãªããžã§ã¯ãã«èšå®ããã°ãããŒãå€ããã«æ€çŽ¢å¯èœã«ã§ããŸãã
ããã«ãããåã蟌ã¿ã¯ãŒã¯ãããŒãããªããŒã å·¥çšãå€ããŸãããã ããã¡ã¿ããŒã¿ã®æŽåãã€ã³ããã¯ã¹äœæãããã¥ã¡ã³ããå®éã«æ€çŽ¢å¯èœã«ãªã£ããã®ç¢ºèªã¯ãåŒãç¶ãå¿ èŠã§ãã
Cloudflare AI Searchã§æ¡åŒµåãªããã¡ã€ã«ãæ±ããä»çµã¿
Cloudflare AI Searchã¯ãèªç€Ÿã³ã³ãã³ãåãã®ãããŒãžãæ€çŽ¢ãµãŒãã¹ã§ããããŒã¿ã®åã蟌ã¿å ã«ã¯ãCloudflareã®ãªããžã§ã¯ãã¹ãã¬ãŒãžã§ããR2ãã±ãããæå®ã§ããŸããAI Searchã¯ãã±ãããèªã¿èŸŒã¿ã察å¿ããããã¥ã¡ã³ããæ€çŽ¢å¯èœãªããã¹ãã«å€æããã¢ããªããã¯ãšãªãéãéã«äœ¿ãã€ã³ããã¯ã¹ãæ§ç¯ããŸãã
åŸæ¥ããã¡ã€ã«åœ¢åŒã確å®ã«å€å®ããã«ã¯ãã¡ã€ã«åã®æ¡åŒµåãå¿
èŠã§ãããmanual.pdfãšããããŒãªããã€ã³ãã¯ãµãŒã¯ãã¡ã€ã«åœ¢åŒãèå¥ã§ããŸããäžæ¹ãdocuments/manual-alphaã®ãããªå®å®ããããŒã ãã§ã¯å€å®ã§ããŸããã§ããã
ä»åãããAI Searchã¯æ¡åŒµåã®ãªããªããžã§ã¯ãã«ä»ããéåžžã®HTTP Content-Typeãå©çšã§ããŸããapplication/pdfãªãäžèº«ã¯PDFãtext/markdownãªãMarkdownã ãšå€å®ãããŸããCloudflareã¯ãã®ã»ããtext/plainãapplication/jsonãtext/htmlãtext/csvã察å¿åœ¢åŒãšããŠæããŠããŸãã
ãã¡ã€ã«æ¡åŒµåãäžèŠã«ãªã£ãããã§ã¯ãããŸãããCloudflareã¯ä»ããèªèå¯èœãªæ¡åŒµåãåªå çãã€é«éãªå€å®çµè·¯ãšããŠããŸããæ°ããçµè·¯ãå¹ãã®ã¯ãããŒãå€ãããšURLãããŒã¿ããŒã¹åç §ãããã³ãã®ãããã³ã°ã眲åãæ¢åã®ã¢ããããŒãå¥çŽãªã©ãå£ããŠããŸãã±ãŒã¹ã§ãã
ããã§æ··åããããç¹ããããŸããContent-Typeã¯R2ãªããžã§ã¯ãã«ä»ãHTTPã¡ã¿ããŒã¿ã§ããã«ããŽãªã顧客ãããã¥ã¡ã³ãã®ç¶æ
ãšãã£ããã£ã«ã¿ãŒã«AI Searchã䜿ãã«ã¹ã¿ã ã¡ã¿ããŒã¿ãšã¯å¥ç©ã§ããã«ã¹ã¿ã ãã£ãŒã«ãã¯x-amz-meta-*ããããŒã§æž¡ããAI SearchåŽã§ã¹ããŒããå®çŸ©ããå¿
èŠããããŸããx-amz-meta-content-typeã远å ããŠããæ¬æ¥ã®HTTPãã£ãŒã«ãã®ä»£ããã«ã¯ãªããŸããã
ä»åå€ãã£ãã®ã¯ãããã¥ã¡ã³ããã€ã³ããã¯ã¹ã«å ¥ãå ¥å£ã«ããããœãŒã¹åã蟌ã¿ã§ããæ€çŽ¢åŸã«åçãçæããã¢ãã«ã¯å€ãããŸãããGLM-5.3 Flashã®ã¢ããããŒãã¯ããã®åŸæ®µã«ããçæåŠçã®å€æŽã§ãã
å®åäžã®å€åã¯ãåœåã«ãŒã«ãã²ãšã€æžãããããš
äžéæãªããŒãåºã䜿ãããŠããã®ã«ã¯çç±ããããŸããããšãã°ãå®å®ããããŒã¿ããŒã¹IDãR2ããŒã«ããã°ããªããžã§ã¯ããå·®ãæ¿ããŠãã¢ãã¬ã¹ã¯å€ãããŸãããããã¥ã¡ã³ããµãŒãã¹ãªãã顧客ã®å ãã¡ã€ã«åãå€éšã«èŠããã«æžã¿ãŸãã眲åä»ãURLãããŒãã®ãã®ã«äŸåããŠããå ŽåããããŸãã
åŸæ¥ã®åé¿çã¯ãæ€çŽ¢çšã³ããŒã«æ¡åŒµåä»ãã®ååãä»ããããAI Searchããªããžã§ã¯ããèŠãåã«ãªããŒã å·¥çšãæãããšã§ããããã®çµæãä¿åã»çªåã»åé€ã®å¯Ÿè±¡ãšãªãèå¥åãããã²ãšã€å¢ããŠããŸããã
ä»åã®æŽæ°ã§ã¯ãHTTPã¡ã¿ããŒã¿ãæ£ãããã°å ã®ããŒãç¶æã§ããŸããããããã¯ãŒã¯ãããŒäžã®å®è³ªçãªåæžã§ãã
åã蟌ã¿äœæ¥ãæŽæ°ååŸã§ã©ãå€ããããæŽçãããšã次ã®ããã«ãªããŸããããã¯ããã»ã¹ã®ã¢ãã«ã§ããã宿ž¬ãã³ãããŒã¯ã§ããåæžå¹æã®ä¿èšŒã§ããããŸããã

ãã®è¡šãæå³çã«éé¡ã瀺ããŠããªãç¹ã«ã¯çç±ããããŸããCloudflareã¯ãã®æ©èœã«ããæéåæžãå ¬è¡šããŠããããä»åã®ãªãªãŒã¹ãæ¢åã®ã¡ã¿ããŒã¿ãæžãæããŠãããããã§ããããŸããã
æ®ãäœæ¥ã«ã¯ã©ãã ãã³ã¹ãããããã
AI Searchã¯ãªãŒãã³ããŒã¿æéäžãWorkersãã©ã³ã®äžéå ã§ç¡æã§ããã¹ãã¬ãŒãžãšãã¯ãã«ã€ã³ããã¯ã¹äœæãå«ãŸããŸããWorkers AIãšAI Gatewayã®å©çšã«ã¯å¥éæéãçºçããå ŽåããããŸãããä»åã®åã蟌ã¿å€æŽã«ãã£ãŠãã®æéäœç³»ã¯å€ãããŸããã
äžæ¹ãã¡ã¿ããŒã¿ã®ä¿®åŸ©ã¯R2ã®è«æ±ã«åœ±é¿ããããšããããŸããListObjectsãPutObjectãCopyObjectã¯Class Aãªãã¬ãŒã·ã§ã³ãšããŠæ°ããããŸãã修埩ããŒã«ããªããžã§ã¯ãã®ç¢ºèªãèªã¿åãã«äœ¿ãå¯èœæ§ãããHeadObjectãšGetObjectã¯ãClass Bãªãã¬ãŒã·ã§ã³ã§ãã
Standardã¹ãã¬ãŒãžã§ã¯ãæé100äžåã®ç¡ææ ãè¶ ãããšãClass Aãªã¯ãšã¹ãã¯100äžåããã$4.50ã§ããInfrequent Accessã«ã¯ç¡ææ ããªããClass Aãªã¯ãšã¹ãã¯100äžåããã$9.00ã§ãããªããžã§ã¯ãã®èªã¿åããã³ããŒæã«ã¯ãGBããã$0.01ãå ç®ãããå ŽåããããŸãã
äºç®ãèããéã®åºæºã¯æå¿«ã§ããContent-Typeãæ£ãããªããžã§ã¯ããªãããªããŒã ã®ããã®ä¿®åŸ©ã¯å¿
èŠãããŸãããå€ã誀ã£ãŠããã°ãå©çšããããŒã«æ¬¡ç¬¬ã§æžã蟌ã¿ãŸãã¯ã³ããŒãå¿
èŠã«ãªããŸãããã±ããå
šäœã®ä¿®åŸ©ãäºå®ããåã«ãçºçãããªãã¬ãŒã·ã§ã³æ°ãæ°ããŠããã¹ãã§ãã
AI SearchåŽã§ã¯èŠæš¡ã®äžéã«ã泚æãå¿ èŠã§ããWorkers Freeã®ã€ã³ã¹ã¿ã³ã¹ãããäžéã¯100,000ãã¡ã€ã«ã§ããWorkers Paidã§ã¯100äžãã¡ã€ã«ããã€ããªããæ€çŽ¢ãæå¹ã«ããå Žåã¯500,000ãã¡ã€ã«ãŸã§å©çšã§ããŸãã4 MBã®ãã¡ã€ã«äžéã¯ãã©ã¡ãã®ãã©ã³ã§ãå€ãããŸããã
ææ¥ããæŽ»çšã§ããã®ã¯èª°ã
å®å®ããã¢ããããŒãIDã䜿ãå人SaaSéçºè
ããŒã¿ããŒã¹ã«ä¿åæžã¿ã®R2ããŒã¯ãã®ãŸãŸäœ¿ããã¢ããããŒããŒããªããžã§ã¯ããæžã蟌ãéã«æ£ããMIMEã¿ã€ããä»ããããã«ããŸããããã§ãµããŒãæ€çŽ¢ã¯ããã¡ã€ã«åçšã®åã远å ããããæ€çŽ¢çšã³ããŒãäœãããããžã§ããçšæããããããåããªããžã§ã¯ããåã蟌ããŸãã
顧客ãããã¥ã¡ã³ããå·®ãæ¿ããåé€ããç§»åãããšãã«çªãåãããèå¥åãæžãã®ãå©ç¹ã§ãããã ããæ€çŽ¢å¯Ÿè±¡ã«ãããªããžã§ã¯ããæ±çšãã€ããªåã§å±ããå Žåã¯ãã¢ããããŒãæã«æåŠããå¿ èŠããããŸãã
ã¬ã¬ã·ãŒãã±ãããæ±ãããã©ãããã©ãŒã ãšã³ãžãã¢
æ¡åŒµåãªããªããžã§ã¯ããšãã®HTTPã¡ã¿ããŒã¿ãäžèЧã«ããCloudflareã察å¿ããMIMEã¿ã€ããšåå€ãæ¯èŒããŠã倱æå¯Ÿè±¡ãåãåããŸãããã±ããå šäœã«æãå ¥ããåã«ãå°ããªãµã³ãã«ã§ä¿®åŸ©ã詊ããŸãã
å©ç¹ã¯ãç§»è¡ç¯å²ãéå®ã§ããããšã§ãã修埩費çšãå¿ èŠãªãªããžã§ã¯ãã ãã«äœ¿ããæå¹ãªã¡ã¿ããŒã¿ãæã€ããŒã¯ãã®ãŸãŸåæãšç¢ºèªãžé²ããããŸãã
ãã«ãããã³ã補åã®éçºããŒã
å
ã®ãã¡ã€ã«åãå€éšã«æŒããªãäžéæãªãªããžã§ã¯ãããŒãç¶æããã¢ããããŒãæã«ä¿¡é Œã§ãããµãŒããŒåŽã®æ€æ»çµæããContent-Typeãèšå®ããŸããããã³ãããšã«ã€ã³ããã¯ã¹ç¯å²ãåããå¿
èŠãããå Žåã¯ãAI Searchã®ãã¹ãã£ã«ã¿ãŒããã¬ãã£ãã¯ã¹ãå¥éé©çšããŸãã
å©ç¹ã¯ãã¢ãŒããã¯ãã£ã«äžè²«æ§ãæãããããããšã§ããã¹ãã¬ãŒãžäžã®èå¥åããã¡ã€ã«è¡šç€ºåããç¬ç«ããããŸãŸãã€ã³ãã¯ãµãŒã«ã¯æ€èšŒå¯èœãªåæ å ±ãæž¡ããŸãã
顧客ã®ãã¬ããžããŒã¹ãéçšãããšãŒãžã§ã³ã·ãŒ
éçšæé ã§ã¯ãã¡ã¿ããŒã¿ã®åœ¹å²ãåããŠæ±ããŸããæ¡åŒµåãªããã¡ã€ã«ãåã蟌ãããã©ããã¯HTTP Content-Typeã§æ±ºãŸããŸããã€ã³ããã¯ã¹æžã¿ã®æ€çŽ¢çµæãã©ãçµã蟌ããã¯ãã¹ããŒãå®çŸ©åŸã®ã«ã¹ã¿ã x-amz-meta-*ãã£ãŒã«ãã§æ±ºãŸããŸãã
ããããŠããã°ãåå ã®åãåããæç¢ºã«ãªããŸããããã¥ã¡ã³ããèŠã€ãããªããšãããã£ã«ã¿ãŒã«ãŒã«ãåçã¢ãã«ã倿Žããåã«ãããŒã ã¯ãŸãåã蟌ã¿çšã¡ã¿ããŒã¿ã確èªã§ããŸãã
æ¡åŒµåãªããªããžã§ã¯ãã察å¿ããåã蟌ã¿çµè·¯ã«èŒãã
Cloudflareã®R2 Workers APIã§ã¯ããªã¯ãšã¹ãããããŒãhttpMetadataãšããŠæž¡ããŸããæ¬¡ã®Workerã¯ãªã¯ãšã¹ããã¹ããã®ãŸãŸãªããžã§ã¯ãããŒãšããŠäœ¿ããContent-Typeããªãã¢ããããŒããæåŠããŸãã
DOCSãšããååã§R2ãã±ãããwrangler.jsoncã«ãã€ã³ãããŸãã
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "r2-document-upload",
"main": "src/index.ts",
"compatibility_date": "2026-09-11",
"r2_buckets": [
{
"binding": "DOCS",
"bucket_name": "your-bucket"
}
]
}ç¶ããŠã次ã®Workerã䜿ããŸãã
interface Env {
DOCS: R2Bucket;
}
export default {
async fetch(request, env): Promise<Response> {
if (request.method !== "PUT") {
return new Response("Method Not Allowed", { status: 405 });
}
const key = new URL(request.url).pathname.replace(/^\//, "");
const contentType = request.headers.get("content-type");
if (!key || !contentType) {
return new Response("Key and Content-Type are required");
}
await env.DOCS.put(key, request.body, {
httpMetadata: request.headers,
});
return new Response(`Stored ${key}`);
},
} satisfies ExportedHandler<Env>;npx wrangler devãå®è¡ããWranglerã衚瀺ããããŒã«ã«ã¢ãã¬ã¹ãWORKER_URLã«èšå®ããŸãããã®ããã§ãããŒã«ã«ã®PDFãæ¡åŒµåã®ãªãä¿åå
ãžã¢ããããŒãããŸãã
curl "$WORKER_URL/documents/manual-alpha" \
--request PUT \
--header "Content-Type: application/pdf" \
--data-binary @manual.pdfãã®äŸã§ç¢ºèªã§ããã®ã¯ã¹ãã¬ãŒãžãžã®ä¿åãŸã§ã§ãã€ã³ããã¯ã¹äœæãŸã§ã¯èšŒæã§ããŸãããæ¬çªç°å¢ã§ã¯èªèšŒã远å ãããŠãŒã¶ãŒã®ãã¡ã€ã«åã ãã«é Œããä¿¡é Œã§ããæ€æ»ããåãå€å®ããCloudflareã®å¯Ÿå¿åœ¢åŒäžèЧãšç §åããŠãã ããã
ã¢ããããŒãæåã ãã§ã¯æ€çŽ¢å¯èœãšã¯éããªã
R2ãžã®æžã蟌ã¿ã«ã¯åŒ·ãæŽåæ§ããããããæžãèŸŒã¿æååŸã¯ãªããžã§ã¯ããšã¡ã¿ããŒã¿ã確èªã§ããŸããäžæ¹ãAI Searchã®ã€ã³ããã¯ã¹äœæã¯å¥ã®éåæãžã§ãã§ããåæãªã¯ãšã¹ããåçãããŠããåŸããã¢ã€ãã ã倱æããããšã¯ãããŸãã
R2ãåã蟌ã¿å ã«ããã€ã³ã¹ã¿ã³ã¹ã®åæã¯ãããã©ã«ãã§6æéããšã§ããééã¯1ã2ã4ã6ã12ã24æéããéžã¹ãã»ããæ¬¡ã®ã³ãã³ãã§èªåã§ãžã§ããéå§ã§ããŸãã
npx wrangler ai-search jobs create <INSTANCE_NAME>æåã®ãœãŒã¹åæãå®è¡ã§ããã®ã¯ãæçã§ã30ç§ã«1åã§ããå詊è¡ã®åæ°ãå¢ãããŠããäžæ£ãªã¡ã¿ããŒã¿ã¯çŽããŸããã
ãžã§ãã®å®äºåŸã«ãã¢ã€ãã ãã°ãã¢ã€ãã 詳现ããŸãã¯ã€ã³ã¹ã¿ã³ã¹çµ±èšã確èªããŸããAI Searchãæ€åºãããã¡ã€ã«åœ¢åŒãåãä»ããããªããšãã¯ãã¢ã€ãã åäœã®ãšã©ãŒãšããŠunsupported_typeãèšé²ãããŸãããªããžã§ã¯ããä¿®æ£ãããã®ã¢ã€ãã ãŸãã¯ãœãŒã¹ãããäžåºŠåæããŠãã ããã
ãã¹ãŠã®R2ããŒã«èªèå¯èœãªæ¡åŒµåãä»ããŠãããªããä»åã®å€æŽã«ãã圱é¿ã¯ãããŸãããAI Searchã®ãœãŒã¹ãå€éšR2ãã±ããã§ã¯ãªããWebãµã€ããçµã¿èŸŒã¿ã¹ãã¬ãŒãžã§ããå Žåãåæ§ã§ããæªå¯Ÿå¿ã®åœ¢åŒãäžéãè¶ ãããã¡ã€ã«ãããã®å€æŽã§ã€ã³ããã¯ã¹å¯èœã«ãªãããã§ã¯ãããŸããã
æ¬¡ã®æææ¥ã«ããããš
æåã«è¡ãã¹ãã¯ãäžæ¬æžãæãã§ã¯ãªãç£æ»ã§ãã
åã蟌ãŸããªãã£ãæ¡åŒµåãªããªããžã§ã¯ããèŠã€ãã
httpMetadataãå«ããŠR2ãªããžã§ã¯ããäžèЧååŸããtruncatedãfalseã«ãªããŸã§ããŒãžããã©ããŸããæåŸã®ãã¹éšåã«æ¡åŒµåããªãããŒãæœåºããAI Searchã®ã¢ã€ãã ãã°ãunsupported_typeãšã©ãŒãšçªãåãããŸããã¡ã¿ããŒã¿ãåé¡ãã
察å¿ããMIMEã¿ã€ããšãæ¬ èœãäžæ£ãæªå¯Ÿå¿ã
application/octet-streamã®å€ãåããŸããã«ã¹ã¿ãx-amz-meta-*ãã£ãŒã«ãã¯å¥ã®åé¡ã解決ãããã®ãªã®ã§ããã®ç¢ºèªã«ã¯å«ããŸãããå°èŠæš¡ãªåã蟌ã¿ã§ä¿®åŸ©ã詊ã
å®éã«ä¿åããŠãã圢åŒãããåãã®ãªãå°ããªãµã³ãã«ãéžã³ãŸããå©çšããããŒã«ã§å¯èœãªãå ã®ããŒãä¿ã£ããŸãŸãæ£ããHTTP
Content-Typeãä»ããŠåãªããžã§ã¯ããæžã蟌ããã³ããŒããŸããåæããæ€çŽ¢ã§ããããšã確ããã
ãœãŒã¹åæãäžåºŠå®è¡ããŸããã¢ã€ãã ã®åŠçå®äºãåŸ ã£ãŠãã°ã確èªããåããã¥ã¡ã³ãå ã®æ¢ç¥ã®èªå¥ãæ€çŽ¢ããŸããã¹ãã¬ãŒãžãžã®æžãèŸŒã¿æåããŽãŒã«ã§ã¯ãããŸããããœãŒã¹ã®è©²åœç®æãè¿ã£ãŠåããŠå®äºã§ãã
æ€èšŒã§ããŠããç¯å²ãåºãã
ä¿®åŸ©æ¹æ³ã«ãã£ãŠçºçããClass AãšClass Bã®ãªãã¬ãŒã·ã§ã³æ°ãèŠç©ãããR2ã®ã¹ãã¬ãŒãžã¯ã©ã¹ã確èªããŠããããããæ¡å€§ããŸããåæã«ã¢ããããŒããŒãæŽæ°ããæ°ããæ¡åŒµåãªããªããžã§ã¯ãã«å¯Ÿå¿ããã¡ã¿ããŒã¿ãä»ãããã«ããŸãã
å®å®ããããŸãã¯äžéæãªR2ããŒã®ããã«AI Searchçšã®å¥ã®åœåçµè·¯ãç¶æããŠãããªããä»é±äžã«å¯Ÿå¿ãã䟡å€ããããŸããæ¢åãªããžã§ã¯ãã«ä¿¡é Œã§ããåæ å ±ããªããªããæžãæãåã«åé¡èšç»ãå¿ èŠãªã®ã§åŸ ã€ã¹ãã§ããèªèå¯èœãªæ¡åŒµåã ãã§åã蟌ã¿ãåé¡ãªãéçšã§ããŠãããªããäœãããå¿ èŠã¯ãããŸããã
次ã®ãã©ãããã©ãŒã 倿Žãéçšå€æãŸã§èœãšã蟌ãã§èªã¿ããæ¹ã¯ããã¥ãŒã¹ã¬ã¿ãŒã«ãç»é²ãã ããã
- å ¬éæ¥
- ã«ããŽãªãŒ
- Explained
- èšèª







