HarmonyOS开发:HarmonyOS 6 AI能力——大模型端侧集成实战

举报
Jack20 发表于 2026/06/27 20:41:01 2026/06/27
【摘要】 HarmonyOS开发:HarmonyOS 6 AI能力——大模型端侧集成实战📌 核心要点:HarmonyOS 6开放了端侧大模型推理能力,7B参数模型可在旗舰设备本地运行,AI Agent框架让应用具备自主决策能力,端云协同方案兼顾性能与隐私。 背景与动机AI应用最大的痛点是什么?延迟。你跟AI助手说句话,等2秒才出回复——这还是网络好的情况。地铁里、电梯里、信号差的地方,AI直接罢工...

HarmonyOS开发:HarmonyOS 6 AI能力——大模型端侧集成实战

📌 核心要点:HarmonyOS 6开放了端侧大模型推理能力,7B参数模型可在旗舰设备本地运行,AI Agent框架让应用具备自主决策能力,端云协同方案兼顾性能与隐私。

背景与动机

AI应用最大的痛点是什么?延迟。

你跟AI助手说句话,等2秒才出回复——这还是网络好的情况。地铁里、电梯里、信号差的地方,AI直接罢工。更别提隐私问题:你的聊天记录、照片、文档全要上传到云端,心里能踏实?

端侧大模型就是来解决这些问题的。模型跑在本地,延迟从秒级降到毫秒级,数据不出设备,隐私有保障。

但端侧跑大模型,说起来容易做起来难。手机内存就那么大,7B参数的模型要4-5GB内存,怎么塞得下?推理速度怎么保证?模型怎么更新?跟云端模型怎么协同?

HarmonyOS 6给出了一套完整的答案:端侧推理框架 + AI Agent能力开放 + 端云协同方案。这篇文章把这三块全拆开讲。

核心原理

HarmonyOS 6的AI能力体系分三层:

flowchart TD
    A[HarmonyOS 6 AI能力体系] --> B[端侧推理引擎]
    A --> C[AI Agent框架]
    A --> D[端云协同层]

    B --> B1[模型量化与压缩]
    B --> B2[推理加速引擎]
    B --> B3[模型热更新]

    C --> C1[意图识别]
    C --> C2[任务规划]
    C --> C3[工具调用]
    C --> C4[记忆管理]

    D --> D1[智能路由]
    D --> D2[结果融合]
    D --> D3[隐私分级]

    classDef root fill:#6A1B9A,color:#fff,stroke:#4A148C
    classDef engine fill:#1565C0,color:#fff,stroke:#0D47A1
    classDef agent fill:#2E7D32,color:#fff,stroke:#1B5E20
    classDef cloud fill:#E65100,color:#fff,stroke:#BF360C

    class A,root
    class B,B1,B2,B3,engine
    class C,C1,C2,C3,C4,agent
    class D,D1,D2,D3,cloud

端侧推理引擎

端侧跑大模型的关键是量化。把FP32精度的模型量化到INT4,模型体积缩小8倍,推理速度提升3-5倍,精度损失控制在2%以内。

模型规模 参数量 FP32大小 INT4大小 推理速度 适用设备
小模型 1.5B 6GB 750MB 30 tok/s 所有设备
中模型 3B 12GB 1.5GB 20 tok/s 8GB+内存
大模型 7B 28GB 3.5GB 10 tok/s 12GB+内存

旗舰设备(Mate 70系列)能跑7B模型,中端设备跑3B,入门设备跑1.5B。你的应用应该根据设备能力自动选择模型规格。

AI Agent框架

AI Agent不是简单的"问答机器人",而是能自主完成任务的智能体。用户说"帮我订明天去北京的机票",Agent会自动:识别意图→查询航班→比较价格→确认预订→完成支付。

Agent框架提供四个核心能力:

  • 意图识别:理解用户到底想干什么
  • 任务规划:把复杂任务拆成可执行的步骤
  • 工具调用:调用系统API或应用接口完成具体操作
  • 记忆管理:记住上下文,支持多轮对话

端云协同

不是所有任务都适合端侧处理。复杂推理、大规模知识检索还是云端更强。端云协同的核心是智能路由:简单任务端侧处理(快+隐私),复杂任务云端处理(强+全面)。

