Gli sviluppatori e gli ingegneri operativi attribuiscono grande valore a un'infrastruttura che possono configurare facilmente, avviare rapidamente e, in seguito, distribuire efficacemente in un ambiente di produzione scalato senza ulteriori complicazioni. Per questo motivo, Milvus Lite, l'ultimo database vettoriale leggero offerto dal nostro partner Milvus, è uno strumento importante per gli sviluppatori Python per sviluppare rapidamente applicazioni di ricerca, specialmente quando utilizzato insieme a modelli di ricerca di alta qualità e facili da usare.
In questo articolo, descriveremo come Milvus Lite integra Jina Embeddings v2 e Jina Reranker v1 utilizzando l'esempio di un'applicazione Retrieval Augmented Generation (RAG) costruita sulle chat dei canali interni pubblici di un'azienda fittizia per permettere ai dipendenti di ottenere risposte alle loro domande organizzative in modo accurato e utile.
tagPanoramica di Milvus Lite, Jina Embeddings e Jina Reranker
Milvus Lite è una nuova versione leggera del database vettoriale leader Milvus, che ora viene offerto anche come libreria Python. Milvus Lite condivide la stessa API di Milvus distribuito su Docker o Kubernetes ma può essere facilmente installato tramite un comando pip di una riga, senza configurare un server.
Con l'integrazione di Jina Embeddings v2 e Jina Reranker v1 in pymilvus, l'SDK Python di Milvus, ora hai l'opzione di incorporare direttamente i documenti utilizzando lo stesso client Python per qualsiasi modalità di distribuzione di Milvus, incluso Milvus Lite. Puoi trovare i dettagli dell'integrazione di Jina Embeddings e Reranker nelle pagine di documentazione di pymilvus.
Con la sua finestra di contesto di 8k token e capacità multilingue, Jina Embeddings v2 codifica la semantica ampia del testo e garantisce un recupero accurato. Aggiungendo Jina Reranker v1 alla pipeline, puoi perfezionare ulteriormente i tuoi risultati attraverso la codifica incrociata dei risultati recuperati direttamente con la query per una comprensione contestuale più profonda.
tagMilvus e Modelli Jina AI in Azione
Questo tutorial si concentrerà su un caso d'uso pratico: l'interrogazione della cronologia delle chat Slack di un'azienda per rispondere a un'ampia gamma di domande basate su conversazioni passate.

Per esempio, un dipendente potrebbe chiedere informazioni sul prossimo passo in un processo di training AI, come nello schema del processo sopra. Utilizzando Jina Embeddings, Jina Reranker e Milvus, possiamo identificare accuratamente le informazioni rilevanti nei messaggi Slack registrati. Questa applicazione può migliorare la produttività sul posto di lavoro rendendo più facile l'accesso a informazioni preziose dalle comunicazioni passate.
Per generare le risposte, utilizzeremo Mixtral 7B Instruct attraverso l'integrazione di HuggingFace in Langchain. Per utilizzare il modello, hai bisogno di un token di accesso HuggingFace che puoi generare come descritto qui.
Puoi seguire il tutorial su Colab o scaricando il notebook.

tagInformazioni sul Dataset
Il dataset utilizzato in questo tutorial è stato generato utilizzando GPT-4 e intende replicare le cronologie delle chat dei canali Slack di Blueprint AI. Blueprint è una startup AI fittizia che sviluppa i propri modelli fondazionali. Puoi scaricare il dataset qui.
I dati sono organizzati in canali, ognuno rappresentativo di una collezione di thread Slack correlati. Ogni canale ha un'etichetta di argomento, una delle dieci opzioni: distribuzione del modello, training del modello, fine-tuning del modello, etica e mitigazione dei bias, feedback degli utenti, vendite, marketing, onboarding del modello, design creativo e gestione del prodotto. Un partecipante è noto come "utente esperto". Puoi utilizzare questo campo per validare i risultati dell'interrogazione per trovare l'utente più esperto in un argomento, come ti mostreremo di seguito.
Ogni canale contiene anche una cronologia delle chat con thread di conversazione fino a 100 messaggi per canale. Ogni messaggio nel dataset contiene le seguenti informazioni:
- L'utente che ha inviato il messaggio
- Il testo del messaggio inviato dall'utente
- Il timestamp del messaggio
- Il nome del file che l'utente potrebbe aver allegato al messaggio
- L'ID del messaggio
- L'ID del messaggio genitore se il messaggio era all'interno di un thread originato da un altro messaggio

