著者 | 崔昊 レビュー | Chonglou まとめLLM(大規模言語モデル)の開発に伴い、ソースコードの解析に LLM を使用する傾向があります。オンラインブロガーは、 GitHub Co-Pilot 、 Code Interpreter 、 Codium 、 Codeium上のコードを分析しました。ぜひOpenAIを使って楽しんでください GPT -3.5- Turbo と LangChain は LangChain のソースコードを分析します。 導入ご存知のとおり、プログラマーはソースコードを頻繁に扱います。多くの場合、プログラマーは新しいコード ベースやレガシー プロジェクトのコード ベースに遭遇すると、途方に暮れてしまいます。特に、既存のコード ベースに変更を加える場合はさらに困難であり、永遠に後悔することにつながる誤ったステップを踏むことを恐れます。たとえば、クラスとメソッドの関係が明確ではなく、関数間のビジネス ロジックが明確ではありません。しかし、今では心配する必要はありません。大規模な言語モデルのサポートにより、コードを読むことは難しくなく、コードベースの全体的な分析も簡単です。 要約すると、大規模言語モデルを使用すると、次の操作を実行できます。 1. コードベースに関する Q&A を実施して、その動作を理解します。 2. LLM を使用してリファクタリングまたは改善の提案を行います。 3. LLM を使用してコードを文書化します。 今日は、コード ベースの Q&A から始めて、コード ベースの Q&A プログラムの作成について説明します。 全体紹介まず、図1に示すように、いくつかのアイデアを整理してみましょう。 表示されます。まずLangChainのソースコードをダウンロードし、 コード ディレクトリとそのディレクトリの下にあるすべてのソース コード ファイルがディスクに保存されます。次に、図の赤い部分が読み込まれて変換されます。これらのコード ファイルを埋め込み操作用の小さなファイル ブロックに分割します。つまり、図のオレンジ色の部分であるベクターデータベースに埋め込みます。次に、画像の右端のユーザーが大きなモデルを要求します。ここでは、GPT -3.5- Turbo を使用し、モデルに「 LangChain でReAct エージェントを初期化する方法」など、LangChain ソースコードに関連する質問をするように依頼します。この時点で、GPT -3.5- Turbo の大規模言語モデルはベクトル データベースから関連情報を取得し、ユーザーに返します。 図1. ソースコードライブラリのアイデアの疑問 具体的には、次のステップで構成されるメカニズムを持つセグメンテーション戦略を採用できます。 1. コード内の各トップレベルの関数とクラスを個別のドキュメントに読み込みます。 2. 残りを別のドキュメントに読み込みます。 3. 各セグメンテーションの取得元に関するメタデータ情報を保存します。 ただし、これらのステップはすべて LangChain の内部メカニズムによって実装されており、完了するには簡単なコードを呼び出すだけで済みます。 コード全体の構築と処理プロセスは、上の図1に示されています。 示されているように、コードを記述できます。これはおそらく次の手順に分割されます。
では、順を追って紹介していきます。 LangChainコードをダウンロードまず最初に、私たちの主役であるLangChainのソースコードを紹介しましょう。 図2 示されているように、アドレス https://github.com/langchain-ai/langchain にアクセスすると、ソース コード ライブラリを表示できます。 図2 LangChainソースコードライブラリ もちろん、Clone メソッドを使用してコードをダウンロードすることも、図 3 に示す方法を使用して zip パッケージを直接ダウンロードしてから解凍することもできます。 図3 LangChainソースコードのダウンロード ダウンロード後、解凍してください。解凍したディレクトリは後ほど使用しますので、ご注意ください。 VS Code でコードをインポートするLangChainソースコードリポジトリを解凍したら、VSにインポートします。 コード。 図3 VSでは、 コード、LANGCHAIN - MASTERディレクトリの下 /libs / langchain / langchain がターゲット ディレクトリです。 LangChain のソースコードはここに保存されています。次に、このディレクトリ内のファイルをリーダーでスキャンする必要があります。 図3: LangChainコードベースの場所 関連する依存関係をインストールするコード ライブラリをロードする前に、まず対応するJ upyter Notebookファイルを作成します。図4 図に示すように、便宜上、ソース コードのルート ディレクトリにchat_with_code.ipynbファイルを作成します。 図4 ソースコードファイルの構造 次のようにいくつかの依存パッケージをファイルに追加し、 GPT -3.5- Turbo モデルを適用するために使用されるOpen AIパッケージを読み込みます。ティックトック これは、単語の分割、埋め込み、テキストの長さの計算などの NLP (自然言語処理) タスクを処理するために使用されます。クロムDB これはベクター データベースのパッケージです。ソース コード ファイルは、後続のクエリのためにここに保存されます。また、 Lang Cチェーンパッケージは、いくつかの操作を実行するための足場であり、これがないとプログラムは使用できません。 依存パッケージをインストールした後、環境変数の設定を取得する必要があります。大規模モデルを呼び出すにはOpen AI API を使用する必要があるため、次のコードを追加する必要があります。 ソースコードのルートディレクトリに「.env」ファイルを作成し、そのファイルに次のコードを記述したことに注意してください。 O pen AIのキーを保存するために使用されます。 LangChainソースコードファイルを読み込む依存パッケージを導入したら、LangChainのソースコードファイルを読み込むことができます。 次のコードに示すように、まずコードの読み込みに役立ついくつかの LangChain クラスを導入します。
次に、ソースコードが配置されているパスを定義します。 その後、 Pythonファイルの読み込みを開始できます。 上記のコードから、 GenericLoaderのfrom_filesystemメソッドが複数のディレクトリからファイルをロードするために使用されていることがわかります。まず、ソース コードが配置されているルート ディレクトリを渡します。次に、 globパラメータを使用して、すべてのディレクトリ内のすべてのファイルをターゲット ファイルとして定義します。次に、処理されたファイルのサフィックスを「.py」として定義します。最後に、 LanguageParserメソッドを使用してPython を解析し、解析を毎回アクティブにするコード行数を500に指定します。 カッティングファイル読み込まれたファイルをDocuments変数に渡し、 Documents を切り取ります。一般的に、大規模なモデルには、次のコードに示すように入力制限があります。 ここでは、 LangChain.text_splitter パッケージのRecursiveCharacterTextSplitter関数を使用してソース コードを分割します。ファイルブロックサイズは2,000バイト、ファイル間の重複は 200バイトです。切り取ったファイル ブロックを texts 変数に割り当てます。ここで、texts は実際にはファイル ブロックの配列であり、後でベクター データベース chroma に埋め込まれます。 ここで、ファイル ブロック カットの2 つのパラメータ、 chunk_sizeとchunk_overlapについて説明する必要があります。図5 図に示すように、ファイルを長さで切り取ると、切り取られたテキストのコンテキストが失われる可能性があります。たとえば、「天気が良ければ公園に行きましょうか?」のような文は明らかに不完全であり、大規模なモデルでは学習や推論の際に一部の情報が失われます。これは自然言語にも当てはまり、コード解析にも当てはまります。 図5: 自然言語テキストのセグメンテーション したがって、切り取るときにテキスト ブロックのコンテキスト情報の一部を保存します。図中の「そう言えば行きます」というのは、この情報同士が重なり合う部分、つまり「オーバーラップ」のことを指します。この方法では、各テキスト ブロックは隣接するテキスト ブロックの情報を保持できるため、コンテキスト情報の整合性が最大限に高まります。コード解析でもこのアプローチを採用します。 ベクターデータベースに埋め込まれているファイルがセグメント化された後、これらのコードによって形成されたファイル ブロックがベクター データベースに埋め込まれます。埋め込まれた後でのみ、後続のユーザークエリが容易になります。次のコードに示すように、 OpenAI のOpenAIEmbeddings関数を使用して、テキスト、つまりカット コード ファイルをクロマ ベクトル データベースに保存します。 さらに、ベクター データベース用に新しいR etriever が作成されました。 後続の検索を支援するインデックス作成者として機能します。パラメータは 2 つあります。最初の search_type は、 Maximum Marginal Relevanceの略である mmrを定義します。クエリ対象の関連性と多様性の両方を考慮した関連性クエリ方式です。 kを定義するパラメータsearch_kwargsもある。 は8で、一致する関連文書の数です。 大規模モデルによるクエリ上記の手順を実行すれば、目標達成までそう遠くはありません。 GPT -3.5- Turbo モデルのクエリを作成することが最優先事項です。次のコードに示すように、ChatOpenAI 関数が導入され、GPT -3.5- Turbo モデル エンティティが作成されます。次に、 ConversationSummaryMemoryを使用して、記憶された会話を作成します。最も重要なのは、 ConversationalRetrievalChainを使用することです。名前が示すように、これはチェーンの形で存在する会話ベースのインデクサーです。チェーンはLangChainのコアコンポーネントであり、モデルなどの他のコンポーネントを接続するために使用されます。 I/O、DataConnection、Agent などを組み合わせて使用します。ここでは、質問と回答の応答のために、大規模モデル (LLM)、インデクサー ( Retriever )、およびメモリ コンポーネント (Memory)を統合します。 クエリ結果を返すすべての準備が整いましたので、次のコードを通じて質問を開始します。 GPT -3.5- Turbo の応答は次のとおりです。
返信でどのクラスをインポートしてReActするか教えてください エージェントが初期化のために依存する必要があるクラスと関数、およびクラスと関数間の依存関係が明確に示されます。 要約するこの記事では、LangChain と GPT-3.5-Turbo を活用して大規模なコード ベースを理解する方法について説明します。まず、LangChain コードベースをダウンロードし、VS Code にインポートしました。次に、OpenAI、 Tiktoken 、 Chroma DB 、 Lang Chainなどの必要な依存パッケージをインストールして、後続の操作の準備をします。次に、LanguageParser を使用して解析するなど、LangChain ソース コード ファイルを読み込みます。次に、より大きなモデルの入力要件を満たすために、コード ファイルを小さな部分に分割します。これらのスライスされたコード ブロックは Chroma ベクトル データベースに埋め込まれ、クエリ用の Retriever が作成されます。Retrieverは関連性クエリに Maximal Marginal Relevance を使用し、返されるドキュメントの数を制限します。最後に、GPT-3.5-Turbo を使用してコードベースをクエリし、質問への回答とコードの説明を可能にして、コードベースを理解しやすくしました。 著者について51CTO コミュニティ エディター兼シニア アーキテクトの Cui Hao 氏は、ソフトウェア開発とアーキテクチャで 18 年の経験があり、分散アーキテクチャでは 10 年の経験があります。 |
<<: NetEase Fuxi Game AI Botの擬人化と様式化:AIGAはゲーム探索を強化
>>: 百度、中国初の「工業用」医療用モデル「霊益大モデル」を発売
5G の商用化が近づいており、通信事業者が 5G ベアラ ネットワークを構築するための時間はあまり残...
序文と著者の個人的な理解自動運転システムの下流アプリケーションにとって重要な情報である地図は、通常、...
セリディアンは、無限の労働力を動員する力に焦点を当てた年次経営者調査の結果を発表しました。調査では、...
1. PIDの紹介モーター制御この方法ではフィードバックはありません。つまり、入力数値を完全に信じて...
2018年、中国政府による関連支援政策の導入とインテリジェント製造プロセスの推進により、わが国のイ...
今日、人工知能と機械学習は製造業界における変化の重要な原動力となっています。人工知能と機械学習により...
[[260977]] [51CTO.com クイック翻訳] ロボットの操作インターフェースをカスタマ...
「人工知能+スマート教育」が人気を集めています。しかし、生徒の表情を捉える「スマートアイ」や「顔ス...
世界中の人工知能の人材が徐々に量産モードに入りつつあります。今年6月、百度と浙江大学は、潜在的な人工...
CVPR 2020 に採択された論文「PULSE: 生成モデルの潜在空間探索による自己教師あり写真ア...
現在、多くの企業が AI テクノロジーで一定の成功を収めており、IT チームは AI プロジェクトを...