Elasticsearch:如何把 OpenAI 的代码修改为 Azure OpenAI

我们知道除了 OpenAI 提供数据嵌入及 Chat Completion 功能之外,Azure 也提供 OpenAI 类似的服务。这两个都是经常需要的平台。在我们的 Elasticsearh labs 里有很多代码是使用 OpenAI 来完成的,那么我们该如何把它们修改为使用 Azure 所提供的 OpenAI 呢?

我们先以一个之前做过的例子来进行展示。

Azure OpenAI embeddings

我们选择之前的文章 “Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)”。在这里文章中,我们使用 OpenAI 来生成相应的 embeddings。我在 Azure OpenAI 上创建一个 text-embedding-ada-002 的模型。

在 Azure 网站上,我们需要知道这个 embedding 模型的如下参数:

MODEL_NAME=text-embedding-ada-002
AZURE_ENDPOINT=https://embeddings-testing1.openai.azure.com/
AZURE_API_KEY="YourEmbeddingModelKey"
AZURE_OPENAI_API_VERSION=2023-05-15

你需要得到如上所示的信息。有了这些信息,我们需要对代码做如下的修改:

# from langchain.embeddings import OpenAIEmbeddings
from langchain_openai import AzureOpenAIEmbeddings

如上所示,我们使用 AzureOpenAIEmbeddings 而不是之前的 OpenAIEmbeddings。我们需要使用如下的方法来创建 embeddings:

# embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)model_name = os.getenv('MODEL_NAME')
azure_endpoint = os.getenv('AZURE_ENDPOINT')
azure_api_key = os.getenv('AZURE_API_KEY')
azure_openai_api_version = os.getenv('AZURE_OPENAI_API_VERSION')embeddings = AzureOpenAIEmbeddings(model=model_name,azure_endpoint=azure_endpoint, api_key=azure_api_key,openai_api_version=azure_openai_api_version
)

请注意和之前的注释掉的那个代码的区别。

最终的完整代码在地址 https://github.com/liu-xiao-guo/semantic_search_es/blob/main/ElasticsearchStore_azure.ipynb 可以进行下载。

更多代码,请参考 https://github.com/elastic/elasticsearch-labs/blob/213d5af0fe919277087fe7e80793eb35ad88fa82/notebooks/integrations/azure-openai/vector-search-azure-openai-elastic.ipynb

def generate_embeddings(text):client = AzureOpenAI(api_key=AZURE_OPENAI_API_KEY,api_version=AZURE_OPENAI_API_VERSION,azure_endpoint=AZURE_OPENAI_ENDPOINT,)response = client.embeddings.create(input=text,model=AZURE_DEPLOYMENT_ID,)return response.data[0].embeddingsample_text = "India generally experiences a hot summer from March to June, with temperatures often exceeding 40°C in central and northern regions. Monsoon season, from June to September, brings heavy rainfall, especially in the western coast and northeastern areas. Post-monsoon months, October and November, mark a transition with decreasing rainfall. Winter, from December to February, varies in temperature across the country, with colder conditions in the north and milder weather in the south. India's diverse climate is influenced by its geographical features, resulting in regional"
embeddings = generate_embeddings(sample_text)

Azure OpenAI chat completion

在 RAG 的应用场景中,我们还必须使用 chat completion 来完成我们的操作。我们可以参考链接。我们使用之前的文章 “Elasticsearch:使用 OpenAI、LangChain 和 Streamlit 的基于 LLM 的 PDF 摘要器和 Q/A 应用程序” 为例。在之前的版本里,我使用了 OpenAI 来完成。为了把代码转换为 Azure OpenAI,我们可以经过如下的改动:

      model_name = os.getenv('MODEL_NAME')azure_embedding_endpoint = os.getenv('AZURE_EMBEDDING_ENDPOINT')azure_embedding_api_key = os.getenv('AZURE_EMBEDDING_API_KEY')azure_embedding_api_version = os.getenv("AZURE_EMBEDDING_API_VERSION")# create embeddingsembeddings = AzureOpenAIEmbeddings(model=model_name,azure_endpoint=azure_embedding_endpoint, api_key= azure_embedding_api_key,openai_api_version=azure_embedding_api_version)

这个是针对我们的嵌入模型来进行的。我们可以在 .env 里定义我们所需要的变量:

MODEL_NAME=text-embedding-ada-002
AZURE_EMBEDDING_ENDPOINT=https://embeddings-testing1.openai.azure.com/
AZURE_EMBEDDING_API_KEY="YourEmbeddingKey"
AZURE_EMBEDDING_API_VERSION=2023-05-15AZURE_API_KEY="YourChatCompletionKey"
AZURE_EDNPOINT="YourEndPoint"
AZURE_API_VERSION="2023-03-15-preview"
AZURE_DEPLOYMENT_ID="YourDeploymentId"

