Integrar Milvus con Jina AI
Esta guía muestra cómo utilizar las incrustaciones de Jina AI y Milvus para realizar tareas de búsqueda y recuperación de similitudes.
Quién es Jina AI
Jina AI, fundada en 2020 en Berlín, es una empresa pionera en IA centrada en revolucionar el futuro de la inteligencia artificial a través de su base de búsqueda. Especializada en IA multimodal, Jina AI tiene como objetivo capacitar a empresas y desarrolladores para aprovechar el poder de los datos multimodales para la creación de valor y el ahorro de costes a través de su conjunto integrado de componentes, incluyendo incrustaciones, rerankers, operaciones rápidas e infraestructura central. Las incrustaciones de vanguardia de Jina AI cuentan con un rendimiento de primer nivel, con un modelo de longitud de token 8192 ideal para la representación integral de datos. Al ofrecer compatibilidad multilingüe y una integración perfecta con plataformas líderes como OpenAI, estas incrustaciones facilitan las aplicaciones multilingües.
Incrustación de Milvus y Jina AI
Para almacenar y buscar estas incrustaciones de forma eficiente en cuanto a velocidad y escala, se requiere una infraestructura específica diseñada para este fin. Milvus es una conocida base de datos vectorial avanzada de código abierto capaz de manejar datos vectoriales a gran escala. Milvus permite realizar búsquedas rápidas y precisas de vectores (incrustaciones) de acuerdo con numerosas métricas. Su escalabilidad permite manejar sin problemas volúmenes masivos de datos de imágenes, garantizando operaciones de búsqueda de alto rendimiento incluso a medida que crecen los conjuntos de datos.
Ejemplos
Las incrustaciones Jina se han integrado en la biblioteca de modelos PyMilvus. A continuación, mostraremos ejemplos de código para mostrar cómo utilizar las incrustaciones de Jina en acción.
Antes de empezar, necesitamos instalar la librería de modelos para PyMilvus.
$ pip install -U pymilvus
$ pip install "pymilvus[model]"
Si estás usando Google Colab, para habilitar las dependencias recién instaladas, puede que necesites reiniciar el runtime. (Haz clic en el menú "Runtime" en la parte superior de la pantalla, y selecciona "Restart session" en el menú desplegable).
Incrustación de propósito general
El modelo de incrustación central de Jina AI destaca en la comprensión de texto detallado, por lo que resulta ideal para la búsqueda semántica, la clasificación de contenidos, el análisis avanzado de sentimientos, el resumen de textos y los sistemas de recomendación personalizados.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction(
"jina-embeddings-v3",
jina_api_key,
task="retrieval.passage",
dimensions=1024
)
query = "what is information retrieval?"
doc = "Information retrieval is the process of finding relevant information from a large collection of data or documents."
qvecs = ef.encode_queries([query]) # This method uses `retrieval.query` as the task
dvecs = ef.encode_documents([doc]) # This method uses `retrieval.passage` as the task
Incrustación bilingüe
Los modelos bilingües de Jina AI mejoran las plataformas multilingües, el soporte global y el descubrimiento de contenidos en varios idiomas. Diseñados para traducciones alemán-inglés y chino-inglés, fomentan el entendimiento entre diversos grupos lingüísticos, simplificando las interacciones entre idiomas.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction("jina-embeddings-v2-base-de", jina_api_key)
query = "what is information retrieval?"
doc = "Information Retrieval ist der Prozess, relevante Informationen aus einer großen Sammlung von Daten oder Dokumenten zu finden."
qvecs = ef.encode_queries([query])
dvecs = ef.encode_documents([doc])
Incrustación de código
El modelo de incrustación de código de Jina AI proporciona capacidad de búsqueda a través del código y la documentación. Es compatible con el inglés y con 30 lenguajes de programación populares que pueden utilizarse para mejorar la navegación por el código, agilizar la revisión del código y automatizar la asistencia en la documentación.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction("jina-embeddings-v2-base-code", jina_api_key)
# Case1: Enhanced Code Navigation
# query: text description of the functionality
# document: relevant code snippet
query = "function to calculate average in Python."
doc = """
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
return total / count
"""
# Case2: Streamlined Code Review
# query: text description of the programming concept
# document: relevante code snippet or PR
query = "pull quest related to Collection"
doc = "fix:[restful v2] parameters of create collection ..."
# Case3: Automatic Documentation Assistance
# query: code snippet you need explanation
# document: relevante document or DocsString
query = "What is Collection in Milvus"
doc = """
In Milvus, you store your vector embeddings in collections. All vector embeddings within a collection share the same dimensionality and distance metric for measuring similarity.
Milvus collections support dynamic fields (i.e., fields not pre-defined in the schema) and automatic incrementation of primary keys.
"""
qvecs = ef.encode_queries([query])
dvecs = ef.encode_documents([doc])
Búsqueda semántica con Jina y Milvus
Con la potente función de incrustación vectorial, podemos combinar las incrustaciones recuperadas mediante la utilización de modelos de IA Jina con la base de datos vectorial Milvus Lite para realizar búsquedas semánticas.
from pymilvus.model.dense import JinaEmbeddingFunction
from pymilvus import MilvusClient
jina_api_key = "<YOUR_JINA_API_KEY>"
DIMENSION = 1024 # `jina-embeddings-v3` supports flexible embedding sizes (32, 64, 128, 256, 512, 768, 1024), allowing for truncating embeddings to fit your application.
ef = JinaEmbeddingFunction(
"jina-embeddings-v3",
jina_api_key,
task="retrieval.passage",
dimensions=DIMENSION,
)
doc = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.",
]
dvecs = ef.encode_documents(doc) # This method uses `retrieval.passage` as the task
data = [
{"id": i, "vector": dvecs[i], "text": doc[i], "subject": "history"}
for i in range(len(dvecs))
]
milvus_client = MilvusClient("./milvus_jina_demo.db")
COLLECTION_NAME = "demo_collection" # Milvus collection name
if milvus_client.has_collection(collection_name=COLLECTION_NAME):
milvus_client.drop_collection(collection_name=COLLECTION_NAME)
milvus_client.create_collection(collection_name=COLLECTION_NAME, dimension=DIMENSION)
res = milvus_client.insert(collection_name=COLLECTION_NAME, data=data)
print(res["insert_count"])
En cuanto al argumento de MilvusClient
:
- Establecer el
uri
como un archivo local, por ejemplo./milvus.db
, es el método más conveniente, ya que utiliza automáticamente Milvus Lite para almacenar todos los datos en este archivo. - Si tiene una gran escala de datos, puede configurar un servidor Milvus más eficiente en docker o kubernetes. En esta configuración, por favor utilice la uri del servidor, por ejemplo
http://localhost:19530
, como suuri
. - Si desea utilizar Zilliz Cloud, el servicio en la nube totalmente gestionado para Milvus, ajuste
uri
ytoken
, que corresponden al punto final público y a la clave Api en Zilliz Cloud.
Con todos los datos en la base de datos vectorial de Milvus, ya podemos realizar la búsqueda semántica generando la incrustación vectorial para la consulta y realizar la búsqueda vectorial.
queries = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
qvecs = ef.encode_queries([queries]) # This method uses `retrieval.query` as the task
res = milvus_client.search(
collection_name=COLLECTION_NAME, # target collection
data=[qvecs[0]], # query vectors
limit=3, # number of returned entities
output_fields=["text", "subject"], # specifies fields to be returned
)[0]
for result in res:
print(result)
{'id': 1, 'distance': 0.8802614808082581, 'entity': {'text': "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", 'subject': 'history'}}
Jina Reranker
Jina Ai también proporciona rerankers para mejorar aún más la calidad de recuperación después de la búsqueda utilizando incrustaciones.
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.",
]
rf(query, documents)
[RerankResult(text="The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", score=0.9370958209037781, index=1),
RerankResult(text='The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.', score=0.35420963168144226, index=3),
RerankResult(text="In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.", score=0.3498658835887909, index=0),
RerankResult(text='In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.', score=0.2728956639766693, index=2)]