PerplexicaのAPIの結果とブラウザ上で実行した結果が異なるという事象が発生したときのログ

PerplexityのOSSクローンである、Perplexicaを利用しているのだけれど、APIの実行結果とブラウザ(GUI)上での実行結果がなんだか異なるという興味深い結果がでてきた。

使用モデル

以下の記事中でも利用したモデル「Llama-3-ELYZA-JP-8B」を使用。

meganedesu.com

事象の概要

もちろんLLMなので毎回同じ結果を返すわけではないという前提は理解しつつも、どうにもAPIをたたいた時の結果と、ブラウザ上での実行結果が大きく異なる気がする。具体的には、ブラウザ上の実行結果は概ね正しいと納得できるものだが、APIでの実行結果は、検索はできているが、その検索結果をうまく利用して結果を生成できていないという事象が発生している。

具体的な事例を見るとわかりやすいと思うので、以下事例を載せる。

ブラウザ上で、日経平均株価の午後の終値を聞いた結果

ブラウザ上でPerplexicaを利用するための手順については、以下の記事を参照すればよい。

meganedesu.com

プロンプト

2025/2/12の日経平均株価の午後の終値は?

結果: OK

2025年2月12日の日経平均株価の午後終値は、162円53銭高の3万8963円70銭でした。

APIで同じプロンプトを与えて実行した結果

PerplexicaのAPIを利用するまでの手順については、以下の記事を参照されたし。

meganedesu.com

プロンプト(コード)

import requests
import json

url = "http://host.docker.internal:3001/api/search"

headers = {
    "Content-Type": "application/json",
}

payload = {
    "chatModel": {
        "provider": "ollama",
        "model": "hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF:latest",
        
    },
    "embeddingModel": {
        "provider": "ollama",
        "model": "hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF:latest",
        
    },
    "optimizationMode": "speed",
    "focusMode": "webSearch",
    "query": """
    2025/2/12の日経平均株価の午後の終値は?
    """,
}

response = requests.post(url, headers=headers, json=payload)

if response.status_code == 200:
    print(response.json()['message'])
    print(response.json()["sources"])
else:
    print(f"Error: {response.status_code}")
    print(response.text)

結果: NG

2025年2月12日の日経平均株価の午後の終値は、公表されていないため分かりません。

ちなみに、外部ソースには、12日の市場は日経平均が続伸。終値は前営業日比162円高の3万8963円だったという記述があることは確認済み。なぜかその結果を参照して結果を生成してくれない。

まとめ

PerplexicaのAPIの挙動がおかしいという話を紹介した。外部ソースは正しく取得できているので、外部ソースとプロンプトから結果を生成する過程で何かしらの不具合があるのではないかと推察しているが、原因はいまだわかっていない。別のモデルでも同様の事象が発生するか検証してみる予定。