Jina Embeddings и Jina Reranker теперь доступны для использования с Amazon SageMaker через AWS Marketplace. Для корпоративных пользователей, которые высоко ценят безопасность, надежность и согласованность в своих облачных операциях, это размещает передовые AI-решения Jina AI в их частных развертываниях AWS, где они могут пользоваться всеми преимуществами проверенной, стабильной инфраструктуры AWS.
Благодаря полному набору моделей для embeddings и reranking в AWS Marketplace, пользователи SageMaker могут воспользоваться революционными окнами входного контекста размером 8k и ведущими многоязычными embeddings по конкурентным ценам. Вам не нужно платить за передачу моделей в AWS или из него, цены прозрачны, а выставление счетов интегрировано с вашей учетной записью AWS.
Модели, доступные в настоящее время на Amazon SageMaker, включают:
- Jina Embeddings v2 Base - English
- Jina Embeddings v2 Small - English
- Двуязычные модели Jina Embeddings v2:
- Jina Embeddings v2 Base - Code
- Jina Reranker v1 Base - English
- Jina ColBERT v1 - English
- Jina ColBERT Reranker v1 - English
Полный список моделей смотрите на странице поставщика Jina AI в AWS Marketplace и воспользуйтесь семидневным бесплатным пробным периодом.

В этой статье мы рассмотрим создание приложения Retrieval-augmented generation (RAG) исключительно с использованием компонентов Amazon SageMaker. Мы будем использовать модели Jina Embeddings v2 - English, Jina Reranker v1 и языковую модель Mistral-7B-Instruct.
Вы также можете следовать инструкциям в Python Notebook, который можно скачать или запустить в Google Colab.
tagRetrieval-Augmented Generation
Retrieval-augmented generation — это альтернативная парадигма в генеративном AI. Вместо того чтобы использовать большие языковые модели (LLM) для прямого ответа на запросы пользователей на основе того, что было изучено при обучении, она использует их способность к плавному производству языка, перенося логику и поиск информации во внешний аппарат, более подходящий для этого.
Перед вызовом LLM системы RAG активно извлекают релевантную информацию из какого-либо внешнего источника данных и затем передают ее в LLM как часть промпта. Роль LLM заключается в синтезе внешней информации в связный ответ на запросы пользователей, минимизируя риск галлюцинаций и повышая релевантность и полезность результата.
Схематично система RAG имеет как минимум четыре компонента:
- Источник данных, обычно векторная база данных, подходящая для поиска информации с помощью AI.
- Система поиска информации, которая обрабатывает запрос пользователя как поисковый запрос и извлекает данные, релевантные для ответа на него.
- Система, часто включающая AI-based reranker, которая выбирает часть извлеченных данных и обрабатывает их в промпт для LLM.
- LLM, например, одна из моделей GPT или модель с открытым исходным кодом, как Mistral, которая принимает запрос пользователя и предоставленные ей данные и генерирует ответ для пользователя.
Модели embeddings хорошо подходят для поиска информации и часто используются для этой цели. Модель текстовых embeddings принимает тексты в качестве входных данных и выводит embedding — высокоразмерный вектор, пространственное отношение которого к другим embeddings указывает на их семантическое сходство, т.е. схожие темы, содержание и связанные значения. Они часто используются при поиске информации, поскольку чем ближе embeddings, тем вероятнее пользователь будет доволен ответом. Их также относительно легко дообучить для улучшения производительности в конкретных областях.
Модели text reranker используют аналогичные принципы AI для сравнения коллекций текстов с запросом и сортировки их по семантическому сходству. Использование специализированной модели reranker вместо опоры только на модель embeddings часто значительно повышает точность результатов поиска. Reranker в приложении RAG выбирает некоторые результаты поиска информации, чтобы максимизировать вероятность того, что правильная информация содержится в промпте для LLM.

tagТестирование производительности моделей Embedding как конечных точек SageMaker
Мы протестировали производительность и надежность модели Jina Embeddings v2 Base - English в качестве конечной точки SageMaker, работающей на инстансе g4dn.xlarge. В этих экспериментах мы непрерывно добавляли по одному новому пользователю каждую секунду, каждый из которых отправлял запрос, ждал ответа и повторял после его получения.
- Для запросов менее 100 токенов, при количестве до 150 одновременных пользователей, время ответа на запрос оставалось ниже 100 мс. Затем время ответа линейно увеличивалось от 100 мс до 1500 мс с появлением большего числа одновременных пользователей.
- При примерно 300 одновременных пользователях мы получили более 5 сбоев от API и завершили тест.
- Для запросов от 1K до 8K токенов, при количестве до 20 одновременных пользователей, время ответа на запрос оставалось ниже 8 секунд. Затем время ответа линейно увеличивалось от 8 до 60 секунд с появлением большего числа одновременных пользователей.
- При примерно 140 одновременных пользователях мы получили более 5 сбоев от API и завершили тест.

