「6週間でCassandraにベクトル検索を追加するのにAIがどのように役立ったのか」
「6週間でのCassandraへのAIのベクトル検索追加の効果」
ベクトル検索機能の需要が急増しており、生成型AIアプリケーションを可能にするために、DataStaxはApache CassandraとCassandra上に構築された当社のマネージドサービスであるAstra DBにこの機能を追加するという非常に野心的な目標を立てました。
4月に、私が製品担当最高副社長に誰がそれを作るのか尋ねたところ、「なぜあなたがやらないのですか?」と言われました。
他の2人のエンジニアと共に、私たちはわずか6週間で、6月7日に新しいベクトル検索の実装を提供することを目指しました。
新しいAIコーディングツールはこの目標を達成するのに役立つでしょうか?一部のエンジニアは自信を持ってAIは多くのミスをするため、生産性にとってはマイナスだと主張してきました。しかし、この重要なプロジェクトでこれらのツールを試してみた結果、私はこれらのツールが実際に生産性を大幅に向上させるものだと確信しました。実際、もう手作業で全てを書くことは戻れません。ChatGPT、GitHub Copilot、その他のAIツールでコーディングする際に私が学んだことを以下に示します。
Copilot
Copilotはシンプルです。強化された自動補完です。ほとんどの場合、行を自動的に補完したり、複数行の補完をコンテキストからパターンマッチングしたりします。ここでは、コメントを書いた後に新しい行のneighbors
を書き始めました。Copilotは正しく補完を提案しました(2行目に続くテキストを含む):
次に、テストコードの少し複雑な例を示します。最初はmapToLong
としてループを書き始めましたが、その後、データ構造を変更してforEach
を使用する方が綺麗になるようにしました。Copilotは私をサポートしてくれました:
そして時々(これは例外的なケースです)、メソッド全体の補完を提案してくれることもあります:
Copilotは役に立ちますが、2つの理由で制限されています。まず、慎重にエラーを起こすように調整されています。まだ幻覚を見ることがありますが、まれです。何をすべきかわからないときは補完を提案しません。次に、人間のタイピングの一時停止とのシームレスな統合に十分に速い必要があるため、現時点ではGPT-4のような重いモデルの使用はできません。
(「Copilotマキシマリスト」の意見については、Max Kriegerのツイートも参照してください。)
ChatGPT
Copilotにコメントからコードを生成させることもできますが、その場合、有料のChatGPTやAPIアクセスを介したGPT-4の方がほとんどの場合、より良い結果が得られます。
GPT-4をまだ試していない場合は、ぜひ試してみてください。GPT-3.5やClaudeに比べて、幻覚を見る頻度はずっと少ないです。また、シンプルな問題を解決できないこともあります(ここではシンプルなバイナリサーチを理解するのに苦労しています)。しかし、他の場合には驚くほど優れています。たとえば、このレースコンディションを最初の試みで理解したときのように。そして、それが素晴らしくない場合でも、知能の一部を忠実に模倣できるゴム製のアヒルのデバッグパートナーがいることは、ゾーンに入り、モチベーションを維持するために非常に貴重です。
そして、それをすべてに使用することができます。少なくとも、プログラミングの文脈では、テキストで説明できるもの、つまりほとんどすべてに非常に近いです。
以下は、GPT-4を使用したいくつかの場所です:
- APIに関するランダムな質問。ソースコードを探索する必要があったこのカテゴリは、幻覚を引き起こす可能性が最も高いです。私は主にこの用途にはPhindに切り替えました(以下参照)。
- マイクロ最適化。それはCopilotのようなものですが、Stack Overflowのすべてをマッチング対象としています。
- Streamパイプラインに関わること。まだ頭の中のロジックをステップチェーンのStreamメソッド呼び出しにうまく変換することが得意ではありません。この例のように、最終結果が元々のものよりも悪くなることもありますが、それはプログラミングではよくあることです。GPTでその探索を行う方が、1文字ずつ行うよりも簡単で速いです。そして、その時間から結果までのループを速くすることは、新しいアイデアを試す可能性を高めます。実験のコストが低くなるためです。
- もちろん、GPTはgitについても知っていますが、gitを使用してカスタムツールを構築するのに非常に優れていることに気づいていないかもしれません。このリストの他の項目と同様に、以前は手作業で行っていたことですが、GPTがそこにいることで作業を加速することができるため、今ではこのようなツールを作成します(以前は通常、2番目に優れた解決策を選択し、このような一回限りのスクリプトに1時間を費やすことはありませんでした)。
こちらは私がGPT-4とのお気に入りのコラボレーションです。ConcurrentHashMap<Integer, Integer>
を使用した素朴なアプローチではボックス/アンボックスの繰り返しによるガベージコレクションのオーバーヘッドを回避するために、カスタムクラスを作成する必要がありました。そして、これはLucene向けのものであり、外部依存性を許可しない厳格なポリシーを持っているため、Trivagoのfastutil-concurrent-wrapper
のような並行原子操作マップを単純に置き換えることはできませんでした。
私は何度もGPTとやり取りをし、その解決策を改善しました。この会話は、GPTとのベストプラクティスをいくつか示しています(2023年中旬時点):
- コードを書く際には、GPTはきれいにカプセル化された問題に最適です。対照的に、クラスの複数の部分に触れるリファクタリングをGPTに実行させようとしても、ほとんど成功しませんでした。
- 質問としてフレーズの提案を行ってください。「もっと効率的にするには…?」といった具体的な質問です。GPT(特にClaude)は、ユーザーに直接反論することをためらう傾向があります。異議を唱える余地を残しておくか、それによって意図せずに幻覚を引き起こさせる可能性があるためです。
- 大規模言語モデル(LLM)ですべてを完結しようとしないでください。この会話の最終出力はまだ微調整が必要ですが、自分で手動で終わらせる方が簡単で速いため、GPTに完璧にするよりも手作業で終わらせました。
- 一般的に、魔法のプロンプトを信じることはありません。簡潔なプロンプトを使用し、GPTが誤った方向に進む場合は修正する方が良いですが、適切なプロンプトは非常に役立つ場合があります。Javaでの並行プログラミングはその一例です。GPTの好ましい解決策は、すべてに
synchronized
を追加して終了することです。私は、並行性のウィザードであるCliff Clickのスタイルで考えるように指示することで、大いに助けになることを発見しました。最近では、Jeremy Howardのシステムプロンプトのわずかに編集したバージョンを使用するように切り替えました。
このリストを見ると、AIは無限のインターンが手元にいるようなものであるという経験則にどれほどよく合っているかが分かります。インターンは自己完結型の問題に向いており、チームリーダーに反論することをためらうことが多く、説明するよりも仕事を自分でする方が簡単です(実際のインターンにはそれをする誘惑に抵抗することをお勧めしますが、GPTの場合は関係ありません)。
高度なデータ分析
Code Interpreter(ChatGPTの一部でもある)からAdvanced Data Analysisへの進化は次のレベルです。昨日からJavaで利用できるようになっていればと思います。それはGPT-4のPythonコード生成をJuypterやJupyterのようなサンドボックスに包み込み、独自のミスを修正するためのループに入れるものです。私がインデックスコードのトラブルシューティングをしていたときの例を以下に示します。
主な問題は、ADAが予期しない入力で問題を「解決」し、問題のある行を破棄する傾向があることですが、これは通常望ましくありません。また、コードがエラーなしで完了すると、通常は満足してしまいます。自分が含めたい検証チェックについて具体的に指定する必要があります。それを指示すると、「成功するまで反復する」ループに追加され、繰り返し説明する必要がなくなります。
また、言及する価値があるのは、ADAが通常のGPT-4よりも進んだモデルを実行しているという噂です。最低でもより長いコンテキストウィンドウがあります。私は現在、デフォルトでADAを使用しており、改善されているように思えます。唯一のデメリットは、Javaが必要な場所でもPythonを書き始めることがあることです。
Claude
AnthropicのOpenAIのGPTの競合相手であるClaudeは、コードの記述においてGPT-4よりも低いレベル(GPT 3.5程度)です。
しかし、Claudeには10倍以上の100,000トークンのコンテキストウィンドウがあります。これはGPT-4の提供するものの3分の1しかありません(OpenAIはGPT-4のコンテキストウィンドウを32,000トークンに拡張するEnterprise ChatGPTを発表しましたが)。
私はClaudeを以下の3つの用途で使用しました:
- Cassandraコードのクラス全体を貼り付けて、それが何を行っているのかを理解するのに役立ちました。
- 研究論文をアップロードし、それについて質問しました。
- 両方を同時に行うこともしました。研究論文がこちら、Javaでの実装がこちらです。それらの違いは何ですか?制約XとYを考慮して、それらの違いは意味がありますか?
BingとPhind
Bingチャットは今年の初めにリリースされたときに注目を浴びましたが、それ以外は使い勝手が良いGPT-4(「クリエイティブ」設定を選択)の無料ソースとしての役割しか果たしていません。私はほとんど使わなくなりました。BingのGPT-4のバージョンは、ChatGPTのバージョンよりもコードの書き方がずっと悪くなってしまったようです。
代わりに、AIのフレーバーのある検索をする場合は、Phindを使っています。Bingが本来であるべきものですが、何らかの理由で、マイクロソフトの主力プロジェクトの一つであるBingを、小さなスタートアップが凌駕してしまいました。Phindは、Java、Python、gitなどで「Xをどうやってするか」という質問に対して、Googleの完全な代替となっています。こうしたクエリに対して、Phindはほとんどいつも完璧な回答をしてくれます。それに加えて、関連するソースも提供してくれます。一方、Bingは、少なくとも一つのソースが実際の内容と異なることを示しています。
Bard
Bardにはまだ得意なことが見つかっていません。GPT-4のようにコードの書き方がうまく、Claudeのような大きなコンテキストウィンドウも持っていません。その代わり、幻覚を起こすことが多いです。
コーディングを生産的かつ楽しいものにする
Cassandraは大規模で成熟したコードベースであり、新しい機能を追加しようとする新人にとっても私にとっても intimidating なものです。もしAIが私たちの誰かをより速く動かすのに役立つのであれば、これがその方法です。ChatGPTと関連するAIツールは、人間のエンジニアによって設計された大規模なプロジェクトの一部として、またはワンオフのツーリングとして、明確に定義された問題を解決するためのコードの書き方に優れています。また、デバッグやプロトタイプの作成、未知のコードの探索にも役立ちます。
要するに、ChatGPTとCopilotは私たちの締め切りを守るために重要な役割を果たしました。これらのツールがあることで、タスクによっては私の生産性が50%から100%向上します。これらには制約がありますが、小さなタスクの繰り返し作業においては優れた反復を行い、アイデアを考えるための疲れ知らずのパートナーとして、私の集中力を保つのに役立ちます。プログラミングの経験が数年あっても、これを行う必要があります。
最後に、生産性の面を考えずに、繰り返し作業を手助けしてくれるAIと一緒にコーディングすることは、単純に楽しいです。これによって私は第二の風を吹き込まれ、クールなものを作ることに対する新たな興奮を感じています。これらのツールのより高度なバージョンを使いながら、進化と成熟を遂げることを楽しみにしています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles