28
35

生成AI/RAGで手持ちのソースコード解析(LangChain)

Last updated at Posted at 2023-12-23

はじめに

LangChainやLlamaIndexを利用したり、フレームワークを利用せずにRAGをしている方も多いと思いますが、「RAGの精度向上のためにできること(+Llamaindexでできること)」に続いて、LangChainでできることについて、Templatesや、cookbookを参考にしながら、気になったトピックスをピックアップしていきます。進化の早い領域ですので、継続して更新していきたいと思います。

RAGとは

RAGとは、「Retrieval Augmented Generation」の略で、情報検索と言語モデル(LLM)を組み合わせた手法のことです。検索結果をLLMのプロンプトに含めるというアプローチが一般的です。

RAG.png

RAGを使ったソースコード解析

LangChainでRAGを使ったソースコード解析が紹介されています。

LangChainSource.png
(引用元:LangChain

やりたいことは

  • コードがどのように機能するかを理解するためのQ&A
  • リファクタリングや改善提案
  • コードの文書化

コンテキストを認識したコード分割

まだ、Python と JavaScriptだけのようですが便利なコンテキストを認識したコード分割もできるようです。

  • コード内の各トップレベル関数とクラスは別々のドキュメントにロード
  • 残りは別の文書にまとめる
  • 各分割の出所に関するメタデータを保持

RAGの精度向上にむけて利用できそうなもの

全体的なものについてはこちらに整理しました。ここでは、LangChainで利用できるものをピックアップしていきます。

[データのロード]

[クエリ変換]

ユーザーからの質問や入力を受け取り、関連する情報を検索するためのクエリに変換する。

  • HyDE(Hypothetical Document Embeddings)paper):
    与えられたクエリに対して仮説的なドキュメントを生成し、そのドキュメントの埋め込みを使用して意味的検索を行う。

  • Rewrite-Retrieve-ReadPaper):
    LLMを使ってユーザークエリを書き換える。

  • Step back promptingPaper):
    抽象化を促す「ステップバック」質問を生成し、その質問と元の質問の両方に関連するドキュメントを取得する。

  • RAG-fusionブログ):
    複数のクエリを生成し、取得したドキュメントを逆順位融合を使用して再ランクする。

  • Multi Query Retrieval
    LLMを使用して複数のクエリを生成し、すべてのクエリに対するドキュメントを取得する。

まとめ

LangChainにはいろいろと使える機能がありそうです。詳しく見ながら、試しながら記事を追加していきたいと思います。

参考

https://blog.langchain.dev/applying-openai-rag/
https://blog.langchain.dev/query-transformations/
https://blog.langchain.dev/query-construction/
https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever

28
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
35