導入:なぜコードの「エンベディング」が重要なのか
AIにソースコードを読み込ませる際、単にテキストとして渡すだけでは「コードの意味」まで深く理解させるのは困難です。特に大規模なプロジェクトでは、関数名や変数名が似ているだけの無関係なコードと、本当に修正が必要なコードの判別が難しくなります。そこで重要になるのが「エンベディング(ベクトル化)」です。これを活用することで、AIはコードを「意味の塊」として捉え、影響範囲の調査や設計意図の検索を劇的に効率化できるようになります。
基礎知識:エンベディングとベクトル化とは
エンベディングとは、テキストやコードをAIが計算可能な「数値の配列(ベクトル)」に変換する技術です。このベクトル空間上では、「意味が似ているコード同士」は近い距離に配置されます。
また、この技術を基盤としたRAG(検索拡張生成)は、AIに対して外部知識(今回はソースコード)を検索して提供する仕組みです。AIが「データベース接続をしているコードはどこ?」という質問を受けた際に、ベクトル検索を使って関連ファイルを特定し、その内容をAIに渡すことで回答精度を高めます。
実装:コードをベクトル化して検索する手順
実際にコードを検索可能な状態にするには、以下の3ステップが必要です。
1. コードを適当な単位(関数ごとなど)で分割する。
2. Embeddingモデル(OpenAIのtext-embedding-3-smallなど)を使ってベクトルに変換する。
3. ベクトルデータベース(PineconeやChromaなど)に保存し、検索できるようにする。
サンプルプログラム:Pythonによるコードのベクトル化例
以下は、OpenAIのAPIを利用してコードスニペットをベクトル化する基本的なサンプルです。
import openai
OpenAIのクライアント設定(APIキーが必要です)
client = openai.OpenAI(api_key="あなたのAPIキー")
def get_embedding(text, model="text-embedding-3-small"):
# コードをAIモデルに送信して数値ベクトルに変換する
text = text.replace("\n", " ")
return client.embeddings.create(input=[text], model=model).data[0].embedding
データベース接続処理のサンプルコード
code_snippet = """
def connect_db():
# PostgreSQLへの接続処理
conn = psycopg2.connect(dsn="dbname=test user=postgres")
return conn
"""
ベクトル化を実行
vector = get_embedding(code_snippet)
結果の表示(数値のリストが出力されます)
print(f"ベクトルの次元数: {len(vector)}")
print(f"最初の5つの数値: {vector[:5]}")
応用・注意点:現場で役立つ運用術
エンベディングを導入する際、陥りやすい罠が「粒度の問題」です。コード全体を一括でベクトル化すると検索精度が落ちるため、関数やクラス単位で分割(チャンク化)するのが鉄則です。
また、コードの更新に合わせてベクトルデータベースを同期させる必要があります。CI/CDパイプラインに「コード変更時に自動で再ベクトル化してデータベースを更新する」というタスクを組み込むことで、常に最新の情報をAIが参照できる環境を構築しましょう。

コメント