Jina Embeddings e Jina Reranker sono ora disponibili per l'uso con Amazon SageMaker dall'AWS Marketplace. Per gli utenti enterprise che attribuiscono grande importanza alla sicurezza, all'affidabilità e alla coerenza nelle loro operazioni cloud, questo mette l'intelligenza artificiale all'avanguardia di Jina AI nei loro deployment AWS privati, dove possono godere di tutti i vantaggi dell'infrastruttura consolidata e stabile di AWS.
Con la nostra gamma completa di modelli di embedding e reranking su AWS Marketplace, gli utenti SageMaker possono sfruttare le rivoluzionarie finestre di contesto da 8k e gli embedding multilingue ai vertici della classifica su richiesta a prezzi competitivi. Non è necessario pagare per trasferire i modelli dentro o fuori da AWS, i prezzi sono trasparenti e la fatturazione è integrata con il proprio account AWS.
I modelli attualmente disponibili su Amazon SageMaker includono:
- Jina Embeddings v2 Base - English
- Jina Embeddings v2 Small - English
- Modelli Bilingue Jina Embeddings v2:
- Jina Embeddings v2 Base - Code
- Jina Reranker v1 Base - English
- Jina ColBERT v1 - English
- Jina ColBERT Reranker v1 - English
Per l'elenco completo dei modelli, consulta la pagina del fornitore Jina AI su AWS Marketplace e approfitta della prova gratuita di sette giorni.

Questo articolo ti guiderà nella creazione di un'applicazione di Retrieval-augmented generation (RAG) utilizzando esclusivamente componenti di Amazon SageMaker. I modelli che useremo sono Jina Embeddings v2 - English, Jina Reranker v1 e il modello linguistico di grandi dimensioni Mistral-7B-Instruct.
Puoi anche seguire con un Python Notebook, che puoi scaricare o eseguire su Google Colab.
tagRetrieval-Augmented Generation
Il Retrieval-augmented generation è un paradigma alternativo nell'AI generativa. Invece di utilizzare i large language model (LLM) per rispondere direttamente alle richieste degli utenti con ciò che hanno appreso durante l'addestramento, sfrutta la loro fluida produzione linguistica mentre sposta la logica e il recupero delle informazioni su un apparato esterno più adatto a questo scopo.
Prima di invocare un LLM, i sistemi RAG recuperano attivamente informazioni pertinenti da una fonte di dati esterna e le forniscono all'LLM come parte del suo prompt. Il ruolo dell'LLM è sintetizzare le informazioni esterne in una risposta coerente alle richieste degli utenti, minimizzando il rischio di allucinazione e aumentando la rilevanza e l'utilità del risultato.
Un sistema RAG schematicamente ha almeno quattro componenti:
- Una fonte di dati, tipicamente un database vettoriale di qualche tipo, adatto al recupero di informazioni assistito dall'AI.
- Un sistema di recupero informazioni che tratta la richiesta dell'utente come una query e recupera i dati pertinenti per rispondere.
- Un sistema, spesso includente un reranker basato su AI, che seleziona alcuni dei dati recuperati e li elabora in un prompt per un LLM.
- Un LLM, per esempio uno dei modelli GPT o un LLM open-source come quello di Mistral, che prende la richiesta dell'utente e i dati forniti e genera una risposta per l'utente.
I modelli di embedding sono ben adatti al recupero di informazioni e vengono spesso utilizzati per questo scopo. Un modello di embedding testuale prende i testi come input e produce un embedding — un vettore ad alta dimensionalità — la cui relazione spaziale con altri embedding è indicativa della loro similarità semantica, cioè argomenti, contenuti e significati correlati. Vengono spesso utilizzati nel recupero di informazioni perché più gli embedding sono vicini, più è probabile che l'utente sia soddisfatto della risposta. Sono anche relativamente facili da fine-tuning per migliorare le loro prestazioni in domini specifici.
I modelli di text reranker utilizzano principi di AI simili per confrontare collezioni di testi con una query e ordinarli per similarità semantica. L'utilizzo di un modello di reranker specifico per il compito, invece di affidarsi solo a un modello di embedding, spesso aumenta drasticamente la precisione dei risultati di ricerca. Il reranker in un'applicazione RAG seleziona alcuni dei risultati del recupero informazioni per massimizzare la probabilità che le informazioni corrette siano nel prompt per l'LLM.

