見出し画像

Python の Error にしばらく悩まされていた事がすっと解決した [langchain]

Langchain でいろいろと遊んでいたんですが、急に手詰まりしました。

こんなエラーが出よるんです。

Traceback (most recent call last):
  File "/Users/sho/working/python/work/testing-langchain/./wikipedia.py", line 6, in <module>
    retriever = WikipediaRetriever()
                ^^^^^^^^^^^^^^^^^^^^
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/langchain_core/load/serializable.py", line 120, in __init__
    super().__init__(**kwargs)
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/pydantic/v1/main.py", line 339, in __init__
    values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/pydantic/v1/main.py", line 1100, in validate_model
    values = validator(cls_, values)
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/langchain_community/utilities/wikipedia.py", line 33, in validate_environment
    import wikipedia
  File "/Users/sho/working/python/work/testing-langchain/wikipedia.py", line 6, in <module>
    retriever = WikipediaRetriever()
                ^^^^^^^^^^^^^^^^^^^^
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/langchain_core/load/serializable.py", line 120, in __init__
    super().__init__(**kwargs)
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/pydantic/v1/main.py", line 339, in __init__
    values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/pydantic/v1/main.py", line 1100, in validate_model
    values = validator(cls_, values)
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sho/.local/share/mise/installs/python/3.12.1/lib/python3.12/site-packages/langchain_community/utilities/wikipedia.py", line 35, in validate_environment
    wikipedia.set_lang(values["lang"])
    ^^^^^^^^^^^^^^^^^^

AttributeError: partially initialized module 'wikipedia' has no attribute 'set_lang' (most likely due to a circular import)

なんだろなぁ、特定のモジュールの呼び方が間違っているのかなぁ、なんて `WikipediaRetriever()` 付近をずーっと眺めていたんです。

よく見たら、エラーは一番最後の行に出てました。AttributeError です。ようやく気がつきました。ぇぇ…。

で、このサイトを見てピンと来たわけです。

'wikipedia.py' ってファイル名じゃん…。

という事で、ようやく動くようになりました。いったんここまでできました。Wikipedia の情報を拾ってこられるようになりました。
レイによって、langchain → langchain_community へ変更しています。なお、LangChain 完全入門 の 135ページのコードです。コマンドライン引数からクエリを検索できるようにしました。

import sys

# from langchain.retrievers import WikipediaRetriever
from langchain_community.retrievers import WikipediaRetriever

retriever = WikipediaRetriever(lang="ja")

query = sys.argv
if len(query) < 2:
  print("キーワードを指定してください")
  exit()

documents = retriever.get_relevant_documents(query=query[1])

print(f"ドキュメントの数: {len(documents)}件")

for document in documents:
  print(f"--- 取得したメタデータ ---")
  print(document.metadata)
  print(f"--- 取得したテキスト ---")
  print(document.page_content[:100])
  

ちなみに、これを実行するとこんな感じになります。

python ./query_wikipedia.py Perfume
ドキュメントの数: 3件
--- 取得したメタデータ ---
{'title': 'Perfume', 'summary': 'Perfume(パフューム)は、日本の音楽ユニット。中田ヤスタカが楽曲プロデュースする広島県出身の3人組テクノポップユニットである。\n\n女性アイドルグループとしては相当に長い下積みを経て、2007年から2008年にかけてブレイク。以降も長く人気を保つ女性アイドルグループである。独特の音楽性やダンス 、舞台演出等に特徴がある。\nアミューズ所属。レコードレーベルはPerfume Records。公式ファンクラブは「P.T.A.」。', 'source': 'https://ja.wikipedia.org/wiki/Perfume'}
--- 取得したテキスト ---
Perfume(パフューム)は、日本の音楽ユニット。中田ヤスタカが楽曲プロデュースする広島県出身の3人組テクノポップユニットである。

女性アイドルグループとしては相当に長い下積みを経て、2007年か
--- 取得したメタデータ ---
{'title': 'Perfume LOCKS!', 'summary': '『Perfume LOCKS!』(パフューム・ロックス)は、2008331日から2021322日まで、TOKYO FMのラジオ番組『SCHOOL OF LOCK!』(以下、SOL)内で放送されていたコーナーである。', 'source': 'https://ja.wikipedia.org/wiki/Perfume_LOCKS!'}
--- 取得したテキスト ---
『Perfume LOCKS!』(パフューム・ロックス)は、2008331日から2021322日まで、TOKYO FMのラジオ番組『SCHOOL OF LOCK!』(以下、SOL)内で放送され
--- 取得したメタデータ ---
{'title': 'GAME (Perfumeのアルバム)', 'summary': '『GAME』(ゲーム)は、日本のテクノポップユニット・Perfumeの通算2枚目、初のオリジナル・アルバムである。収録曲「GAME」をアルバムタイトルとした。\n読売新聞2018年の元旦特集「J-POP 平成の名盤30」で本アルバムが、宇多田ヒカル『First Love』や、globe『globe』などを抑えて実質1位に選ばれた(選者・マーティ・フリードマン、柴那典、石黒大貴の3人が30枚を選び、全員一致で挙げた唯一のアルバム) 。平成を代表する名盤である。\n本項では、本作の 初回限定盤に付属のDVDに収録されたライブ『Perfume 〜SEVENTH HEAVEN イイ気分♪〜』についても記述する。', 'source': 'https://ja.wikipedia.org/wiki/GAME_(Perfume%E3%81%AE%E3%82%A2%E3%83%AB%E3%83%90%E3%83%A0)'}
--- 取得したテキスト ---
『GAME』(ゲーム)は、日本のテクノポップユニット・Perfumeの通算2枚目、初のオリジナル・アルバムである。収録曲「GAME」をアルバムタイトルとした。
読売新聞2018年の元旦特集「J-POP


この記事が参加している募集

AIとやってみた

貴方がサポートしてくれると、私が幸せ。 私が幸せになると、貴方も幸せ。 新しいガジェット・ソフトウェアのレビューに、貴方の力が必要です。