Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Crie um Chatbot Empresarial com o Oracle Digital Assistant, OCI Data Science, LangChain e Oracle Database 23ai
Introdução
No cenário digital atual, os chatbots estão evoluindo para se tornarem mais inteligentes, responsivos e capazes de lidar com interações complexas. Neste tutorial, aprofundamos a criação de um chatbot de última geração aproveitando o poder dos recursos do Oracle Cloud Infrastructure (OCI) Data Science, como AI Quick Actions e Model Deployment, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain e Oracle Digital Assistant. Cada uma dessas tecnologias traz pontos fortes únicos para a mesa, permitindo-nos construir um chatbot que não só entende e responde às consultas dos usuários com precisão notável, mas também oferece uma experiência de conversação perfeita e envolvente.
Um dos recursos de destaque do Oracle Database 23ai são seus recursos avançados de pesquisa vetorial. Esta tecnologia permite a recuperação eficiente de informações, convertendo texto em vetores de alta dimensão, que são então comparados por relevância. Quando integrada ao pipeline de geração aumentada de recuperação (RAG), a pesquisa vetorial do Oracle Database 23ai aprimora a capacidade do chatbot de acessar e fornecer as informações mais pertinentes de vastos conjuntos de dados. Isso garante que as respostas geradas não sejam apenas contextualmente precisas, mas também altamente relevantes para a consulta do usuário.
O Oracle Digital Assistant eleva ainda mais a funcionalidade do chatbot, fornecendo uma plataforma robusta para criar, implementar e gerenciar soluções de IA conversacional. Ele oferece conectores pré-construídos, compreensão de linguagem natural (NLU) e gerenciamento de diálogo, que agilizam o processo de desenvolvimento e garantem uma experiência de usuário tranquila. A combinação do Oracle Digital Assistant com o pipeline de RAG permite que o chatbot lide com interações complexas e mantenha um fluxo natural de conversas, melhorando assim o envolvimento e a satisfação do usuário.
Aproveitando a sinergia do Oracle Database 23ai e do Oracle Digital Assistant no pipeline de RAG, os desenvolvedores podem criar um chatbot que se destaca na precisão da recuperação e na fluidez conversacional. Essa abordagem integrada não apenas reduz o tempo e o esforço necessários para criar chatbots sofisticados, mas também resulta em uma solução escalável, eficiente e capaz de oferecer experiências de usuário superiores. Se você é um desenvolvedor, um entusiasta de tecnologia ou um líder de negócios que procura melhorar o envolvimento do cliente, este tutorial irá equipá-lo com o conhecimento e as ferramentas para construir um chatbot avançado que se destaca na arena digital lotada.
Para obter o passo a passo do processo, consulte repositório GitHub de amostras de IA.
Casos de Uso
Aqui estão alguns exemplos de casos de uso em que isso pode ser útil:
-
Suporte Personalizado ao Cliente: Consultar os guias, bem como o histórico do cliente, pode criar uma visão melhor dos problemas do cliente e ajudar a diagnosticar e resolver o problema mais rapidamente.
-
Otimização da Cadeia de Suprimentos: a consulta de dados de fornecedores com dados internos de pedidos ou remessas de negócios pode resultar em uma melhor tomada de decisões e resposta mais rápida às mudanças na cadeia de suprimentos.
-
Otimizar Vendas: Consulte dados de CRM para identificar leads de alto potencial e sugerir estratégias para aumentar a probabilidade de fechamento do negócio.
Benefícios do Oracle AI Vector Search
O Oracle Database é um repositório líder de dados operacionais e empresariais. Os aplicativos empresariais geralmente precisam pesquisar uma combinação de dados de negócios e dados não estruturados. Por exemplo, um site de varejo pode apresentar pesquisas com base em uma descrição de produto em linguagem natural e uma imagem de produto de destino, juntamente com outros filtros, como preço, localização da loja, fabricante e disponibilidade atual. Essa pesquisa requer a pesquisa simultânea de dados de catálogo não estruturados (descrição e imagem do produto), dados de catálogo estruturados (preço, local da loja e fabricante), bem como dados transacionais em tempo real (como estoque atual).
Visão Geral da Solução de Arquitetura de Alto Nível
Figura: Uma arquitetura de alto nível do pipeline RAG
O diagrama a seguir ilustra a arquitetura e o workflow da criação de um chatbot avançado usando Mistral-7B-Instruct-v0.2, Oracle Database 23ai, RAG, LangChain e Oracle Digital Assistant. Aqui estão as etapas detalhadas envolvidas na arquitetura a seguir.
-
Interação do Usuário: O usuário envia uma solicitação ao chatbot por meio da interface do Oracle Digital Assistant.
-
Tratamento de Solicitações: O Oracle Digital Assistant recebe a solicitação e a encaminha para a infraestrutura do OCI Data Science.
-
Processamento de Consultas: Há 2 etapas envolvidas.
- No OCI Data Science, a solicitação é roteada para LangChain, que atua como o orquestrador para gerenciar a interação entre várias implantações de modelo.
- O LangChain processa a solicitação e identifica a necessidade de recuperação de informações de documentos externos e dados empresariais.
-
Vetorização: Esta etapa envolve os seguintes subprocessos:
- A solicitação é enviada para uma implantação de modelo de incorporação, que transforma a consulta em uma representação vetorial de alta dimensão.
- Essa consulta vetorizada é enviada ao Oracle Database 23ai para pesquisa de vetores.
-
Recuperação de Dados: Esta etapa envolve os seguintes subprocessos:
- O Oracle Database 23ai executa uma pesquisa de similaridade em dados não estruturados na forma de documentos em formato PDF e HTML e combina essa pesquisa com pesquisa regular em outros dados de negócios no banco de dados.
- Documentos ou partes relevantes são recuperados e serão enviados para a próxima etapa para processamento posterior.
-
Reclassificação:
- A resposta gerada pode ser refinada ainda mais por uma implantação de modelo de nova classificação.
- O modelo de reclassificação avalia e classifica as respostas para garantir que a resposta mais relevante e precisa seja selecionada.
-
Consultando os Modelos Externos: Nesta etapa, os dados são recuperados e geram uma resposta.
- As informações recuperadas são usadas para gerar uma consulta para a implantação de modelo Mistral-7B-Instruct-v0.2 provisionada usando os recursos AI Quick Actions no OCI Data Science.
- O modelo Mistral-7B-Instruct-v0.2 processa a consulta e gera uma resposta com base em seu treinamento e no contexto recuperado.
-
Geração de Resposta: A resposta refinada é enviada de volta para LangChain, que consolida a saída final.
-
Retornar a Resposta ao usuário:
- A resposta final é retornada ao Assistente Digital.
- Em seguida, o Oracle Digital Assistant entrega a resposta ao usuário.
Objetivos
- Crie um chatbot aproveitando as tecnologias mais recentes, como recursos do OCI Data Science, como AI Quick Actions e Model Deployment, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain e Oracle Digital Assistant. Orientaremos você em cada etapa, desde a configuração dos modelos básicos de IA até a integração deles em uma experiência de conversação perfeita. No final deste tutorial, você terá uma compreensão abrangente de como utilizar essas ferramentas avançadas para criar um chatbot inteligente, responsivo e altamente eficaz capaz de entender e interagir com os usuários de maneira natural e envolvente.
Pré-requisitos
Os principais pré-requisitos que você precisaria configurar para poder continuar a executar o processo de ajuste fino distribuído no OCI Data Science Service.
-
As seguintes políticas são necessárias:
-
Configure a sub-rede personalizada com lista de segurança para permitir a entrada em qualquer porta dos IPs originados no bloco CIDR da sub-rede. Isso garante que os hosts da sub-rede possam se conectar uns aos outros durante o treinamento distribuído. Para obter mais Informações, consulte Rede.
-
Defina as políticas para permitir que os recursos do serviço OCI Data Science acessem buckets, redes e outros do OCI Object Storage. Para obter mais informações, consulte Políticas do OCI.
-
Token de acesso de HuggingFace para fazer download do modelo Mistral-7B-Instruct-v0.2. Para ajustar o modelo, primeiro você precisará acessar o modelo pré-treinado. O modelo pré-treinado pode ser obtido em HuggingFace. Neste tutorial, usaremos o token de acesso HuggingFace para fazer download do modelo pré-treinado de HuggingFace (definindo a variável de ambiente
HUGGING_FACE_HUB_TOKEN
). -
Grupo de logs e log do serviço OCI Logging. Isso será usado para monitorar o progresso do treinamento.
-
Vá para o Serviço OCI Logging e selecione Grupos de Logs.
-
Selecione um dos grupos de logs existentes ou crie um novo.
-
No grupo de logs, crie dois logs: um log de previsão e outro de acesso.
- Clique em Criar log personalizado.
-
Especifique um nome (predição access) e selecione o grupo de logs que deseja usar. - Em Criar configuração do agente, selecione Adicionar configuração posteriormente.
- Clique em Criar configuração do agente.
-
-
Sessão de notebook usada para iniciar o treinamento distribuído e acessar o modelo ajustado. Para obter mais informações, consulte Sessão de notebook.
-
Instale a versão mais recente do Oracle Accelerated Data Science (ADS)
pip install oracle-ads[opctl] -U
Tarefa 1: Implantar Modelos Necessários
Tarefa 1.1: Implantar o Modelo Mistral-7B-Instruct-v0.2
Aproveitaremos o recurso de implantação do Modelo de Ações Rápidas de IA para implantar o Mistral-7B-Instruct-v0.2 com alguns cliques. A implantação do modelo AI Quick Actions ajuda os usuários a implantar o Mistral-7B-Instruct-v0.2 com alguns cliques e fornecer aos usuários um ponto final.
Tarefa 1.2: Implantar Modelo de Incorporação Jina
-
No Notebook, copie os arquivos de modelo Jine Embedding de https://huggingface.co/jinaai/jina-embeddings-v2-base-en/tree/main para o diretório
ads_embedding_model_dir
. -
Faça upload do arquivo
score.py
para o diretório atual (por exemplo,/home/datascience/
). -
Execute o código a seguir.
import tempfile import ads from ads.model.generic_model import GenericModel from config import CONDA_PACK_PATH, LOG_GROUP_ID, EMBEDDING_MODEL_ACCESS_LOG_LOG_ID, EMBEDDING_MODEL_PREDICT_LOG_LOG_ID ads.set_auth("resource_principal") embedding_model = GenericModel( model_file_name="model-w-mean-pooling.onnx" ,artifact_dir="ads_embedding_model_dir",estimator=None, serialize=False) embedding_model.summary_status() embedding_model.prepare( inference_conda_env=CONDA_PACK_PATH, inference_python_version = "3.9", model_file_name="model.onnx", score_py_uri= "score.py", force_overwrite=True ) op=embedding_model.verify(['Can you please give some overview on Oracle Database 23.4']) print(op['embeddings']); embedding_model.save(display_name="jina-embedding") embedding_md = embedding_model.deploy( display_name = "Jina Embedding Model Deployment", deployment_log_group_id = LOG_GROUP_ID, deployment_access_log_id = EMBEDDING_MODEL_ACCESS_LOG_LOG_ID, deployment_predict_log_id = EMBEDDING_MODEL_PREDICT_LOG_LOG_ID, ) output = embedding_md.predict(['Can you please give some overview on Oracle Database 23.4']) print(output['embeddings']);
Tarefa 1.3: Implantar Modelo Bge-Reranker
Execute o código a seguir.
import ads
from FlagEmbedding import FlagReranker
from ads.model.generic_model import GenericModel
from ads.model.model_metadata import MetadataCustomCategory
from config import CONDA_PACK_PATH, LOG_GROUP_ID, RERANKER_MODEL_ACCESS_LOG_LOG_ID, RERANKER_MODEL_PREDICT_LOG_LOG_ID
#
# This custom class wrap the reranker model
#
class Reranker:
def __init__(self, model_id):
self.model_id = model_id
self.reranker = FlagReranker(self.model_id, use_fp16=True)
def predict(self, x):
# x is expected as a list of list of str
# [["x1", "x2"]] -> y = [score12]
scores = self.reranker.compute_score(x)
return scores
reranker_model = Reranker(model_id="BAAI/bge-reranker-large")
reranker_payload = [
["what is panda?", "It is an animal living in China. In the future model input will be serialized by.In the future model input will be serialized by.In the future model input will be serialized by"],
["what is panda?", "The giant panda is a bear species endemic to China.In the future model input will be serialized by.In the future model input will be serialized by.In the future model input will be serialized by.In the future model input will be serialized by"],
]
reranker_model.predict(reranker_payload)
reranker_generic_model = GenericModel(estimator=reranker_model, artifact_dir="./reranker_dir")
reranker_generic_model.summary_status()
reranker_generic_model.prepare(
reload=False,
inference_conda_env=CONDA_PACK_PATH,
inference_python_version="3.9",
model_file_name="reranker.pkl",
force_overwrite=True
)
reranker_generic_model.save(
display_name="reranker2-baai-large",
bucket_uri="oci://reranker_bucket@bigdatadatasciencelarge/reranker/",
ignore_introspection=True
)
reranker_md = reranker_generic_model.deploy(
display_name = "reranker2-baai-large",
deployment_log_group_id = LOG_GROUP_ID,
deployment_access_log_id = RERANKER_MODEL_ACCESS_LOG_LOG_ID,
deployment_predict_log_id = RERANKER_MODEL_PREDICT_LOG_LOG_ID,
deployment_instance_shape="VM.Standard2.4",
)
Tarefa 2: Configurar o Oracle Database 23ai
Usaremos os recursos mais recentes do Oracle Database 23ai, especificamente o Oracle AI Vector Search, para nosso caso de uso. Nesse cenário, importaremos as incorporações geradas do conjunto de dados no Oracle Database 23ai. Quando um usuário consulta usando a RAG, a resposta será aprimorada fornecendo aos LLMs contexto adicional. O diagrama a seguir mostra alguns dos benefícios de usar o Oracle Database 23ai.
Figura: Uma ilustração do Recurso de Pesquisa do Oracle Database 23ai (fonte)
Isso aumentará seu conhecimento, levando a respostas mais precisas e pertinentes às consultas do cliente. Para configurar o Oracle Database 23ai, siga as opções mencionadas.
-
Usando uma instância de contêiner. Para obter mais informações, consulte Usar a Imagem do Contêiner Grátis do Oracle Autonomous Database.
-
Usando um cliente Python.
Usaremos uma instância hospedada do Oracle Database 23ai para demonstrar os recursos avançados do Oracle AI Vector Search.
Tarefa 3: Análise, Divisão em Blocos e Incorporação de Armazenamento no Oracle Database 23ai
O trecho de código a seguir fornece uma visão geral de alto nível de como o documento é analisado, como o documento é convertido em blocos e, em seguida, como a incorporação será armazenada no Oracle Database 23ai. Para obter mais informações, consulte oda-oci-data-science-oracledb-23ai-llm.
Inicializar o Oracle Database 23ai
def load_documents(embedding_model):
# connect to db
# Configure logging
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
)
logging.info("Connecting to Oracle DB...")
DSN = f"{DB_HOST_IP}/{DB_SERVICE}"
with oracledb.connect(user=DB_USER, password=DB_PWD, dsn=DSN) as connection:
logging.info("Successfully connected to Oracle Database...")
num_pages = []
for book in INPUT_FILES:
logging.info(f"Processing book: {book}...")
if ENABLE_CHUNKING is False:
# chunks are pages
logging.info("Chunks are pages of the book...")
nodes_text, nodes_id, pages_num = read_and_split_in_pages([book])
num_pages.append(len(nodes_text))
else:
logging.info(f"Enabled chunking, chunck_size: {MAX_CHUNK_SIZE}...")
nodes_text, nodes_id, pages_num = read_and_split_in_chunks([book])
# create embeddings
# process in batch (max 96 for batch, chosen BATCH_SIZE, see above)
logging.info("Computing embeddings...")
embeddings = compute_embeddings(embedding_model, nodes_text)
# determine book_id and save in table BOOKS
logging.info("Registering document...")
book_id = register_document(book, connection)
# store embeddings
# here we save in DB
save_embeddings_in_db(embeddings, nodes_id, connection)
# store text chunks (pages for now)
save_chunks_in_db(nodes_text, nodes_id, pages_num, book_id, connection)
# a txn is a book
connection.commit()
Tarefa 4: Conectar-se ao LLM de Ações Rápidas do AI Mistral-7B-Instruct-v0.2
Crie uma implantação de modelo com o AI Quick Actions e obtenha o ponto final de implantação de modelo a partir daí. Execute o código a seguir para estabelecer conexão com o LLM.
import ads
ads.set_auth("resource_principal")
command_md = OCIModelDeploymentVLLM(
endpoint="https://modeldeployment.eu-frankfurt-1.oci.customer-oci.com/ocid1.datasciencemodeldeployment.oc1.<ocid>/predict",
model="odsc-llm"
)
Tarefa 5: Configurar RAG
A seguinte arquitetura RAG consistirá nas seguintes etapas:
Tarefa 5.1: Fazer Upload para o Banco de Dados de Vetores 23ai
class CustomRetriever(BaseRetriever):
def _get_relevant_documents(
self, query: str, *, run_manager: CallbackManagerForRetrieverRun
) -> List[Document]:
matching_documents = []
#Embedding model
rps = oci.auth.signers.get_resource_principals_signer()
prediction = requests.post(EMBEDDING_MD_ENDPOINT, data=f'["{query}"]', auth=rps)
#Search in DB
q_result = test_oracle_query(prediction.json()['embeddings'][0], TOP_K, True, False)
text_list = []
for n, id, sim in zip(q_result.nodes, q_result.ids, q_result.similarities):
text_list.append(n.text)
paired_list = [[query, text] for text in text_list]
print(f'Reranker payload: {paired_list}')
#ReRanker model
reranker_results = requests.post(RERANKER_MD_ENDPOINT, data=json.dumps(paired_list), auth=rps) # make a prediction request
max_value = max(reranker_results.json()['prediction'])
if max_value < -3:
return matching_documents;
# Find the index of the maximum value
max_index = reranker_results.json()['prediction'].index(max_value)
print(f"The maximum value is: {max_value}")
print(f"The index of the maximum value is: {max_index}")
doc = Document(page_content=paired_list[max_index][1], metadata={"source": "local"})
matching_documents.append(doc)
return matching_documents
customRetriever = CustomRetriever()
chain = RetrievalQA.from_chain_type(
llm=command_md,
retriever=customRetriever
)
prompt = "Can you please give some overview on Oracle Database 23.4?"
res = chain(prompt)
print('Output::')
print(res['result'])
Usamos o modelo de prompt e a cadeia de garantia de qualidade fornecidos pela Langchain para criar o chatbot, o que ajuda a transmitir o contexto e a pergunta diretamente para o LLM.
Tarefa 5.2: Implantar Modelo LangChain
import tempfile
import ads
from ads.model.generic_model import GenericModel
from config import CONDA_PACK_PATH, LOG_GROUP_ID, LANGCHAIN_MODEL_ACCESS_LOG_LOG_ID, LANGCHAIN_MODEL_PREDICT_LOG_LOG_ID
ads.set_auth("resource_principal")
langchain_model = GenericModel( artifact_dir="langchain_model",estimator=None, serialize=False)
langchain_model.summary_status()
#Copy required python scripts to artifact dir
langchain_model.prepare(
inference_conda_env=CONDA_PACK_PATH,
inference_python_version = "3.9",
model_file_name="test",
score_py_uri= "score_langchain_final.py",
force_overwrite=True
)
op=langchain_model.verify('Can you please give some overview on Oracle Database 23.4?')
model_id = langchain_model.save(display_name="langchain-model")
deploy = langchain_model.deploy(
display_name="Langchain Model Deployment",
deployment_log_group_id = LOG_GROUP_ID,
deployment_access_log_id = LANGCHAIN_MODEL_ACCESS_LOG_LOG_ID,
deployment_predict_log_id = LANGCHAIN_MODEL_PREDICT_LOG_LOG_ID,
environment_variables={"CRYPTOGRAPHY_OPENSSL_NO_LEGACY":"1"},
deployment_instance_shape="VM.Standard2.4",
)
deploy.predict('Can you please give some overview on Oracle Database 23.4?')
Tarefa 6: Criar um Assistente Digital usando o Oracle Digital Assistant para Aplicativo de Chatbot para Hospedar RAG
Tarefa 6.1: Obter Ponto Final de Implantação do Modelo e Adicionar Política
Adicione um serviço REST à instância que chame o provedor do modelo. Estamos usando a implantação do modelo Oracle como exemplo, mas podemos usar um serviço REST para qualquer LLM.
Adicione política para que o Oracle Digital Assistant possa acessar o ponto final de previsão de implantação de modelo. Vá para Identidade e Segurança, Políticas e clique em Criar Política.
Políticas para grupo dinâmico
Allow any-user to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in compartment Demo where request.principal.id='ocid1.odainstance.oc1.iad.<ocid>'
Depois que a política for criada, poderemos iniciar o Oracle Digital Assistant e abri-la em um navegador.
Tarefa 6.2: Criar o Serviço REST do Provedor de LLM
-
Vá para o Oracle Digital Assistant, navegue até Definições, Serviços de API, Serviços LLM e clique em +Add Serviço LLM.
-
Na página Criar Serviço LLM, digite as informações a seguir para criar uma Pós-operação no ponto final do provedor e clique em Criar.
- Nome: Informe um nome facilmente identificável para o serviço. Você fará referência a esse nome mais tarde.
- Ponto Final: Copie e cole o ponto final de implantação do modelo.
- Métodos: Selecione POST.
-
Conclua o serviço adicionando a chave de API e as amostras de payload de solicitação e resposta.
-
Tipo de Autenticação: Selecione Controlador de Recursos do OCI.
-
Tipo de Conteúdo: Selecione application/json.
-
Corpo: Adicione o payload enviado à solicitação. Por exemplo:
{ "query": "Can you please give some overview on Oracle Database 23.4?" }
-
-
Clique em Testar Solicitação para verificar uma resposta
200
.
Tarefa 6.3: Criar uma Habilidade
Com o serviço REST do provedor de LLM adicionado à instância, agora precisamos criar uma habilidade que possa chamar esse serviço e conectar usuários a ele por meio de sua definição de fluxo de caixas de diálogo. Para criar essa habilidade, siga as etapas:
-
Vá para o Oracle Digital Assistant, acesse Desenvolvimento e +Skills.
-
Clique em + Nova Habilidade.
-
Na página Criar Habilidade, digite as seguintes informações e clique em Criar.
- Nome para Exibição: Adicione um nome.
- Modo de Caixa de Diálogo: Selecione Visual.
- Para os outros campos, deixe os valores padrão.
Tarefa 6.4: Conectar a Habilidade ao Modelo
Agora, vamos permitir que a habilidade acesse o serviço REST do LLM criando um componente personalizado com um handler de eventos que transforma os payloads REST em formatos aceitos pelo provedor LLM e pelo Oracle Digital Assistant.
-
Clique no ícone Componentes na barra de navegação esquerda e em Adicionar Serviço.
-
Na página Criar Serviço, digite as seguintes informações e clique em Criar.
- Nome: Informe um nome que descreva o serviço.
- Tipo de Serviço: Aceite a configuração padrão, selecione Contêiner Incorporado.
- Tipo de Criação do Pacote de Serviço do Componente: Selecione Novo Componente.
- Tipo de Componente: Selecione Transformação de LLM.
- Nome do Componente: informe um nome descritivo.
- Modelo: Selecione Personalizado (localizado em other).
-
O componente concluído é exibido na página Componentes.
-
Selecione o componente na página Componentes para verificar seu status de implantação. Quando Pronto for exibido, você poderá passar para a próxima etapa.
Certifique-se de que o Serviço Ativado (a configuração padrão) esteja ativado.
Tarefa 6.5: Mapear o Provedor de Serviços LLM e as Solicitações e Respostas do Oracle Digital Assistant
As solicitações da habilidade para o provedor de serviços do modelo precisam ser transformadas da interface usada pelo Oracle Digital Assistant, que é conhecida como Interface LLM Comum (CLMI) no formato aceito pelo provedor de serviços. Da mesma forma, os resultados retornados pelo provedor de serviços também precisam ser transformados em CLMI. Para ativar esse mapeamento, os métodos do processador de eventos de serviço REST a seguir devem ter um código específico do provedor.
transformRequestPayload
.transformResponsePayload
.transformErrorResponsePayload
.
Para abrir o editor de código do processador de eventos e atualizar o código de transformação (neste caso, para o Azure OpenAI), siga as etapas:
-
Expanda o serviço e selecione o processador de eventos.
-
Clique no ícone Editar para abrir o editor.
-
Substitua o código do método de evento do handler
transformRequestPayload
(em torno das linhas 24 a 26) pelo código a seguir.-
transformRequestPayload
:transformRequestPayload: async (event, context) => { return { "query": event.payload.messages[event.payload.messages.length - 1].content }; },
Cada solicitação só precisa passar a última entrada do usuário para o prompt do LLM.
-
-
Substitua o código do método de evento do handler
transformResponsePayload
(em torno das linhas 35 a 37) pelo código a seguir.-
transformRequestPayload
:transformResponsePayload: async (event, context) => { return { candidates: [ { "content": event.payload.prediction || "" }]}; },
-
-
Substitua o código do método de evento do handler
transformErrorResponsePayload
(em torno das linhas 47 a 49) pelo código a seguir.-
transformRequestPayload
:transformErrorResponsePayload: async (event, context) => { let errorCode = 'unknown'; if (event.payload.error) { if ( 'context_length_exceeded' === event.payload.error.code) { errorCode = 'modelLengthExceeded'; } else if ('content_filter' === event.payload.error.code) { errorCode = 'flagged'; } return {"errorCode" : errorCode, "errorMessage": event.payload.error.message}; } return {"errorCode" : errorCode, "errorMessage": JSON.stringify(event.payload)}; }
-
-
Clique em Validar para verificar a sintaxe do código. Use-o para substituir o código no editor se estiver encontrando erros de sintaxe que não possa corrigir.
-
Clique em Salvar e Fechar. Aguarde a conclusão da implantação. Quando Pronto for exibido, você poderá passar para a próxima etapa.
Tarefa 6.6: Definir o Serviço LLM para a Habilidade
Para permitir que a habilidade conecte usuários ao modelo por meio do fluxo de caixas de diálogo, você precisa criar um serviço LLM que combine o serviço LLM em toda a instância que chame o modelo com o handler de eventos de transformação (que, neste caso, é para implantação de modelo da Oracle).
-
Clique no ícone Definições na barra de navegação esquerda.
-
Clique em Configuração.
-
Na página Serviços de Modelos de Idioma Grande, clique em +New Serviço LLM.
-
Insira as seguintes informações
-
Nome: Informe um nome facilmente identificável para o serviço LLM. Você fará referência a esse nome quando criar o fluxo de caixas de diálogo na próxima etapa.
-
Serviço LLM: Selecione o nome do serviço LLM de toda a instância que você criou na Tarefa 1: Criar o Serviço REST para o Modelo.
-
Manipulador de Transformação: Selecione o nome do componente do processador de eventos que você criou como parte do serviço REST na Tarefa 3: Conectar a Habilidade ao Modelo.
-
Deixe as propriedades restantes em suas definições padrão. Observe que Padrão está ativado, se este for o único serviço que você criou até agora para este tutorial.
-
-
Clique em Salvar.
-
Desmarque Feedback e outro padrão nos switches.
Tarefa 6.7: Integrar o Serviço
Agora que a habilidade está conectada ao LLM, conecte os usuários da habilidade ao modelo criando um componente de fluxo de caixas de diálogo que pode chamar o modelo e dizer o que fazer. O componente transmite essas instruções usando um prompt, que é um bloco de texto legível por humanos. Nesta tarefa, forneceremos esse prompt, que instrui o modelo a avaliar o feedback do usuário como positivo ou negativo ou neutro.
-
Clique no ícone Fluxos na barra de navegação esquerda.
-
Selecione unresolvedIntent.
-
No estado unresolvedMessage, clique no ícone reticências(...) e selecione Adicionar Estado no menu.
-
Selecione Integração de Serviço e Chamar Modelo de Linguagem Grande.
-
Informe uma Descrição como análise de sentimento e clique em Inserir.
O fluxo de caixas de diálogo agora inclui o estado
unresolvedMessage
(Enviar Mensagem), o estadoinvokeLLM
e o estadoshowLLMError
. -
No estado
unresolvedMessage
, clique no ícone reticências(...) e selecione Excluir no menu, pois não queremos mostrar a mensagem de erro para UnresolvedIntent.O fluxo de caixas de diálogo agora inclui apenas o estado
invokeLLM
e o estadoshowLLMError
. -
Abra o estado
invokeLLM
. Na página Componente, selecione o serviço LLM que criamos na Tarefa 6.6. -
Adicione um prompt que envie instruções ao serviço LLM colando o seguinte no Prompt. Toda conversa do usuário deve ser transmitida como Entrada de prompt.
-
Crie a variável
PROMPT_INPUT
. Clique em Parâmetros de Prompt + para adicionar um novo parâmetro e seu valor. -
Defina Usar Streaming como Falso para que a mensagem seja entregue integralmente, não de forma incremental.
-
Teste o prompt com o Construtor de Prompt e clique em Criar Prompt
-
Adicione Valor de Simulação do Parâmetro de Prompt e clique em Gerar Saída. Dessa forma, podemos validar a integração do LLM.
Tarefa 6.8: Testar o Prompt com o Testador de Habilidades
-
Clique em Visualizar para abrir o testador de habilidades.
-
Informe a seguinte solicitação: Você pode fornecer uma visão geral do Oracle Database 23.4?.
A saída deve ter a seguinte aparência:
-
Fazer a próxima consulta ao LLM: o mais recente oracle database.
A saída deve ter a seguinte aparência:
Tarefa 6.9: Configurar o Canal do Usuário do Oracle Web
Criaremos um canal de usuário do Oracle Digital Assistant que permita que um cliente Web da Oracle acesse a habilidade. Para garantir que apenas nossos clientes da Web possam usar esse canal, vamos configurá-lo para exigir autenticação do cliente.
-
Abra o Oracle Digital Assistant, acesse Desenvolvimento, Canais e clique em +Add Canal.
-
Em Criar Canal, digite as informações a seguir para criar uma operação POST no ponto final do provedor e clique em Criar.
- Nome: Um nome exclusivo que começa com uma letra e contém apenas letras, números, pontos e sublinhados. Por exemplo,
OCI_MD_LLM
. - Descrição (Opcional): Para que o canal é usado.
- Tipo de Canal: Selecione Oracle Web.
- D domínios permitidos: Digite
*
. - Autenticação do Cliente Ativada: Desmarque.
- Nome: Um nome exclusivo que começa com uma letra e contém apenas letras, números, pontos e sublinhados. Por exemplo,
-
Desmarque Autenticação do Cliente Ativada, se ainda não estiver desativado.
-
Em Rota, selecione a habilidade que queremos usar. Selecionamos a habilidade atual que é LLM-MD-Skill.
-
Ative Canal Ativado.
-
Observe o ID do Canal e o URI do Domínio do ODA sem https, que são mostrados para esse canal.
Usaremos esses valores em nosso aplicativo web e na configuração de roteamento do gerador de token.
Tarefa 6.10: Instalar o SDK
Faça download do zip e extraia-o no sistema local. Este zip inclui um guia do usuário que descreve as classes do SDK e um aplicativo de amostra que demonstra muitas de suas funcionalidades.
-
Vá para a seção Web SDKs do Oracle Digital Assistant (ODA) e do Oracle Mobile Cloud (OMC) e Oracle Native Client SDKs (para ambientes Nativos do OCI).
-
Faça download do ODA Web SDK 24.06.
-
Em Plataformas, selecione GERIC.
-
Clique para fazer download do SDK Js do ODA mais recente que é
oda-native-client-sdk-js-24_06 for (GENERIC (All Platforms)
. -
Extraia o arquivo zip baixado.
Tarefa 6.11: Testar o Aplicativo Oracle Web
-
Vá para a pasta zip extraída do Oracle Web SDK baixado.
-
Abra o arquivo
samples/web/settings.js
e substitua<URI>
e<channelId>
pelo valor real.Por exemplo:
- URI:
oda-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-dax.data.digitalassistant.oci.oraclecloud.com
. - ChannelId:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
- URI:
-
Além disso, certifique-se de que
isClientAuthEnabled
seja falso.let isClientAuthEnabled = false;
-
Execute o arquivo
samples/web/index.html
em qualquer browser. -
Ignore o conteúdo do arquivo de índice. Clique no ícone de chat, ele mostrará o status do Oracle Assistant CONNECTED.
-
É assim que nosso site fica com o ícone de bate-papo no canto inferior direito. Podemos iniciar uma conversa, como fizemos anteriormente com o testador de habilidades.
Tarefa 6.12: Release na Instância do OCI Compute
-
Crie a instância do OCI Compute. Para obter mais informações, consulte Criando uma Instância
-
Certifique-se de ter seguido as regras de entrada.
-
Copie todas as pastas da Web para a instância recém-criada.
-
Instale o NGINX. Para obter mais informações, consulte Instalar o NGINX Web Server e o Proxy no Oracle Linux.
-
Abra um navegador e acesse
http://<IP_address>/
. Se você tiver um certificado autoassinado, poderá navegar atéhttps://<IP_address>/
.
Resultados
Vamos comparar as saídas de perguntar diretamente ao LLM versus usar RAG com LLM:
-
Resposta do LLM
-
Resposta da RAG
Próximas Etapas
A criação de um chatbot avançado usando o Oracle Database 23ai, RAG, LangChain, Mistral-7B-Instruct-v0.2 e o Oracle Digital Assistant mostra o poder de integrar tecnologias de ponta para criar um agente conversacional altamente responsivo e inteligente. O fluxo de trabalho detalhado, desde o tratamento de solicitações até a geração de respostas, garante que o chatbot possa recuperar e processar com eficiência grandes quantidades de informações, fornecendo respostas precisas e contextualmente relevantes aos usuários. Ao aproveitar os recursos de pesquisa de vetores do Oracle Database 23ai e a plataforma robusta fornecida pelo Oracle Digital Assistant, os desenvolvedores podem melhorar significativamente o desempenho e o envolvimento do usuário do chatbot. Essa abordagem integrada não apenas simplifica o processo de desenvolvimento, mas também resulta em uma solução de IA escalável, eficiente e altamente eficaz que se destaca no cenário competitivo dos assistentes digitais. Seja para atendimento ao cliente, recuperação de informações ou suporte interativo, essa arquitetura avançada de chatbot abre caminho para criar experiências de conversação sofisticadas que atendam às demandas dos usuários modernos.
Para obter mais informações sobre como usar o AI Quick Actions, acesse a playlist YouTube do Oracle Cloud Infrastructure Data Science para ver um vídeo de demonstração do AI Quick Actions e encontrar nossa documentação técnica e consulte nosso repositório Github com dicas e exemplos.
Se você quiser sugerir modelos específicos para adicionar às Ações Rápidas de IA ou tiver dúvidas, envie um e-mail para o grupo do OCI Data Science: ask-oci-data-science_grp@oracle.com.
Links Relacionados
-
Experimente a Avaliação Grátis do Oracle Cloud! Uma avaliação de 30 dias com US$ 300 em créditos gratuitos dá acesso ao serviço Oracle Cloud Infrastructure Data Science. Para obter mais informações, consulte os recursos a seguir:
-
Usando o Oracle Resource Manager para Configurar Sua Tenancy para o Serviço Data Science
-
Favor marcar e clonar nosso novo repositório GitHub! Incluímos tutoriais de notebook e amostras de código.
-
Assista aos nossos tutoriais em YouTube
-
Procure o Oracle Data Science e tente LiveLabs.
Confirmações
-
Autor - Shekhar Chavan (Membro Principal da Equipe Técnica, OCI Data Science), Ashutosh Kumar (Membro Principal da Equipe Técnica, OCI Data Science)
-
Contribuintes - Piyush Gajjariya (Gerente de Desenvolvimento de Software, OCI Data Science), Tzvi Keisar (Diretor de Gerenciamento de Produtos), SriRanjith R (Equipe Técnica de Membros Sênior, OCI Data Science)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Build an Enterprise Chatbot with Oracle Digital Assistant, OCI Data Science, LangChain and Oracle Database 23ai
G13779-01
August 2024