6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

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を使用して新しい記事を生成する機能を実装できます。主なポイントは:

  1. URLからのコンテンツ取得と前処理
  2. Bedrockモデルの適切な設定
  3. ストリーミングレスポンスの処理
  4. 適切なエラーハンドリング

この実装を基に、様々なユースケースに応じたカスタマイズが可能です。例えば、異なるAIモデルの使用や、より複雑なコンテンツ処理なども検討できます。


参考リンク

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?