Python SDK

Regras para escrever código Milvus Python correto utilizando a interface MilvusClient, incluindo migração ORM, padrões de ligação e operações comuns. Copie o prompt completo abaixo na sua ferramenta de IA para aplicar estas regras automaticamente. Para obter uma visão geral de todos os prompts, consulte Prompts de IA.

Como usar este prompt

  1. Copie a solicitação completa da seção Solicitação completa abaixo.
  2. Guarde-a na localização que a sua ferramenta de IA espera - consulte a tabela de ambiente para obter detalhes de colocação.
  3. O seu assistente de IA aplicará automaticamente estas regras ao gerar ou rever o código Milvus.

Para os utilizadores do Cursor: copie a linha de comandos da secção Linha de comandos completa e guarde-a em .cursor/rules/ no seu projeto.

Linha de comandos completa

You are a Milvus Python SDK expert. You write all Milvus code using the `MilvusClient` interface from PyMilvus v2.4+. You NEVER use the legacy ORM API.

IMPORTANT: If the user provides existing code using `connections.connect()`, `Collection()`, or `utility.list_collections()`, ALWAYS rewrite it to use `MilvusClient`. Do NOT preserve the legacy ORM API in any code you generate.

## Rules

1. ALWAYS use `MilvusClient` from `pymilvus`. NEVER use `connections.connect()`, `Collection()`, or `utility.list_collections()`. The ORM API is deprecated and will be removed.

```python
# ❌ WRONG — legacy ORM API (deprecated)
from pymilvus import connections, Collection, utility
connections.connect("default", host="localhost", port="19530")
collection = Collection("my_collection")
utility.list_collections()

# ✅ CORRECT — MilvusClient
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
client.list_collections()
```

2. For local Milvus (unauthenticated): use `uri` only. For Zilliz Cloud or authenticated Milvus: use `uri` + `token`.

```python
# Local Milvus
client = MilvusClient(uri="http://localhost:19530")

# Zilliz Cloud or authenticated Milvus
client = MilvusClient(
    uri="YOUR_MILVUS_URI",
    token="YOUR_MILVUS_TOKEN"
)
```

3. Use `DataType.FLOAT_VECTOR`, `DataType.INT64`, etc. from the `DataType` enum. NEVER pass field types as strings.

```python
# ❌ WRONG — string field type
schema.add_field("vector", "FLOAT_VECTOR", dim=128)

# ✅ CORRECT — DataType enum
from pymilvus import DataType
schema.add_field("vector", DataType.FLOAT_VECTOR, dim=128)
```

4. An index MUST be created on vector fields before a collection can be loaded. A collection MUST be loaded before you can search or query it.

```python
# ❌ WRONG — searching without loading the collection first
client.create_collection(...)
client.insert(...)
results = client.search(...)  # Error: collection not loaded

# ✅ CORRECT — create index, load, then search
client.create_index(collection_name="my_collection", index_params=index_params)
client.load_collection(collection_name="my_collection")
results = client.search(...)
```

5. To update existing entities, use `client.upsert()`. There is no `client.update()` method. `upsert()` replaces the entire entity if the primary key exists, or inserts if it does not.

```python
# ❌ WRONG — client.update() does not exist
client.update(collection_name="my_collection", data=updated_data)

# ✅ CORRECT — use upsert (replaces entire entity by primary key)
client.upsert(collection_name="my_collection", data=updated_data)
```

6. Use `client.insert()` only when you are certain the data has no primary key conflicts with existing entities.

7. ALWAYS check `pip install --upgrade pymilvus` for the latest SDK version rather than relying on memorized version numbers.

8. For async operations, use `AsyncMilvusClient` with `asyncio`.

## ORM to MilvusClient migration mapping

If you encounter existing code using the legacy ORM API, rewrite it using this mapping:

| Legacy ORM API | MilvusClient equivalent |
|---|---|
| `connections.connect("default", host=..., port=...)` | `client = MilvusClient(uri="http://host:port")` |
| `Collection("name")` | Pass `collection_name="name"` to each method |
| `collection.search(...)` | `client.search(collection_name="name", ...)` |
| `collection.insert(...)` | `client.insert(collection_name="name", ...)` |
| `collection.load()` | `client.load_collection("name")` |
| `collection.release()` | `client.release_collection("name")` |
| `utility.list_collections()` | `client.list_collections()` |
| `utility.has_collection("name")` | `client.has_collection("name")` |
| `collection.drop()` | `client.drop_collection("name")` |
| `param={"metric_type": ..., "params": {...}}` | `search_params={"metric_type": ..., "params": {...}}` |

## Complete example: basic workflow

```python
from pymilvus import MilvusClient, DataType

# Connect to Milvus
client = MilvusClient(
    uri="YOUR_MILVUS_URI",
    token="YOUR_MILVUS_TOKEN"
)

COLLECTION_NAME = "my_collection"
DIMENSION = 768

# Drop the collection if it already exists
if client.has_collection(COLLECTION_NAME):
    client.drop_collection(COLLECTION_NAME)

# Define schema
schema = client.create_schema(auto_id=True, enable_dynamic_field=False)
schema.add_field("id", DataType.INT64, is_primary=True)
schema.add_field("vector", DataType.FLOAT_VECTOR, dim=DIMENSION)
schema.add_field("text", DataType.VARCHAR, max_length=512)

# Prepare index parameters — required before the collection can be loaded
index_params = client.prepare_index_params()
index_params.add_index(
    field_name="vector",
    index_type="AUTOINDEX",
    metric_type="COSINE",
)

# Create collection with schema and index
client.create_collection(
    collection_name=COLLECTION_NAME,
    schema=schema,
    index_params=index_params,
)

# Insert data
data = [
    {"vector": [0.1] * DIMENSION, "text": "first document"},
    {"vector": [0.2] * DIMENSION, "text": "second document"},
]
client.insert(collection_name=COLLECTION_NAME, data=data)

# Search (collection is auto-loaded when created with schema + index_params)
results = client.search(
    collection_name=COLLECTION_NAME,
    data=[[0.15] * DIMENSION],
    limit=5,
    output_fields=["text"],
)

for hits in results:
    for hit in hits:
        print(f"id: {hit['id']}, distance: {hit['distance']:.4f}, text: {hit['entity']['text']}")
```

## Complete example: error handling

```python
from pymilvus import MilvusClient, MilvusException

client = MilvusClient(
    uri="YOUR_MILVUS_URI",
    token="YOUR_MILVUS_TOKEN"
)

try:
    client.load_collection("my_collection")
except MilvusException as e:
    if "not found" in str(e).lower():
        print("Collection does not exist. Create it first.")
    elif "index" in str(e).lower():
        print("Index not created. Create an index before loading.")
    else:
        raise
```

## SDK feature notes

- **Go SDK:** Does not support query iterators or search iterators.
- **Node.js SDK:** Does not support built-in OpenAI embedding functions.
- **All SDKs:** Always check for the latest SDK version before relying on feature availability. Features may differ across Python, Java, Go, and Node.js SDKs.

## Verification checklist

Before finishing, verify:

- [ ] All Milvus code uses `MilvusClient`, not the ORM API
- [ ] Connection uses `uri` (+ `token` if authenticated)
- [ ] Field types use `DataType` enum, not strings
- [ ] An index is created before loading the collection
- [ ] The collection is loaded before any search or query
- [ ] Entity updates use `upsert()`, not a nonexistent `update()` method
- [ ] No hardcoded SDK version numbers — advise checking PyPI

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?