除此之外,我们还需要针对 chat completion 部分的代码进行修改:

      azure_api_key = os.getenv('AZURE_API_KEY')azure_endpoint = os.getenv('AZURE_EDNPOINT')azure_api_version = os.getenv('AZURE_API_VERSION')azure_deployment_id = os.getenv('AZURE_DEPLOYMENT_ID')llm = AzureChatOpenAI(api_key=azure_api_key,  api_version=azure_api_version,azure_endpoint=azure_endpoint,azure_deployment=azure_deployment_id,)       

运行完代码,我们可以看到如下的画面:

streamlit run azure.py 

你可以在链接下载代码:PDF-Summarizer-End-to-End-Project/azure.py at main · liu-xiao-guo/PDF-Summarizer-End-to-End-Project · GitHub

使用 Azure OpenAI 来实现 embeddings 及 chat completion

我们采用之前的例子 “使用 Elasticsearch 和 OpenAI 构建生成式 AI 应用程序”。在这个应用中在查询的时候,查询的文字也是需要转换为向量来进行查询的。我们修改 app.py 的代码如下:

.env

MODEL_NAME=text-embedding-ada-002
AZURE_EMBEDDING_ENDPOINT=https://embeddings-testing1.openai.azure.com/
AZURE_EMBEDDING_API_KEY="YourEmbeddingKey"
AZURE_EMBEDDING_API_VERSION=2023-05-15AZURE_API_KEY="YourChatCompletionKey"
AZURE_EDNPOINT="YourEndPoint"
AZURE_API_VERSION="2023-03-15-preview"
AZURE_DEPLOYMENT_ID="YourDeploymentId"
import os
import streamlit as st
# import openai
from openai import AzureOpenAI
from elasticsearch import Elasticsearch
from dotenv import load_dotenv# from openai import OpenAI# openai = OpenAI()load_dotenv()azure_api_key = os.getenv('AZURE_API_KEY')
azure_endpoint = os.getenv('AZURE_EDNPOINT')
azure_api_version = os.getenv('AZURE_API_VERSION')
azure_deployment_id = os.getenv('AZURE_DEPLOYMENT_ID')chat = AzureOpenAI(api_key = azure_api_key,  api_version = azure_api_version,azure_endpoint = azure_endpoint
)model_name = os.getenv('MODEL_NAME')
azure_embedding_endpoint = os.getenv('AZURE_EMBEDDING_ENDPOINT')
azure_embedding_api_key = os.getenv('AZURE_EMBEDDING_API_KEY')
azure_embedding_api_version = os.getenv("AZURE_EMBEDDING_API_VERSION")embeddings = AzureOpenAI(api_key=azure_embedding_api_key,api_version=azure_embedding_api_version,azure_endpoint=azure_embedding_endpoint,)elastic_user=os.getenv('ES_USER')
elastic_password=os.getenv('ES_PASSWORD')
elastic_endpoint=os.getenv("ES_ENDPOINT")# openai_api_key=os.getenv('OPENAI_API_KEY')# openai.api_type = "azure"url = f"https://{elastic_user}:{elastic_password}@{elastic_endpoint}:9200"
client = Elasticsearch(url, ca_certs = "./http_ca.crt", verify_certs = True)# Define model
EMBEDDING_MODEL = "text-embedding-ada-002"def openai_summarize(query, response):context = response['hits']['hits'][0]['_source']['text']summary = chat.chat.completions.create(model = azure_deployment_id,messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Answer the following question:" + query + "by using the following text: " + context},])print(summary)return summary.choices[0].message.contentdef search_es(query):# Create embeddingquestion_embedding = embeddings.embeddings.create(input=query, model=EMBEDDING_MODEL)# Define Elasticsearch queryresponse = client.search(index = "wikipedia_vector_index",knn={"field": "content_vector","query_vector":  question_embedding.data[0].embedding,"k": 10,"num_candidates": 100})return responsedef main():st.title("Gen AI Application")# Input for user search queryuser_query = st.text_input("Enter your question:", "what is football?")if st.button("Search"):if user_query:st.write(f"Searching for: {user_query}")result = search_es(user_query)# print(result)openai_summary = openai_summarize(user_query, result)st.write(f"OpenAI Summary: {openai_summary}")# Display search resultsif result['hits']['total']['value'] > 0:st.write("Search Results:")for hit in result['hits']['hits']:st.write(hit['_source']['title'])st.write(hit['_source']['text'])else:st.write("No results found.")if __name__ == "__main__":main()

最终的代码在链接下载:semantic_search_es/openai_rag_streamlit_azure.ipynb at main · liu-xiao-guo/semantic_search_es · GitHub

运行完代码后,我们可以看到如下的页面:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3703.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

软件体系结构

第一章 构件 具有某种功能的 可复用的软件结构单元,为组装服务,可部署,具有规范的接口规约和显式的语境依赖 构件模型 构件模型是对构件本质特征的抽象描述,可以把它想象成一个类的组合,它封装了多个类,并具有一个或多个服务而提供了简单…

基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发

在中医针灸的传统治疗中,穴位取穴的精确度对于治疗效果至关重要。然而,传统的定位方法,如体表标志法、骨度折量法和指寸法,由于观察角度、个体差异(如人体姿态和皮肤纹理)以及环境因素的干扰,往…

华硕推出Intel Xeon 6/ Gaudi 3服务器 加速企业AI布局!

(10月23日,台北讯) 华硕服务器新品接力强势助攻,今再推出多款搭载Intel Xeon 6处理器的服务器,包括:多节点的ASUS RS920Q-E12,其兼容适用HPC运算的Intel Xeon 6900系列处理器;以及ASUS RS720Q-E12、RS720-E…

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…

人工智能基础-opencv-图像处理篇

一.图像预处理 图像翻转 cv2.flip 是 OpenCV 库中的一个函数,用于翻转图像。翻转可以是水平翻转、垂直翻转或同时水平和垂直翻转。这个函数接受两个参数:要翻转的图像和一个指定翻转类型的标志。 img cv2.imread(../images/car2.png) #翻转 0&#xf…

【机器学习】嘿马机器学习(科学计算库)第4篇:Matplotlib,学习目标【附代码文档】

本教程的知识点为:机器学习(常用科学计算库的使用)基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原…

平衡二叉树(递归)

给定一个二叉树,判断它是否是 平衡二叉树.平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:root [1,2,2,3,3,null,null,4…

Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)

案例背景 虽然在效果上,传统的逻辑回归模型通常不如现代的机器学习模型,但在风控领域,解释性至关重要。逻辑回归的解释性是这些“黑箱”模型所无法比拟的,因此,研究传统的评分卡模型依然是有意义的。 传统的评分卡模型…

Weblogic漏洞复现(Vulhub)

0x00前言 1.docker 安装 Docker的安装_docker安装-CSDN博客 2.docker的镜像 1.可以在阿里云上的容器服务找到镜像源。 2.也可以使用下面的镜像源,时快时慢不稳定。 {"registry-mirrors":["https://docker.registry.cyou","https://d…

【Python环境配置-Step1】PyCharm 2024最新官网下载、安装教程

背景: 1、 步骤: 1、PyCharm 官网下载地址:https://www.jetbrains.com/pycharm/ 2、查看下图红框选中,下载社区版(免费) 3、(查看下图红框选中)这里选其他版本 4、这里我下载的…

用vite创建项目

一. vite vue2 1. 全局安装 create-vite npm install -g create-vite 2. 创建项目 进入你想要创建项目的文件夹下 打开 CMD 用 JavaScript create-vite my-vue2-project --template vue 若用 TypeScript 则 create-vite my-vue2-project --template vue-ts 这里的 …

FBX福币交易所A股三大指数小幅低开 稀土永磁板块回调

查查配分析11月5日电 周二,A股三大指数小幅低开。沪指开盘跌0.10%报3306.81点,深证成指开盘跌0.09%报10653.20点,创业板指开盘跌0.05%报2184.90点。 FBX福币凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 来源:同花顺iFinD 盘面…

LeetCode总结-链表

一、遍历链表 1290.二进制链表转整数 2058.找出临界点之间的最小和最大距离 2181.合并零之间的节点 二、删除节点 问:为什么没有修改 dummy,但 dummy.next 却是新链表的头节点?如果删除了 head,那么最后返回的是不是原链表的头…

腐蚀图像分割系统:前端交互展示

腐蚀图像分割系统源码&数据集分享 [yolov8-seg-C2f-DySnakeConv&yolov8-seg-LSKNet等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al…

NIM 平台生成式 AI-demo

需要python环境 官网注册:(后续调用模型需要秘钥key)Try NVIDIA NIM APIs 可以看到有多种模型: 官方案例 1.安装相关依赖: pip install langchain_nvidia_ai_endpoints langchain-community langchain-text-splitt…

欢迎使用Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

智慧医疗:AI如何改变传统医疗服务模式?

内容概要 在如今的医疗界,智慧医疗正如一阵旋风,呼啸而来,打破了传统的模式。这一变革的核心,毫无疑问是人工智能。想象一下,一个不需要排队候诊、甚至不需要出门的医生——这就是智能助手的非凡魅力!通过…

1.kubernetes作用及组件

容器管理集群名称叫做k8s 容器的编排工具:swarm,kubesphere,open shift,kubernetes【市场占比大】 一.kubernetes介绍 1.kubernetes是什么? 由谷歌公司开源的应用,基于go语言编写 简称k8s 2.kubernet…

【AcWing】算法基础课-动态规划

目录 1、闫式DP分析法 2、背包问题 2.1 01背包问题 朴素版本 优化版本 2.2 完全背包问题 朴素版本 优化版本 2.3 多重背包问题 朴素版本 二进制优化 2.4 分组背包问题 3、线性DP 3.1 数字三角形 3.2 最长上升子序列 3.3 最长公共子序列 4、区间DP 5、数位统计…

白天用的投影仪哪款好?掌握这个亮度参数谁敢忽悠你

人们追求松弛人生的同时,也着眼于高品质的家庭娱乐体验,高端家用投影仪以其大屏幕的视觉冲击力和便捷的移动性,应运成为众多家庭客厅、卧室的新宠。而在挑选家用投影仪时,亮度作为衡量其性能的重要指标之一,直接影响着…