AWS LambdaからGroq APIを実行する(Node.js版)
AWS Lambda から Groq API を実行して結果を取得したい。

ローカルでの作業
空のフォルダに groq-sdk をインストールする
mkdir groq-sdk-layer # 名前は何でもいい cd groq-sdk-layer npm init npm install groq-sdk
フォルダ構成を確認、調整する
/groq-sdk-layer /package.json /node_modules
↓
/groq-sdk-layer
/nodejs # ←新規作成してファイルを移動させる
/package.json
/node_modules
(参考)
重要: Node.js 用にインポートするライブラリは、nodejs/node_modules というフォルダ構造内にある必要があります。
Node.js で、Lambda に関連して発生する「Cannot find module」または「Cannot find Package」エラーを解決する | AWS re:Post
zipする
上記の nodejs フォルダをzip圧縮する。
レイヤーの作成
上記zipをアップロードしてレイヤーを作成し、Lambda関数に追加します。
実行
import Groq from 'groq-sdk';
...
export const handler = async (event) => {
...
var groq = new Groq({
apiKey: process.env.GROQ_API_KEY,
});
...
const response = await groq.chat.completions.create(...);
...
ハマりポイント
zipする際のフォルダ構成が異なると、モジュール読み込みでエラーが起きます。
/groq-sdk-layer # これをzipしてもダメ
/nodejs # これをzipする必要がある
/package.json
/node_modules
LLMの生成結果を安定させる小技
生成プロンプトの小ネタです。
よくある問題
LLMにテキストを生成させようとすると、以下のような生成結果が出力されがちです。
あなたは○○です。入力をもとに□□を生成してください。
↓
了解しました! いただいたデータをもとに考えると「○○」というのはどうでしょうか。
チャットでやりとりするならこれでもいいのですが、「○○」という結果だけをプログラム上で扱いたい場合にはイマイチです。
よくある解決方法
最も一般的な対策が「出力形式を指定する」です。
あなたは○○です。入力をもとに□□を生成してください。
...
# 回答形式:
以下の形式の文字列のみを回答する。
{
"answer": "回答",
}
しかしこれでも、以下のような結果が出力されることがあります。
了解しました!
いただいたデータをもとに考えました!
{
"answer": "..."
}
どうでしょうか!
どうでしょうかじゃないのよ。
ちょっとした小技
以下のように指示します。
...
# 回答形式:
{
...
"your-comment": "あなたのコメント"
}
つまり、LLMの「説明したい気持ち」の出力先をこちらで用意してあげるのです。
{
"answer": "...",
"your-comment": "これこれこういう事を考慮しました!"
}
これでもダメなことはありますが、かなりマシになると思います。