代码实战

基础用法:端侧模型推理

// 端侧大模型推理 - 基础用法
import { aiInference } from '@ohos.ai.inference'
import { deviceInfo } from '@ohos.deviceInfo'

// 模型配置
interface ModelConfig {
  name: string
  path: string
  quantization: 'fp32' | 'int8' | 'int4'
  maxTokens: number
  temperature: number
}

// 根据设备能力选择模型
function selectModel(): ModelConfig {
  const totalMem = deviceInfo.totalMemory ?? 0  // 单位MB

  if (totalMem >= 12288) {
    // 12GB+内存:使用7B模型
    return {
      name: 'chat-7b-int4',
      path: '/data/models/chat-7b-int4.bin',
      quantization: 'int4',
      maxTokens: 2048,
      temperature: 0.7
    }
  } else if (totalMem >= 8192) {
    // 8GB+内存:使用3B模型
    return {
      name: 'chat-3b-int4',
      path: '/data/models/chat-3b-int4.bin',
      quantization: 'int4',
      maxTokens: 1024,
      temperature: 0.7
    }
  } else {
    // 其他设备:使用1.5B模型
    return {
      name: 'chat-1.5b-int4',
      path: '/data/models/chat-1.5b-int4.bin',
      quantization: 'int4',
      maxTokens: 512,
      temperature: 0.7
    }
  }
}

@Entry
@Component
struct LocalAIPage {
  @State messages: ChatMsg[] = []
  @State inputText: string = ''
  @State isModelReady: boolean = false
  @State isGenerating: boolean = false
  private model: aiInference.Model | null = null
  private modelConfig: ModelConfig = selectModel()

  async aboutToAppear() {
    await this.loadModel()
  }

  // 加载端侧模型
  async loadModel() {
    try {
      this.model = await aiInference.loadModel({
        modelPath: this.modelConfig.path,
        backend: aiInference.Backend.GPU_PREFERRED,  // 优先使用GPU
        cacheSize: 512  // KV缓存大小(MB)
      })
      this.isModelReady = true
      console.info(`模型加载成功: ${this.modelConfig.name}`)
    } catch (err) {
      console.error(`模型加载失败: ${JSON.stringify(err)}`)
      // 降级到云端推理
      this.isModelReady = false
    }
  }

  // 端侧推理
  async generateResponse(prompt: string): Promise<string> {
    if (!this.model) {
      throw new Error('模型未加载')
    }

    const result = await this.model.generate({
      prompt: prompt,
      maxTokens: this.modelConfig.maxTokens,
      temperature: this.modelConfig.temperature,
      topP: 0.9,
      stopTokens: ['<|endoftext|>', '<|end|>']
    })

    return result.text
  }

  // 流式推理
  async generateStream(prompt: string, onToken: (token: string) => void): Promise<void> {
    if (!this.model) return

    const stream = await this.model.generateStream({
      prompt: prompt,
      maxTokens: this.modelConfig.maxTokens,
      temperature: this.modelConfig.temperature
    })

    for await (const chunk of stream) {
      onToken(chunk.text)
    }
  }

  // 发送消息
  async sendMessage() {
    if (!this.inputText.trim() || this.isGenerating) return

    const userMsg: ChatMsg = {
      id: `user_${Date.now()}`,
      role: 'user',
      content: this.inputText.trim(),
      timestamp: Date.now()
    }
    this.messages.push(userMsg)
    this.isGenerating = true

    const aiMsg: ChatMsg = {
      id: `ai_${Date.now()}`,
      role: 'assistant',
      content: '',
      timestamp: Date.now()
    }
    this.messages.push(aiMsg)

    // 构建对话上下文
    const context = this.messages
      .slice(-10)  // 最近10轮对话
      .map(m => `${m.role === 'user' ? '用户' : '助手'}: ${m.content}`)
      .join('\n')
    const prompt = `${context}\n助手:`

    try {
      // 流式输出
      await this.generateStream(prompt, (token: string) => {
        aiMsg.content += token
        this.messages = [...this.messages]  // 触发UI更新
      })
    } catch (err) {
      aiMsg.content = '抱歉,生成失败,请重试。'
      console.error(`推理失败: ${JSON.stringify(err)}`)
    } finally {
      this.isGenerating = false
      this.messages = [...this.messages]
    }

    this.inputText = ''
  }

