附註:

使用 Oracle Digital Assistant、OCI Data Science、LangChain 和 Oracle Database 23ai 建置企業聊天機器人

簡介

在現今的數位環境中,聊天機器人正在發展成為更智慧、反應更快且能夠處理複雜的互動。在本教學課程中,我們將運用 Oracle Cloud Infrastructure (OCI) Data Science 的強大功能 (例如 AI Quick Actions 和 Model Deployment、Mistral-7B-Instruct-v0.2、Oracle Database 23ai、LangChain 和 Oracle Digital Assistant),深入探索建立新聊天機器人。這些技術為資料表帶來了獨特的優勢,使我們能夠打造一個聊天機器人,不僅能理解並回應準確的使用者查詢,同時也提供了無縫且引人入勝的對話體驗。

Oracle Database 23ai 的其中一個突出功能是其進階向量搜尋功能。此技術可將文字轉換為高尺寸向量,然後進行相關性比較,以有效率地擷取資訊。整合到檢索增強生成 (RAG) 管線中時,Oracle Database 23ai 的向量搜尋增強了聊天機器人的存取能力,並從大量資料集提供最相關的資訊。這可確保產生的回應不僅符合情境準確,也與使用者的查詢高度相關。

Oracle Digital Assistant 藉由提供完善的平台來建置、部署及管理對話式 AI 解決方案,進一步提升聊天機器人的功能。它提供預先建立的連接器、自然語言理解 (NLU) 及對話管理,可簡化開發流程並確保順暢的使用者體驗。Oracle Digital Assistant 與 RAG 管道的結合使聊天機器人能夠處理複雜的互動,並保持自然的對話流程,從而提高用戶的參與度和滿意度。

透過在 RAG 管道中利用 Oracle Database 23ai 和 Oracle Digital Assistant 的協同效應,開發人員可以建立能夠在擷取準確性和對話流動性中卓越的聊天機器人。這種整合式方法不僅可以減少建立複雜聊天機器人所需的時間和人力,還可以實現可擴展、高效且能夠提供卓越使用者體驗的解決方案。無論您是開發人員、技術愛好者還是想要提升客戶參與度的企業領導者,本教程都將為您提供知識和工具來構建一個在擁擠的數位領域中脫穎而出的進階聊天機器人。

如需逐步解說程序,請參閱 AI 範例 GitHub 儲存庫

使用案例

以下是一些有用的範例使用案例:

Oracle AI Vector Search 的優勢

Oracle Database 是營運和企業資料的頂尖儲存區域。企業應用程式通常需要搜尋業務資料和非結構化資料的組合。例如,零售網站可以根據自然語言產品描述與目標產品影像,以及其他篩選條件 (例如價格、商店地點、製造商及目前可用性) 進行搜尋。此搜尋需要同時搜尋非結構化型錄資料 (產品描述與影像)、結構化型錄資料 (價格、商店地點與製造商),以及即時交易資料 (例如目前存貨)。

高階架構解決方案概要

圖像

圖:RAG 管道的高階架構

下圖說明使用 Mistral-7B-Instruct-v0.2、Oracle Database 23ai、RAG、LangChain 和 Oracle Digital Assistant 建置進階聊天機器人的架構和工作流程。以下為下列架構的詳細步驟。

  1. 使用者互動:使用者透過 Oracle Digital Assistant 介面傳送要求至聊天機器人。

  2. 要求處理:Oracle Digital Assistant 會收到要求並將其轉送至 OCI 資料科學基礎架構。

  3. 查詢處理:有 2 個涉及的步驟。

    • 在 OCI 資料科學中,要求會遞送至 LangChain,作為管理各種模型部署之間互動的協調器。
    • LangChain 會處理要求,並識別從外部文件和企業資料擷取資訊的需求。
  4. 向量化:此步驟包含下列子處理:

    • 要求會傳送至內嵌模型部署,以將查詢轉換為高維向量表示法。
    • 接著,此向量化查詢會傳送至 Oracle Database 23ai 進行向量搜尋。
  5. 資料擷取:此步驟包含下列子處理:

    • Oracle Database 23ai 會以 PDF 和 HTML 格式的文件形式,對非結構化資料執行相似性搜尋,並將該搜尋與一般搜尋資料庫中的其他業務資料結合。
    • 會擷取相關文件或區塊,並傳送至下一個步驟以進一步處理。
  6. 重新排名:

    • 重新排名模型部署可能會進一步縮小產生的回應。
    • 重新排名模型會評估並排名回應,以確保選取最相關且最準確的回應。
  7. 查詢外部模型:在此步驟中,會擷取資料並產生回應。

    • 擷取的資訊可用來產生使用 OCI 資料科學中的 AI 快速動作功能佈建之 Mistral-7B-Instruct-v0.2 模型部署的查詢。
    • Mistral-7B-Instruct-v0.2 模型會根據其訓練和擷取的相關資訊環境來處理查詢並產生回應。
  8. 回應產生:精簡的回應會傳回 LangChain,此回應會合併最終輸出。

  9. 將回應傳回給使用者:

    • 最後一個回應會傳回給 Digital Assistant。
    • 然後,Oracle Digital Assistant 會傳遞回應給使用者。