tagBenchmark delle Prestazioni dei Modelli di Embedding come Endpoint SageMaker
Abbiamo testato le prestazioni e l'affidabilità del modello Jina Embeddings v2 Base - English come endpoint SageMaker, eseguito su un'istanza g4dn.xlarge. In questi esperimenti, abbiamo continuamente generato un nuovo utente ogni secondo, ognuno dei quali inviava una richiesta, attendeva la risposta e ripeteva dopo averla ricevuta.
- Per richieste di meno di 100 token, fino a 150 utenti concorrenti, i tempi di risposta per richiesta sono rimasti sotto i 100ms. Poi, i tempi di risposta sono aumentati linearmente da 100ms a 1500ms con l'aggiunta di più utenti concorrenti.
- A circa 300 utenti concorrenti, abbiamo ricevuto più di 5 errori dall'API e abbiamo terminato il test.
- Per richieste tra 1K e 8K token, fino a 20 utenti concorrenti, i tempi di risposta per richiesta sono rimasti sotto gli 8s. Poi, i tempi di risposta sono aumentati linearmente da 8s a 60s con l'aggiunta di più utenti concorrenti.
- A circa 140 utenti concorrenti, abbiamo ricevuto più di 5 errori dall'API e abbiamo terminato il test.

Sulla base di questi risultati, possiamo concludere che per la maggior parte degli utenti con carichi di lavoro di embedding normali, le istanze g4dn.xlarge o g5.xlarge dovrebbero soddisfare le loro esigenze quotidiane. Tuttavia, per lavori di indicizzazione di grandi dimensioni, che vengono tipicamente eseguiti molto meno frequentemente rispetto alle attività di ricerca, gli utenti potrebbero preferire un'opzione più performante. Per un elenco di tutte le istanze Sagemaker disponibili, fare riferimento alla panoramica di AWS su EC2.
tagConfigura il tuo account AWS
Prima di tutto, avrai bisogno di un account AWS. Se non sei già un utente AWS, puoi registrarti per un account sul sito web AWS.
tagConfigura gli strumenti AWS nel tuo ambiente Python
Installa nel tuo ambiente Python gli strumenti e le librerie AWS necessari per questo tutorial:
pip install awscli jina-sagemaker
Dovrai ottenere una chiave di accesso e una chiave di accesso segreta per il tuo account AWS. Per farlo, segui le istruzioni sul sito web AWS.

Dovrai anche scegliere una regione AWS in cui lavorare.

Quindi, imposta i valori nelle variabili d'ambiente. In Python o in un notebook Python, puoi farlo con il seguente codice:
import os
os.environ["AWS_ACCESS_KEY_ID"] = <YOUR_ACCESS_KEY_ID>
os.environ["AWS_SECRET_ACCESS_KEY"] = <YOUR_SECRET_ACCESS_KEY>
os.environ["AWS_DEFAULT_REGION"] = <YOUR_AWS_REGION>
os.environ["AWS_DEFAULT_OUTPUT"] = "json"
Imposta l'output predefinito su json.
Puoi farlo anche tramite l'applicazione da riga di comando AWS o configurando un file di configurazione AWS sul tuo filesystem locale. Consulta la documentazione sul sito web AWS per ulteriori dettagli.
tagCrea un Ruolo
Avrai anche bisogno di un ruolo AWS con permessi sufficienti per utilizzare le risorse richieste per questo tutorial.
Questo ruolo deve:
- Avere AmazonSageMakerFullAccess abilitato.
- O:
- Avere l'autorità di effettuare sottoscrizioni AWS Marketplace e avere abilitato tutti e tre:
- aws-marketplace:ViewSubscriptions
- aws-marketplace:Unsubscribe
- aws-marketplace:Subscribe
- Oppure il tuo account AWS deve avere una sottoscrizione a jina-embedding-model.
- Avere l'autorità di effettuare sottoscrizioni AWS Marketplace e avere abilitato tutti e tre:
Memorizza l'ARN (Amazon Resource Name) del ruolo nella variabile role:
role = <YOUR_ROLE_ARN>
Consulta la documentazione per i ruoli sul sito web AWS per maggiori informazioni.
tagSottoscrivi i Modelli Jina AI su AWS Marketplace
In questo articolo, useremo il modello Jina Embeddings v2 base English. Sottoscrivilo su AWS Marketplace.