  build() {
    Column() {
      // 模型状态
      Row() {
        Circle({ width: 8, height: 8 })
          .fill(this.isModelReady ? '#4CAF50' : '#F44336')
        Text(this.isModelReady 
          ? `端侧模型就绪 (${this.modelConfig.name})` 
          : '模型未就绪')
          .fontSize(12)
          .fontColor('#666666')
          .margin({ left: 6 })
      }
      .padding({ left: 16, top: 8 })

      // 消息列表
      List({ space: 8 }) {
        ForEach(this.messages, (msg: ChatMsg) => {
          ListItem() {
            Row() {
              if (msg.role === 'user') Blank()
              Text(msg.content)
                .fontSize(14)
                .padding(10)
                .borderRadius(12)
                .backgroundColor(msg.role === 'user' ? '#1565C0' : '#F0F0F0')
                .fontColor(msg.role === 'user' ? Color.White : '#333333')
                .maxLines(20)
              if (msg.role === 'assistant') Blank()
            }
            .width('100%')
          }
        }, (msg: ChatMsg) => msg.id)
      }
      .layoutWeight(1)
      .padding(12)

      // 输入区
      Row({ space: 8 }) {
        TextInput({ text: $$this.inputText, placeholder: '输入消息...' })
          .layoutWeight(1)
          .height(44)
          .borderRadius(22)
          .enabled(!this.isGenerating)
        Button('发送')
          .height(44)
          .borderRadius(22)
          .enabled(!this.isGenerating && this.inputText.trim().length > 0)
          .onClick(() => this.sendMessage())
      }
      .width('100%')
      .padding({ left: 12, right: 12, bottom: 12 })
    }
    .width('100%')
    .height('100%')
  }
}

interface ChatMsg {
  id: string
  role: 'user' | 'assistant'
  content: string
  timestamp: number
}

进阶用法:AI Agent能力调用

// AI Agent - 任务规划与工具调用
import { aiAgent } from '@ohos.ai.agent'

// 定义可用工具
const TOOLS: aiAgent.ToolDefinition[] = [
  {
    name: 'get_weather',
    description: '获取指定城市的天气信息',
    parameters: {
      type: 'object',
      properties: {
        city: { type: 'string', description: '城市名称' }
      },
      required: ['city']
    }
  },
  {
    name: 'search_restaurant',
    description: '搜索附近的餐厅',
    parameters: {
      type: 'object',
      properties: {
        location: { type: 'string', description: '位置' },
        cuisine: { type: 'string', description: '菜系' },
        price_range: { type: 'string', description: '价格范围' }
      },
      required: ['location']
    }
  },
  {
    name: 'set_reminder',
    description: '设置提醒',
    parameters: {
      type: 'object',
      properties: {
        title: { type: 'string', description: '提醒标题' },
        time: { type: 'string', description: '提醒时间' }
      },
      required: ['title', 'time']
    }
  }
]

// 工具执行函数
async function executeTool(name: string, params: Record<string, string>): Promise<string> {
  switch (name) {
    case 'get_weather':
      // 实际场景中调用天气API
      return `${params.city}今天晴,气温25°C,适合出行`
    case 'search_restaurant':
      return `${params.location}附近找到3家${params.cuisine ?? ''}餐厅:1.老王饭馆(人均50) 2.小李厨房(人均80) 3.张记食府(人均120)`
    case 'set_reminder':
      return `已设置提醒:${params.time} - ${params.title}`
    default:
      return '未知工具'
  }
}

@Entry
@Component
struct AIAgentPage {
  @State chatHistory: string = ''
  @State inputText: string = ''
  @State isProcessing: boolean = false
  private agent: aiAgent.Agent | null = null

  async aboutToAppear() {
    // 创建Agent实例
    this.agent = await aiAgent.create({
      modelPath: '/data/models/chat-3b-int4.bin',
      tools: TOOLS,
      systemPrompt: '你是一个智能助手,可以帮助用户查询天气、搜索餐厅、设置提醒。请用中文回复。',
      maxIterations: 5  // 最大工具调用轮次
    })
  }

