昇腾Model-Agent端云协同架构解析
·
针对昇腾Model-Agent模型适配大赛第二季,若需在安卓手机应用App中集成百度AI服务(如图文生成),其核心方案是构建一个端云协同的AI Agent架构。该架构将昇腾NPU的本地推理能力与云端百度AI的丰富服务相结合,通过一个云端Agent进行编排和调度,最终在安卓客户端呈现结果。
###一、核心架构设计
整个系统可分为三个层次,协同工作流程如下:
| 层级 | 组件/技术 | 核心职责 | 关键技术点 |
|---|---|---|---|
| 云端AI Agent服务 | Python + FastAPI | 1. 接收安卓端请求。 2.调用百度AI API(如文心一言/ERNIE-ViLG)进行提示词优化或直接生成。 3. 编排任务流,必要时调用本地昇腾模型。 4. 将结果(如Base64图片或文本)返回给客户端。 |
FastAPI框架、百度千帆SDK (aip)、网络请求库 (requests)。 |
| 昇腾模型适配层 | Ascend CANN & ATC工具 | 1. 将原始模型(如PyTorch的Stable Diffusion)通过ATC工具转换为昇腾NPU支持的OM模型。 2. 提供C++/Python推理接口,供云端Agent服务调用。 |
模型转换(ATC)、离线推理(AscendCL)、性能优化。 |
| 安卓客户端 | Kotlin/Java + Retrofit | 1. 提供用户交互界面,输入文本提示。 2. 通过Retrofit向云端Agent服务发起网络请求。 3. 接收并解析响应,展示生成的图片或文本。 |
Retrofit网络库、Base64图片解码、UI更新(主线程)。 |
二、关键步骤与代码实现
1. 云端AI Agent服务开发
使用FastAPI搭建一个Web服务,作为连接客户端和AI能力的枢纽。
# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional
import requests
import base64
import json
# 假设已安装:pip install fastapi uvicorn baidu-aipfrom aip import AipImageClassify, AipNlp # 百度AI Python SDK示例
app = FastAPI(title="Ascend-Baidu AI Agent")
# 配置信息 (应从环境变量或配置文件中读取)
BAIDU_APP_ID = "your_app_id"
BAIDU_API_KEY = "your_api_key"
BAIDU_SECRET_KEY = "your_secret_key"
ASCEND_SERVICE_URL = "http://localhost:8001/infer" # 假设的本地昇腾推理服务
# 初始化百度AI客户端
client_image = AipImageClassify(BAIDU_APP_ID, BAIDU_API_KEY, BAIDU_SECRET_KEY)
#或其他服务,如AipOcr, AipNlp等
class GenerationRequest(BaseModel):
prompt: str use_ascend: Optional[bool] = False # 是否使用昇腾本地模型
@app.post("/generate/image")
async def generate_image(request: GenerationRequest):
"""
文生图接口:优先尝试用百度AI,若指定则尝试用昇腾模型。
"""
image_data = None source = ""
# 方案A: 调用百度AI文生图API (此处以千帆的ERNIE-ViLG为例,需使用对应SDK)
# 注意:百度官方文生图API可能需要使用requests直接调用千帆接口 if not request.use_ascend:
try:
# 此处为示例,实际参数需参考百度千帆API文档
baidu_api_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/text2image/...?"
headers = {"Content-Type": "application/json"}
payload = {
"text": request.prompt,
"style": "vivid",
# ... 其他参数
}
# 实际调用需要处理Access Token,此处简化
# response = requests.post(baidu_api_url, headers=headers, json=payload)
# result = response.json()
# image_data = result.get("data", {}).get("image")
# source = "Baidu AI"
# 模拟成功返回 image_data = "base64_simulated_image_data_from_baidu"
source = "Baidu AI"
except Exception as e:
print(f"Baidu API call failed: {e}")
# 失败后可降级到方案B
# 方案B: 调用本地昇腾NPU推理服务 if not image_data and request.use_ascend:
try:
ascend_payload = {"prompt": request.prompt}
response = requests.post(ASCEND_SERVICE_URL, json=ascend_payload, timeout=30)
if response.status_code == 200:
result = response.json()
image_data = result.get("generated_image_base64")
source = "Ascend NPU"
else:
raise HTTPException(status_code=500, detail="Ascend service error")
except Exception as e:
print(f"Ascend service call failed: {e}")
raise HTTPException(status_code=503, detail="All backend services unavailable")
if not image_data:
raise HTTPException(status_code=500, detail="Generation failed")
return {"source": source, "image_base64": image_data}
# 其他接口,如文本分析、图像识别等,可类似集成百度AI的其他能力
@app.post("/analyze/text")
async def analyze_text(text: str):
"""示例:调用百度NLP进行情感分析"""
# 使用百度AipNlp
# result = client_image.sentimentClassify(text)
# return result pass
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
2. 昇腾模型转换与推理服务将生成模型(如Stable Diffusion)转换为昇腾OM格式,并部署为本地推理服务。
# 使用ATC工具进行模型转换(示例)
atc --model=./sd_v1.5.onnx \
--framework=5 \
--output=./sd_v1.5_ascend \
--soc_version=Ascend310P3 \
--input_shape="latent:1,4,64,64;context:1,77,768;timestep:1" \
--log=info
转换成功后,编写一个简单的推理服务(例如使用Flask或集成到FastAPI中),通过AscendCL接口加载OM模型并执行推理。
3. 安卓客户端集成
在安卓App中,使用Kotlin和Retrofit调用上述云端Agent服务。
// NetworkService.kt
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.Body
import retrofit2.http.POSTinterface AiAgentApiService {
@POST("generate/image")
suspend fun generateImage(@Body request: GenerationRequest): ApiResponse
}
data class GenerationRequest(val prompt: String, val use_ascend: Boolean = false)
data class ApiResponse(val source: String, val image_base64: String)
object RetrofitClient {
private const val BASE_URL = "http://your-cloud-server-ip:8000/" // 替换为你的云端服务地址
val apiService: AiAgentApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(AiAgentApiService::class.java)
}
}
// MainActivity.kt (部分代码)
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Bundle
import android.util.Base64
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 示例:触发生成请求 val prompt = "一只在星空下奔跑的柯基犬"
generateImage(prompt)
}
private fun generateImage(prompt: String) {
GlobalScope.launch(Dispatchers.IO) {
try {
val request = GenerationRequest(prompt, use_ascend = false) // 或根据用户选择
val response = RetrofitClient.apiService.generateImage(request)
if (response.image_base64.isNotEmpty()) {
// 将Base64字符串解码为Bitmap val imageBytes = Base64.decode(response.image_base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
// 切换到主线程更新UI
withContext(Dispatchers.Main) {
imageView.setImageBitmap(bitmap)
textView.text = "Generated by: ${response.source}"
}
}
} catch (e: Exception) {
e.printStackTrace()
// 处理网络或服务错误
}
}
}
}
三、方案优势与参赛要点
- 端云协同,灵活高效:云端Agent作为调度中心,可根据网络、算力需求灵活选择使用百度云端大模型(速度快、能力新)或本地昇腾模型(低延迟、数据隐私好)。
- 最大化利用昇腾NPU:通过ATC工具将主流开源模型适配到昇腾硬件,体现大赛核心的“模型适配”能力,并展示端侧推理的潜力。
- 集成百度AI生态:通过调用百度千帆平台或AIP的各类API(文生图、NLP、OCR等),快速构建功能丰富的AI应用,符合大赛鼓励使用外部数据与服务的精神。
- 完整的安卓端落地:提供了从服务到客户端的完整代码示例,确保功能可在真实安卓设备上运行,突出应用落地能力。
部署注意事项:
- 云端服务需部署在公网可访问的服务器(如云主机)。
- 安卓应用需申请网络权限,并处理SSL证书问题(建议使用HTTPS)。
- 百度AI服务需在其开放平台创建应用以获取
API Key和Secret Key。 - 昇腾模型推理服务可部署在与云端Agent同一内网的带有昇腾NPU的服务器上,或通过更高阶的方案将OM模型部署到支持昇腾的安卓设备进行纯端侧推理。
参考来源
- 昇腾Model-Agent适配安卓API图文生成
- 重磅!2023中国高校计算机大赛-人工智能创意赛结果出炉
- python版--百度人工智能接口(AIP)的调用方法
- 昇腾模型对接百度AI生成图片并部署安卓应用
- 【深入探索AI原生应用】文心大模型4.0开启人工智能之门
更多推荐




所有评论(0)