Серия практических занятий! Создавайте приложения RAG с помощью Zilliz Cloud и AWS Bedrock.

Поисковая дополненная генерация (RAG) — это платформа искусственного интеллекта, которая улучшает генерацию текста за счет сочетания возможностей поиска информации и обработки естественного языка (NLP). В частности, языковая модель в системе RAG запрашивает и осуществляет поиск в базе знаний или внешней базе данных с помощью механизма поиска, который включает самую свежую информацию в сгенерированный ответ, что делает окончательный результат более точным и содержащим больше контекста.

Zilliz Cloud ( https://zilliz.com.cn/cloud) построен на векторной базе данных Milvus ( https://milvus.io/) и предоставляет решения для хранения и обработки крупномасштабных векторизованных данных, которые можно использовать для эффективное управление и анализ и получение данных. Разработчики могут использовать функцию базы данных векторов Zilliz Cloud для хранения и поиска больших векторов встраивания, что еще больше расширяет возможности модулей поиска в приложениях RAG.

Облачный сервис AWS Bedrock ( https://aws.amazon.com/cn/bedrock/) предоставляет множество предварительно обученных базовых моделей, которые можно использовать для развертывания и расширения решений НЛП. Разработчики могут интегрировать модели генерации, понимания и перевода языков в приложения искусственного интеллекта с помощью AWS Bedrock. Кроме того, AWS Bedrock может генерировать релевантные и контекстно-ориентированные ответы на текст, что еще больше расширяет возможности приложений RAG.

01. Используйте Zilliz Cloud и AWS Bedrock для создания приложений RAG.

Мы продемонстрируем , как использовать Zilliz Cloud с AWS Bedrock, создающим приложения RAG. Основной процесс показан на рисунке 1:

Рис. 1. Базовый процесс создания приложения RAG с использованием Zilliz Cloud и AWS Bedrock.

#download the packages then import them
! pip install --upgrade --quiet  langchain langchain-core langchain-text-splitters langchain-community langchain-aws bs4 boto3

# For example
import bs4
import boto3

Подключитесь к AWS Bedrock и Zilliz Cloud

Затем установите переменные среды, необходимые для подключения к облачным сервисам AWS и Zilliz. Для подключения к сервисам AWS Bedrock и Zilliz Cloud вам необходимо предоставить регион обслуживания AWS, ключ доступа, а также URI конечной точки Zilliz Cloud и ключ API.

# Set the AWS region and access key environment variables
REGION_NAME = "us-east-1"
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")

# Set ZILLIZ cloud environment variables
ZILLIZ_CLOUD_URI = os.getenv("ZILLIZ_CLOUD_URI")
ZILLIZ_CLOUD_API_KEY = os.getenv("ZILLIZ_CLOUD_API_KEY")

Используя предоставленные выше учетные данные доступа, мы создали клиент boto3 ( https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) для подключения к сервису AWS Bedrock Runtime и интеграции языковой модели AWS Bedrock в . Затем мы инициализируем экземпляр ChatBedrock ( https://python.langchain.com/v0.1/docs/integrations/chat/bedrock/), подключаемся к клиенту и указываем языковую модель, которую будем использовать. Модель , которую мы используем в этом уроке anthropic.claude-3-sonnet-20240229-v1:0 . Этот шаг помогает нам настроить инфраструктуру для генерации текстовых ответов, а также настроить температурные параметры модели для управления разнообразием генерируемых ответов. Экземпляры BedrockEmbeddings можно использовать для преобразования неструктурированных данных, таких как текст ( https://zilliz.com.cn/glossary/%E9%9D%9E%E7%BB%93%E6%9E%84%E5%8C%96% E6 %95%B0%E6%8D%AE) в вектор.

# Create a boto3 client with the specified credentials
client = boto3.client(
    "bedrock-runtime",
    region_name=REGION_NAME,
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)

# Initialize the ChatBedrock instance for language model operations
llm = ChatBedrock(
    client=client,
    model_id="anthropic.claude-3-sonnet-20240229-v1:0",
    region_name=REGION_NAME,
    model_kwargs={"temperature": 0.1},
)

# Initialize the BedrockEmbeddings instance for handling text embeddings
embeddings = BedrockEmbeddings(client=client, region_name=REGION_NAME)

Собирать и обрабатывать информацию

После успешной инициализации модели внедрения следующим шагом будет загрузка данных из внешнего источника. Создайте экземпляр WebBaseLoader ( https://python.langchain.com/v0.1/docs/integrations/document_loaders/web_base/) для обхода контента из указанного веб-источника.

В этом уроке мы загрузим контент из статей, связанных с AI-агентами. Загрузчик использует SoupStrainer от BeautifulSoup (https://www.crummy.com/software/BeautifulSoup/bs4/doc/) для анализа определенных частей веб-страницы, а именно: «post-content», «post-title» и «post-title». post"-header", чтобы обеспечить получение только релевантного контента. Затем загрузчик извлекает документ из указанного сетевого источника, предоставляя список связанного контента для последующей обработки. Затем мы используем экземпляр RecursiveCharacterTextSplitter ( https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/), чтобы разделить полученный документ на более мелкие текстовые фрагменты. Это может сделать контент более управляемым, а также может передавать эти текстовые блоки в другие компоненты, такие как модули встраивания текста или модули генерации языка.

# Create a WebBaseLoader instance to load documents from web sources
loader = WebBaseLoader(
    web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            class_=("post-content", "post-title", "post-header")
        )
    ),
)
# Load documents from web sources using the loader
documents = loader.load()
# Initialize a RecursiveCharacterTextSplitter for splitting text into chunks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)


# Split the documents into chunks using the text_splitter
docs = text_splitter.split_documents(documents)

Создать ответ

Шаблон подсказки заранее определяет структуру каждого ответа, что может помочь ИИ использовать статистику и цифры, когда это возможно, и избегать придумывания ответов при отсутствии соответствующих знаний.

# Define the prompt template for generating AI responses
PROMPT_TEMPLATE = """
Human: You are a financial advisor AI system, and provides answers to questions by using fact based and statistical information when possible.
Use the following pieces of information to provide a concise answer to the question enclosed in <question> tags.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
<context>
{context}
</context>

<question>
{question}
</question>

The response should be specific and use statistics or numbers when possible.

Assistant:"""
# Create a PromptTemplate instance with the defined template and input variables
prompt = PromptTemplate(
    template=PROMPT_TEMPLATE, input_variables=["context", "question"]
)

Инициализируйте векторное хранилище Zilliz и подключитесь к платформе Zilliz Cloud. Хранилище векторов отвечает за преобразование документов в векторы для последующего быстрого и эффективного поиска документов. Полученные документы затем форматируются и организуются в связный текст, а ИИ интегрирует соответствующую информацию в ответы, в конечном итоге предоставляя очень точные и актуальные ответы.

# Initialize Zilliz vector store from the loaded documents and embeddings
vectorstore = Zilliz.from_documents(
    documents=docs,
    embedding=embeddings,
    connection_args={
        "uri": ZILLIZ_CLOUD_URI,
        "token": ZILLIZ_CLOUD_API_KEY,
        "secure": True,
    },
    auto_id=True,
    drop_old=True,
)

# Create a retriever for document retrieval and generation
retriever = vectorstore.as_retriever()

# Define a function to format the retrieved documents
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

Наконец, мы создаем полную ссылку RAG для генерации ответов ИИ. Эта ссылка сначала извлекает документы, связанные с пользовательским запросом, из векторного хранилища, извлекает и форматирует их, а затем передает их в шаблон приглашения ( https://python.langchain.com/v0.1/docs/modules/model_io/ Prompts /) для создания структуры ответа. Этот структурированный ввод затем передается в языковую модель для генерации связного ответа, который в конечном итоге анализируется в строковом формате и представляется пользователю, предоставляя точный, контекстно-богатый ответ.

# Define the RAG (Retrieval-Augmented Generation) chain for AI response generation
rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# rag_chain.get_graph().print_ascii()

# Invoke the RAG chain with a specific question and retrieve the response
res = rag_chain.invoke("What is self-reflection of an AI Agent?")
print(res)

Ниже приведен пример результата ответа:

Self-reflection is a vital capability that allows autonomous AI agents to improve iteratively by analyzing and refining their past actions, decisions, and mistakes. Some key aspects of self-reflection for AI agents include:
1. Evaluating the efficiency and effectiveness of past reasoning trajectories and action sequences to identify potential issues like inefficient planning or hallucinations (generating consecutive identical actions without progress).
2. Synthesizing observations and memories from past experiences into higher-level inferences or summaries to guide future behavior.

02. Преимущества использования Zilliz Cloud и AWS Bedrock

Как показано в Таблице 1, Zilliz Cloud можно легко интегрировать с AWS Bedrock для повышения эффективности, масштабируемости и точности приложений RAG. Разработчики могут использовать эти две службы для разработки комплексных решений, которые обрабатывают огромные наборы данных, упрощают процессы применения RAG и повышают точность ответов, генерируемых RAG.

Таблица 1. Преимущества использования Zilliz Cloud и AWS Bedrock

03. Резюме

В этой статье в основном рассказывается, как использовать Zilliz Cloud и AWS Bedrock для создания приложений RAG.

Zilliz Cloud, векторная база данных, созданная на основе Milvus, предоставляет масштабируемые решения для хранения и извлечения векторов для встраивания, а AWS Bedrock предоставляет мощную предварительно обученную модель для генерации языков. В примере кода мы покажем, как подключаться к Zilliz Cloud и AWS Bedrock, загружать данные из внешних источников, обрабатывать и разделять данные и, наконец, создавать полную ссылку RAG. Приложение RAG, созданное в этой статье, может минимизировать вероятность того, что LLM будет вызывать галлюцинации и давать неточные ответы, обеспечивая полную синергию между современными моделями НЛП и векторными базами данных. Мы надеемся, что это руководство вдохновит других использовать аналогичные методы при создании приложений RAG.

Старшеклассники создают свой собственный язык программирования с открытым исходным кодом в качестве церемонии совершеннолетия – резкие комментарии пользователей сети: Опираясь на защиту, Apple выпустила чип M4 RustDesk. Внутренние услуги были приостановлены из-за безудержного мошенничества. Юнфэн ушел из Alibaba. В будущем он планирует выпустить независимую игру на платформе Windows Taobao (taobao.com). Возобновить работу по оптимизации веб-версии, место назначения программистов, Visual Studio Code 1.89 выпускает Java 17, наиболее часто используемую версию Java LTS, в Windows 10 есть доля рынка составляет 70%, Windows 11 продолжает снижаться. Open Source Daily | Google поддерживает Hongmeng, чтобы взять на себя управление; Rabbit R1 с открытым исходным кодом поддерживает телефоны Android. Microsoft Haier Electric закрыла открытую платформу;
{{o.name}}
{{м.имя}}

рекомендация

отmy.oschina.net/u/4209276/blog/11105831