Vedrai le informazioni sui prezzi scorrendo verso il basso nella pagina. AWS addebita i modelli del marketplace su base oraria, quindi ti verrà fatturato il tempo che intercorre tra l'avvio dell'endpoint del modello e il suo arresto. Questo articolo ti mostrerà come fare entrambe le cose.
Useremo anche il modello Jina Reranker v1 - English, al quale dovrai sottoscriverti.

Una volta sottoscritto l'abbonamento, ottieni gli ARN dei modelli per la tua regione AWS e memorizzali nelle variabili embedding_package_arn e reranker_package_arn rispettivamente. Il codice in questo tutorial farà riferimento ad essi usando questi nomi di variabili.
Se non sai come ottenere gli ARN, inserisci il nome della tua regione Amazon nella variabile region e usa il seguente codice:
region = os.environ["AWS_DEFAULT_REGION"]
def get_arn_for_model(region_name, model_name):
model_package_map = {
"us-east-1": f"arn:aws:sagemaker:us-east-1:253352124568:model-package/{model_name}",
"us-east-2": f"arn:aws:sagemaker:us-east-2:057799348421:model-package/{model_name}",
"us-west-1": f"arn:aws:sagemaker:us-west-1:382657785993:model-package/{model_name}",
"us-west-2": f"arn:aws:sagemaker:us-west-2:594846645681:model-package/{model_name}",
"ca-central-1": f"arn:aws:sagemaker:ca-central-1:470592106596:model-package/{model_name}",
"eu-central-1": f"arn:aws:sagemaker:eu-central-1:446921602837:model-package/{model_name}",
"eu-west-1": f"arn:aws:sagemaker:eu-west-1:985815980388:model-package/{model_name}",
"eu-west-2": f"arn:aws:sagemaker:eu-west-2:856760150666:model-package/{model_name}",
"eu-west-3": f"arn:aws:sagemaker:eu-west-3:843114510376:model-package/{model_name}",
"eu-north-1": f"arn:aws:sagemaker:eu-north-1:136758871317:model-package/{model_name}",
"ap-southeast-1": f"arn:aws:sagemaker:ap-southeast-1:192199979996:model-package/{model_name}",
"ap-southeast-2": f"arn:aws:sagemaker:ap-southeast-2:666831318237:model-package/{model_name}",
"ap-northeast-2": f"arn:aws:sagemaker:ap-northeast-2:745090734665:model-package/{model_name}",
"ap-northeast-1": f"arn:aws:sagemaker:ap-northeast-1:977537786026:model-package/{model_name}",
"ap-south-1": f"arn:aws:sagemaker:ap-south-1:077584701553:model-package/{model_name}",
"sa-east-1": f"arn:aws:sagemaker:sa-east-1:270155090741:model-package/{model_name}",
}
return model_package_map[region_name]
embedding_package_arn = get_arn_for_model(region, "jina-embeddings-v2-base-en")
reranker_package_arn = get_arn_for_model(region, "jina-reranker-v1-base-en")
tagCaricamento del Dataset
In questo tutorial, utilizzeremo una collezione di video forniti dal canale YouTube TU Delft Online Learning. Questo canale produce vari materiali didattici in materie STEM. La sua programmazione è sotto licenza CC-BY.
Abbiamo scaricato 193 video dal canale e li abbiamo elaborati con il modello di riconoscimento vocale open-source Whisper di OpenAI. Abbiamo utilizzato il modello più piccolo openai/whisper-tiny per processare i video in trascrizioni.
Le trascrizioni sono state organizzate in un file CSV, che puoi scaricare da qui.
Ogni riga del file contiene:
- Il titolo del video
- L'URL del video su YouTube
- Una trascrizione testuale del video
Per caricare questi dati in Python, prima installa pandas e requests:
pip install requests pandas
Carica i dati CSV direttamente in un DataFrame Pandas chiamato tu_delft_dataframe:
import pandas
# Carica il file CSV
tu_delft_dataframe = pandas.read_csv("https://raw.githubusercontent.com/jina-ai/workshops/feat-sagemaker-post/notebooks/embeddings/sagemaker/tu_delft.csv")
Puoi ispezionare il contenuto usando il metodo head() del DataFrame. In un notebook, dovrebbe apparire più o meno così:

Puoi anche guardare i video utilizzando gli URL forniti in questo dataset e verificare che il riconoscimento vocale sia imperfetto ma fondamentalmente corretto.
tagAvvio dell'Endpoint Jina Embeddings v2
Il codice seguente avvierà un'istanza di ml.g4dn.xlarge su AWS per eseguire il modello di embedding. Potrebbe richiedere diversi minuti per completarsi.
import boto3
from jina_sagemaker import Client
# Scegli un nome per il tuo endpoint di embedding. Può essere qualsiasi cosa conveniente.
embeddings_endpoint_name = "jina_embedding"
embedding_client = Client(region_name=boto3.Session().region_name)
embedding_client.create_endpoint(
arn=embedding_package_arn,
role=role,
endpoint_name=embeddings_endpoint_name,
instance_type="ml.g4dn.xlarge",
n_instances=1,
)
embedding_client.connect_to_endpoint(endpoint_name=embeddings_endpoint_name)
Modifica instance_type per selezionare un diverso tipo di istanza cloud AWS se appropriato.
tagCostruzione e Indicizzazione del Dataset
Ora che abbiamo caricato i dati e stiamo eseguendo un modello Jina Embeddings v2, possiamo preparare e indicizzare i dati. Memorizzeremo i dati in un vector store FAISS, un database vettoriale open-source specificamente progettato per applicazioni AI.
Prima, installa i prerequisiti rimanenti per la nostra applicazione RAG:
pip install tdqm numpy faiss-cpu
tagSuddivisione in Chunk
Dovremo prendere le singole trascrizioni e dividerle in parti più piccole, cioè "chunk", in modo da poter inserire più testi in un prompt per l'LLM. Il codice seguente divide le singole trascrizioni sui confini delle frasi, assicurando che tutti i chunk non abbiano più di 128 parole per impostazione predefinita.
def chunk_text(text, max_words=128):
"""
Divide text into chunks where each chunk contains the maximum number
of full sentences with fewer words than `max_words`.
"""
sentences = text.split(".")
chunk = []
word_count = 0
for sentence in sentences:
sentence = sentence.strip(".")
if not sentence:
continue
words_in_sentence = len(sentence.split())
if word_count + words_in_sentence <= max_words:
chunk.append(sentence)
word_count += words_in_sentence
else:
# Yield the current chunk and start a new one
if chunk:
yield ". ".join(chunk).strip() + "."
chunk = [sentence]
word_count = words_in_sentence
# Yield the last chunk if it's not empty
if chunk:
yield " ".join(chunk).strip() + "."tagOttieni gli Embedding per Ogni Chunk
Abbiamo bisogno di un embedding per ogni chunk da memorizzare nel database FAISS. Per ottenerli, passiamo i chunk di testo all'endpoint del modello di embedding Jina AI, usando il metodo embedding_client.embed(). Quindi, aggiungiamo i chunk di testo e i vettori di embedding al dataframe pandas tu_delft_dataframe come nuove colonne chunks ed embeddings:
import numpy as np
from tqdm import tqdm
tqdm.pandas()
def generate_embeddings(text_df):
chunks = list(chunk_text(text_df["Text"]))
embeddings = []
for i, chunk in enumerate(chunks):
response = embedding_client.embed(texts=[chunk])
chunk_embedding = response[0]["embedding"]
embeddings.append(np.array(chunk_embedding))
text_df["chunks"] = chunks
text_df["embeddings"] = embeddings
return text_df
print("Embedding text chunks ...")
tu_delft_dataframe = generate_embeddings(tu_delft_dataframe)
## se stai usando Google Colab o un notebook Python, puoi
## cancellare la riga sopra e decommentare la seguente riga:
# tu_delft_dataframe = tu_delft_dataframe.progress_apply(generate_embeddings, axis=1)
tagConfigura la Ricerca Semantica Usando Faiss
Il codice seguente crea un database FAISS e inserisce i chunk e i vettori di embedding iterando su tu_delft_pandas:
import faiss
dim = 768 # dimensione degli embedding Jina v2
index_with_ids = faiss.IndexIDMap(faiss.IndexFlatIP(dim))
k = 0
doc_ref = dict()
for idx, row in tu_delft_dataframe.iterrows():
embeddings = row["embeddings"]
for i, embedding in enumerate(embeddings):
normalized_embedding = np.ascontiguousarray(np.array(embedding, dtype="float32").reshape(1, -1))
faiss.normalize_L2(normalized_embedding)
index_with_ids.add_with_ids(normalized_embedding, k)
doc_ref[k] = (row["chunks"][i], idx)
k += 1
tagAvvia l'Endpoint Jina Reranker v1
Come per il modello Jina Embedding v2 sopra, questo codice lancerà un'istanza di ml.g4dn.xlarge su AWS per eseguire il modello reranker. Analogamente, potrebbe richiedere diversi minuti per l'esecuzione.
import boto3
from jina_sagemaker import Client
# Scegli un nome per il tuo endpoint reranker. Può essere qualsiasi cosa conveniente.
reranker_endpoint_name = "jina_reranker"
reranker_client = Client(region_name=boto3.Session().region_name)
reranker_client.create_endpoint(
arn=reranker_package_arn,
role=role,
endpoint_name=reranker_endpoint_name,
instance_type="ml.g4dn.xlarge",
n_instances=1,
)
reranker_client.connect_to_endpoint(endpoint_name=reranker_endpoint_name)
tagDefinisci le Funzioni di Query
Successivamente, definiremo una funzione che identifica i chunk di trascrizione più simili a qualsiasi query di testo.
Questo è un processo in due fasi:
- Convertire l'input dell'utente in un vettore di embedding usando il metodo
embedding_client.embed(), proprio come abbiamo fatto nella fase di preparazione dei dati. - Passare l'embedding all'indice FAISS per recuperare le corrispondenze migliori. Nella funzione seguente, il default è restituire le 20 migliori corrispondenze, ma puoi controllare questo con il parametro
n.
La funzione find_most_similar_transcript_segment restituirà le migliori corrispondenze confrontando i coseni degli embedding memorizzati con l'embedding della query.
def find_most_similar_transcript_segment(query, n=20):
query_embedding = embedding_client.embed(texts=[query])[0]["embedding"] # Assumendo che la query sia abbastanza breve da non necessitare di chunking
query_embedding = np.ascontiguousarray(np.array(query_embedding, dtype="float32").reshape(1, -1))
faiss.normalize_L2(query_embedding)
D, I = index_with_ids.search(query_embedding, n) # Ottieni le prime n corrispondenze
results = []
for i in range(n):
distance = D[0][i]
index_id = I[0][i]
transcript_segment, doc_idx = doc_ref[index_id]
results.append((transcript_segment, doc_idx, distance))
# Ordina i risultati per distanza
results.sort(key=lambda x: x[2])
return [(tu_delft_dataframe.iloc[r[1]]["Title"].strip(), r[0]) for r in results]
Definiremo anche una funzione che accede all'endpoint reranker reranker_client, gli passa i risultati da find_most_similar_transcript_segment, e restituisce solo i tre risultati più rilevanti. Chiama l'endpoint reranker con il metodo reranker_client.rerank().
def rerank_results(query_found, query, n=3):
ret = reranker_client.rerank(
documents=[f[1] for f in query_found],
query=query,
top_n=n,
)
return [query_found[r['index']] for r in ret[0]['results']]
tagUsa JumpStart per Caricare Mistral-Instruct
Per questo tutorial, useremo il modello mistral-7b-instruct, che è disponibile tramite Amazon SageMaker JumpStart, come parte LLM del sistema RAG.

