Я пытаюсь воспроизвести код из документации: https://docs.llamaindex.ai/en/stable/examples/customization/llms/AzureOpenAI.html и получаю следующую ошибку после index = VectorStoreIndex.from_documents(documents)
:
raise ValueError(f"Unknown document type: {type(document)}")
ValueError: Unknown document type: <class 'llama_index.legacy.schema.Document'>
В связи с тем, что все эти генеративные библиотеки ИИ постоянно обновляются, мне приходится переключить импорт SimpleDirectoryReader
и сделать его похожим на from llama_index.legacy.readers.file.base import SimpleDirectoryReader
Все остальное практически то же самое, что и учебник (с использованием llama_index==0.10.18
и Python версии 3.9.16
). Я уже потратил на это несколько часов и на самом деле понятия не имею, как мне действовать. Так что, если кто-то может с этим помочь - это будет очень полезно :)
Спасибо заранее.
Ошибка возникает из-за типа документа, который вы передаете VectorStoreIndex.from_documents()
.
Когда вы импортируете SimpleDirectoryReader
из устаревших модулей, тип документа — llama_index.legacy.schema.Document
.
Вы передаете это в VectorStoreIndex
, который импортируется из основных модулей: from llama_index.core import VectorStoreIndex
.
Документ, на который вы ссылаетесь, подходит для основных модулей, и вы можете импортировать SimpleDirectoryReader
как from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
, и все будет работать нормально.
Если вы хотите использовать устаревшие модули, используйте приведенный ниже код.
from llama_index.legacy.llms.azure_openai import AzureOpenAI
from llama_index.legacy.embeddings.azure_openai import AzureOpenAIEmbedding
from llama_index.legacy import SimpleDirectoryReader, VectorStoreIndex, ServiceContext
import logging
import sys
logging.basicConfig(
stream=sys.stdout, level=logging.INFO
) # logging.DEBUG for more verbose output
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
api_key = "3c9xxxyyyyzzzzzssssssdb9"
azure_endpoint = "https://<resource_name>.openai.azure.com/"
api_version = "2023-07-01-preview"
llm = AzureOpenAI(
model = "gpt-4",
deployment_name = "gpt4",
api_key=api_key,
azure_endpoint=azure_endpoint,
api_version=api_version,
)
# You need to deploy your own embedding model as well as your own chat completion model
embed_model = AzureOpenAIEmbedding(
model = "text-embedding-ada-002",
deployment_name = "embeding1",
api_key=api_key,
azure_endpoint=azure_endpoint,
api_version=api_version,
)
documents = SimpleDirectoryReader(input_files=["./data/s1.txt"]).load_data()
type(documents[0])
service_context = ServiceContext.from_defaults(
llm=llm, embed_model=embed_model
)
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
Выход:
query = "What is the model name and who updated it last?"
query_engine = index.as_query_engine()
answer = query_engine.query(query)
print("query was:", query)
print("answer was:", answer)
Здесь при использовании устаревших модулей все инструменты и модели должны быть импортированы из тех же устаревших модулей, а для индекса векторного хранилища используется дополнительный сервисный контекст.
отличный ответ, который сэкономил много времени. Спасибо!