目標

必要條件

您必須先設定的主要先決條件,才能繼續在 OCI 資料科學服務上執行分散式微調處理作業。

工作 1:部署必要模型

作業 1.1:建置 Mistral-7B-Instruct-v0.2 模型

我們將利用 AI 快速操作模型部署功能,按幾下滑鼠來部署 Mistral-7B-Instruct-v0.2。AI Quick Actions 模型部署可協助使用者輕鬆按幾下滑鼠部署 Mistral-7B-Instruct-v0.2 並為使用者提供端點。

圖像

圖像

Task 1.2:部署 Jina 內嵌模型

  1. 在記事本中,將 Jine Embedding 模型檔案從 https://huggingface.co/jinaai/jina-embeddings-v2-base-en/tree/main 複製到 ads_embedding_model_dir 目錄。

  2. score.py 檔案上傳至目前的目錄 (例如,/home/datascience/)。

  3. 執行下列程式碼。

    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']);
    

作業 1.3:部署 Bge-Reranker 模型

執行下列程式碼。

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",
)

作業 2:設定 Oracle Database 23ai

我們將根據使用案例使用 Oracle Database 23ai 的最新功能 (特別是 Oracle AI Vector Search)。在此情況下,我們將從資料集產生的內嵌匯入 Oracle Database 23ai。使用 RAG 進行使用者查詢時,將透過提供具有其他內容的 LLM 來增強回應。下圖說明使用 Oracle Database 23ai 的部分優點。

圖像

圖:Oracle Database 23ai 搜尋功能 (來源) 的圖解

這將增強其知識,導致回應更準確且與客戶的查詢相關。若要設定 Oracle Database 23ai,請依照提及的選項進行。

我們將使用託管的 Oracle Database 23ai 實例來示範 Oracle AI Vector Search 的強大功能。

作業 3:在 Oracle Database 23ai 中剖析、分區以及儲存內嵌

下列程式碼片段提供如何剖析文件、如何將文件轉換成區塊,以及如何將內嵌項目儲存在 Oracle Database 23ai 中的高階總覽。如需詳細資訊,請參閱 oda-oci-data-science-oracledb-23ai-llm

初始化 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()

作業 4:連線至 Mistral-7B-Instruct-v0.2 AI Quick Actions LLM

使用 AI 快速操作建立模型部署,並從該處取得模型部署端點。執行下列程式碼以連線至 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"
)

作業 5:設定 RAG

下列 RAG 架構將包含下列步驟:

作業 5.1:上傳至 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'])

我們使用 Langchain 提供的提示範本和 QA 鏈進行聊天機器人,這有助於直接將內容和問題傳遞給 LLM。

作業 5.2:部署 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?')

作業 6:使用 Oracle Digital Assistant 建立數位助理,以將聊天機器人應用程式運往主機 RAG

作業 6.1:取得模型部署端點並新增原則

新增 REST 服務至呼叫模型提供者的執行處理。我們使用 Oracle 模型部署作為範例,但您可以為任何 LLM 使用 REST 服務。

圖像

新增原則,讓 Oracle Digital Assistant 可存取模型部署預測端點。移至識別與安全原則,然後按一下建立原則

圖像

動態群組的原則

Allow any-user to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in compartment Demo where request.principal.id='ocid1.odainstance.oc1.iad.<ocid>'

建立原則之後,我們可以啟動至 Oracle Digital Assistant 並在瀏覽器中開啟該原則。

