LangChainのDocumentオブジェクトを辞書(dictionary)変換する方法

公開日:
目次

LangChainを利用している際、Documentオブジェクトが返ってくることがあります。

これらのオブジェクトを外部とやり取りする際には、jsonライクな形式で扱いたくなった時の方法を備忘録として残します。

dict()メソッドの利用

Documentオブジェクトを辞書形式に変換するのに、Documentオブジェクトに存在するdict()メソッドが利用できます。このメソッドは、langchainのDocumentオブジェクトを辞書形式で表現するために設計されています。オプションで、辞書に含めるまたは除外するフィールドを指定することが可能です。

公式ドキュメントでは、以下のようなパラメータが提供されています。

  • include: 辞書に含めるフィールドを指定します。
  • exclude: 辞書から除外するフィールドを指定します。
  • by_alias: フィールド名をエイリアス名で表示するかどうか。
  • skip_defaults: デフォルト値と同じ値のフィールドを除外するかどうか。
  • exclude_unset: 未設定のフィールドを除外するかどうか。
  • exclude_defaults: デフォルト値を除外するかどうか。
  • exclude_none: Noneの値を除外するかどうか。

これらのパラメータを使うことで、非常に柔軟にDocumentオブジェクトの辞書化を行うことができます。

コード例

以下に、includeおよびexcludeパラメータを使用した実際のコード例を示します。

from typing import Dict
from pydantic import BaseModel

class Document(BaseModel):
    page_content: str
    directory_name: str
    
document = Document(page_content='This is a sample document', directory_name='company')

# 特定のフィールドを含める
included_dict = document.dict(include={'page_content'})
print(included_dict)
# 出力: {'page_content': 'This is a sample document'}

# 特定のフィールドを除外する
excluded_dict = document.dict(exclude={'directory_name'})
print(excluded_dict)
# 出力: {'page_content': 'This is a sample document'}

この例では、includeパラメータを使ってpage_contentフィールドのみを含む辞書を生成しています。一方で、excludeパラメータを使ってdirectory_nameフィールドを除外した辞書を生成しています。

他のパラメータ(by_aliasskip_defaultsexclude_unsetexclude_defaultsexclude_none)も、それぞれのニーズに合わせて活用することが可能です。具体的な使用シナリオに応じて、これらのパラメータを適切に設定してください。