tagConfigurazione dell'Ambiente
Per iniziare, installa tutti i componenti necessari:
pip install -U pymilvus
pip install -U "pymilvus[model]"
pip install langchain
pip install langchain-community
Scarica il dataset:
import os
if not os.path.exists("chat_history.json"):
!wget https://raw.githubusercontent.com/jina-ai/workshops/main/notebooks/embeddings/milvus/chat_history.jsonImposta la tua Jina AI API Key in una variabile d'ambiente. Puoi generarne una qui.
import os
import getpass
os.environ["JINAAI_API_KEY"] = getpass.getpass(prompt="Jina AI API Key: ")Fai lo stesso per il tuo Token Hugging Face. Puoi trovare come generarne uno qui. Assicurati che sia impostato su READ per accedere a Hugging Face Hub.
os.environ["HUGGINGFACEHUB_API_TOKEN"] = getpass.getpass(prompt="Hugging Face Token: ")tagCreazione della Collezione Milvus
Crea la Collezione Milvus per indicizzare i dati:
from pymilvus import MilvusClient, DataType
# Specify a local file name as uri parameter of MilvusClient to use Milvus Lite
client = MilvusClient("milvus_jina.db")
schema = MilvusClient.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(field_name="id", datatype=DataType.INT64, description="The Primary Key", is_primary=True)
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, description="The Embedding Vector", dim=768)
index_params = client.prepare_index_params()
index_params.add_index(field_name="embedding", metric_type="COSINE", index_type="AUTOINDEX")
client.create_collection(collection_name="milvus_jina", schema=schema, index_params=index_params)tagPreparare i dati
Analizza la cronologia della chat ed estrai i metadati:
import json
with open("chat_history.json", "r", encoding="utf-8") as file:
chat_data = json.load(file)
messages = []
metadatas = []
for channel in chat_data:
chat_history = channel["chat_history"]
chat_topic = channel["topic"]
chat_expert = channel["expert_user"]
for message in chat_history:
text = f"""{message["user"]}: {message["message"]}"""
messages.append(text)
meta = {
"time_stamp": message["time_stamp"],
"file_name": message["file_name"],
"parent_message_nr": message["parent_message_nr"],
"channel": chat_topic,
"expert": True if message["user"] == chat_expert else False
}
metadatas.append(meta)
tagIncorporare i dati della chat
Crea embedding per ogni messaggio utilizzando Jina Embeddings v2 per recuperare informazioni rilevanti dalla chat:
from pymilvus.model.dense import JinaEmbeddingFunction
jina_ef = JinaEmbeddingFunction("jina-embeddings-v2-base-en")
embeddings = jina_ef.encode_documents(messages)tagIndicizzare i dati della chat
Indicizza i messaggi, i loro embedding e i relativi metadati:
collection_data = [{
"message": message,
"embedding": embedding,
"metadata": metadata
} for message, embedding, metadata in zip(messages, embeddings, metadatas)]
data = client.insert(
collection_name="milvus_jina",
data=collection_data
)tagInterrogare la cronologia chat
È il momento di fare una domanda:
query = "Who knows the most about encryption protocols in my team?"Ora incorpora la query e recupera i messaggi rilevanti. Qui recuperiamo i cinque messaggi più rilevanti e li riordiniamo utilizzando Jina Reranker v1:
from pymilvus.model.reranker import JinaRerankFunction
query_vectors = jina_ef.encode_queries([query])
results = client.search(
collection_name="milvus_jina",
data=query_vectors,
limit=5,
)
results = results[0]
ids = [results[i]["id"] for i in range(len(results))]
results = client.get(
collection_name="milvus_jina",
ids=ids,
output_fields=["id", "message", "metadata"]
)
jina_rf = JinaRerankFunction("jina-reranker-v1-base-en")
documents = [results[i]["message"] for i in range(len(results))]
reranked_documents = jina_rf(query, documents)
reranked_messages = []
for reranked_document in reranked_documents:
idx = reranked_document.index
reranked_messages.append(results[idx])Infine, genera una risposta alla query utilizzando Mixtral 7B Instruct e i messaggi riordinati come contesto:
from langchain.prompts import PromptTemplate
from langchain_community.llms import HuggingFaceEndpoint
llm = HuggingFaceEndpoint(repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1")
prompt = """<s>[INST] Context information is below.\\n
It includes the five most relevant messages to the query, sorted based on their relevance to the query.\\n
---------------------\\n
{context_str}\\\\n
---------------------\\n
Given the context information and not prior knowledge,
answer the query. Please be brief, concise, and complete.\\n
If the context information does not contain an answer to the query,
respond with \\"No information\\".\\n
Query: {query_str}[/INST] </s>"""
prompt = PromptTemplate(template=prompt, input_variables=["query_str", "context_str"])
llm_chain = prompt | llm
answer = llm_chain.invoke({"query_str":query, "context_str":reranked_messages})
print(f"\n\nANSWER:\n\n{answer}")La risposta alla nostra domanda è:
"Basandosi sulle informazioni contestuali, User5 sembra essere il più esperto in protocolli di crittografia nel tuo team. Hanno menzionato che i nuovi protocolli migliorano significativamente la sicurezza dei dati, specialmente per i deployment cloud."
Se leggi i messaggi in chat_history.json, puoi verificare tu stesso se User5 è l'utente più esperto.
tagRiepilogo
Abbiamo visto come configurare Milvus Lite, incorporare i dati delle chat utilizzando Jina Embeddings v2 e perfezionare i risultati di ricerca con Jina Reranker v1, tutto all'interno di un caso d'uso pratico di ricerca in una cronologia chat di Slack. Milvus Lite semplifica lo sviluppo di applicazioni Python senza la necessità di configurazioni server complesse. La sua integrazione con Jina Embeddings e Reranker mira ad aumentare la produttività rendendo più facile l'accesso alle informazioni preziose dal tuo ambiente di lavoro.
tagUsa ora i modelli Jina AI e Milvus
Milvus Lite con integrati Jina Embeddings e Reranker ti fornisce una pipeline di elaborazione completa, pronta all'uso con poche righe di codice.
Ci piacerebbe conoscere i tuoi casi d'uso e parlare di come l'estensione Jina AI Milvus possa adattarsi alle tue esigenze aziendali. Contattaci tramite il nostro sito web o il nostro canale Discord per condividere il tuo feedback e rimanere aggiornato sui nostri ultimi modelli. Per domande sull'integrazione tra Milvus e Jina AI, unisciti alla community Milvus.






