Ошибка неизвестного типа документа при использовании LLamaIndex с Azure OpenAI

Я пытаюсь воспроизвести код из документации: 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). Я уже потратил на это несколько часов и на самом деле понятия не имею, как мне действовать. Так что, если кто-то может с этим помочь - это будет очень полезно :)

Спасибо заранее.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
722
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка возникает из-за типа документа, который вы передаете 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)

Здесь при использовании устаревших модулей все инструменты и модели должны быть импортированы из тех же устаревших модулей, а для индекса векторного хранилища используется дополнительный сервисный контекст.

отличный ответ, который сэкономил много времени. Спасибо!

Keithx 13.03.2024 12:57

Другие вопросы по теме