langchainのアップデートで追加された"Contextual Compression Retriever"を使用して,200ページ超のwebページを読みこませたQ&Aボットを作成する

# TL;DR
- OpenFOAMというCFDライブラリのユーザーガイド(総209ページ)をopenai embeddingsを用いて埋め込み生成した。
- 生成した埋め込み生成をContextualCompressionRetrieverで圧縮した。
- 圧縮した埋め込みをRetrievalQAで指定し、Q&Aボットを作成した。
- 結果として、破綻なく回答できている印象

# 使用したホームページ
今回はCFDライブラリのOpenFOAMのユーザーガイドを使用しました。(https://doc.cfd.direct/openfoam/user-guide-v10/contents)
このコンテンツ以下すべてのリンクを読みこみ、Embeddingsさせています。

# 使用したしたコード
以下に今回使用したコードを載せます。
また、pages_list.txtは長いので最後に載せます。
```of_qa_bot.py
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.llms.loading import load_llm
from langchain.document_loaders import UnstructuredURLLoader
from langchain.chains.question_answering import load_qa_chain
from langchain.chains.summarize import load_summarize_chain
from langchain.chains import AnalyzeDocumentChain
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.memory import ChatMessageHistory
from langchain.vectorstores import FAISS
from langchain.schema import messages_from_dict, messages_to_dict
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain.retrievers.document_compressors import EmbeddingsFilter

import configparser
import os
import json

config = configparser.ConfigParser()
config.read("./config/config.ini")
os.environ["OPENAI_API_KEY"] = config['API']['OPEN_AI']

def main():
    
    llm = load_llm("my_llm.json")
    urls = file_load()
    loader = UnstructuredURLLoader(urls=urls)
    documents = loader.load()
    text_splitter = CharacterTextSplitter(chunk_size=2000, chunk_overlap=0, separator="\n")
    texts = text_splitter.split_documents(documents)
    print(len(texts))
    embeddings = OpenAIEmbeddings()
    embeddings_filter = EmbeddingsFilter(embeddings=embeddings, similarity_threshold=0.76)
    if(os.path.exists("./faiss_index") == False):
        db = FAISS.from_documents(texts, embeddings)
        db.save_local("faiss_index")
    docsearch = FAISS.load_local("faiss_index", embeddings)
    compression_retriever = ContextualCompressionRetriever(base_compressor=embeddings_filter, base_retriever=docsearch.as_retriever())
    qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=compression_retriever)
    history = ChatMessageHistory()
    while True:
        input_txt = input("質問を入力してください: ")
        if(input_txt == "exit"):
            break
        elif(input_txt == ""):
            continue
        response = qa.run(query=input_txt)
        # response = compression_retriever.get_relevant_documents(input_txt)
        print(response)
        history.add_user_message(input_txt)
        history.add_ai_message(response)

    with open("./of_history.json", "w", encoding="utf8") as f:
        dicts = messages_to_dict(history.messages)
        formater = json.dumps(dicts, indent=2, ensure_ascii=False)
        print(formater)
        f.write(formater)

def file_load():
    urls = []
    with open("./pages_list.txt", "r", encoding="utf8") as f:
        for line in f:
            urls.append(line.rstrip("\n"))
    return urls

if(__name__ == "__main__"):
    main()
```

```my_lim.json
{
    "model_name": "gpt-3.5-turbo",
    "temperature": 0.0,
    "max_tokens": 1536,
    "top_p": 1,
    "frequency_penalty": 0,
    "presence_penalty": 0,
    "n": 1,
    "_type": "openai"
}
```

UnstructuredURLLoaderでホームページの内容を読みこみ、textsplitterで適切なサイズにテキストを分割します。
その後、OpenAIEmbeddingsを使用して、埋め込みを作成します。
その埋め込みをEmbeddingsFilterを用いてフィルタリングします。

(EmbeddingsFilter
Making an extra LLM call over each retrieved document is expensive and slow. The EmbeddingsFilter provides a cheaper and faster option by embedding the documents and query and only returning those documents which have sufficiently similar embeddings to the query.
https://python.langchain.com/en/latest/modules/indexes/retrievers/examples/contextual-compression.html)

そのフィルタリングした埋め込みをContextualCompressionRetrieverで使用します。

(ContextualCompressionsRetriever is a wrapper for another retriever that iterates over the initial output of the base retriever and filters and compresses those initial documents, so that only the most relevant information is returned.
https://python.langchain.com/en/latest/modules/indexes/retrievers/examples/contextual-compression.html)

あとは従来通りRetrievalQAにContextualCompressionRetrieverで作成したRetrieverを設定して、QAボットを作成します。

# 結果
以下はQ&Aボットの履歴です。

```of_history.json
[
  {
    "type": "human",
    "data": {
      "content": "OpenFoamで並列プロセスで実行するにはどのような処理をすればいいのか教えて",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "OpenFOAMで並列プロセスで実行するには、ドメイン分割と呼ばれる方法でジオメトリと関連するフィールドを分割し、別々のプロセッサに割り当てて解決する必要があります。これには、decomposeParDictという名前の辞書で指定された一連のパラメータに従って、メッシュと初期フィールドデータを分解する必要があります。そして、MPIと呼ばれる標準のメッセージパッシングインターフェースの公開ドメインであるopenMPIを使用して、アプリケーションを並列実行する必要があります。最後に、分解されたケースをポストプロセスする必要があります。",
      "additional_kwargs": {}
    }
  },
  {
    "type": "human",
    "data": {
      "content": "分解されたケースのポストプロセスについて教えて",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "分解されたケースのポストプロセスには、reconstructParユーティリティを使用して、分解されたフィールドとメッシュを再構築する必要があります。また、個々のプロセッサディレクトリを個別のケースとして扱うこともできます。例えば、paraFoamを起動する際に、\"paraFoam case processor1\"と入力すると、processor1がParaViewのケースモジュールとして表示されます。",
      "additional_kwargs": {}
    }
  },
  {
    "type": "human",
    "data": {
      "content": "snappyHexmeshについて教えて",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "snappyHexMeshは、OpenFOAMに付属するユーティリティで、STLまたはOBJ形式の三角形表面ジオメトリから自動的に六面体（hex）および分割六面体（split-hex）を含む3次元メッシュを生成します。メッシュは、開始メッシュを反復的に細分化し、分割六面体メッシュを表面に合わせて変形することで表面に近似的に適合します。オプションのフェーズでは、結果のメッシュを縮小してセル層を挿入します。メッシュの細分化レベルの指定は非常に柔軟で、表面処理は事前に指定された最終メッシュ品質で堅牢です。また、負荷分散ステップを含む並列処理で実行されます。",
      "additional_kwargs": {}
    }
  },
  {
    "type": "human",
    "data": {
      "content": "メッシュの品質で重要なことを教えて",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "メッシュの品質で重要なことは、織り目の密度と強度です。",
      "additional_kwargs": {}
    }
  },
  {
    "type": "human",
    "data": {
      "content": "OpenFoamで使用するメッシュで重要な品質は何？",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "The given context does not provide a clear answer to this question.",
      "additional_kwargs": {}
    }
  },
  {
    "type": "human",
    "data": {
      "content": "STLの3Dデータを使用してOpenFoamで使用するメッシュを作成する場合、どのようなコマンドを使えばいい？",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "The passage does not provide information on how to create a mesh using STL 3D data in OpenFOAM.",
      "additional_kwargs": {}
    }
  },
  {
    "type": "human",
    "data": {
      "content": "OpenFoamにはどのような乱流モデルが組み込まれていますか？",
      "additional_kwargs": {}
    }
  },
  {
    "type": "ai",
    "data": {
      "content": "OpenFoam includes a range of turbulence models, which are described in section 7.2 of the \"Models and physical properties\" chapter. These models include Reynolds-averaged simulation (RAS) modeling, Large eddy simulation (LES) modeling, and various transport/rheology models such as the Bird-Carreau model, Cross Power Law model, Power Law model, Herschel-Bulkley model, Casson model, General strain-rate function, Maxwell model, Giesekus model, and Phan-Thien-Tanner (PTT) model.",
      "additional_kwargs": {}
    }
  }
]
```
途中のメッシュの品質のところでは少し的外れな回答がありますが、概ね精度よく回答できていると思います。
ユーザーガイド以外や、日本語の文献を読ませるとさらに精度良くなると思います。

# 参考文献
https://python.langchain.com/en/latest/modules/indexes/retrievers/examples/contextual-compression.html

https://ict-worker.com/ai/conversationalretrievalchain.html

https://ict-worker.com/ai/langchain-chunk.html

https://ict-worker.com/ai/gpt35-with-smeca.html

# pages_list.txt
```pages_list.txt
https://doc.cfd.direct/openfoam/user-guide-v10/index
https://doc.cfd.direct/openfoam/user-guide-v10/introduction
https://doc.cfd.direct/openfoam/user-guide-v10/bookindex
https://doc.cfd.direct/openfoam/user-guide-v10/introduction#x3-20001
https://doc.cfd.direct/openfoam/user-guide-v10/tutorials#x4-30002
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-40002.1
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-50002.1.1
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-110002.1.2
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-120002.1.3
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-130002.1.4
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-190002.1.5
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-270002.1.6
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-310002.1.7
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-340002.1.8
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-370002.1.9
https://doc.cfd.direct/openfoam/user-guide-v10/cavity#x5-380002.1.10
https://doc.cfd.direct/openfoam/user-guide-v10/platehole#x6-390002.2
https://doc.cfd.direct/openfoam/user-guide-v10/platehole#x6-400002.2.1
https://doc.cfd.direct/openfoam/user-guide-v10/platehole#x6-450002.2.2
https://doc.cfd.direct/openfoam/user-guide-v10/platehole#x6-460002.2.3
https://doc.cfd.direct/openfoam/user-guide-v10/platehole#x6-470002.2.4
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-510002.3
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-520002.3.1
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-530002.3.2
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-540002.3.3
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-550002.3.4
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-560002.3.5
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-570002.3.6
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-580002.3.7
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-590002.3.8
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-600002.3.9
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-610002.3.10
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-620002.3.11
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-630002.3.12
https://doc.cfd.direct/openfoam/user-guide-v10/dambreak#x7-640002.3.13
https://doc.cfd.direct/openfoam/user-guide-v10/applications#x8-650003
https://doc.cfd.direct/openfoam/user-guide-v10/programming-language-openfoam#x9-660003.1
https://doc.cfd.direct/openfoam/user-guide-v10/programming-language-openfoam#x9-670003.1.1
https://doc.cfd.direct/openfoam/user-guide-v10/programming-language-openfoam#x9-680003.1.2
https://doc.cfd.direct/openfoam/user-guide-v10/programming-language-openfoam#x9-690003.1.3
https://doc.cfd.direct/openfoam/user-guide-v10/programming-language-openfoam#x9-700003.1.4
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-710003.2
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-720003.2.1
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-730003.2.2
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-790003.2.3
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-800003.2.4
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-810003.2.5
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-820003.2.6
https://doc.cfd.direct/openfoam/user-guide-v10/compiling-applications#x10-830003.2.7
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications#x11-840003.3
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications-parallel#x12-850003.4
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications-parallel#x12-860003.4.1
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications-parallel#x12-870003.4.2
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications-parallel#x12-910003.4.3
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications-parallel#x12-920003.4.4
https://doc.cfd.direct/openfoam/user-guide-v10/running-applications-parallel#x12-930003.4.5
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-960003.5
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-970003.5.1
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-980003.5.2
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-990003.5.3
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1000003.5.4
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1010003.5.5
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1020003.5.6
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1030003.5.7
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1040003.5.8
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1050003.5.9
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1060003.5.10
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1070003.5.11
https://doc.cfd.direct/openfoam/user-guide-v10/standard-solvers#x13-1080003.5.12
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1090003.6
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1100003.6.1
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1110003.6.2
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1120003.6.3
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1130003.6.4
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1140003.6.5
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1150003.6.6
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1160003.6.7
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1170003.6.8
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1180003.6.9
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1190003.6.10
https://doc.cfd.direct/openfoam/user-guide-v10/standard-utilities#x14-1200003.6.11
https://doc.cfd.direct/openfoam/user-guide-v10/cases#x15-1210004
https://doc.cfd.direct/openfoam/user-guide-v10/case-file-structure#x16-1220004.1
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1230004.2
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1240004.2.1
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1250004.2.2
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1260004.2.3
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1270004.2.4
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1280004.2.5
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1290004.2.6
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1300004.2.7
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1310004.2.8
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1320004.2.9
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1330004.2.10
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1340004.2.11
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1350004.2.12
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1360004.2.13
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1370004.2.14
https://doc.cfd.direct/openfoam/user-guide-v10/basic-file-format#x17-1380004.2.15
https://doc.cfd.direct/openfoam/user-guide-v10/global-settings#x18-1390004.3
https://doc.cfd.direct/openfoam/user-guide-v10/global-settings#x18-1400004.3.1
https://doc.cfd.direct/openfoam/user-guide-v10/controldict#x19-1410004.4
https://doc.cfd.direct/openfoam/user-guide-v10/controldict#x19-1420004.4.1
https://doc.cfd.direct/openfoam/user-guide-v10/controldict#x19-1430004.4.2
https://doc.cfd.direct/openfoam/user-guide-v10/controldict#x19-1440004.4.3
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1450004.5
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1460004.5.1
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1470004.5.2
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1480004.5.3
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1490004.5.4
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1500004.5.5
https://doc.cfd.direct/openfoam/user-guide-v10/fvschemes#x20-1510004.5.6
https://doc.cfd.direct/openfoam/user-guide-v10/fvsolution#x21-1520004.6
https://doc.cfd.direct/openfoam/user-guide-v10/fvsolution#x21-1530004.6.1
https://doc.cfd.direct/openfoam/user-guide-v10/fvsolution#x21-1580004.6.2
https://doc.cfd.direct/openfoam/user-guide-v10/fvsolution#x21-1590004.6.3
https://doc.cfd.direct/openfoam/user-guide-v10/fvsolution#x21-1600004.6.4
https://doc.cfd.direct/openfoam/user-guide-v10/fvsolution#x21-1610004.6.5
https://doc.cfd.direct/openfoam/user-guide-v10/case-management#x22-1620004.7
https://doc.cfd.direct/openfoam/user-guide-v10/case-management#x22-1630004.7.1
https://doc.cfd.direct/openfoam/user-guide-v10/case-management#x22-1640004.7.2
https://doc.cfd.direct/openfoam/user-guide-v10/case-management#x22-1650004.7.3
https://doc.cfd.direct/openfoam/user-guide-v10/case-management#x22-1660004.7.4
https://doc.cfd.direct/openfoam/user-guide-v10/mesh#x23-1670005
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-description#x24-1680005.1
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-description#x24-1690005.1.1
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-description#x24-1740005.1.2
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-description#x24-1750005.1.3
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-description#x24-1760005.1.4
https://doc.cfd.direct/openfoam/user-guide-v10/boundaries#x25-1770005.2
https://doc.cfd.direct/openfoam/user-guide-v10/boundaries#x25-1780005.2.1
https://doc.cfd.direct/openfoam/user-guide-v10/boundaries#x25-1790005.2.2
https://doc.cfd.direct/openfoam/user-guide-v10/boundaries#x25-1800005.2.3
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1850005.3
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1860005.3.1
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1920005.3.2
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1930005.3.3
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1940005.3.4
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1950005.3.5
https://doc.cfd.direct/openfoam/user-guide-v10/blockmesh#x26-1960005.3.6
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-1970005.4
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-1980005.4.1
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-1990005.4.2
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2000005.4.3
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2010005.4.4
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2020005.4.5
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2030005.4.6
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2040005.4.7
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2050005.4.8
https://doc.cfd.direct/openfoam/user-guide-v10/snappyhexmesh#x27-2060005.4.9
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-conversion#x28-2070005.5
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-conversion#x28-2080005.5.1
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-conversion#x28-2090005.5.2
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-conversion#x28-2170005.5.3
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-conversion#x28-2180005.5.4
https://doc.cfd.direct/openfoam/user-guide-v10/mesh-conversion#x28-2190005.5.5
https://doc.cfd.direct/openfoam/user-guide-v10/mapfields#x29-2200005.6
https://doc.cfd.direct/openfoam/user-guide-v10/mapfields#x29-2210005.6.1
https://doc.cfd.direct/openfoam/user-guide-v10/mapfields#x29-2220005.6.2
https://doc.cfd.direct/openfoam/user-guide-v10/mapfields#x29-2230005.6.3
https://doc.cfd.direct/openfoam/user-guide-v10/postprocessing#x30-2240006
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2250006.1
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2260006.1.1
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2270006.1.2
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2280006.1.3
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2290006.1.4
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2300006.1.5
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2330006.1.6
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2350006.1.7
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2370006.1.8
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2380006.1.9
https://doc.cfd.direct/openfoam/user-guide-v10/paraview#x31-2390006.1.10
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-cli#x32-2400006.2
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-cli#x32-2410006.2.1
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-cli#x32-2570006.2.2
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-cli#x32-2580006.2.3
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-cli#x32-2590006.2.4
https://doc.cfd.direct/openfoam/user-guide-v10/graphs-monitoring#x33-2600006.3
https://doc.cfd.direct/openfoam/user-guide-v10/graphs-monitoring#x33-2610006.3.1
https://doc.cfd.direct/openfoam/user-guide-v10/graphs-monitoring#x33-2620006.3.2
https://doc.cfd.direct/openfoam/user-guide-v10/graphs-monitoring#x33-2630006.3.3
https://doc.cfd.direct/openfoam/user-guide-v10/graphs-monitoring#x33-2640006.3.4
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-third-party#x34-2650006.4
https://doc.cfd.direct/openfoam/user-guide-v10/post-processing-third-party#x34-2660006.4.1
https://doc.cfd.direct/openfoam/user-guide-v10/models#x35-2690007
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2700007.1
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2710007.1.1
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2720007.1.2
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2730007.1.3
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2740007.1.4
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2750007.1.5
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2760007.1.6
https://doc.cfd.direct/openfoam/user-guide-v10/thermophysical#x36-2770007.1.7
https://doc.cfd.direct/openfoam/user-guide-v10/turbulence#x37-2780007.2
https://doc.cfd.direct/openfoam/user-guide-v10/turbulence#x37-2790007.2.1
https://doc.cfd.direct/openfoam/user-guide-v10/turbulence#x37-2820007.2.2
https://doc.cfd.direct/openfoam/user-guide-v10/turbulence#x37-2850007.2.3
https://doc.cfd.direct/openfoam/user-guide-v10/turbulence#x37-2860007.2.4
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2870007.3
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2880007.3.1
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2890007.3.2
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2900007.3.3
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2910007.3.4
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2920007.3.5
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2930007.3.6
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2940007.3.7
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2950007.3.8
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2960007.3.9
https://doc.cfd.direct/openfoam/user-guide-v10/transport-rheology#x38-2970007.3.10
```