На основании этих результатов можно сделать вывод, что для большинства пользователей с обычными задачами по встраиванию инстансы g4dn.xlarge или g5.xlarge должны удовлетворять их ежедневные потребности. Однако для крупных задач по индексированию, которые обычно выполняются гораздо реже, чем задачи поиска, пользователи могут предпочесть более производительный вариант. Полный список доступных инстансов Sagemaker можно найти в обзоре AWS EC2.
tagНастройка учетной записи AWS
Сначала вам понадобится учетная запись AWS. Если у вас еще нет учетной записи AWS, вы можете зарегистрироваться на сайте AWS.
tagНастройка инструментов AWS в вашей среде Python
Установите в вашей среде Python инструменты и библиотеки AWS, необходимые для этого учебника:
pip install awscli jina-sagemaker
Вам понадобится получить ключ доступа и секретный ключ доступа для вашей учетной записи AWS. Для этого следуйте инструкциям на сайте AWS.

Также вам нужно будет выбрать регион AWS для работы.

Затем установите значения в переменных окружения. В Python или в блокноте Python вы можете сделать это с помощью следующего кода:
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"
Установите формат вывода по умолчанию как json.
Вы также можете сделать это через командное приложение AWS или путем настройки конфигурационного файла AWS в вашей локальной файловой системе. Дополнительные сведения см. в документации на сайте AWS.
tagСоздание роли
Вам также понадобится роль AWS с достаточными разрешениями для использования ресурсов, необходимых для этого учебника.
Эта роль должна:
- Иметь включенный доступ AmazonSageMakerFullAccess.
- Либо:
- Иметь полномочия на подписку AWS Marketplace и иметь включенные все три разрешения:
- aws-marketplace:ViewSubscriptions
- aws-marketplace:Unsubscribe
- aws-marketplace:Subscribe
- Либо ваша учетная запись AWS должна иметь подписку на jina-embedding-model.
- Иметь полномочия на подписку AWS Marketplace и иметь включенные все три разрешения:
Сохраните ARN (Amazon Resource Name) роли в переменной с именем role:
role = <YOUR_ROLE_ARN>
Дополнительную информацию см. в документации по ролям на сайте AWS.
tagПодписка на модели Jina AI на AWS Marketplace
В этой статье мы будем использовать модель Jina Embeddings v2 base English. Подпишитесь на неё на AWS Marketplace.

Информацию о ценах вы увидите, прокрутив страницу вниз. AWS взимает почасовую плату за модели из marketplace, поэтому вам будет выставлен счет за время с момента запуска конечной точки модели до её остановки. В этой статье мы покажем вам, как сделать и то, и другое.
Мы также будем использовать модель Jina Reranker v1 - English, на которую вам нужно будет подписаться.

После подписки получите ARN моделей для вашего региона AWS и сохраните их в переменных embedding_package_arn и reranker_package_arn соответственно. Код в этом руководстве будет ссылаться на них, используя эти имена переменных.
Если вы не знаете, как получить ARN, поместите название вашего региона Amazon в переменную region и используйте следующий код:
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")
tagЗагрузка набора данных
В этом руководстве мы будем использовать коллекцию видео с YouTube-канала TU Delft Online Learning. Этот канал производит различные образовательные материалы по предметам STEM. Его программирование лицензировано по CC-BY.
Мы загрузили 193 видео с канала и обработали их с помощью модели распознавания речи Whisper с открытым исходным кодом от OpenAI. Мы использовали самую маленькую модель openai/whisper-tiny для преобразования видео в транскрипты.
Транскрипты были организованы в CSV-файл, который вы можете скачать отсюда.
Каждая строка файла содержит:
- Название видео
- URL видео на YouTube
- Текстовую расшифровку видео
Чтобы загрузить эти данные в Python, сначала установите pandas и requests:
pip install requests pandas
Загрузите данные CSV непосредственно в DataFrame Pandas с именем tu_delft_dataframe:
import pandas
# Load the CSV file
tu_delft_dataframe = pandas.read_csv("https://raw.githubusercontent.com/jina-ai/workshops/feat-sagemaker-post/notebooks/embeddings/sagemaker/tu_delft.csv")
Вы можете проверить содержимое, используя метод DataFrame head(). В ноутбуке это должно выглядеть примерно так:

Вы также можете посмотреть видео, используя URL-адреса из этого набора данных, и убедиться, что распознавание речи несовершенно, но в основном верно.
tagЗапуск конечной точки Jina Embeddings v2
Приведенный ниже код запустит экземпляр ml.g4dn.xlarge на AWS для запуска модели встраивания. Это может занять несколько минут.
import boto3
from jina_sagemaker import Client
# Choose a name for your embedding endpoint. It can be anything convenient.
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)
Измените instance_type, чтобы выбрать другой тип облачного экземпляра AWS, если это необходимо.
tagСоздание и индексация набора данных
Теперь, когда мы загрузили данные и запустили модель Jina Embeddings v2, мы можем подготовить и проиндексировать данные. Мы будем хранить данные в векторном хранилище FAISS, векторной базе данных с открытым исходным кодом, специально разработанной для приложений ИИ.
Сначала установите оставшиеся предварительные требования для нашего RAG-приложения:
pip install tdqm numpy faiss-cpu
tagРазбиение на чанки
Нам нужно будет взять отдельные транскрипты и разбить их на более мелкие части, т.е. "чанки", чтобы мы могли поместить несколько текстов в промпт для LLM. Приведенный ниже код разбивает отдельные транскрипты на границах предложений, гарантируя, что все чанки по умолчанию содержат не более 128 слов.
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() + "."tagПолучение Embeddings для каждого чанка
Нам нужен embedding для каждого чанка, чтобы сохранить его в базе данных FAISS. Чтобы получить их, мы передаем текстовые чанки в конечную точку модели embeddings Jina AI, используя метод embedding_client.embed(). Затем мы добавляем текстовые чанки и векторы embeddings в pandas dataframe tu_delft_dataframe как новые столбцы chunks и 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)
## если вы используете Google Colab или Python notebook,
## удалите строку выше и раскомментируйте следующую строку:
# tu_delft_dataframe = tu_delft_dataframe.progress_apply(generate_embeddings, axis=1)
tagНастройка семантического поиска с помощью Faiss
Код ниже создает базу данных FAISS и вставляет чанки и векторы embeddings путем итерации по tu_delft_pandas:
import faiss
dim = 768 # размерность embeddings 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
tagЗапуск конечной точки Jina Reranker v1
Как и в случае с моделью Jina Embedding v2 выше, этот код запустит экземпляр ml.g4dn.xlarge на AWS для работы модели ранжирования. Аналогично, выполнение может занять несколько минут.
import boto3
from jina_sagemaker import Client
# Выберите имя для вашей конечной точки ранжирования. Это может быть любое удобное имя.
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)
tagОпределение функций запроса
Далее мы определим функцию, которая находит наиболее похожие чанки транскрипции для любого текстового запроса.
Это двухэтапный процесс:
- Преобразование пользовательского ввода в вектор embedding используя метод
embedding_client.embed(), как мы делали на этапе подготовки данных. - Передача embedding в индекс FAISS для получения лучших совпадений. В функции ниже по умолчанию возвращаются 20 лучших совпадений, но вы можете управлять этим с помощью параметра
n.
Функция find_most_similar_transcript_segment вернет лучшие совпадения путем сравнения косинусов сохраненных embeddings с embedding запроса.
def find_most_similar_transcript_segment(query, n=20):
query_embedding = embedding_client.embed(texts=[query])[0]["embedding"] # Предполагается, что запрос достаточно короткий и не требует разбиения на чанки
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) # Получаем top n совпадений
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))
# Сортируем результаты по расстоянию
results.sort(key=lambda x: x[2])
return [(tu_delft_dataframe.iloc[r[1]]["Title"].strip(), r[0]) for r in results]
Мы также определим функцию, которая обращается к конечной точке ранжирования reranker_client, передает ей результаты из find_most_similar_transcript_segment и возвращает только три наиболее релевантных результата. Она вызывает конечную точку ранжирования с помощью метода 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']]
tagИспользование JumpStart для загрузки Mistral-Instruct
Для этого руководства мы будем использовать модель mistral-7b-instruct, которая доступна через Amazon SageMaker JumpStart, как часть LLM системы RAG.