作業 6.2:建立 LLM 提供者 REST 服務

  1. 前往 Oracle Digital Assistant,瀏覽至設定值API 服務LLM 服務,然後按一下 +Add LLM 服務

  2. 建立 LLM 服務頁面中,輸入下列資訊以建立提供者端點的 Post 作業,然後按一下建立

    • 名稱:輸入可輕鬆識別的服務名稱。您稍後將參考此名稱。
    • 端點:複製並貼上模型部署端點。
    • 方法:選取 POST

    圖像

  3. 新增 API 金鑰以及要求和回應有效負載範例,以完成服務。

    • 認證類型:選取 OCI 資源主體

    • 內容類型:選取 application/json

    • 主體:新增傳送給要求的有效負載。舉例而言:

      {
          "query": "Can you please give some overview on Oracle Database 23.4?"
      }
      

    圖像

  4. 按一下測試要求以檢查 200 回應。

    圖像

作業 6.3:建立技能

藉由將 LLM 提供者 REST 服務新增至實例,現在我們需要建立一個技能來呼叫此服務,並透過其對話方塊流程定義將使用者連線至該服務。若要建立此技能,請依照下列步驟進行:

  1. 移至 Oracle Digital Assistant,瀏覽至開發+Skills

  2. 按一下 + 新增技能

  3. 建立技能頁面中,輸入下列資訊,然後按一下建立

    • 顯示名稱:新增名稱。
    • 對話方塊模式:選取視覺
    • 對於其他欄位,請保留預設值。

    圖像

工作 6.4:將技能連接至模型

我們現在將啟用技能,透過使用事件處理程式建立自訂元件來存取 LLM REST 服務,該處理程式會將 REST 有效負載轉換為 LLM 提供者和 Oracle Digital Assistant 接受的格式。

  1. 按一下左側導覽列和新增服務元件圖示。

    左側導覽列中的「元件」圖示

  2. 建立服務頁面中,輸入下列資訊,然後按一下建立

    • 名稱:輸入可描述服務的名稱。
    • 服務類型:接受預設設定,選取內嵌容器
    • 元件服務套裝軟體建立類型:選取新元件
    • 元件類型:選取 LLM 轉換
    • 元件名稱:輸入描述性名稱。
    • 範本:選取自訂 (位於其他底下)。

    圖像

  3. 完成的元件會顯示在元件頁面中。

    圖像

  4. 元件頁面選取元件,以檢查其建置狀態。顯示就緒時,您可以繼續進行下一個步驟。

    圖像

    確定已啟用服務 (預設設定)。

    圖像

作業 6.5:對應 LLM 服務提供者和 Oracle Digital Assistant 要求與回應

技能對模型服務提供者的要求必須從 Oracle Digital Assistant 使用的介面 (稱為通用 LLM 介面 (CLMI) 轉換為服務提供者接受的格式。同樣地,從服務提供者傳回的結果也必須轉換成 CLMI。若要啟用此對應,下列 REST 服務事件處理程式方法必須具有提供者特定代碼。

若要開啟事件處理程式程式碼編輯器並更新轉換程式碼 (在此例中為 Azure OpenAI),請依照下列步驟進行:

  1. 展開服務並選取事件處理常式。

    圖像

  2. 按一下編輯圖示以開啟編輯器。

    圖像

    圖像

  3. transformRequestPayload 處理程式事件方法代碼 (行 24-26) 取代為下列代碼。

    • transformRequestPayload:

      transformRequestPayload: async (event, context) => {
          return { "query": event.payload.messages[event.payload.messages.length - 1].content };
          },
      

      我們只需要將最後一個使用者輸入傳送至 LLM 提示的每個要求。

  4. transformResponsePayload 處理程式事件方法代碼 (大約第 35-37 行) 取代為下列程式碼。

    • transformRequestPayload:

      transformResponsePayload: async (event, context) => {
          return { candidates: [ { "content": event.payload.prediction || "" }]};
      },
      
  5. transformErrorResponsePayload 處理程式事件方法代碼 (行 47-49) 取代為下列代碼。

    • 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)};
      }
      
  6. 按一下驗證以檢查程式碼語法。如果發生無法修正的語法錯誤,請使用此程式在編輯器中取代程式碼。

    圖像

  7. 按一下儲存關閉。等待部署完成。顯示就緒時,您可以繼續進行下一個步驟。

