Claude 3 (Opus)で公開しているライブラリの説明文を作らせてみた(単一ファイル編)
作ったOSSライブラリの説明やサンプルコードを自動生成したいと試行錯誤している。特定のファイル内のコードを読み込んで説明させる実験を行い、AWS CDKでNode.jsのLambda関数を生成するライブラリの解説生成に成功。ライブラリの導入や使い方を自動で生成し、効率化に役立てられる可能性がある。しかし、生成結果は作者の試行結果に依存するため、検証は必要。今後は複数ファイルの場合やアプリケーション化の実装などにも研究を続ける。
目次
作ったOSSライブラリの説明やサンプルコードなどを自動生成したいなーと思っていたので、Claude相手にプロンプトやフローを試行錯誤してみています。今回は「ソースコードを1ファイルごとに読み込ませて、そのファイルが何をしているかを説明させる」ことを試しました。
前提とする仮説
- LLMは「そのファイルに書かれたコードが、どんなものか」を認識することができそう
- ただしコードそのものを検索するRAGを作ると、「そのファイル・プロダクトの実装」について話すようになる
- コードそのものではなく、「コードの使い方」を検索するRAGにすれば、プロダクトの使い方などを話せるのではないか?
実験対象
作りっぱなしのOSSがいくつかありますので、ファイル数の少ないものを1つ選んでみました。
https://www.npmjs.com/package/@wpkyoto/nodejs-lambda-version
検証の進め方
仮説を検証するため、まずは手作業でRAG的な振る舞いを再現させてみました。
- https://github.com/wpkyoto/aws-cdk-nodejs-lambda-version にあるコードを確認
- 本体のコードは
lib/index.ts
のみであることを確認 lib/index.ts
のコードを全てコピー- Claude3 (Opus)で
lib/index.ts
の中身を読ませる指示を実施 - その後使い方の紹介文を生成するように指示
コードを読ませるプロンプト
まず、RAGにおけるインデックス部分を作ります。今回は「プロダクトの実装を解説したテキスト」を生成させています。実際に組み込む場合は、この生成結果をEmbeddingした上でインデックスすることになります。
次のコードを読んで、どのような実装が定義されているファイルかを説明する文章を生成してください。
```
{lib/index.tsのコード}
```
まずはシンプルなプロンプトで試しました。{lib/index.tsのコード}には、コードを直接コピーアンドペーストして実行しています。実際の組み込みでは、ここにスクリプトで取得したファイルの中身を挿入するような処理が入ります。
コードを解説するプロンプトの実行結果
実行結果はこのようなものでした。概ねツールの用途や振る舞いについて解説してくれている様子です。
このコードは、AWS CDKを使用してNode.jsのLambda関数をデプロイするための実装が定義されているファイルです。
具体的には、以下のような機能を提供しています:
1. `NodejsLambdaVersionProps`インターフェースを定義し、`NodejsFunctionProps`を拡張しています。これにより、エントリーファイルのパスを指定できるようになります。
2. `NodejsLambdaVersion`クラスを定義し、`cdk.Construct`を継承しています。このクラスは、Node.jsのLambda関数を作成し、そのバージョンを管理するための機能を提供します。
3. コンストラクタ内で、`NodejsFunction`を使用してLambda関数を作成し、`this.function`プロパティに割り当てています。
4. Lambda関数のエントリーファイルの内容をSHA256ハッシュ化し、そのハッシュ値を使用してLambda関数のバージョンを作成しています。これにより、エントリーファイルの内容が変更されたときに、新しいバージョンが自動的に作成されます。
5. 作成されたLambda関数とそのバージョンは、それぞれ`function`プロパティと`version`プロパティを通じてアクセスできます。
このファイルを使用することで、AWS CDKでNode.jsのLambda関数を簡単に定義し、エントリーファイルの変更に基づいて自動的にバージョン管理することができます。これにより、Lambda関数のデプロイメントとバージョン管理のプロセスが簡素化されます。
使い方を説明させる
続いて先ほどの生成結果を踏まえて、ライブラリのユースケースなどを聞いてみます。ClaudeのGUIで検証する場合、会話の履歴を保持してくれているため、ただ使い方を聞くだけのプロンプトを送信しました。アプリケーション化する場合、先ほどの生成結果などを踏まえて説明させる形に実装する必要があります。
このライブラリの使い方を説明してください。
実行結果はこちらです。使い方をステップバイステップで丁寧に説明してくれているので、プロンプトを調整すればReadme.md
など向けのコンテンツ生成に使えそうにも見えます。
このライブラリは、AWS CDKを使用してNode.jsのLambda関数を定義し、エントリーファイルの内容に基づいて自動的にバージョン管理するための機能を提供します。以下は、このライブラリの使い方を説明します。
1. インストール
まず、AWS CDKとこのライブラリをプロジェクトにインストールします。
```
npm install @aws-cdk/core @aws-cdk/aws-lambda @aws-cdk/aws-lambda-nodejs
```
2. ライブラリのインポート
AWS CDKのスタックファイルで、このライブラリをインポートします。
```typescript
import { NodejsLambdaVersion, NodejsLambdaVersionProps } from './NodejsLambdaVersion';
```
3. Lambda関数の定義
`NodejsLambdaVersion`クラスを使用して、Node.jsのLambda関数を定義します。
```typescript
const lambdaProps: NodejsLambdaVersionProps = {
entry: 'path/to/lambda/handler.js',
// その他のLambda関数のプロパティを指定
};
const lambdaVersion = new NodejsLambdaVersion(this, 'MyLambda', lambdaProps);
```
`entry`プロパティにはLambda関数のエントリーファイルのパスを指定します。その他のLambda関数のプロパティ(ハンドラ名、ランタイム、環境変数など)も必要に応じて指定します。
4. Lambda関数の参照
`NodejsLambdaVersion`インスタンスの`function`プロパティを使用して、作成されたLambda関数を参照できます。
```typescript
const lambdaFunction = lambdaVersion.function;
```
この`lambdaFunction`変数を使用して、他のAWS CDKコンストラクト(例えば、APIゲートウェイ)にLambda関数を渡すことができます。
5. Lambda関数のバージョン参照
`NodejsLambdaVersion`インスタンスの`version`プロパティを使用して、作成されたLambda関数のバージョンを参照できます。
```typescript
const lambdaVersion = lambdaVersion.version;
```
このバージョンは、エントリーファイルの内容に基づいて自動的に生成されます。
6. デプロイ
通常のAWS CDKの手順に従ってスタックをデプロイします。
```
cdk deploy
```
デプロイ時に、このライブラリによってLambda関数とそのバージョンが自動的に作成されます。
このライブラリを使用することで、Node.jsのLambda関数の定義とバージョン管理を簡単に行うことができます。エントリーファイルの内容が変更されるたびに、新しいバージョンが自動的に作成されるため、Lambda関数の管理が容易になります。
ライブラリ名などは、明示的に渡す必要がある
一点気づいたこととしては、「ライブラリ名を明示的に提示しないと、インストール方法やライブラリの読み込み方法が適切に紹介されないこと」です。ファイルにライブラリ名などの情報が記述されていないことがほとんどですので、プロンプト側で調整するか、package.json
なども参照させる作りにする必要がありそうです。
このコードは、"@wpkyoto/nodejs-lambda-version"としてnpmに公開されています。それを踏まえて説明をアップデートしてください
ちなみにこの指示をした後の生成結果はこちらです。追加したライブラリのインストールなども指示してくれるようになりました。
了解しました。"@wpkyoto/nodejs-lambda-version"というnpmパッケージとして公開されていることを踏まえて、説明をアップデートします。
このnpmパッケージは、AWS CDKを使用してNode.jsのLambda関数を定義し、エントリーファイルの内容に基づいて自動的にバージョン管理するための機能を提供します。以下は、このパッケージの使い方を説明します。
1. インストール
まず、AWS CDKとこのパッケージをプロジェクトにインストールします。
```
npm install @aws-cdk/core @aws-cdk/aws-lambda @aws-cdk/aws-lambda-nodejs @wpkyoto/nodejs-lambda-version
```
2. パッケージのインポート
AWS CDKのスタックファイルで、このパッケージをインポートします。
```typescript
import { NodejsLambdaVersion, NodejsLambdaVersionProps } from '@wpkyoto/nodejs-lambda-version';
```
3. Lambda関数の定義
`NodejsLambdaVersion`クラスを使用して、Node.jsのLambda関数を定義します。
```typescript
const lambdaProps: NodejsLambdaVersionProps = {
entry: 'path/to/lambda/handler.js',
// その他のLambda関数のプロパティを指定
};
const lambdaVersion = new NodejsLambdaVersion(this, 'MyLambda', lambdaProps);
```
`entry`プロパティにはLambda関数のエントリーファイルのパスを指定します。その他のLambda関数のプロパティ(ハンドラ名、ランタイム、環境変数など)も必要に応じて指定します。
4. Lambda関数の参照
`NodejsLambdaVersion`インスタンスの`function`プロパティを使用して、作成されたLambda関数を参照できます。
```typescript
const lambdaFunction = lambdaVersion.function;
```
この`lambdaFunction`変数を使用して、他のAWS CDKコンストラクト(例えば、APIゲートウェイ)にLambda関数を渡すことができます。
5. Lambda関数のバージョン参照
`NodejsLambdaVersion`インスタンスの`version`プロパティを使用して、作成されたLambda関数のバージョンを参照できます。
```typescript
const lambdaVersion = lambdaVersion.version;
```
このバージョンは、エントリーファイルの内容に基づいて自動的に生成されます。
6. デプロイ
通常のAWS CDKの手順に従ってスタックをデプロイします。
```
cdk deploy
```
デプロイ時に、このパッケージによってLambda関数とそのバージョンが自動的に作成されます。
"@wpkyoto/nodejs-lambda-version"パッケージを使用することで、Node.jsのLambda関数の定義とバージョン管理を簡単に行うことができます。エントリーファイルの内容が変更されるたびに、新しいバージョンが自動的に作成されるため、Lambda関数の管理が容易になります。npmパッケージとして公開されているため、プロジェクトへの導入も簡単に行えます。
試してみての感想
今回試した範囲では、生成結果にハルシネーションもあまり見当たりませんでした。とはいえこれはライブラリの作者本人が試しているから判断できることである点には注意が必要です。知らないライブラリに対して実行しても、その説明が間違っている可能性はあるため、検証する必要は残ります。
とはいえ、ライブラリを紹介するサイトや使い方を説明するドキュメント作成の効率化に、LLMが使える可能性が見えてきたとは思います。複数ファイルが存在するケースでどのように設計すべきかや、アプリケーション化するにはどんな実装が必要かなどは、引き続き研究していきたいと思います。