Pythonでllama-indexを使っているのですが、開発環境からテスト環境へ移して実行しようとしたところ、SimpleNodeParserのところで、以下のようにエラーが発生しました。
node_parser = SimpleNodeParser.from_defaults(text_splitter=text_splitter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: SentenceSplitter.from_defaults() got an unexpected keyword argument 'text_splitter'
pyproject.tomlに
dependencies = [
"openai>=0.28.0",
"llama-index>=0.8",
...
という感じに書いていたため、openaiが1.3.xに、llama-indexが0.9.xになっており、llama-index 0.9系だと動かないようです。
そこでllama-indexを0.8のままにしておくよう、以下のように「<0.9」の指定を追加してやることでこのエラーは回避しました。
dependencies = [
"openai>=0.28.0",
"llama-index>=0.8, <0.9",
...
しかし今度はopenaiが1.xだと古い使い方だと動かないと言われました。
openai.lib._old_api.APIRemovedInV1:
You tried to access openai.Completion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.
You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface.
Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`
A detailed migration guide is available here: https://github.com/openai/openai-python/discussions/742
github.com
今後Assistant APIとか使うことを考えると、openaiは早めに1.xに移行しておきたいところです。
しかし実はすでに他のコードは1.xに移行しており、これはllama-indexの中で発生しているエラーでした。
ちなみにどのバージョンからllama-indexがopenai 1.xに対応したのだろう?と思って調べてみたところ、0.8.5x台までは
openai = ">=0.26.4"
だったのが、
2023/11/8 の 0.8.64 から
openai = ">=1.1.0"
となっていました。
なので0.9.xからというわけではなく、0.8.xの途中からopenai 1.x系への対応がされたようです。
ただ今後のことを考えると、なんにしても0.8.xから0.9.xへの移行をしといたほうが良さそうに思いました。
で0.8->0.9への移行の情報を探したところnpakaさんの記事がありました。
note.com
ここの「4. ノード解析・テキスト分割・メタデータ抽出のインターフェース変更」のところに、これまでの一旦「SimpleNodeParser」を作る方法から変更されたことが書いてありました。
これまでの「0.8.x」の場合
node_parser = SimpleNodeParser(
text_splitter=SentenceSplitter(chunk_size=512)
)
nodes = node_parser.get_nodes_from_documents(documents)
↓
今後「0.9.x」の場合
node_parser = SentenceSplitter(chunk_size=512)
nodes = node_parser(documents)
このため、これまでnode_parserを入れたSimpleNodeParserを生成していた部分を、単にそのままこれまで使っていたSentenceSplitterを入れることで動くようになりました。