  // 处理用户输入
  async processInput(userInput: string) {
    if (!this.agent) return
    this.isProcessing = true

    this.chatHistory += `\n👤 用户: ${userInput}\n`

    try {
      // Agent自主决策:可能直接回复,也可能调用工具
      const result = await this.agent.run({
        input: userInput,
        // 工具调用回调
        onToolCall: async (toolName: string, params: Record<string, string>) => {
          const toolResult = await executeTool(toolName, params)
          this.chatHistory += `🔧 调用工具: ${toolName}(${JSON.stringify(params)})\n`
          this.chatHistory += `📋 工具结果: ${toolResult}\n`
          return toolResult
        },
        // 思考过程回调
        onThinking: (thought: string) => {
          this.chatHistory += `💭 思考: ${thought}\n`
        }
      })

      this.chatHistory += `🤖 助手: ${result.output}\n`
    } catch (err) {
      this.chatHistory += `❌ 错误: ${JSON.stringify(err)}\n`
    }

    this.isProcessing = false
    this.inputText = ''
  }

  build() {
    Column() {
      // 对话历史
      Scroll() {
        Text(this.chatHistory)
          .fontSize(14)
          .fontFamily('monospace')
          .width('100%')
          .padding(16)
      }
      .layoutWeight(1)
      .width('100%')
      .backgroundColor('#FAFAFA')

      // 输入区
      Row({ space: 8 }) {
        TextInput({ text: $$this.inputText, placeholder: '试试: 明天北京天气怎么样?' })
          .layoutWeight(1)
          .height(44)
          .borderRadius(22)
          .enabled(!this.isProcessing)
          .onSubmit(() => this.processInput(this.inputText))

        Button('发送')
          .height(44)
          .borderRadius(22)
          .enabled(!this.isProcessing && this.inputText.trim().length > 0)
          .onClick(() => this.processInput(this.inputText))
      }
      .width('100%')
      .padding({ left: 12, right: 12, bottom: 12 })
    }
    .width('100%')
    .height('100%')
  }
}

完整示例:端云协同AI方案

// 端云协同AI - 智能路由
import { aiInference } from '@ohos.ai.inference'
import { http } from '@ohos.net.http'

// 任务复杂度评估
type TaskComplexity = 'simple' | 'medium' | 'complex'

interface AIRequest {
  prompt: string
  maxTokens?: number
  temperature?: number
  requirePrivacy?: boolean  // 是否要求隐私保护
}

interface AIResponse {
  text: string
  source: 'local' | 'cloud'  // 响应来源
  latency: number             // 响应延迟(ms)
  tokensUsed: number          // 消耗的token数
}

export class HybridAIService {
  private localModel: aiInference.Model | null = null
  private cloudEndpoint: string = 'https://ai-api.example.com/v1/chat'
  private isLocalReady: boolean = false

  // 初始化
  async init() {
    try {
      this.localModel = await aiInference.loadModel({
        modelPath: '/data/models/chat-3b-int4.bin',
        backend: aiInference.Backend.GPU_PREFERRED,
        cacheSize: 256
      })
      this.isLocalReady = true
    } catch (err) {
      console.warn(`端侧模型加载失败,将使用云端: ${err}`)
      this.isLocalReady = false
    }
  }

  // 评估任务复杂度
  private assessComplexity(prompt: string): TaskComplexity {
    // 简单任务:闲聊、简单问答、格式转换
    const simplePatterns = /^(你好|谢谢|再见|今天|几点|什么意思)/
    // 复杂任务:代码生成、长文写作、复杂推理
    const complexPatterns = /(写一篇|生成代码|详细分析|深度解读|帮我写)/

    if (simplePatterns.test(prompt)) return 'simple'
    if (complexPatterns.test(prompt)) return 'complex'
    return 'medium'
  }

  // 智能路由:决定用端侧还是云端
  private shouldUseLocal(request: AIRequest): boolean {
    // 端侧模型不可用,直接走云端
    if (!this.isLocalReady) return false

    // 用户要求隐私保护,优先端侧
    if (request.requirePrivacy) return true

    // 根据复杂度路由
    const complexity = this.assessComplexity(request.prompt)
    switch (complexity) {
      case 'simple': return true   // 简单任务端侧处理
      case 'medium': return true   // 中等任务也端侧处理
      case 'complex': return false // 复杂任务走云端
    }
  }