Запустите следующий код для загрузки и развертывания 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()
Конечная точка для доступа к этой LLM сохраняется в переменной model_predictor.
tagMistral-Instruct с JumpStart
Ниже приведен код для создания шаблона промпта для Mistral-Instruct для этого приложения с использованием встроенного класса шаблонов строк Python. Предполагается, что для каждого запроса есть три соответствующих чанка транскрипции, которые будут представлены модели.
Вы можете экспериментировать с этим шаблоном самостоятельно, чтобы модифицировать это приложение или попробовать получить лучшие результаты.
from string import Template
prompt_template = Template("""
<s>[INST] Ответьте на вопрос ниже, используя только предоставленный контекст.
Вопрос пользователя основан на транскриптах видео с YouTube-канала.
Контекст представлен в виде ранжированного списка информации в формате
(название-видео, сегмент-транскрипта), который релевантен для ответа на
вопрос пользователя.
В ответе следует использовать только представленный контекст. Если на вопрос
нельзя ответить на основе контекста, скажите об этом.
Контекст:
1. Название видео: $title_1, сегмент транскрипта: $segment_1
2. Название видео: $title_2, сегмент транскрипта: $segment_2
3. Название видео: $title_3, сегмент транскрипта: $segment_3
Вопрос: $question
Ответ: [/INST]
""")
С этим компонентом у нас теперь есть все части полного RAG-приложения.
tagЗапросы к модели
Запрос к модели - это трехэтапный процесс.
- Поиск релевантных чанков для заданного запроса.
- Сборка промпта.
- Отправка промпта модели Mistral-Instruct и получение ответа.
Для поиска релевантных чанков мы используем функцию find_most_similar_transcript_segment, которую мы определили выше.
question = "Когда была введена в эксплуатацию первая морская ветряная электростанция?"
search_results = find_most_similar_transcript_segment(question)
reranked_results = rerank_results(search_results, question)
Вы можете просмотреть результаты поиска в переранжированном порядке:
for title, text, _ in reranked_results:
print(title + "\n" + text + "\n")
Результат:
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.
Мы можем использовать эту информацию непосредственно в шаблоне запроса:
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],
)
Выведем получившуюся строку, чтобы увидеть, какой запрос фактически отправляется в 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]
Передаем этот запрос в конечную точку LLM — model_predictor — через метод model_predictor.predict():
answer = model_predictor.predict({"inputs": prompt_for_llm})
Это возвращает список, но поскольку мы передали только один запрос, это будет список с одним элементом. Каждый элемент представляет собой dict с текстом ответа под ключом generated_text:
answer = answer[0]['generated_text']
print(answer)
Результат:
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, ...)
Давайте упростим запросы, написав функцию, которая выполняет все шаги: принимает строковый вопрос в качестве параметра и возвращает ответ в виде строки:
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"]
Теперь мы можем задать ещё несколько вопросов. Ответы будут зависеть от содержания видео-транскриптов. Например, мы можем задавать детальные вопросы, когда ответ присутствует в данных, и получать ответ:
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.
Мы также можем задавать вопросы, выходящие за рамки доступной информации:
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.
Попробуйте свои собственные запросы. Вы также можете изменить способ запроса к LLM, чтобы увидеть, улучшит ли это ваши результаты.
tagЗавершение работы
Поскольку вам выставляется счет почасово за используемые модели и инфраструктуру AWS для их запуска, очень важно остановить все три модели AI, когда вы закончите этот учебник:
- Конечную точку модели встраивания
embedding_client - Конечную точку модели переранжирования
reranker_client - Конечную точку большой языковой модели
model_predictor
Чтобы отключить все три конечные точки модели, выполните следующий код:
# 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()
tagНачните работу с моделями Jina AI на AWS Marketplace прямо сейчас
Благодаря нашим моделям встраивания и переранжирования на SageMaker, корпоративные пользователи AI на AWS теперь имеют мгновенный доступ к выдающемуся ценностному предложению Jina AI без ущерба для преимуществ их существующих облачных операций. Все преимущества безопасности, надежности, согласованности и предсказуемого ценообразования AWS встроены изначально.
В Jina AI мы усердно работаем над тем, чтобы предоставить современные технологии бизнесу, который может извлечь выгоду из внедрения AI в свои существующие процессы. Мы стремимся предлагать надежные, высокопроизводительные модели по доступным ценам через удобные и практичные интерфейсы, минимизируя ваши инвестиции в AI при максимизации отдачи.
Посетите страницу Jina AI на AWS Marketplace, чтобы увидеть список всех моделей встраивания и переранжирования, которые мы предлагаем, и попробовать наши модели бесплатно в течение семи дней.









