訓練
認證
Microsoft Certified: Azure Cosmos DB Developer Specialty - Certifications
透過 Microsoft Azure Cosmos DB 在 SQL API 和 SDK 中撰寫有效率的查詢、建立索引編製原則、管理及佈建資源。
在產生 AI 的快速進化領域,GPT-3.5 等大型語言模型 (LLM) 已轉換自然語言處理。 不過,AI 中的新興趨勢是使用向量存放區,這在增強 AI 應用程式方面發揮著關鍵作用。
本教學課程將探討如何使用 Azure Cosmos DB for MongoDB (vCore)、LangChain 和 OpenAI 來實作擷取擴增生成 (RAG),以提升 AI 效能,同時討論 LLM 及其限制。 我們會探索「儲存體擷取擴增生成」(RAG) 的快速採用範例,並簡短討論 LangChain 架構 Azure OpenAI 模型。 最後,我們會將這些概念整合到真實世界的應用程式。 最後,讀者將對這些概念有紮實的理解。
大型語言模型 (LLM) 是針對大量文字資料集定型的進階深度類神經網路模型,可讓他們了解並產生類似人類文字的模型。 雖然在自然語言處理方面具有革命性,但 LLM 有固有的限制:
儲存體擷取擴增生成 (RAG) 是一種架構,旨在克服 LLM 限制。 RAG 會使用向量搜尋,根據輸入查詢擷取相關文件,提供這些文件做為 LLM 的內容,以產生更精確的回應。 RAG 不只依賴預先定型的模式,而是藉由納入最新的相關資訊來增強回應。 此方法有助於:
本教學課程示範如何使用 Azure Cosmos DB for MongoDB (vCore) 實作 RAG,以建置專為您的資料量身打造的問答應用程式。
下圖說明 RAG 實作的主要元件:
我們現在將討論本教學課程中使用的各種架構、模型和元件,強調其角色和細微差別。
Azure Cosmos DB for MongoDB (vCore) 支援語意相似性搜尋,對於 AI 支援的應用程式而言至關重要。 允許以各種格式的資料表示為向量內嵌,可以與源資料和中繼資料一起儲存。 使用近似鄰近演算法,例如階層式導覽小型世界 (HNSW),可以查詢這些內嵌以快速的語意相似性搜尋。
LangChain 為常見工作提供鏈結、多個工具整合和端對端鏈結的標準介面,藉此簡化 LLM 應用程式的建立。 可讓 AI 開發人員建置利用外部資料源的 LLM 應用程式。
LangChain 的主要層面:
應用程式服務提供強大的平台,可建置適用於 Gen-AI 應用程式的易用 Web 介面。 本教學課程會使用 Azure 應用程式服務來建立應用程式的互動式 Web 介面。
OpenAI 是 AI 研究的龍頭,提供各種用於語言產生、文字向量化、影像建立和音訊到文字轉換的模型。 在本教學課程中,我們將使用 OpenAI 的內嵌和語言模型,這對於了解和產生以語言為基礎的應用程式至關重要。
類別 | 文字內嵌模型 | 語言模型 |
---|---|---|
用途 | 將文字轉換成向量內嵌。 | 了解並產生自然語言。 |
Function | 將文字資料轉換成數位的高維度陣列,擷取文字的語意意義。 | 根據指定的輸入,理解並產生類似人類文字的文字。 |
輸出 | 數字陣列 (向量內嵌)。 | 文字、答案、翻譯、程式碼等。 |
範例輸出 | 每個內嵌都以數值形式代表文字的語意意義,而模型所決定的維度。 例如,text-embedding-ada-002 會產生具有 1536 個維度的向量。 |
根據提供的輸入產生的內容相關且連貫的文字。 例如,gpt-3.5-turbo 可以產生問題響應、翻譯文字、撰寫程式碼等等。 |
一般使用案例 | - 語意搜尋 | - 聊天機器人 |
- 建議系統 | - 自動化內容建立 | |
- 文字資料的群集和分類 | - 語言翻譯 | |
- 資訊擷取 | - 摘要 | |
資料表示法 | 數值表示法 (內嵌) | 自然語言文字 |
維度性 | 陣列的長度會對應至內嵌空間中的維度數目,例如 1536 個維度。 | 通常以權杖序列表示,內容會決定長度。 |
若要開始使用 Azure Cosmos DB for MongoDB (vCore) 來最佳化擷取擴增生成 (RAG),請遵循下列步驟:
text-embedding-ada-002
)。gpt-35-turbo
)。在本教學課程中,我們將使用文件載入單一文字檔。 這些檔案應該儲存在 src 資料夾中名為資料的目錄中。 其中內容如下:
{
"category": "Cold Dishes",
"name": "Hamachi Fig",
"description": "Hamachi sashimi lightly tossed in a fig sauce with rum raisins, and serrano peppers then topped with fried lotus root.",
"price": "16.0 USD"
},
mongo_client = MongoClient(mongo_connection_string)
database_name = "Contoso"
db = mongo_client[database_name]
collection_name = "ContosoCollection"
index_name = "ContosoIndex"
collection = db[collection_name]
from langchain_openai import AzureOpenAIEmbeddings
openai_embeddings_model = os.getenv("AZURE_OPENAI_EMBEDDINGS_MODEL_NAME", "text-embedding-ada-002")
openai_embeddings_deployment = os.getenv("AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME", "text-embedding")
azure_openai_embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings(
model=openai_embeddings_model,
azure_deployment=openai_embeddings_deployment,
)
vector_store: AzureCosmosDBVectorSearch = AzureCosmosDBVectorSearch.from_documents(
json_data,
azure_openai_embeddings,
collection=collection,
index_name=index_name,
)
num_lists = 100
dimensions = 1536
similarity_algorithm = CosmosDBSimilarityType.COS
kind = CosmosDBVectorSearchType.VECTOR_HNSW
m = 16
ef_construction = 64
vector_store.create_index(
num_lists, dimensions, similarity_algorithm, kind, m, ef_construction
)
vector_store: AzureCosmosDBVectorSearch = AzureCosmosDBVectorSearch.from_connection_string(
connection_string=mongo_connection_string,
namespace=f"{database_name}.{collection_name}",
embedding=azure_openai_embeddings,
)
query = "beef dishes"
docs = vector_store.similarity_search(query)
print(docs[0].page_content)
azure_openai_chat: AzureChatOpenAI = AzureChatOpenAI(
model=openai_chat_model,
azure_deployment=openai_chat_deployment,
)
history_prompt = ChatPromptTemplate.from_messages(
[
MessagesPlaceholder(variable_name="chat_history"),
("user", "{input}"),
(
"user",
"""Given the above conversation,
generate a search query to look up to get information relevant to the conversation""",
),
]
)
context_prompt = ChatPromptTemplate.from_messages(
[
("system", "Answer the user's questions based on the below context:\n\n{context}"),
MessagesPlaceholder(variable_name="chat_history"),
("user", "{input}"),
]
)
vector_store_retriever = vector_store.as_retriever(
search_type=search_type, search_kwargs={"k": limit, "score_threshold": score_threshold}
)
retriever_chain = create_history_aware_retriever(azure_openai_chat, vector_store_retriever, history_prompt)
context_chain = create_stuff_documents_chain(llm=azure_openai_chat, prompt=context_prompt)
rag_chain: Runnable = create_retrieval_chain(
retriever=retriever_chain,
combine_docs_chain=context_chain,
)
下列螢幕擷取畫面說明各種問題的輸出。 純粹的語意相似性搜尋會從來源文件傳回原始文字,而使用RAG架構的問答應用程式會藉由結合擷取的文件內容與語言模型來產生精確的個人化答案。
在本教學課程中,我們探索如何使用 Cosmos DB 作為向量存放區,建置與私人資料互動的問答應用程式。 藉由利用 LangChain 和 Azure OpenAI 的擷取擴增生成 (RAG) 架構,我們示範向量存放區對於 LLM 應用程式而言非常重要。
RAG 是 AI 的顯著進步,特別是在自然語言處理中,結合這些技術可針對各種使用案例建立強大的 AI 驅動應用程式。
如需詳細的實際操作體驗,並查看如何使用 Azure Cosmos DB for MongoDB (vCore) 實作 RAG、LangChain 和 OpenAI 模型,請造訪我們的 GitHub 存放庫。
訓練
認證
Microsoft Certified: Azure Cosmos DB Developer Specialty - Certifications
透過 Microsoft Azure Cosmos DB 在 SQL API 和 SDK 中撰寫有效率的查詢、建立索引編製原則、管理及佈建資源。