[翻訳] LangChainにおけるドキュメントに対するQ&AのPythonガイド

[Question Answering over Docs — 🦜🔗 LangChain 0\.0\.181](https://python.langchain.com/en/latest/use_cases/question_answering.html)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

> [コンセプトガイド](https://qiita.com/taka_yayoi/items/8f3251b44f4a6c7f5c64)

このコンテキストにおけるQ&Aとは、皆様のドキュメントデータに対するQ&Aを指します。他のタイプのデータに対するQ&Aに関しては、[SQL database Question Answering](https://python.langchain.com/en/latest/use_cases/tabular.html)や[Interacting with APIs](https://python.langchain.com/en/latest/use_cases/apis.html)のようなドキュメントをご覧ください。大量のドキュメントに対するQ&Aにおいては、多くのケースでデータに対するインデックスを作成したいと思うことでしょう。これは、入力された質問に最も適したドキュメントにスマートにアクセスするために活用でき、すべてのドキュメントをLLMに渡すことを避けることができます(時間とお金の節約になります)。

これに対するより詳細なイントロダクションについては、[こちらのノートブック](https://python.langchain.com/en/latest/modules/indexes/getting_started.html)を見ていただければと思うのですが、関連するステップのクイックスタートは：

**あなたのドキュメントのロード**

```py
from langchain.document_loaders import TextLoader
loader = TextLoader('../state_of_the_union.txt')
```

ドキュメントロードをどのようにスタートするのかに関しては[こちら](https://python.langchain.com/en/latest/modules/indexes/document_loaders.html)を参照ください。

**インデックスの作成**

```py
from langchain.indexes import VectorstoreIndexCreator
index = VectorstoreIndexCreator().from_loaders([loader])
```

現時点でベストで最も人気のあるインデックスは、VectorStoreインデックスです。

**インデックスの検索**

```py
query = "What did the president say about Ketanji Brown Jackson"
index.query(query)
```

あるいは、関連するソースも取得するために`query_with_sources`を使います。

```py
query = "What did the president say about Ketanji Brown Jackson"
index.query_with_sources(query)
```

繰り返しになりますが、これらの高レベルのインタフェースは、内部で起きている数多くのことを隠蔽しているので、より低レベルのウォークスルーに関しては[こちらのノートブック](https://python.langchain.com/en/latest/modules/indexes/getting_started.html)をご覧下さい。

# ドキュメントのQ&A

Q&Aには、複数のドキュメントの取得、これらに関する質問が含まれます。LLMのレスポンスには、ドキュメントのコンテンツに基づいたあなたの質問に対する回答が含まれます。

Q&Aチェーンを活用する際の推奨方法は：

```py
from langchain.chains.question_answering import load_qa_chain
chain = load_qa_chain(llm, chain_type="stuff")
chain.run(input_documents=docs, question=query)
```

以下のリソースがあります：

- [Question Answering Notebook](https://python.langchain.com/en/latest/modules/chains/index_examples/question_answering.html): このタスクをどのように達成するのかをウォークスルーするノートブックです。
- [VectorDB Question Answering Notebook](https://python.langchain.com/en/latest/modules/chains/index_examples/vector_db_qa.html): ベクトルデータベースに対してどのようにQ&Aを行うのかをウォークスルーするノートブックです。これは、大量のドキュメントがあり、これら全てをLLMに渡したくはなく、最初にエンベディングに対していくつかのセマンティックな検索を行いたい際には、多くの場合において有益です。

# ソースの追加

言語モデルの回答のレスポンスに加えて、ソース(どのドキュメントが渡されたのか)を引用するような派生型があります。ソースを伴うQ&Aのチェーンを使い始める推奨方法は：

```py
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
chain = load_qa_with_sources_chain(llm, chain_type="stuff")
chain({"input_documents": docs, "question": query}, return_only_outputs=True)
```

以下のリソースがあります：

- [QA With Sources Notebook](https://python.langchain.com/en/latest/modules/chains/index_examples/qa_with_sources.html): このタスクをどのように達成するのかをウォークスルーするノートブックです。
- [VectorDB QA With Sources Notebook](https://python.langchain.com/en/latest/modules/chains/index_examples/vector_db_qa_with_sources.html): ベクトルデータベースに対してどのようにソースを伴うQ&Aを行うのかをウォークスルーするノートブックです。これは、大量のドキュメントがあり、これら全てをLLMに渡したくはなく、最初にエンベディングに対していくつかのセマンティックな検索を行いたい際には、多くの場合において有益です。

# その他の関連リソース

その他の関連リソースには以下が含まれます：

- Utilities for working with Documents: このタスクに有用であると証明されたいくつかのユーティリティをどのように活用するのかに関するガイドです。これには、(長いドキュメントを分割する)Text Splitters、Embeddings & Vectorstores (上述のVector DBのサンプルで有用です)が含まれます。
- CombineDocuments Chains: この他アスクを達成するために使用する固有のチェーンタイプのコンセプトの概要です。

# エンドツーエンドのサンプル

エンドツーエンドでこれを行うサンプルに関しては、以下のリソースをご覧ください：

- [Semantic search over a group chat with Sources Notebook](https://python.langchain.com/en/latest/use_cases/question_answering/semantic-search-over-chat.html): グループチャットの会話に対するセマンティック検索を行うノートブックです。