开发OPEA微服务

开发OPEA微服务

开发微服务

在了解完 OPEA 的基本信息介绍之后,我们就可以着手开发自己的应用程序了,首先就需要开发一个微服务。

微服务的结构

OPEA 定义了一套微服务的规范,要开发微服务,我们就需要遵守这套规范。

注册微服务

首先,我们需要在代码中显式声明、注册一个微服务,这需要通过 @register_microservice 语句完成,其需要指定的参数有:

  • name:指定微服务的名称
  • service_type:指定微服务的服务类型
  • host:指定微服务使用的主机地址
  • port:指定微服务使用的主机端口
  • endpoint:指定微服务对外暴露的端点,即对外提供服务的接口
  • input_datatype:指定微服务接收用户输入的数据类型
  • output_datatype:指定微服务响应返回给用户的数据类型

比如,我们要开发一个语音识别微服务,接收用户的语音输入,并识别出语音信息转换成文本进行输出,那么,我们的微服务就可以这样进行注册:

python 复制代码
@register_microservice(
    name="opea_service@asr",
    service_type=ServiceType.ASR,
    host='0.0.0.0',
    port=9081,
    endpoint="/v1/audio/transcriptions",
    input_datatype=Base64ByteStrDoc,
    output_datatype=TextDoc,
)

上述案例中,我们注册了一个名叫 opea_service@asr 的微服务,服务类型是 ServiceType.ASR 即语音识别服务,服务监听端口是 9081,服务对外暴露的接口是 /v1/audio/transcriptions,服务接收 Base64 编码的 Base64ByteStrDoc 语音数据字符串,在识别完语音信息后将以文本形式 TextDoc 返回给用户。

定义微服务的处理逻辑

我们注册完微服务后,接下来就是需要实现微服务的具体处理逻辑了。根据 OPEA 的规范,我们需要使用 @register_statistics 来声明微服务的处理逻辑方法,并在方法中实现具体的逻辑。

根据我们注册的微服务、以及期望实现的逻辑,我们可以定义具体实现为:

python 复制代码
@register_statistics(names=["opea_service@asr"])
async def audio_to_text(audio: Base64ByteStrDoc):
    byte_str = audio.byte_str
    inputs = {"audio": byte_str}

    # 请求底层基础功能进行语音识别处理
    response = requests.post(url="http://remotehost:port/v1/asr", data=json.dumps(inputs), proxies={"http": None})

    # 返回响应结果
    return TextDoc(text=response.json()["asr_result"])

在上述案例中,我们使用 @register_statistics(names=["opea_service@asr"]) 声明了方法 audio_to_text 是微服务 opea_service@asr 的具体实现方法。该方法的输入参数数据类型即是我们注册微服务时指定的数据类型 Base64ByteStrDoc,方法的返回值数据类型是注册微服务时指定的返回数据类型 TextDoc。通过输入参数 audio 我们可以取到 byte_str 变量,这个就是用户提供的请求数据的语音数据。在具体的实现逻辑中,我们请求了一个语音转文本的底层服务,获取到了服务返回的数据 asr_result 即是语音识别结果。

启动微服务

定义完微服务、具体实现逻辑之后,我们还需要将微服务启动起来,启动就比较简单了,根据名称指定要启动的微服务,一条语句即可:

python 复制代码
opea_microservices["opea_service@asr"].start()

完整的微服务程序

下面是完整的微服务程序:

python 复制代码
import json
import os
import time

import requests

from comps import (
    Base64ByteStrDoc,
    TextDoc,
    ServiceType,
    opea_microservices,
    register_microservice,
    register_statistics,
    statistics_dict,
)

"""
注册微服务
"""
@register_microservice(
    name="opea_service@asr",
    service_type=ServiceType.ASR,
    host='0.0.0.0',
    port=9081,
    endpoint="/v1/audio/transcriptions",
    input_datatype=Base64ByteStrDoc,
    output_datatype=TextDoc,
)

# 微服务的具体处理逻辑
@register_statistics(names=["opea_service@asr"])
async def audio_to_text(audio: Base64ByteStrDoc):
    byte_str = audio.byte_str
    inputs = {"audio": byte_str}

    # 请求底层基础功能进行语音识别处理
    response = requests.post(url="http://remotehost:port/v1/asr", data=json.dumps(inputs), proxies={"http": None})

    # 返回响应结果
    return TextDoc(text=response.json()["asr_result"])

"""
启动微服务
"""
def start():
    opea_microservices["opea_service@asr"].start()

if __name__ == "__main__":
    start()

微服务验证

在验证之前,我们需要启动该服务:

bash 复制代码
python app.py

然后我们可以在Jupyter Notebook中进行验证:

python 复制代码
import requests, json, base64

with open("statics/examples/audio_test.wav", 'rb') as audio_file:
    """
    读取文件内容到字节字符串
    """
    audio_bytes = audio_file.read()

url="http://localhost:9081/v1/audio/transcriptions"

headers = {'Content-Type': 'application/json; charset=utf-8', 'accept': 'application/json'}
data=json.dumps({'byte_str': base64.b64encode(audio_bytes).decode('utf-8')})

response = requests.post(url=url, headers=headers, data=data)

response.json()["text"]

至此,恭喜您完成了第一个微服务应用程序!

相关推荐
土豆沒加23 分钟前
K8S的Dashboard登录及验证
云原生·容器·kubernetes
AL.千灯学长1 小时前
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
人工智能·gpt·ios·ai·苹果vision pro
大腕先生1 小时前
微服务环境搭建&架构介绍(附超清图解&源代码)
微服务·云原生·架构
LCG元1 小时前
大模型驱动的围术期质控系统全面解析与应用探索
人工智能
文军的烹饪实验室2 小时前
处理器架构、单片机、芯片、光刻机之间的关系
单片机·嵌入式硬件·架构
lihuayong2 小时前
计算机视觉:主流数据集整理
人工智能·计算机视觉·mnist数据集·coco数据集·图像数据集·cifar-10数据集·imagenet数据集
政安晨2 小时前
政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成
人工智能·大模型·多模态·deepseek·janus-pro-7b
猫头虎-人工智能2 小时前
NVIDIA A100 SXM4与NVIDIA A100 PCIe版本区别深度对比:架构、性能与场景解析
gpt·架构·机器人·aigc·文心一言·palm
一ge科研小菜鸡2 小时前
DeepSeek 与后端开发:AI 赋能云端架构与智能化服务
人工智能·云原生
阿里妈妈技术2 小时前
提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践
架构