Esegui il seguente codice per caricare e distribuire Mistral-Instruct:
from sagemaker.jumpstart.model import JumpStartModel
jumpstart_model = JumpStartModel(model_id="huggingface-llm-mistral-7b-instruct", role=role)
model_predictor = jumpstart_model.deploy()
L'endpoint per accedere a questo LLM è memorizzato nella variabile model_predictor.
tagMistral-Instruct con JumpStart
Di seguito è riportato il codice per creare un template di prompt per Mistral-Instruct per questa applicazione utilizzando la classe template di stringhe integrata di Python. Assume che per ogni query ci siano tre chunk di trascrizione corrispondenti che verranno presentati al modello.
Puoi sperimentare con questo template per modificare questa applicazione o vedere se puoi ottenere risultati migliori.
from string import Template
prompt_template = Template("""
<s>[INST] Rispondi alla domanda seguente utilizzando solo il contesto fornito.
La domanda dell'utente si basa su trascrizioni di video da un canale YouTube.
Il contesto è presentato come un elenco ordinato di informazioni nella forma
(titolo-video, segmento-trascrizione), rilevante per rispondere alla
domanda dell'utente.
La risposta deve utilizzare solo il contesto presentato. Se la domanda non può
essere risposta in base al contesto, dillo.
Contesto:
1. Titolo-video: $title_1, segmento-trascrizione: $segment_1
2. Titolo-video: $title_2, segmento-trascrizione: $segment_2
3. Titolo-video: $title_3, segmento-trascrizione: $segment_3
Domanda: $question
Risposta: [/INST]
""")
Con questo componente in posizione, ora abbiamo tutte le parti di un'applicazione RAG completa.
tagInterrogare il Modello
L'interrogazione del modello è un processo in tre fasi.
- Cercare chunk rilevanti data una query.
- Assemblare il prompt.
- Inviare il prompt al modello Mistral-Instruct e restituire la sua risposta.
Per cercare chunk rilevanti, usiamo la funzione find_most_similar_transcript_segment che abbiamo definito sopra.
question = "Quando è stato commissionato il primo parco eolico offshore?"
search_results = find_most_similar_transcript_segment(question)
reranked_results = rerank_results(search_results, question)
È possibile ispezionare i risultati della ricerca in ordine di riallineamento:
for title, text, _ in reranked_results:
print(title + "\n" + text + "\n")
Risultato:
Offshore Wind Farm Technology - Course Introduction
Since the first offshore wind farm commissioned in 1991 in Denmark, scientists and engineers have adapted and improved the technology of wind energy to offshore conditions. This is a rapidly evolving field with installation of increasingly larger wind turbines in deeper waters. At sea, the challenges are indeed numerous, with combined wind and wave loads, reduced accessibility and uncertain-solid conditions. My name is Axel Vire, I'm an assistant professor in Wind Energy at U-Delf and specializing in offshore wind energy. This course will touch upon the critical aspect of wind energy, how to integrate the various engineering disciplines involved in offshore wind energy. Each week we will focus on a particular discipline and use it to design and operate a wind farm.
Offshore Wind Farm Technology - Course Introduction
I'm a researcher and lecturer at the Wind Energy and Economics Department and I will be your moderator throughout this course. That means I will answer any questions you may have. I'll strengthen the interactions between the participants and also I'll get you in touch with the lecturers when needed. The course is mainly developed for professionals in the field of offshore wind energy. We want to broaden their knowledge of the relevant technical disciplines and their integration. Professionals with a scientific background who are new to the field of offshore wind energy will benefit from a high-level insight into the engineering aspects of wind energy. Overall, the course will help you make the right choices during the development and operation of offshore wind farms.
Offshore Wind Farm Technology - Course Introduction
Designed wind turbines that better withstand wind, wave and current loads Identify great integration strategies for offshore wind turbines and gain understanding of the operational and maintenance of offshore wind turbines and farms We also hope that you will benefit from the course and from interaction with other learners who share your interest in wind energy And therefore we look forward to meeting you online.
Possiamo utilizzare queste informazioni direttamente nel template del prompt:
prompt_for_llm = prompt_template.substitute(
question = question,
title_1 = search_results[0][0],
segment_1 = search_results[0][1],
title_2 = search_results[1][0],
segment_2 = search_results[1][1],
title_3 = search_results[2][0],
segment_3 = search_results[2][1],
)
Stampa la stringa risultante per vedere quale prompt viene effettivamente inviato al LLM:
print(prompt_for_llm)
<s>[INST] Answer the question below only using the given context.
The question from the user is based on transcripts of videos from a YouTube
channel.
The context is presented as a ranked list of information in the form of
(video-title, transcript-segment), that is relevant for answering the
user's question.
The answer should only use the presented context. If the question cannot be
answered based on the context, say so.
Context:
1. Video-title: Offshore Wind Farm Technology - Course Introduction, transcript-segment: Since the first offshore wind farm commissioned in 1991 in Denmark, scientists and engineers have adapted and improved the technology of wind energy to offshore conditions. This is a rapidly evolving field with installation of increasingly larger wind turbines in deeper waters. At sea, the challenges are indeed numerous, with combined wind and wave loads, reduced accessibility and uncertain-solid conditions. My name is Axel Vire, I'm an assistant professor in Wind Energy at U-Delf and specializing in offshore wind energy. This course will touch upon the critical aspect of wind energy, how to integrate the various engineering disciplines involved in offshore wind energy. Each week we will focus on a particular discipline and use it to design and operate a wind farm.
2. Video-title: Offshore Wind Farm Technology - Course Introduction, transcript-segment: For example, we look at how to characterize the wind and wave conditions at a given location. How to best place the wind turbines in a farm and also how to retrieve the electricity back to shore. We look at the main design drivers for offshore wind turbines and their components. We'll see how these aspects influence one another and the best choices to reduce the cost of energy. This course is organized by the two-delfd wind energy institute, an interfaculty research organization focusing specifically on wind energy. You will therefore benefit from the expertise of the lecturers in three different faculties of the university. Aerospace engineering, civil engineering and electrical engineering. Hi, my name is Ricardo Pareda.
3. Video-title: Systems Analysis for Problem Structuring part 1B the mono actor perspective example, transcript-segment: So let's assume the demarcation of the problem and the analysis of objectives has led to the identification of three criteria. The security of supply, the percentage of offshore power generation and the costs of energy provision. We now reason backwards to explore what factors have an influence on these system outcomes. Really, the offshore percentage is positively influenced by the installed Wind Power capacity at sea, a key system factor. Capacity at sea in turn is determined by both the size and the number of wind farms at sea. The Ministry of Economic Affairs cannot itself invest in new wind farms but hopes to simulate investors and energy companies by providing subsidies and by expediting the granting process of licenses as needed.
Question: When was the first offshore wind farm commissioned?
Answer: [/INST]
Passa questo prompt all'endpoint LLM — model_predictor — tramite il metodo model_predictor.predict():
answer = model_predictor.predict({"inputs": prompt_for_llm})
Questo restituisce una lista, ma poiché abbiamo passato un solo prompt, sarà una lista con una sola voce. Ogni voce è un dict con il testo della risposta sotto la chiave generated_text:
answer = answer[0]['generated_text']
print(answer)
Risultato:
The first offshore wind farm was commissioned in 1991. (Context: Video-title: Offshore Wind Farm Technology - Course Introduction, transcript-segment: Since the first offshore wind farm commissioned in 1991 in Denmark, ...)
Semplifichiamo l'interrogazione scrivendo una funzione che esegua tutti i passaggi: prendendo la domanda come stringa come parametro e restituendo la risposta come stringa:
def ask_rag(question):
search_results = find_most_similar_transcript_segment(question)
reranked_results = rerank_results(search_results, question)
prompt_for_llm = prompt_template.substitute(
question = question,
title_1 = search_results[0][0],
segment_1 = search_results[0][1],
title_2 = search_results[1][0],
segment_2 = search_results[1][1],
title_3 = search_results[2][0],
segment_3 = search_results[2][1],
)
answer = model_predictor.predict({"inputs": prompt_for_llm})
return answer[0]["generated_text"]
Ora possiamo fargli alcune domande in più. Le risposte dipenderanno dal contenuto delle trascrizioni video. Ad esempio, possiamo fare domande dettagliate quando la risposta è presente nei dati e ottenere una risposta:
ask_rag("What is a Kaplan Meyer estimator?")
The Kaplan Meyer estimator is a non-parametric estimator for the survival
function, defined for both censored and not censored data. It is represented
as a series of declining horizontal steps that approaches the truths of the
survival function if the sample size is sufficiently large enough. The value
of the empirical survival function obtained is assumed to be constant between
two successive distinct observations.
ask_rag("Who is Reneville Solingen?")
Reneville Solingen is a professor at Delft University of Technology in Global
Software Engineering. She is also a co-author of the book "The Power of Scrum."
answer = ask_rag("What is the European Green Deal?")
print(answer)
The European Green Deal is a policy initiative by the European Union to combat
climate change and decarbonize the economy, with a goal to make Europe carbon
neutral by 2050. It involves the use of green procurement strategies in various
sectors, including healthcare, to reduce carbon emissions and promote corporate
social responsibility.
Possiamo anche fare domande che sono al di fuori dell'ambito delle informazioni disponibili:
ask_rag("What countries export the most coffee?")
Based on the context provided, there is no clear answer to the user's
question about which countries export the most coffee as the context
only discusses the Delft University's cafeteria discounts and sustainable
coffee options, as well as lithium production and alternatives for use in
electric car batteries.
ask_rag("How much wood could a woodchuck chuck if a woodchuck could chuck wood?")
The context does not provide sufficient information to answer the question.
The context is about thermit welding of rails, stress concentration factors,
and a lyrics video. There is no mention of woodchucks or the ability of
woodchuck to chuck wood in the context.
Prova le tue query. Puoi anche modificare il modo in cui viene sollecitato il LLM per vedere se ciò migliora i tuoi risultati.
tagArresto
Poiché vieni fatturato a ore per i modelli che utilizzi e per l'infrastruttura AWS per eseguirli, è molto importante arrestare tutti e tre i modelli AI quando termini questo tutorial:
- L'endpoint del modello di embedding
embedding_client - L'endpoint del modello reranker
reranker_client - L'endpoint del modello linguistico di grandi dimensioni
model_predictor
Per arrestare tutti e tre gli endpoint del modello, esegui il seguente codice:
# shut down the embedding endpoint
embedding_client.delete_endpoint()
embedding_client.close()
# shut down the reranker endpoint
reranker_client.delete_endpoint()
reranker_client.close()
# shut down the LLM endpoint
model_predictor.delete_model()
model_predictor.delete_endpoint()
tagInizia ora con i modelli Jina AI su AWS Marketplace
Con i nostri modelli di embedding e reranking su SageMaker, gli utenti enterprise di AI su AWS hanno ora accesso istantaneo alla straordinaria proposta di valore di Jina AI senza compromettere i benefici delle loro operazioni cloud esistenti. Tutta la sicurezza, l'affidabilità, la consistenza e i prezzi prevedibili di AWS sono integrati.
A Jina AI, stiamo lavorando duramente per portare lo stato dell'arte alle aziende che possono beneficiare dell'introduzione dell'AI nei loro processi esistenti. Ci sforziamo di offrire modelli solidi, affidabili e ad alte prestazioni a prezzi accessibili tramite interfacce convenienti e pratiche, minimizzando i vostri investimenti in AI mentre massimizziamo i vostri rendimenti.
Visita la pagina di Jina AI su AWS Marketplace per un elenco di tutti i modelli di embedding e reranker che offriamo e per provare i nostri modelli gratuitamente per sette giorni.

Ci piacerebbe conoscere i vostri casi d'uso e parlare di come i prodotti di Jina AI possano adattarsi alle esigenze del vostro business. Contattateci tramite il nostro sito web o il nostro canale Discord per condividere il vostro feedback e rimanere aggiornati sui nostri ultimi modelli.









