はじめに
LambdaとAmazon Bedrockを組み合わせることで、URLから記事を自動生成する機能を簡単に実装できます。この記事では、URLのコンテンツを読み取り、AIを活用して新しい記事を生成する方法について、Lambdaの実装手順を詳しく解説します。
目次
- Lambda関数の実装
- URLコンテンツの取得処理
- Bedrockを使用した記事生成
- エラーハンドリング
Lambda関数の実装
まず、URLからコンテンツを取得し、Bedrockを呼び出すLambda関数を実装します。
import {
BedrockRuntimeClient,
InvokeModelWithResponseStreamCommand,
} from '@aws-sdk/client-bedrock-runtime'
import { Context, Handler } from 'aws-lambda'
import fetch from 'node-fetch'
type EventType = {
url1: string
url2: string
title: string
summary: string
role: string
personName: string
}
const modelId = 'anthropic.claude-3-5-sonnet-20240620-v1:0'
このコードでは、必要なライブラリをインポートし、イベントの型定義とモデルIDを設定しています。
URLコンテンツの取得処理
URLからコンテンツを取得する処理は以下のように実装します。(GenUのコードを一部参考にしました)
async function fetchWebContent(url: string): Promise<string> {
const response = await fetch(url)
const html = await response.text()
const content = html.replace(/<[^>]*>/g, '')
console.log(`Extracted content from ${url}:`, content.substring(0, 500) + '...')
return content
}
この関数では:
- fetch APIを使用してURLからコンテンツを取得
- HTMLタグを除去してプレーンテキストを抽出
- ログ出力用に最初の500文字を表示
Bedrockを使用した記事生成
Bedrockを使用して記事を生成する核となる処理は以下の通りです。プロンプトに指示文とブログの内容を含めてください。
const payload = {
anthropic_version: 'bedrock-2023-05-31',
max_tokens: 1500,
messages: [
{
role: 'user',
content: [{ type: 'text', text: prompt }],
},
],
}
const command = new InvokeModelWithResponseStreamCommand({
contentType: 'application/json',
body: JSON.stringify(payload),
modelId,
})
const apiResponse = await client.send(command)
このコードでは:
- Bedrockに送信するペイロードを構築
- ストリーミングレスポンスを使用して効率的にデータを取得
- レスポンスを適切に処理して記事を生成
エラーハンドリング
エラー処理は以下のように実装します:
if (item.internalServerException) {
throw item.internalServerException
} else if (item.modelStreamErrorException) {
throw item.modelStreamErrorException
} else if (item.throttlingException) {
throw item.throttlingException
} else if (item.validationException) {
throw item.validationException
}
主な例外処理:
- 内部サーバーエラー
- モデルストリームエラー
- スロットリングエラー
- バリデーションエラー
まとめ
LambdaとBedrockを組み合わせることで、URLからコンテンツを取得し、AIを使用して新しい記事を生成する機能を実装できます。主なポイントは:
- URLからのコンテンツ取得と前処理
- Bedrockモデルの適切な設定
- ストリーミングレスポンスの処理
- 適切なエラーハンドリング
この実装を基に、様々なユースケースに応じたカスタマイズが可能です。例えば、異なるAIモデルの使用や、より複雑なコンテンツ処理なども検討できます。
参考リンク