  // 统一推理接口
  async generate(request: AIRequest): Promise<AIResponse> {
    const startTime = Date.now()
    const useLocal = this.shouldUseLocal(request)

    if (useLocal) {
      try {
        return await this.localGenerate(request, startTime)
      } catch (err) {
        // 端侧失败,降级到云端
        console.warn(`端侧推理失败,降级到云端: ${err}`)
        return await this.cloudGenerate(request, startTime)
      }
    } else {
      return await this.cloudGenerate(request, startTime)
    }
  }

  // 端侧推理
  private async localGenerate(request: AIRequest, startTime: number): Promise<AIResponse> {
    if (!this.localModel) throw new Error('端侧模型未加载')

    const result = await this.localModel.generate({
      prompt: request.prompt,
      maxTokens: request.maxTokens ?? 512,
      temperature: request.temperature ?? 0.7,
      topP: 0.9
    })

    return {
      text: result.text,
      source: 'local',
      latency: Date.now() - startTime,
      tokensUsed: result.tokensUsed ?? 0
    }
  }

  // 云端推理
  private async cloudGenerate(request: AIRequest, startTime: number): Promise<AIResponse> {
    const client = http.createHttpClient()
    
    const response = await client.request(this.cloudEndpoint, {
      method: http.RequestMethod.POST,
      header: { 'Content-Type': 'application/json' },
      extraData: JSON.stringify({
        model: 'cloud-chat-large',
        messages: [{ role: 'user', content: request.prompt }],
        max_tokens: request.maxTokens ?? 2048,
        temperature: request.temperature ?? 0.7
      }),
      connectTimeout: 30000,
      readTimeout: 60000
    })

    client.destroy()

    if (response.responseCode !== 200) {
      throw new Error(`云端请求失败: ${response.responseCode}`)
    }

    const data = JSON.parse(response.result as string)
    return {
      text: data.choices[0].message.content,
      source: 'cloud',
      latency: Date.now() - startTime,
      tokensUsed: data.usage?.total_tokens ?? 0
    }
  }

  // 流式推理(端云协同)
  async generateStream(
    request: AIRequest,
    onToken: (token: string, source: 'local' | 'cloud') => void
  ): Promise<void> {
    const useLocal = this.shouldUseLocal(request)

    if (useLocal && this.localModel) {
      try {
        const stream = await this.localModel.generateStream({
          prompt: request.prompt,
          maxTokens: request.maxTokens ?? 512,
          temperature: request.temperature ?? 0.7
        })
        for await (const chunk of stream) {
          onToken(chunk.text, 'local')
        }
        return
      } catch (err) {
        console.warn(`端侧流式推理失败,降级到云端: ${err}`)
      }
    }

    // 云端流式推理(使用SSE)
    // 简化实现,实际需要处理SSE协议
    const response = await this.cloudGenerate(request, Date.now())
    // 模拟流式输出
    const chars = response.text.split('')
    for (const char of chars) {
      onToken(char, 'cloud')
      await new Promise(resolve => setTimeout(resolve, 20))
    }
  }
}

// 页面中使用
@Entry
@Component
struct HybridAIPage {
  @State response: string = ''
  @State source: string = ''
  @State latency: string = ''
  @State inputText: string = ''
  @State isGenerating: boolean = false
  private aiService: HybridAIService = new HybridAIService()

  async aboutToAppear() {
    await this.aiService.init()
  }

  async generate() {
    if (!this.inputText.trim() || this.isGenerating) return
    this.isGenerating = true
    this.response = ''
    this.source = ''
    this.latency = ''

    try {
      const result = await this.aiService.generate({
        prompt: this.inputText.trim(),
        requirePrivacy: false
      })
      this.response = result.text
      this.source = result.source === 'local' ? '📱 端侧推理' : '☁️ 云端推理'
      this.latency = `${result.latency}ms`
    } catch (err) {
      this.response = `生成失败: ${JSON.stringify(err)}`
    }

    this.isGenerating = false
  }

