Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
今更ながらLambda + Bedrockを検証してみた
Search
Takuya Ishikawa
September 24, 2025
96
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
今更ながらLambda + Bedrockを検証してみた
Takuya Ishikawa
September 24, 2025
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Between Models and Reality
mayunak
4
500
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Chasing Engaging Ingredients in Design
codingconduct
0
360
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
Test your architecture with Archunit
thirion
2
2.4k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Speed Design
sergeychernyshev
33
2.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
RailsConf 2023
tenderlove
30
1.6k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Transcript
Copyright © 2025 BeeX Inc. All Rights Reserved. Copyright ©
2025 BeeX Inc. All Rights Reserved. 今更ながらLambda + Bedrockを検証 してみた Ver 1.0 2025年9月17日(水) 石川 卓弥
Copyright © 2025 BeeX Inc. All Rights Reserved. 2 目次
1. 自己紹介 2. なぜこのテーマにしたのか ➢ なんでこのテーマにしたのか ➢ このテーマで話したいこと ➢ AIクライアント(Cline)とは 3. Lambda + Bedrock ➢ 構成図 ➢ 軽くLambdaとBedrockの紹介 ➢ 画像を読み込ませるには ➢ Excelを読み込ませるには ➢ 複数ファイルを出力するには 4. Clineではどうやってるのか 5. まとめ
Copyright © 2025 BeeX Inc. All Rights Reserved. 3 経歴
: バス会社事務(高卒入社) ⇒ 大学 ⇒ アプリ開発へ(5年くらい) ⇒ BeeX入社(2024年8月) 趣味 : ・ゲーム … するゲームは様々です 集まる人数多いときはダーツとか麻雀とか ・ギター … そんなに上手くはないです ・サウナ … 週1で行ってます 今興味あること: ・バイク(免許とるところから) ・ドラム(初心者) ・AWSの資格年内にいくつか取ろうかと思ってます 自己紹介 石川 卓弥(30) いしかわ たくや 出身:福岡県姪浜市 家族構成 ・妻(28) 2人で横浜に在住 ・弟(25) 川崎に住んでます 兄弟 プロフィール
Copyright © 2025 BeeX Inc. All Rights Reserved. Copyright ©
2025 BeeX Inc. All Rights Reserved. なぜこのテーマにしたのか
Copyright © 2025 BeeX Inc. All Rights Reserved. 5 なんでこのテーマにしたのか?
✓ 案件の中で検証する機会が最近あったから ✓ AIクライアント(ClineとかClaude Code)は少し触っていたので、 クラウド(Lambda + Bedrock)での違いとかが印象に残った ✓ やってみたら分かったハマりどころを共有したかった ✓ 試したことある人からは共感得やすいと思った
Copyright © 2025 BeeX Inc. All Rights Reserved. 6 このテーマで話したいこと
AIの難しい話はしないです • ベクトルとか精度とか • RAGとかファインチューニングとか • 運用上の観点や、セキュリティとか 単純にLambdaでBedrockを触ってみた話をします 逆に言えば自分と同じであまりAI触ってない方がいたら嬉しいなと思ったので、 何かの気づきとかきっかけになればいいかなと思います
Copyright © 2025 BeeX Inc. All Rights Reserved. 7 AIコーディングエージェント(Cline)とは
Cline Cline拡大
Copyright © 2025 BeeX Inc. All Rights Reserved. 8 AIコーディングエージェント(Cline)とは
簡単なpythonのコードを作成してほしいです 簡単なPythonコードを作成いたします!どのような 機能のコードをご希望でしょうか? 例えば: - 計算機(電卓) - ファイル操作(読み書き) - データ処理(CSV、JSON等) - ゲーム(じゃんけん、数当てゲーム等) - ウェブスクレイピング - GUI アプリケーション - その他 じゃんけんのゲームのpythonをお願いします。
Copyright © 2025 BeeX Inc. All Rights Reserved. 9 AIコーディングエージェント(Cline)とは
「janken_game.py」pythonの使い方をreamd.me ファイルを作って記載してもらえますか? ※Clineは他にもローカル上にある画像ファイルや、Excelファイル をINPUTにしてAIにコードなどを生成依頼をすることも可能です
Copyright © 2025 BeeX Inc. All Rights Reserved. Copyright ©
2025 BeeX Inc. All Rights Reserved. Lambda + Bedrock
Copyright © 2025 BeeX Inc. All Rights Reserved. 11 構成図
✓ 構成はシンプルです
Copyright © 2025 BeeX Inc. All Rights Reserved. 12 ・サーバレスで実行できる関数の実行サービス
・BedrockへAPIをAWS SDKで呼び出せる (簡単な)Lambda、Bedrock紹介 AWS Lambda Amazon Bedrock client = boto3.client("bedrock-runtime", region_name="us-west-2") response = client.invoke_model( modelId="apac.anthropic.claude-sonnet-4-20250514-v1:0", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 500, "temperature": 0, "messages": [ {“role”: “user”, “content”: “こんにちは、自己紹介してください"} ] }), contentType="application/json", accept="application/json" ) ・Amazonが提供する生成AIのプラットフォーム ・色んな会社のAIモデルをAPI経由で使えるサービス
Copyright © 2025 BeeX Inc. All Rights Reserved. 13 Lambda
+ BedrockでAIクライアントみたいにしたい ✓ 画像ファイルどうしたらいいの? ✓ AIには文字しか渡せないのでは ✓ Excelファイルはどうしたらいいの? ✓ そもそもExcelファイルはインプットファイルとして対応してるの? ✓ 複数ファイルを出力させるには? ✓ AIへの返答は基本的に1リクエストで1レスポンス
Copyright © 2025 BeeX Inc. All Rights Reserved. 14 画像を読み込ませたいとき
# base64に変換 img_b64 = base64.b64encode(img_bytes).decode("utf-8") # Bedrockクライアント client = boto3.client("bedrock-runtime", region_name="us-east-1") # Claude 3 のマルチモーダル入力例 body = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 512, "messages": [ { "role": "user", "content": [ {"type": "text", "text": "この画像に写っているものを説明してください"}, { "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": img_b64 } } ] } ] } response = client.invoke_model( modelId=" apac.anthropic.claude-sonnet-4-20250514-v1:0 ", contentType="application/json", accept="application/json", body=json.dumps(body) ) ✓ 画像ファイルをBase64にエンコード ➢ iVBORw0KGgoAAAANSUhEU… ➢ エンコードして画像データを文字に ✓ エンコードした情報をbodyに格納 ✓ 配列のjsonのため複数入れることもできる ✓ 例) Typeに画像は2種類です ✓ 例) Base64の情報を2つ入れる ✓ Client.Invoke_model()でBedrockに入れる 画像データを直接Bedrockに送信することはできないため Base64とかで文字データに変換して渡してあげる必要がある
Copyright © 2025 BeeX Inc. All Rights Reserved. 15 Excelファイルを読み込ませたいとき
# 各シートを処理 for sheet_name, sheet_data in excel_sheets.items(): logger.info(f"シート '{sheet_name}' の処理を開始") # データの基本情報を取得 total_rows = len(sheet_data) total_columns = len(sheet_data.columns) # 基本的なデータ処理 sheet_processed_data = [] # 各行を処理 for index, row in sheet_data.iterrows(): # 空の行をスキップ if row.isnull().all(): continue # 行データを辞書形式に変換(データ型を保持) row_dict = {} for column in sheet_data.columns: value = row[column] # NaN値の処理 if pd.isna(value): row_dict[column] = None else: # データ型を保持したまま格納 row_dict[column] = value sheet_processed_data.append(row_dict) # シートごとの処理結果を保存 processed_data[sheet_name] = sheet_processed_data total_rows_processed += len(sheet_processed_data) ✓ 空行はいらないのでスキップ ✓ シートごとの結果を保存する Excelファイルは特殊で工夫が必要 ✓ シートが分かれてる ✓ 関数が入力されてる ✓ Excelファイル内の全シートで行う ✓ データを以下のように変換しているイメージ { "sheet1": [ ["くだもの", "価格", "産地"], [“りんご", 100, "東京"], [“みかん", 200, "大阪"], [“ばなな”, 300, “名古屋"] ] }
Copyright © 2025 BeeX Inc. All Rights Reserved. 16 複数ファイル出力させたいとき(1/2)
リクエストには複数のINPUTファイルを含めることは出来る 返ってくるのは一つのレスポンス 設計書とか画像ファイル(構成図)とかから出力するとき Terraformのコードとかだと複数に分かれてた方が見やすい 設計書 構成図 INPUTファイル output/main.tf /variables.tf /outputs.tf OUTPUTファイル
Copyright © 2025 BeeX Inc. All Rights Reserved. 17 複数ファイル出力させたいとき(2/2)
リクエストには複数のINPUTファイルを含めることは出来る 返ってくるのは一つのレスポンス 設計書 構成図 INPUTファイル output/main.tf /variables.tf /outputs.tf OUTPUTファイル 設計書と構成図からTerraformのコードを作成してください。 レスポンスはXML形式で返してください。 <file name=¥"main.tf¥">メインリソース定義</file>¥n <file ¥r¥n name=¥"variables.tf¥">変数定義</file>¥n <file name=¥"outputs.tf¥">出力定義</file> プロンプト 返ってきた内容を Lambda内で整形する Bedrock内で XMLに分けて一つの レスポンスを返す
Copyright © 2025 BeeX Inc. All Rights Reserved. Copyright ©
2025 BeeX Inc. All Rights Reserved. Clineではどうやっているのか
Copyright © 2025 BeeX Inc. All Rights Reserved. 19 もしかしてClineでも同じようなことしてるのでは…
✓ 画像ファイルをBase64に変換してる箇所 ✓ エクセルファイルはどうしているのか ✓ 複数ファイルを制御している箇所
Copyright © 2025 BeeX Inc. All Rights Reserved. 20 ClineはGithubにコードが公開されてる
https://github.com/cline/cline
Copyright © 2025 BeeX Inc. All Rights Reserved. 21 Bedrockにリクエストしている箇所があるはず…
cline-main/src/core/api/providers/bedrock.ts /** * Executes a Converse API stream command and handles the response * Common implementation for both Anthropic and Nova models */ private async *executeConverseStream(command: ConverseStreamCommand, modelInfo: ModelInfo): ApiStream { try { const client = await this.getBedrockClient() const response = await client.send(command) if (response.stream) { // Buffer content by contentBlockIndex to handle multi-block responses correctly const contentBuffers: Record<number, string> = {} const blockTypes = new Map<number, "reasoning" | "text">() ・・・ client = boto3.client("bedrock-runtime", region_name="us-west-2") response = client.invoke_model( modelId="apac.anthropic.claude-sonnet-4-20250514-v1:0", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 500, "temperature": 0, "messages": [ {“role”: “user”, “content”: “こんにちは、自己紹介してください"} ] }), contentType="application/json", accept="application/json" ) Lambdaで記載した箇所 Githubで見ると色々なプロバイダに対応している ことがわかる 例えば… Bedorock Geminiとか
Copyright © 2025 BeeX Inc. All Rights Reserved. 22 画像を変換している箇所があるはず…
cline-main/src/integrations/misc/extract-images.ts // Convert buffer to base64 const base64 = buffer.toString("base64") const mimeType = getMimeType(filePath) as "image/jpeg" | "image/png" | "image/webp" // Create the image block in Anthropic format const imageBlock: Anthropic.ImageBlockParam = { type: "image", source: { type: "base64", media_type: mimeType, data: base64, }, } # base64に変換 img_b64 = base64.b64encode(img_bytes).decode("utf-8") # Claude 3 のマルチモーダル入力例 body = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 512, "messages": [ { "role": "user", "content": [ {"type": "text", "text": "この画像に写っているものを説明してください"}, { "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": img_b64 } } ] } ] } Lambdaで記載した箇所 Githubで見るとmarkdownとかもあるので 色々なファイル形式の変換していることが見れる 例えば… pdfとかmarkdown とか
Copyright © 2025 BeeX Inc. All Rights Reserved. 23 Excelを読み込んでる箇所があるはず…
cline-main/src/integrations/misc/extract-text.ts async function extractTextFromExcel(filePath: string): Promise<string> { const workbook = new ExcelJS.Workbook() let excelText = "" try { await workbook.xlsx.readFile(filePath) workbook.eachSheet((worksheet, _sheetId) => { // Skip hidden sheets if (worksheet.state === "hidden" || worksheet.state === "veryHidden") { return } excelText += `--- Sheet: ${worksheet.name} ---¥n` worksheet.eachRow({ includeEmpty: false }, (row, rowNumber) => { // Optional: limit processing for very large sheets if (rowNumber > 50000) { excelText += `[... truncated at row ${rowNumber} ...]¥n` return false } const rowTexts: string[] = [] let hasContent = false row.eachCell({ includeEmpty: true }, (cell, _colNumber) => { const cellText = formatCellValue(cell) if (cellText.trim()) { hasContent = true } rowTexts.push(cellText) }) // Only add rows with actual content if (hasContent) { excelText += rowTexts.join("¥t") + "¥n" } return true }) excelText += "¥n" // Blank line between sheets ✓ Excelファイル内を読み込んでいる ✓ シートを考慮してる ✓ 非表示のシートはスキップ ✓ シート名をテキストに追加したり ✓ 各行を読み込んでる ✓ 行数が50000を超えたら強制的に打ち切ってる ✓ 各セルを処理 ✓ セルに数値、日付であっても文字化するようにしている ✓ 空白はスキップしている ✓ 各行のテキスト化 ✓ シート間を区切る
Copyright © 2025 BeeX Inc. All Rights Reserved. 24 複数ファイルを制御している箇所があるはず…
✓ 1つのファイルを作成→結果を確認→次のファイルを作成を繰り返してる ✓ 複数のファイルがあるときは、1回ずつリクエスト、書き込み、状況の共有 ✓ 一貫性を保つため、前のファイルの内容を記憶する必要性 ✓ 大量ファイルを出力するときは多くのAPI呼び出しが必要 index.tsでリクエストについての制御をしているみたいなのですが、 2000行を超えるコードで全てを紹介することができず… あと詳しくは見れなかったです… cline-main/src/core/task/index.ts ✓ メリットとして ✓ 複数あるうちの1つのリクエストで失敗してもそのファイルだけ作成されない ✓ 1回1回承認をユーザーにしてもらうことで認識ずれを早めに回避できる ✓ 情報共有も1回1回行うため安心
Copyright © 2025 BeeX Inc. All Rights Reserved. Copyright ©
2025 BeeX Inc. All Rights Reserved. まとめ
Copyright © 2025 BeeX Inc. All Rights Reserved. 26 まとめ
✓ BedrockをAPIで利用するときは、扱うデータによって工夫する必要がある ✓ 不便に感じた部分もあるが、工夫次第かなと思います ✓ APIを利用するときは返ってくるまで(30秒くらい)レスポンスがない ✓ ClineだとThinking…(考え中)とか出てくれるのでその辺りも必要かなと思いました ✓ もっとレスポンスが早くなったりすると使いやすくなっていく
Copyright © 2025 BeeX Inc. All Rights Reserved. Copyright ©
2025 BeeX Inc. All Rights Reserved.