Невозможно подключиться к Cassandra (AstraDB) для примера векторного поиска из документации LangChain.

Я пытаюсь подключиться к AstraDB для своего проекта векторного поиска Python (для моего чат-бота GPT), но получаю ошибку подключения. (Я следую примеру хранилища векторов LangChain Cassandra и хочу использовать AstraDB в качестве базы данных векторов.)

Вот мой код:

          ASTRA_DB_CLIENT_ID = os.getenv("ASTRA_DB_CLIENT_ID")
    ASTRA_DB_APPLICATION_TOKEN = os.getenv("ASTRA_DB_APPLICATION_TOKEN")
    ASTRA_DB_SECURE_BUNDLE_PATH = (
        "/Users/devin.bost/proj/demos/ACI/secure-connect-vector-demo.zip"
    )
    cluster = Cluster(
        cloud={
            "secure_connect_bundle": ASTRA_DB_SECURE_BUNDLE_PATH,
        },
        auth_provider=PlainTextAuthProvider(
            ASTRA_DB_CLIENT_ID,
            ASTRA_DB_APPLICATION_TOKEN,
        ),
    )
    session = cluster.connect()

Я установил для ASTRA_DB_CLIENT_ID свой конкретный CLIENT_ID и сделал то же самое для других переменных среды.

Я получаю эту ошибку:

      Traceback (most recent call last):
  File "cassandra/cluster.py", line 1703, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 1690, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 3488, in cassandra.cluster.ControlConnection.connect
  File "cassandra/cluster.py", line 3533, in cassandra.cluster.ControlConnection._reconnect_internal
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'1d0ba879-1c8b-49e4-bc78-90baff9e5714-westus3.db.astra.datastax.com:29042:4cc2a061-0383-4355-85cd-699b4a5af93c': AuthenticationFailed('Failed to authenticate to 1d0ba879-1c8b-49e4-bc78-90baff9e5714-westus3.db.astra.datastax.com:29042:4cc2a061-0383-4355-85cd-699b4a5af93c: Error from server: code=0100 [Bad credentials] message="We recently improved your database security. To find out more and reconnect, see https://docs.datastax.com/en/astra/docs/manage-application-tokens.html"'), '1d0ba879-1c8b-49e4-bc78-90baff9e5714-westus3.db.astra.datastax.com:29042:a856cbcf-1faa-4098-84a0-94e221931fd8': AuthenticationFailed('Failed to authenticate to 1d0ba879-1c8b-49e4-bc78-90baff9e5714-westus3.db.astra.datastax.com:29042:a856cbcf-1faa-4098-84a0-94e221931fd8: Error from server: code=0100 [Bad credentials] message="We recently improved your database security. To find out more and reconnect, see https://docs.datastax.com/en/astra/docs/manage-application-tokens.html"'), '1d0ba879-1c8b-49e4-bc78-90baff9e5714-westus3.db.astra.datastax.com:29042:6f9150b3-c81a-4fcd-a61a-499ab11f09e8': AuthenticationFailed('Failed to authenticate to 1d0ba879-1c8b-49e4-bc78-90baff9e5714-westus3.db.astra.datastax.com:29042:6f9150b3-c81a-4fcd-a61a-499ab11f09e8: Error from server: code=0100 [Bad credentials] message="We recently improved your database security. To find out more and reconnect, see https://docs.datastax.com/en/astra/docs/manage-application-tokens.html"')})
python-BaseException

Я дважды проверил учетные данные, убедился, что они не передаются объекту как нулевые значения, убедился, что безопасный пакет является правильным для БД и что путь безопасного пакета верен, а также убедился, что токен имеет настроено достаточное разрешение. В чем может быть проблема?

1 ответ

Проблема в том, что когда вы изменили свой ASTRA_DB_CLIENT_ID с «токена» на свой фактический CLIENT_ID, вы фактически сломали пример.

Если вы хотите использовать токен вместо идентификатора и секрета клиента, вам нужно буквально установить этот параметр как «токен», например:

      auth_provider=PlainTextAuthProvider(
        "token",
        ASTRA_DB_APPLICATION_TOKEN,
),

Как правило, полученное вами исключение может быть выброшено в любой момент, когда ваши учетные данные неверны.

Альтернативно, при установке соединения вы можете использовать идентификатор клиента и секрет клиента. Вот как будет выглядеть более полный пример (с использованием вашего кода) при таком подходе:

      ASTRA_DB_CLIENT_ID = os.getenv("ASTRA_DB_CLIENT_ID")
ASTRA_DB_APPLICATION_TOKEN = os.getenv("ASTRA_DB_APPLICATION_TOKEN")
ASTRA_DB_SECURE_BUNDLE_PATH = (
    "/Users/devin.bost/proj/demos/ACI/secure-connect-vector-demo.zip"
)
cluster = Cluster(
    cloud={
        "secure_connect_bundle": ASTRA_DB_SECURE_BUNDLE_PATH,
    },
    auth_provider=PlainTextAuthProvider(
        ASTRA_DB_CLIENT_ID,
        ASTRA_DB_SECRET,
    ),
)
session = cluster.connect()

См. этот пример на официальном портале AstraDB, соответствующая часть которого выделена красным:

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