Function
A Function instance for generating vector embeddings from user-provided raw data or applying a reranking strategy to the search results in Milvus.
class pymilvus.Function
Constructor
This constructor initializes a new Function instance designed to transform user's raw data into vector embeddings or applying a reranking strategy to the search results. This is achieved through an automated process that simplifies similarity search operations.
Function(
name: str,
function_type: FunctionType,
input_field_names: Union[str, List[str]],
output_field_names: Union[str, List[str]],
description: str = "",
)
PARAMETERS:
-
name(str) -[REQUIRED]
The name of the function. This identifier is used to reference the function within queries and collections.
-
function_type(FunctionType) -[REQUIRED]
The type of embedding function to use. Possible values:
-
FunctionType.BM25: Generates sparse vectors based on the BM25 ranking algorithm from aVARCHARfield. -
FunctionType.TEXTEMBEDDING: Generates dense vectors that capture semantic meaning from aVARCHARfield.
-
-
FunctionType.RERANK: Applies reranking strategies to the search results. -
input_field_names(Union[str, List[str]]) -[REQUIRED]
The name of the field containing the raw data that requires conversion to a vector representation. This parameter accepts only one field name.
-
output_field_names(Union[str, List[str]]) -The name of the field where the generated embeddings will be stored. This should correspond to a vector field defined in the collection schema. This parameter accepts only one field name.
📘NotesThis applies only when you set
function_typetoFunctionType.BM25andFunctionType.TEXTEMBEDDING. -
params(dict) -A configuration dictionary for the embedding/ranking function. Supported keys vary by
function_type:-
FunctionType.BM25: No parameters required. Pass an empty dictionary or omit entirely. -
FunctionType.TEXTEMBEDDING:-
provider(str) -The embedding model provider. Possible values are as follows:
-
openai(OpenAI) -
azure_openai(Microsoft Azure OpenAI) -
dashscope(DashScope) -
bedrock(Amazon Bedrock) -
vertexai(Google Cloud Vertext AI) -
voyageai(Voyage AI) -
cohere(Cohere) -
siliconflow(SiliconFlow)
-
-
model_name(str) -The name of the embedding model to use. The value varies with the provider. For details, refer to their respective document page.
-
credential(str) -The label of a credential defined in the top-level
credential:section ofmilvus.yaml.-
When provided, Milvus retrieves the matching key pair or API token and signs the request on the server side.
-
When omitted (
None), Milvus falls back to the credential explicitly configured for the target model provider inmilvus.yaml. -
If the label is unknown or the referenced key is missing, the call fails.
-
-
dim(str) -The number of dimensions for the output embeddings. For OpenAI's third-generation models, you can shorten the full vector to reduce cost and latency without a significant loss of semantic information. For more information, refer to OpenAI announcement blog post.
📘NotesIf you shorten the vector dimension, ensure the
dimvalue specified in the schema'sadd_fieldmethod for the vector field matches the final output dimension of your embedding function.
-
-
FunctionType.RERANK: Configureparamsbased on reranker type:-
Weighted Ranker
params = {"reranker": "weighted", # Required"weights": [0.1, 0.9], # List[float], weights per search path ∈ [0,1]"norm_score": True # Optional}-
reranker(str): Specifies the reranking method to use. Must be set toweightedto use Weighted Ranker. -
weights(List[float]): Array of weights corresponding to each search path; values ∈ [0,1]. For details, refer to Mechanism of Weighted Ranker. -
norm_score(boolean): Whether to normalize raw scores (using arctan) before weighting. For details, refer to Mechanism of Weighted Ranker.
-
-
RRF Ranker
params = {"reranker": "rrf", # Required"k": 100 # Optional (default: 60)}-
reranker(str): Specifies the reranking method to use. Must be set to"rrf"to use RRF Ranker. -
k(int): Smoothing parameter that controls the impact of document ranks; higherkreduces sensitivity to top ranks. Value range: (0, 16384); default:60. For details, refer to Mechanism of RRF Ranker.
-
-
Decay Ranker
params={"reranker": "decay", # Specify decay reranker. Must be "decay""function": "gauss", # Choose decay function type: "gauss", "exp", or "linear""origin": 1720000000, # Reference point (e.g., Unix timestamp)"scale": 7 * 24 * 60 * 60, # 7 days in seconds"offset": 24 * 60 * 60, # 1 day no-decay zone"decay": 0.5 # Half score at scale distance}-
reranker(str): Specifies the reranking method to use. Must be set to"decay"to enable decay ranking functionality. -
function(str): Specifies which mathematical decay ranker to apply. Possible values:"gauss","expr","linear". For details, refer to Choose the right decay ranker. -
origin(int): Reference point from which decay score is calculated. -
scale(int): Distance or time at which relevance drops to thedecayvalue. -
offset(int): Creates a "no-decay zone" around theoriginwhere items maintain full scores (decay score = 1.0). -
decay(float): Score value at thescaledistance, controls curve steepness.
For details on decay ranking, refer to Decay Ranker Overview.
-
-
Model Ranker
TEI Provider:
params={"reranker": "model", # Specify model reranker. Must be "model""provider": "tei", # Choose provider: "tei" or "vllm""queries": ["machine learning for time series"], # Query text"endpoint": "http://model-service:8080", # Model service endpoint"max_client_batch_size": 32, # Optional (default: 32)"truncate": True, # Optional: Truncate the inputs that are longer than the maximum supported size"truncation_direction": "Right", # Optional: Direction to truncate the inputs}vLLM Provider:
params={"reranker": "model", # Specifies model-based reranking"provider": "vllm", # Specifies vLLM service"queries": ["renewable energy developments"], # Query text"endpoint": "http://localhost:8080", # vLLM service address"max_client_batch_size": 64, # Optional: batch size"truncate_prompt_tokens": 256, # Optional: Use last 256 tokens}Cohere Provider:
params = {"reranker": "model", # Enables model-based reranking"provider": "cohere", # Specifies Cohere as the service provider"model_name": "rerank-english-v3.0", # Cohere rerank model to use"queries": ["renewable energy developments"], # Query text for relevance evaluation"max_client_batch_size": 128, # Optional: batch size for model service requests (default: 128)"max_tokens_per_doc": 4096, # Optional: max tokens per document (default: 4096)"credential": "your-cohere-api-key" # Optional: authentication credential for Cohere API}Voyage AI Provider:
params = {"reranker": "model", # Enables model-based reranking"provider": "voyageai", # Specifies Voyage AI as the service provider"model_name": "rerank-2.5", # Voyage AI reranker to use"queries": ["renewable energy developments"], # Query text for relevance evaluation"max_client_batch_size": 128, # Optional: batch size for model service requests (default: 128)"truncation": True, # Optional: enable input truncation (default: True)"credential": "your-voyage-api-key" # Optional: if not set, uses VOYAGE_API_KEY env var}SiliconFlow Provider:
params = {"reranker": "model", # Enables model-based reranking"provider": "siliconflow", # Specifies SiliconFlow as the service provider"model_name": "BAAI/bge-reranker-v2-m3", # SiliconFlow reranking model to use"queries": ["renewable energy developments"], # Query text for relevance evaluation"max_client_batch_size": 128, # Optional: batch size for model service requests (default: 128)"max_chunks_per_doc": 5, # Optional: max chunks per document for supported models"overlap_tokens": 50, # Optional: token overlap between chunks for supported models"credential": "your-siliconflow-api-key" # Optional: if not set, uses SILICONFLOW_API_KEY env var}-
reranker(str): Must be set to"model"to enable model reranking. -
provider(str): The model service provider to use for reranking. Possible values:"tei"or"vllm". For details, refer to Choose a model provider for your needs. -
queries(List[str]): List of query strings used by the reranking model to calculate relevance scores. -
endpoint(str): URL of the model service. -
max_client_batch_size(int): Maximum number of documents to process in a single batch. Default: 32. -
truncate(bool): [TEI only] Whether to truncate inputs that exceed the maximum supported size. For details, refer to TEI Ranker. -
truncation_direction(str): [TEI only] Direction for truncation ("Left"or"Right"). For details, refer to TEI Ranker. -
truncate_prompt_tokens(int): [vLLM only] Number of tokens to keep from the end of the prompt when truncating. For details, refer to vLLM Ranker. -
max_tokens_per_doc(int): [Cohere only] Maximum number of tokens per document. Long documents will be automatically truncated to the specified number of tokens. For details, refer to Cohere Ranker. -
truncation(bool): [Voyage AI only] Whether to truncate the input to satisfy the "context length limit" on the query and the documents. For details, refer to Voyage AI Ranker. -
max_chunks_per_doc(int): [SiliconFlow only] Maximum number of chunks generated from within a document. For details, refer to SiliconFLow Ranker. -
overlap_tokens(int): [SiliconFlow only] Number of token overlaps between adjacent chunks when documents are chunked. For details, refer to SiliconFLow Ranker.
-
-
-
-
description(str) -[OPTIONAL]
A brief description of the function's purpose. This can be useful for documentation or clarity in larger projects and defaults to an empty string.
RETURN TYPE:
Instance of Function that encapsulates the specific processing behavior for converting raw data to vector embeddings.
RETURNS:
A Function object that can be registered with a Milvus collection, facilitating automatic embedding generation during data insertion.
EXCEPTIONS:
-
UnknownFunctionTypeThis exception will be raised when an unsupported or unrecognized function type is specified.
-
FunctionIncorrectInputOutputTypeThis exception will be raised when one or more field names in
input_field_namesoroutput_field_namesare not strings. -
FunctionDuplicateInputsThis exception will be raised when there are duplicate field names in
input_field_names. -
FunctionDuplicateOutputsThis exception will be raised when there are duplicate field names in
output_field_names. -
FunctionCommonInputOutputThis exception will be raised when there is an overlap between
input_field_namesandoutput_field_names, meaning that the same field name is present in both.
Examples
-
Use
BM25from pymilvus import Function, FunctionType# use BM25bm25_function = Function(name="bm25_fn",input_field_names=["document_content"],output_field_names=["sparse_vector"],function_type=FunctionType.BM25,) -
Use
TEXTEMBEDDINGfrom pymilvus import Function, FunctionType# use TEXTEMBEDDINGtext_embedding_function = Function(name="openai_embedding", # Unique identifier for this embedding functionfunction_type=FunctionType.TEXTEMBEDDING, # Type of embedding functioninput_field_names=["document"], # Scalar field to embedoutput_field_names=["dense"], # Vector field to store embeddingsparams={ # Provider-specific configuration (highest priority)"provider": "openai", # Embedding model provider"model_name": "text-embedding-3-small", # Embedding model# "credential": "apikey1", # Optional: Credential label specified in milvus.yaml# Optional parameters:# "dim": "1536", # Optionally shorten the output vector dimension# "user": "user123" # Optional: identifier for API tracking}) -
Use
RERANKfrom pymilvus import Function, FunctionType# use RERANKmodel_ranker = Function(name="semantic_ranker", # Function identifierinput_field_names=["document"], # VARCHAR field to use for rerankingfunction_type=FunctionType.RERANK, # Must be set to RERANKparams={"reranker": "model", # Specify model reranker. Must be "model""provider": "tei", # Choose provider: "tei" or "vllm""queries": ["machine learning for time series"], # Query text"endpoint": "http://model-service:8080", # Model service endpoint# "max_client_batch_size": 32 # Optional: batch size for processing})