注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
将 LangChain、OCI Data Science Notebook、OCI 与 OpenSearch 和 OCI Generative AI 集成,以加速 LLM 开发,实现 RAG 和对话搜索
简介
在本教程中,我们将探讨 LangChain、Oracle Cloud Infrastructure (OCI) Data Science Notebook、带 OpenSearch 的 OCI、OCI Data Science AI Quick Actions (AI Quick Actions) 和 OCI Generative AI 服务如何无缝集成,从而简化大型语言模型 (LLM) 应用开发。这些工具可加快工作流速度、提高工作效率并加快部署符合特定业务需求的先进 AI 解决方案。
在第一个教程中:教程 1:在 OCI Data Science Notebook 中将 OCI Search 与 OpenSearch 和 LangChain 集成,我们讨论了将 LangChain、OCI 与 OpenSearch 和 Hugging Face 集成的变革性影响,展示了这些技术如何与 OCI Data Science Notebook 协同工作,从而简化企业语义搜索解决方案的开发和生产。我们详细介绍了使用 OpenSearch 设置 OCI、设置 OCI 数据科学记事本、使用记事本会话配置 LangChain 以及部署语义搜索的完整用例的端到端配置步骤。
在此基础上,本教程重点介绍 LangChain、OCI 与 OpenSearch、AI Quick Actions 和 OCI Generative AI 的无缝集成如何加快定制业务用例的 LLM 应用开发。我们将特别深入探讨围绕对话搜索、检索增强生成 (RAG) 和问题解答聊天机器人的解决方案,展示这些工具如何共同帮助开发人员克服挑战,并以最少的编码提供创新、可扩展的应用程序。
注:您可以在我们的公共示例存储库中找到本教程的完整代码示例: OCI OpenSearch 服务代码示例。
综合方法的好处
-
降低复杂性:通过跨 LangChain、OCI 服务和记事本的无缝集成,您无需再使用复杂管道并降低开发开销。
-
加快上市速度:开发人员可以快速对应用进行原型设计、测试和部署,从而更快地为用户提供价值。
-
可扩展性和灵活性: OCI 强大的基础设施可满足企业应用不断增长的需求,而 LangChain 的模块化设计可轻松扩展。
-
提高生产力:通过自动执行重复性任务并简化工作流,开发人员可以专注于创新,而不是运营挑战。
使用 LLM 构建应用程序涉及多个步骤:
- 访问和部署高性能模型。
- 使用特定于域的数据进行微调模型。
- 集成检索系统,实现高效的数据查询。
- 大规模地测试、评估和部署模型。
每个步骤都需要专门的工具、复杂的管道和大量的开发工作。通过将 LangChain 与 OCI 服务集成,开发人员可以全面应对这些挑战,降低复杂性并提高工作效率。
目标
-
了解 LangChain、带 OpenSearch 的 OCI、OCI Data Science Notebook、OCI Generative AI 和 AI Quick Actions 集成的工作原理。
-
了解如何使用 AI Quick Actions 部署 LLM 模型。
-
利用 OCI 与 OpenSearch、OCI GenAI 服务和 OCI Data Science 的 LangChain 集成,加快 LLM 应用开发速度。
先决条件
-
创建版本为 2.11 或更高版本的 OpenSearch 集群。有关详细信息,请参阅使用带 OpenSearch 的 Oracle Cloud Infrastructure Search 搜索数据和可视化数据。
-
创建 OCI 数据科学记事本会话。有关详细信息,请参阅数据科学概览,您还可以阅读第一个教程:将 OCI 与 OCI 数据科学记事本中的 OpenSearch 和 LangChain 集成,或者按照在您的租户中设置数据科学记事本进行操作。
任务 1:创建 OCI 数据科学项目并配置记事本
OCI Data Science Notebook 提供了一个灵活的交互式平台,可用于开发、测试和部署 AI 应用。将记事本与 OCI 服务集成可打造无缝的开发体验,从而减少对外部工具的需求。使用笔记本,您可以:
- 原型应用:使用 LangChain、OCI Generative AI 和 OCI(通过 OpenSearch 集成)进行实验。
- 运行工作流:运行微调、部署和检索工作流。
- 协作:与团队成员共享项目并进行迭代。
要创建 OCI Data Science 项目并配置记事本,请参阅任务 2:在 OCI Data Science 中启动 Jupyter Notebook 。
任务 2:安装 LangChain
LangChain 是用于开发基于 LLM 的应用程序的最通用框架之一。其模块化设计和扩展库为以下方面提供了强大的抽象:
- 提示管理:简化并优化针对不同用例的提示创建。
- 代理支持:创建与 API 或外部工具交互的智能代理。
- 数据接口:集成数据源、检索系统和向量存储。
LangChain 能够与 OCI Generative AI、OCI OpenSearch 和 OCI Data Science 等云服务无缝交互,增强了构建企业级应用的实用性。LangChain 的灵活性使开发人员能够快速对应用程序进行原型设计和迭代,使其成为 RAG 和对话搜索解决方案的理想选择。它与 OCI 服务的集成进一步简化了开发流程,使开发人员能够专注于实现价值。在第一个教程中,我们讨论了如何使用记事本环境配置 LangChain,并介绍了如何使用 LangChain 处理非结构化数据、使用 OpenSearch 将其摄取到 OCI 以及执行语义搜索的端到端示例。
在笔记本中运行以下命令以配置 LangChain 和其他密钥库。
!pip install -U oci oracle_ads langchain langchain-community langchain-huggingface opensearch-py pypdf
任务 3:使用 LangChain 预处理和分块数据
使用以下 Python 代码。
import os
from langchain.document_loaders import PyPDFLoader, CSVLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Step 1: Load PDF and CSV Documents
def load_documents():
# Load PDF Document
pdf_loader = PyPDFLoader("data/sample_document.pdf")
pdf_documents = pdf_loader.load()
# Load CSV Document
csv_loader = CSVLoader(file_path="data/sample_data.csv")
csv_documents = csv_loader.load()
# Combine both sets of documents
all_documents = pdf_documents + csv_documents
return all_documents
# Step 2: Split the documents into smaller chunks for better processing
def split_documents(documents):
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=100
)
split_docs = text_splitter.split_documents(documents)
return split_docs
# Load and process documents
documents = load_documents()
split_docs = split_documents(documents)
任务 4:使用 OCI Generative AI Cohere 配置嵌入模型
OCI Generative AI 服务提供了一个完全托管的平台来访问先进的 LLM,例如 Cohere 和 Meta 的 LLaMA-3。它支持以下模型:
- 按需模型:访问准备进行推断的预训练模型。
- 定制模型:使用特定于域的数据对 LLM 进行微调,以进行定制响应。
- 可扩展的 AI 集群:利用高性能基础设施进行大规模部署。
AI Quick Actions 与 OCI Generative AI 的主要区别在于 AI Quick Actions 具有更广泛的模型目录,并通过模型训练、评估、精细优化和生命周期管理提供更大的灵活性。OCI Generative AI 的主要优势在于您不必拥有托管模型的基础设施。您可以对任何可用模型使用通用端点,并且仅根据请求数和令牌数收费。相比之下,使用 AI Quick Actions,您可以对 LLM 或任何 AI/ML 工作流编排和生命周期拥有更多的自主权,但只需为基础设施成本付费,并拥有无限的请求。
此外,OCI Generative AI 服务已准备好使用企业嵌入模型,例如 Cohere Embed V3 模型,该模型专为企业数据而构建,其性能优于其他预训练的句式变压器模型,尤其适用于自定义数据。您只需调用此模型即可为数据生成嵌入。因此,我们相信结合使用 OCI Generative AI 和 AI Quick Actions 可为您的业务应用提供最佳价值。您可以调用已部署的 OCI Generative AI Cohere 嵌入模型端点来嵌入数据,并使用 AI Quick Actions 对模型进行微调、测试、评估和部署。
LangChain 与 OCI Generative AI 和 AI Quick Action 无缝集成,支持开发人员直接从 OCI 环境调用模型。通过最少的配置,开发人员可以开始使用预先训练或微调的模型。
下面是有关如何使用 LangChain 集成来调用 Cohere 嵌入 V3 模型以及在数据摄取期间使用它来嵌入文档的示例。
from langchain_community.embeddings import OCIGenAIEmbeddings
oci_cohere_embedding_model = OCIGenAIEmbeddings(
model_id="cohere.embed-english-v3.0",
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
compartment_id="<>YOUR-COMPARTMENT-OCID",
auth_type="RESOURCE_PRINCIPAL",
model_kwargs={"input_type": "SEARCH_DOCUMENT"}
)
任务 5:使用 OpenSearch 和 LangChain 配置 OCI 以启用 RAG 工作流
RAG 依赖于快速准确的检索系统。OCI 提供 OpenSearch 服务,可用于:
- 索引和查询数据:存储大型数据集并快速检索相关信息。
- 语义搜索:使用嵌入提高检索准确性。
- 可扩展性:在不影响性能的情况下处理扩展数据集。
LangChain 的向量存储功能与 OCI 与 OpenSearch 集成,以支持 RAG 工作流。开发人员可以使用 OCI Generative AI 中的嵌入功能,通过 OpenSearch 高效索引和检索 OCI 中的数据。
使用以下 Python 代码。
from langchain.vectorstores import OpenSearchVectorSearch
import oci
# setup your script to use Resource principal for authentication
auth_provider = oci.auth.signers.get_resource_principals_signer()
auth = ("username", "password")
AUTH_TYPE="RESOURCE_PRINCIPAL"
opensearch_url="https://amaaaaaallb3......................opensearch.us-ashburn-1.oci.oraclecloud.com:9200" // replace this whole value your opensearch url. Be sure sure to have the :9200 port in your url
# Initialize OpenSearch as the vector database
vector_db = OpenSearchVectorSearch(opensearch_url=opensearch_url,
index_name="<YOUR-INDEX-NAME>",
embedding_function=oci_cohere_embedding_model,
signer=auth_provider,
auth_type="RESOURCE_PRINCIPAL",
http_auth=auth)
任务 6:摄取数据
使用以下 Python 代码摄取数据。
from langchain.vectorstores import OpenSearchVectorSearch
import oci
from tqdm import tqdm
batch_size=100
documents = load_documents() # function defined above feel free to or define a new one to process documents
document_chunks = split_documents(documents) // function defined above feel free to edit
index_name= <YOUR-INDEX-NAME>
# Ingest documents in batches
for i in tqdm(range(0, len(document_chunks), batch_size), desc="Ingesting batches"):
batch = document_chunks[i:i + batch_size]
vector_db.add_texts(texts=batch,
bulk_size=batch_size,
embedding=embedding_model,
opensearch_url=opensearch_url,
index_name= index_name,
signer=auth_provider,
auth_type=AUTH_TYPE,
http_auth=("username", "password"))
#refresh index
vector_db.client.indices.refresh(index=index_name)
任务 7:使用 LangChain 为 RAG 配置 LLM
OCI Data Science 中的 AI Quick Actions 可消除部署和管理 LLM 的复杂性。它提供了一个无代码接口,用于:
- 模型部署:将预先训练或微调的模型部署为 HTTP 端点。
- 微调:使用定制数据集训练模型,以提高特定于域的性能。
- 评估:使用 ROUGE 和 BERTScore 等度量测试模型。
AI Quick Actions 易于使用,可通过 OCI Data Science Notebook 环境访问。它提供了很大的灵活性。例如,您可以使用存储在 OCI Object Storage 或本地笔记本中的数据集来训练、微调或评估模型。这也是一个非常经济高效的解决方案,因为除了底层计算和存储成本之外没有额外的费用。最重要的是,您可以访问 AI Quick Actions 中提供的经过审查的模型目录,只需单击几下即可部署。此外,您还可以灵活地在自定义数据集上微调和评估这些模型中的任何模型,而无需编写任何代码。更不用说选择自带模型工件,只需使用 AI Quick Actions 进行部署,而无需担心基础设施的复杂性。最后,您可以使用内置提示界面来测试和评估已部署模型的性能。
OCI Data Science Notebook 会话中提供了 AI Quick Action。要使用 AI 快速操作,请确保在租户中设置所需的策略。有关更多信息,请参阅 AI 快速操作策略。
-
单击 AI 快速操作可从记事本会话启动 AI 快速操作。
-
访问 LLM 模型目录。
-
单击部署和创建部署。
-
在部署模型页中,输入创建模型部署所需的详细信息。
-
创建模型后,可以查看和测试已部署的模型。
-
为已部署模型创建评估。
运行以下代码以使用 LangChain 集成来调用已部署的 LLM 模型以回答问题。在这种情况下,我们将使用部署在 AI Quick Actions 中的 LLM 模型,方法是按如下方式调用其预测端点:
import ads
from langchain_community.llms import OCIModelDeploymentLLM
ads.set_auth("resource_principal")
endpoint = "https://modeldeployment.us-ashburn-1.oci.customer-oci.com/ocid1.datasciencemodeldeployment.oc1.iad.am....................../predict"
oads_llm = OCIModelDeploymentLLM(
endpoint=endpoint,
model="odsc-llm",
model_kwargs={"temperature": 0, "max_tokens": 500, 'top_p': 1.0, 'top_k': 1}
)
#test the invoke method to make sure model is deployed and active
oads_llm.invoke("who was the first president of the united states?")
任务 8:执行对话搜索和 RAG
使用以下 Python 代码执行对话搜索和 RAG。
# Create a retriever from the OpenSearch vector database
retriever = vector_db.as_retriever()
# Load a QA chain that combines the documents and generates an answer
combine_documents_chain = load_qa_chain(oads_llm, chain_type="stuff")
# Create the RetrievalQA chain
qa_chain = RetrievalQA(combine_documents_chain=combine_documents_chain, retriever=retriever)
# Example query
query="What was Notre Dame's first college? be explicit"
response = qa_chain.run(query)
print("Answer:", response)
此 RAG 应用的整个端到端代码可以在此处找到: OCI OpenSearch 服务示例笔记本。本教程的整个 GitHub 存储库位于以下位置: opensearch-integration-with-langchain 。
后续步骤
LangChain、OCI 与 OpenSearch、AI Quick Actions、OCI Generative AI 和记事本的集成为构建 LLM 应用提供了全面的解决方案。无论您是开发 RAG 系统还是会话搜索工具,这些技术都可以协同工作,提供强大、可扩展且高效的解决方案。
通过采用这种集成方法,开发人员可以充分发挥生成式 AI 的潜力,并提供变革性应用来推动业务成功。现在就开始探索这些工具,迈出构建 AI 应用未来的第一步。
相关链接
确认
-
Authors — Landry Kezebou(OCI 高级机器学习工程师 OpenSearch),Sreeni Simhadri(软件开发高级总监),Saiprasad Sethuram(工程高级经理)
-
贡献者 — Julien Lehmann(Oracle 数据平台产品营销经理),Andy Hind(高级应用架构师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Integrate LangChain, OCI Data Science Notebook, OCI with OpenSearch and OCI Generative AI to Accelerate LLM Development for RAG and Conversational Search
G25118-01
January 2025