  build() {
    Column({ space: 16 }) {
      TextInput({ text: $$this.inputText, placeholder: '输入你的问题...' })
        .width('90%')
        .height(44)
        .borderRadius(22)
        .enabled(!this.isGenerating)

      Button('生成')
        .width('90%')
        .height(44)
        .enabled(!this.isGenerating && this.inputText.trim().length > 0)
        .onClick(() => this.generate())

      // 结果展示
      if (this.response) {
        Column({ space: 8 }) {
          Text(this.source)
            .fontSize(13)
            .fontColor('#1565C0')
          Text(`延迟: ${this.latency}`)
            .fontSize(13)
            .fontColor('#666666')
          Scroll() {
            Text(this.response)
              .fontSize(15)
              .lineHeight(24)
          }
          .height(300)
          .width('100%')
        }
        .width('90%')
        .padding(16)
        .backgroundColor('#F5F5F5')
        .borderRadius(12)
        .alignItems(HorizontalAlign.Start)
      }
    }
    .width('100%')
    .height('100%')
    .padding(20)
  }
}

踩坑与注意事项

端侧推理的坑

坑1:模型文件巨大,首次下载耗时长

7B模型的INT4版本有3.5GB,即使用Wi-Fi下载也要几分钟。你必须在应用启动时提示用户下载,或者做后台静默下载。别等到用户要用的时候才下载——体验太差。

坑2:推理时设备会发热

大模型推理是计算密集型任务,GPU全速跑2-3分钟设备就会明显发热。建议限制单次推理的maxTokens,长文本分段处理。同时监听设备温度,过热时主动降频或暂停推理。

坑3:模型加载后内存常驻

模型加载后即使不推理,也会占用2-4GB内存。如果你的应用还需要大量内存做其他事情,可能触发OOM。建议在应用切到后台时释放模型,回到前台时重新加载。

AI Agent的坑

坑4:Agent可能陷入死循环

Agent调用工具后,如果工具返回的结果让Agent再次调用同一个工具,就会死循环。设置maxIterations限制最大调用轮次,超过就强制停止。

坑5:意图识别不准确

端侧小模型的意图识别能力有限,复杂指令可能识别错误。关键操作(如支付、删除)必须加确认步骤,不能让Agent自主完成。

坑6:工具调用的参数可能不完整

Agent可能只传了部分参数就调用工具。你的工具实现必须做参数校验,缺少必要参数时返回错误提示,让Agent补充。

端云协同的坑

坑7:网络切换时推理中断

用户从Wi-Fi切到4G,或者进入电梯信号中断,云端推理会失败。你必须在云端推理失败时自动降级到端侧,而不是直接报错。

坑8:端云结果不一致

同一个问题,端侧模型和云端模型的回答可能完全不同。如果你的应用对答案一致性有要求(比如教育类应用),必须固定使用同一个模型,不能混用。

HarmonyOS 6适配说明

AI能力是HarmonyOS 6的新增能力,不影响现有代码。你可以选择性地集成:

集成项 最低要求 工作量
端侧推理 API 14 + 8GB+内存设备 3-5天
AI Agent API 14 5-7天
端云协同 API 14 + 云端API 5-10天
模型管理(下载/更新) API 14 2-3天

建议先集成端云协同方案,端侧作为加速手段,云端作为保底方案。这样即使端侧模型加载失败,应用也能正常使用AI功能。

总结

端侧AI是HarmonyOS 6最大的亮点,也是未来移动应用的标配能力。延迟低、隐私好、离线可用——这三个优势是云端AI永远给不了的。

但端侧AI不是银弹。模型能力有限、设备资源受限、发热问题、模型管理复杂——这些都是你要面对的现实挑战。端云协同是务实的方案:简单任务端侧处理,复杂任务云端兜底,两者结合才是最优解。

AI Agent更是打开了应用交互的新范式。用户不再需要学习你的UI怎么操作,直接说需求就行。但Agent的可靠性、安全性、可控性还需要大量实践来验证——别急着把关键路径交给Agent自主决策。

维度 评价
学习难度 ⭐⭐⭐⭐⭐ AI+推理+Agent,技术栈跨度大
使用频率 ⭐⭐⭐⭐ AI能力正在成为应用标配
重要程度 ⭐⭐⭐⭐⭐ 端侧AI是鸿蒙差异化竞争力的核心

下一步:了解V6分布式能力怎么让跨设备协同更丝滑——看第596篇《HarmonyOS 6分布式:跨设备能力增强》。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。