Closed13
LangChainのAgentについて

Agentのおさらい
- Agentはユーザーの質問にどのような手段を使って、どのような順番で回答するかを、LLMを使って自動的に回答してくれる機能

Agentの種類
- zero-shot-react-description
- ReAct フレームワークを使用
- ツールの説明に基づいてどのツールを使用するか決定
- react-docstore
- ReAct フレームワークを使用
- SearchとLookupを指定する
- https://book.st-hakky.com/docs/example-of-agents-of-langchain/#react
- self-ask-with-search
- Intermediate Answerと名付けられた単一のツールのみ利用
- 自問自答することで、Q&Aの精度を改善
- https://note.com/mega_gorilla/n/nd55a603fdfc1
- conversational-react-description
- 会話に最適化
- ReAct フレームワークを使用してどのツールを使用するかを決定
- メモリを使用して以前の会話のやり取りを記憶
いずれもinitialize_agentを使って構築していく

カスタムエージェントも作れる

ツールだけを利用したい場合に適切なAgentは何か

Slackなどのチャット上で利用する想定なので、会話に最適化されている conversational-react-descriptionを採用したい
conversational-react-descriptionを利用する上でどのようにすれば、目的のツール利用に誘導できるかが焦点になりそう

conversational-react-descriptionのデフォルトのプロンプト

conversational-react-description のカスタマイズ
https://note.com/__ramu0e__/n/ncf6e1c90600b

zero-shot-react-descriptionを使えば、与えたツールに絞って回答してくれそうだけど、過去のやりとりが厳しそう

descriptionを元にツールを選択するから、descriptionを具体的に書いたりしてマッチさせるのが重要という結論
tools = [
Tool(
name="LlamaIndex",
func=lambda q: str(index.as_query_engine().query(q)),
description="useful for when you need to answer questions",
return_direct=True,
),
]

英語で返答してしまうのを修正する方法はあるか

課題
conversational-react-descriptionを利用する際に、ツールを介さない回答だと英語になりがち。

解決案
- ユーザーの入力の末尾に、「日本語で回答して。」を加えて質問を投げたら良さそう。簡単に実装できるしこれを採用

When responding, please answer in Japanese.
を質問に加えつつ、Tool内でverbose=True
を指定しないようにした。
verbose=True
を指定しないようにした理由は、Toolがうまく回答できない場合は英語で返すことが多いように見受けられたので、Toolから直接返さないようにした
このスクラップは2023/05/13にクローズされました