作業 6.6:定義技能的 LLM 服務

若要讓技能透過對話方塊流程將使用者連線至模型,您需要建立 LLM 服務,此服務會結合呼叫模型的全執行處理 LLM 服務與轉換事件處理程式 (在此情況下是用於 Oracle 模型部署)。

  1. 按一下左側導覽列中的設定值圖示。

    左瀏覽列

  2. 按一下組態

    「設定值」中的「組態」頁籤

  3. 大型語言模型服務頁面中,按一下 +New LLM 服務

    「組態」頁面的「大型語言模型」段落。

  4. 請輸入下列資訊

    • 名稱:輸入 LLM 服務的可識別名稱。當您在下一個步驟建立對話方塊流程時,將會參考此名稱。

    • LLM 服務:選取您在任務 1:建立模型的 REST 服務中建立的全執行處理 LLM 服務名稱。

    • 轉換處理程式:選取您在工作 3:將技能連接至模型中建立為 REST 服務一部分的事件處理程式元件名稱。

    • 將其餘的特性保留在其預設設定值中。請注意,如果這是您目前為此教學課程建立的唯一服務,則會啟用預設

      圖像

  5. 按一下「儲存」

    「儲存服務」圖示

  6. 取消選取意見和交換器上的其他預設值。

    圖像

作業 6.7:整合服務

現在,技能已連接至 LLM,透過建立可呼叫模型的對話方塊流程元件並告知其應如何處理,將技能的使用者連線至模型。此元件使用提示來說明這些指示,提示為人類可讀文字的區塊。在此任務中,我們將提供此提示,指示模型將使用者意見評估為正、負或中立。

  1. 按一下左側導覽列中的流程圖示。

    左側導覽列中的「流程」圖示

  2. 選取 unresolvedIntent

    未解決的流程

  3. unresolvedMessage 狀態中,按一下 省略符號 (...) 圖示,然後從功能表中選取新增狀態

    新增狀態選項

  4. 選取服務整合呼叫大型語言模型

  5. 輸入類似情感分析的描述,然後按一下插入

    圖像

    對話方塊流程現在包含 unresolvedMessage (傳送訊息) 狀態、invokeLLM 狀態以及 showLLMError 狀態。

    對話方塊流程中狀態為 showError 的 invokeLLM 狀態

  6. unresolvedMessage 狀態中,按一下 ellipsis (...) 圖示,然後從功能表中選取刪除,因為我們不想顯示 UnresolvedIntent 的錯誤訊息。

    圖像

    對話方塊流程現在僅包含 invokeLLM 狀態和 showLLMError 狀態。

    圖像

  7. 開啟 invokeLLM 狀態。在元件頁面中,選取我們已在任務 6.6 中建立的 LLM 服務。

    LLM 服務欄位

  8. 新增將指示貼到 LLM 服務的提示,方法是在提示中貼上以下內容。所有使用者對話都應作為「提示輸入」傳遞。

    圖像

  9. 建立 PROMPT_INPUT 變數。按一下提示參數 + ,即可新增參數及其值。

    圖像

  10. 使用串流設為 False ,以完整方式傳遞訊息,而不是遞增方式傳遞訊息。

    圖像

  11. 使用提示產生器測試提示,然後按一下建立提示

    圖像

  12. 新增提示參數模擬值,然後按一下產生輸出。如此,我們可以驗證 LLM 整合。

    圖像

Task 6.8:使用技能測試器測試提示

  1. 按一下預覽以開啟技能測試程式。

    「預覽」按鈕

  2. 輸入下列要求:您可以提供有關 Oracle Database 23.4 的簡介嗎?

    執行結果應該如下所示:

    圖像

  3. 向 LLM 要求下一個查詢:最新的 oracle database

    執行結果應該如下所示:

    圖像

作業 6.9:設定 Oracle Web 使用者管道

