👓

Tavily APIの精度を上げるコツ

2024/03/04に公開

こんにちは、データサイエンティストのせきとばです。最近、AIエージェントの世界にハマっています。

その中で、Tavilyの使用機会が増え、少し知見を得ることができました。今回はその中から、Tavilyの検索精度を高めるためのいくつかのコツを共有したいと思います。

Tavilyとは?

Tavilyは、LLM(Large Language Models)エージェントに特化した検索APIとして広く認知されています。
しかし、ドキュメントに沿って検索を行っても、期待通りの結果が得られないことがあります。そこで、私が試行錯誤を重ねた結果、いくつかの有効な手法を見つけ出すことができました。

検索精度を高めるコツ

検索系APIはLLMを活用する上で欠かせないツールですが、その検索精度を高めるテクニックには深い奥行きがあります。今回紹介したコツを活用することで、Tavilyを使った検索の精度をさらに向上させることができるでしょう。

search_depthの利用

response = tavily.search(query="蒲田でおすすめのランチは?", search_depth="advanced")

この設定を用いると、フォローアップクエスチョンが表示されるようになります。これは、Google検索で提案される検索候補に似ており、複数の角度からの検索を可能にすることで、検索の精度を向上させます。

例えば、以下のようなフォローアップクエスチョンが得られます:

  • 蒲田で人気のランチメニューは何ですか?
  • 蒲田のランチで予算はどのくらい見積もるべきですか?
  • 蒲田でベジタリアン向けランチスポットはありますか?

これらのフォローアップクエスチョンにより、ユーザーはより詳細な情報を求めることができ、結果として検索の精度が向上します。

include_raw_contentの活用

raw_contentを取得することで、検索内容によっては、通常の方法では得られない情報を取得できるようになります。
たとえば、「XX駅のおすすめランチ」というクエリでは、食べログなどのサイトを参照してくれますが、サイトの説明やランキング内のテキストが完全には取得できないことがあります。完全に取得できない時はcontentの末尾が"…"で終わっています。
これは、サイトがJavaScriptなど動的にランキング部分を表示しているため、静的な内容として取得できないと推察します。

raw_contentを利用することで、HTML内のテキスト全体を取得できます。これにより、ランキング内のテキストや省略された部分も取得可能になります。

results = tavily_client.search(query=query, max_results=5, search_depth="advanced", include_raw_content=True)

余計なヘッダーやフッターも取得してしまうため、トークン数が増大し、課金の懸念が生じます。以下のように条件分岐を用いることで、トークン数を節約することができます:

results = tavily_client.search(query=query, max_results=5, search_depth="advanced", include_raw_content=True)
sources = results["results"]
for res in sources:
    if res['content'][-3:]:
    res['content'] = res['raw_content']
    res['raw_content'] = None

おわりに

検索系APIはLLMを活用する上で欠かせないツールですが、その検索精度を高めるテクニックには深い奥行きがあります。今回紹介したコツを活用することで、Tavilyを使った検索の精度をさらに向上させることができるでしょう。

Discussion