我們將建立 Oracle Digital Assistant 使用者管道,讓 Oracle Web 用戶端存取技能。為了確保只有我們的 Web 用戶端可以使用此管道,我們會將其設定為需要用戶端驗證。

  1. 開啟 Oracle Digital Assistant,導覽至開發通道,然後按一下 +Add 通道

  2. 建立通道中,輸入下列資訊以建立提供者端點的 POST 作業,然後按一下建立

    • 名稱:以字母為開頭且僅包含字母、數字、句號及底線的唯一名稱。例如,OCI_MD_LLM
    • 描述 (選擇性):通道的用途。
    • 通道類型:選取 Oracle Web
    • 允許的網域:輸入 *
    • 啟用從屬端認證:取消選取。

    圖像

  3. 取消選取已啟用從屬端認證 (如果尚未停用)。

  4. 路由中,選取想要使用的技能。我們已選取 LLM-MD-Skill 目前的技能。

  5. 啟用已啟用通道

  6. 請注意此通道顯示的通道 IDODA 網域 URI (不含 https)。

我們將在 Web 應用程式和權杖產生器的路由組態中使用這些值。

作業 6.10:安裝 SDK

下載壓縮檔並將其解壓縮至您的本機系統。此壓縮檔包含描述 SDK 類別的使用者指南,以及示範其許多功能的範例應用程式。

  1. 請前往 Oracle Digital Assistant (ODA) 和 Oracle Mobile Cloud (OMC) 下載Oracle Native Client SDK (適用於 OCI 原生環境) Web SDK 一節。

  2. 下載 ODA Web SDK 24.06

  3. 平台中,選取一般

  4. 按一下即可下載 oda-native-client-sdk-js-24_06 for (GENERIC (All Platforms) 的最新 ODA Js SDK。

    圖像

  5. 將下載的 zip 檔解壓縮。

作業 6.11:測試 Oracle Web App

  1. 移至下載之 Oracle Web SDK 的擷取壓縮資料夾。

  2. 開啟 samples/web/settings.js 檔案,並以實際值取代 <URI><channelId>

    舉例而言:

    • 烏里語:oda-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-dax.data.digitalassistant.oci.oraclecloud.com
    • ChannelId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
  3. 此外,請確定 isClientAuthEnabled 為 false。

    let isClientAuthEnabled = false;
    
  4. 在任何瀏覽器上執行 samples/web/index.html 檔案。

  5. 忽略索引檔內容。按一下交談圖示,將會顯示 Oracle Assistant CONNECTED 狀態。

    圖像

  6. 這是我們的網站外觀與右下角的交談圖示。我們可以開始對話,就像之前與技術測試人員一樣。

    圖像

    圖像

作業 6.12:OCI Compute 執行處理上的版本

  1. 建立 OCI Compute 執行處理。如需詳細資訊,請參閱建立執行處理

  2. 請確定您已遵循傳入規則。

    圖像

  3. 將所有 Web 資料夾複製到新建立的執行處理。

  4. 安裝 NGINX。如需詳細資訊,請參閱 Install the NGINX Web Server and Proxy on Oracle Linux

  5. 開啟瀏覽器並瀏覽至 http://<IP_address>/。如果您有自行簽署的憑證,則可以瀏覽至 https://<IP_address>/

結果

讓我們直接詢問 LLM 與使用 RAG 與 LLM 的輸出進行比較:

接下來的步驟

使用 Oracle Database 23ai、RAG、LangChain、Mistral-7B-Instruct-v0.2 和 Oracle Digital Assistant 建置進階聊天機器人,展示了整合尖端技術的強大功能,可建立高響應性和智慧型對話代理。從請求處理到回應產生的詳細工作流程,確保聊天機器人可以有效地擷取和處理大量資訊,為使用者提供準確且與情境相關的答案。開發人員可以利用 Oracle Database 23ai 的向量搜尋功能和 Oracle Digital Assistant 提供的強大平台,大幅提升聊天機器人的效能和使用者互動。這種整合式方法不僅簡化了開發流程,還導致了可擴展、高效且高度有效的 AI 解決方案,這些解決方案在數位助理的競爭環境中脫穎而出。無論是客戶服務、資訊擷取還是互動式支援,此進階聊天機器人架構都為打造滿足現代使用者需求的複雜對話式體驗鋪路。

如需有關如何使用 AI 快速操作的詳細資訊,請前往 Oracle Cloud Infrastructure Data Science YouTube 播放清單查看 AI 快速操作的示範影片,以及尋找我們的技術文件,並參閱我們的 Github 儲存庫,瞭解秘訣與範例。

如果您想要建議將特定模型新增至 AI 快速操作或有任何問題,請寄送電子郵件至 OCI 資料科學群組:ask-oci-data-science_grp@oracle.com

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center