-
案例介绍本案例指导开发者如何在云主机上进行鲲鹏服务器配置环境和安装KAE加速引擎软件并验证加速效果。案例内容1 概述1.1 背景介绍鲲鹏BoostKit Web使能套件聚焦Web应用HTTPS连接性能和Web开源组件可用性等关键问题,提供Web主流组件的开源使能和性能调优指南,通过使能鲲鹏处理器内置的KAE加速引擎软件,帮助客户提升Web网站的安全性,并实现用户HTTPS访问的极致体验。案例主要依赖集成在华为鲲鹏处理器内部的鲲鹏加速引擎来实现,具有性能高、功耗低的特点。1.2 适用对象企业个人开发者高校学生1.3 案例时间本案例总时长预计20分钟。1.4 案例流程说明:① 登录开发者空间;② 使用云主机终端连接鲲鹏服务器;③ 在鲲鹏云服务器上配置安装环境;④ 从代码托管平台gitee上拉取代码安装KAE加速引擎。1.5 资源总览本案例预计花费总计0元。资源名称规格单价(元)时长(分钟)云主机2vCPUs | 4GB RAM免费20鲲鹏沙箱2vCPUs | 4GB免费202 操作步骤2.1 自动部署鲲鹏服务器在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。执行自动部署命令如下:hcd deploy --password abcd1234@ --time 1800命令的参数说明:password:password关键字后设置的是鲲鹏服务器的root用户密码,命令中给出的默认为abcd1234@,开发者可以替换成自定义密码(至少8个字符)。time:time关键字后面设置的为鲲鹏服务器的可用时间,单位为秒,至少600秒。当前案例预估需要20分钟,为了保证时间充足,在命令中申请的时间为30分钟,即1800秒。该命令会自动部署鲲鹏服务器。首次部署会直接执行,旧资源未到期时重复部署,会提示是否删除前面创建的资源,可以删除旧资源再次部署。记录部署远端服务器公网IP,如截图中对应的就是:121.37.166.205。2.2 配置安装环境新打开一个命令窗口,在命令窗口中输入命令登录鲲鹏服务器,命令如下:ssh root@鲲鹏服务器公网IP输入密码,密码为步骤2.1中自动部署命令行中“–password”后面的参数,命令中给出的默认为abcd1234!,如果没有修改,就使用abcd1234@进行登录,如果设置了自定义密码,直接输入自定义的密码(注意:输入过程中密码不会显示,密码输入完成按回车键结束)。登录成功后首先安装依赖包,命令如下:yum -y install kernel-devel.aarch64 wget pciutils由于该案例需要OpenSSL版本升级至1.1.1a或者以上,所有先查看OpenSSL版本,命令如下:openssl versionCentOS系统自带的OpenSSL版本为1.0.2k-fips,本文以升级到1.1.1a版本为例,命令如下:cd /homewget https://codeload.github.com/openssl/openssl/tar.gz/OpenSSL_1_1_1a --no-check-certificate将下载的源码包重命名,命令如下:mv OpenSSL_1_1_1a openssl-OpenSSL_1_1_1a.tar.gz解压OpenSSL源码包,命令如下:tar -xvf openssl-OpenSSL_1_1_1a.tar.gz进入“openssl-OpenSSL_1_1_1a”目录,并配置OpenSSL,命令如下:cd openssl-OpenSSL_1_1_1a/./config编译安装:make -j60 && make -j60 install配置ld.so.conf文件,命令如下:echo "/usr/local/lib/" \>\> /etc/ld.so.confldconfig -v使OpenSSL生效,先将OpenSSL添加到环境变量中,命令如下:echo export PATH=/usr/local/bin:\\\$PATH \>\> /etc/profilesource /etc/profile以上步骤完成后我们就可以验证下版本升级是否成功,出现下图版本信息就说明升级成功了,命令如下:openssl version2.3 安装KAE加速引擎软件首先下载RPM包(以CentOS 7.6系统的1.3.11版本为例),命令如下:cd /home/wget https://gitee.com/kunpengcompute/KAE/releases/download/v1.2.10/kae_1.3.11_CentOS.7.6.4.14.0-115.el7a.0.1.zip --no-check-certificate解压,命令如下:unzip kae_1.3.11_CentOS.7.6.4.14.0-115.el7a.0.1.zip进入解压目录,注意,由于文件名带空格所有需要加单引号:cd 'kae_1.3.11_CentOS 7.6 4.14.0-115.el7a.0.1'安装全部的RPM包,命令如下:rpm -ivh \*.rpm查看内核态库文件,命令如下:ll /usr/local/lib/engines-1.1/配置环境变量,命令如下:vi /etc/profile打开文件后点击“i“进入编辑模式,添加如下内容,键盘点击ESC,输入”:wq“保存退出:export OPENSSL_ENGINES=/usr/local/lib/engines-1.1生效环境变量,命令如下:source /etc/profile配置OpenSSL调用KAE加速库(即配置OpenSSL的环境变量),首先新建OpenSSL配置文件,命令如下:vim /home/openssl.cnf按“i”进入编辑模式,将KAE加速器相关内容写入OpenSSL配置文件:openssl_conf=openssl_def[openssl_def]engines=engine_section[engine_section]kae=kae_section[kae_section]engine_id=kaedynamic_path=/usr/local/lib/engines-1.1/kae.sodefault_algorithms=ALLinit=1按“ESC”键,输入:wq!,按“Enter”保存并退出编辑。查看OpenSSL配置文件,确认配置是否成功:cat /home/openssl.cnf然后将文件配置到环境变量中,打开profile文件:vi /etc/profile添加如下内容,保存退出:export OPENSSL_CONF=/home/openssl.cnf生效环境变量:source /etc/profile查看环境变量是否配置成功,出现如下内容说明配置成功了:echo \$OPENSSL_CONF至此所有配置已全部完成,下面我们来看看效果吧!2.4 验证结果RSA2048算法性能测试的同步性能测试,首先命令如下:\#不调用KAE加速openssl speed -elapsed rsa2048\#指定kae引擎,从而调用KAE加速openssl speed -elapsed -engine kae rsa2048从上图可以得出使用KAE加速和不使用速度是不一样的,我们对比发现,不使用加速情况下时间是28491.0秒,而在使用了加速情况下只使用了19673.5秒,所以在使用KAE加速引擎情况下,不论在处理速度上或者处理时间上都显著提高。同理进行异步性能测试,命令如下:\#不调用KAE加速openssl speed -elapsed -async_jobs 36 rsa2048\#指定kae引擎,从而调用KAE加速openssl speed -engine kae -elapsed -async_jobs 36 rsa2048在异步性能测试中也有明显的区别,如图所示,在不使用加速情况每秒处理速度是689.5次/秒,二使用加速情况下可达到709.5/秒。至此,使用鲲鹏BoostKit提升Web项目性能全部完成。
-
前言在当今这个数字经济时代,数据无疑成为企业最核心的资产之一。面对激烈的市场竞争,企业若想精准决策,迅速响应市场变化,就必须依赖高效的数据分析能力。数据分析不仅能够帮助企业洞察市场趋势、预测消费者行为,更可以优化运营效率,降低成本,提升企业的整体竞争力。举个简单的例子:以某服装电商为例:双十一前夕,数据分析师发现一个关键趋势——平台上’oversized卫衣’的搜索量在过去一周内激增了300%,但转化率却只有2.1%,远低于平均水平的5.8%。通过深入分析用户行为轨迹,团队发现问题所在:用户在商品详情页的平均停留时间只有15秒,且90%的用户会点击尺码表后直接关闭页面。进一步调研发现,消费者对’oversized’的具体版型理解存在偏差,担心买到的衣服过大或过小。基于这一洞察,企业立即调整策略:在商品页面增加真人试穿视频,标注模特身高体重及穿着尺码;优化尺码表,用’宽松度对比图’替代传统数据表格;针对搜索’oversized卫衣’的用户推送’30天无理由退换’的专属服务。结果在48小时内,该品类的转化率提升至6.2%,销量环比增长了180%。而没有及时响应这一数据信号的竞争对手,则错失了这波流量红利。这个成功案例的背后,反映出高效数据分析工作流的重要性。然而,在实际的数据分析实践中,许多企业和开发者仍面临着诸多挑战:从数据采集、清洗、建模到可视化展示,每个环节都可能成为效率瓶颈。如何构建一套流畅、智能的全链路数据分析工作流,正成为当下亟待解决的关键问题。本文将深入探讨华为开发者空间与DeepSeek的强强联合,如何助力打造全链路高效数据分析工作流,帮助开发者和企业在数据驱动的道路上走得更快、更稳。数据分析链路中存在哪些典型痛点?尽管数据分析的重要性已经得到普遍认可,但现实中企业在数据分析链路中仍面临诸多具体的挑战:首先,数据采集与处理难度大。企业的数据通常散落在各类系统和业务平台中,这些数据格式多样且杂乱无章,数据往往分散在ERP、CRM、电商平台、社交媒体、IoT设备等多个系统中,数据格式千差万别(结构化、半结构化、非结构化),数据标准不统一。获取这些数据需要对接各种API接口,配置复杂的ETL流程,整个过程耗时耗力。企业需要花费大量时间和精力去获取、清洗和整合数据,确保数据的准确性和一致性。这种繁琐而耗时的数据预处理环节严重拖慢了整体数据分析效率。其次,分析过程繁琐复杂,从数据预处理到建模分析,再到结果验证,往往需要使用多种不同的工具和平台(如Python、R、SQL、Tableau、PowerBI等),工具间切换频繁,学习成本高,协作效率低。析过程往往缺乏标准化流程和版本管理,同一个分析任务在不同时间、不同人员操作下可能产生不同结果,影响分析结果的可信度和可复现性。此外,数据分析人才短缺也是企业普遍面临的问题。纯技术背景的分析师往往缺乏对业务场景的深度理解,而业务专家又缺乏数据分析的技术能力,导致分析结果与业务需求之间存在较大鸿沟。专业的数据分析师招聘难度大、成本高,并且培养周期较长,企业难以快速组建起有效的数据分析团队,进一步加剧了数据分析能力的瓶颈。最后,分析结果的可视化程度较低。数据分析结果如果无法直观清晰地呈现给决策者,数据分析往往涉及IT、业务、管理等多个部门,缺乏统一的协作平台和标准化流程,沟通成本高,项目推进缓慢。以上痛点使得企业亟需更高效、更智能、更简单的数据分析解决方案。如何利用云计算、人工智能等新兴技术,打造一套全链路、低门槛、高效能的数据分析工作流,已成为当下数字化转型的关键课题。华为开发者空间与DeepSeek的技术基础华为开发者空间是面向全球开发者打造的专属空间,其技术基础具有多方面特性。它汇聚了鸿蒙、昇腾、鲲鹏、GaussDB、欧拉等各项根技术的开发资源及工具。在硬件资源层面,依托华为强大的技术实力,能为开发者提供性能强劲的云主机,保障开发过程中的计算需求,无论是复杂的模型训练,还是大规模的数据处理,都能高效运行。在开发工具方面,提供了一站式的开发环境。以 CodeArts IDE for Cangjie 编辑器为例,它不仅具备常用的语法高亮、错误诊断、自动补全等功能,可实时反馈并提升开发效率,还支持反向调试,方便开发者查看历史调试信息。并且,该编辑器被预置在云主机环境中,开发者开箱即用,极大降低了开发的前期准备成本。同时,开发者空间还集成了丰富的命令行工具,满足不同开发者多样化的开发习惯和复杂的开发需求。此外,华为开发者空间提供了从开发编码到应用调测的配套案例,结合其云上存储空间,形成了一个完整的开发闭环。开发者可以基于这些资源,在华为根技术生态下高效便捷地进行知识学习、技术体验以及应用创新。在利用华为开发者空间提供的云主机开发 DeepSeek 技术时,可从多维度实现两者的有机融合。华为开发者空间性能强劲的云主机,能为 DeepSeek 技术开发提供坚实的硬件支撑。预置的 CodeArts IDE for Cangjie 编辑器具备语法高亮、错误诊断、自动补全等功能,还支持反向调试,方便开发者对 DeepSeek 模型开发过程进行调试和优化。集成的丰富命令行工具,可满足 DeepSeek 开发中不同场景的需求。从开发闭环角度看,华为开发者空间从开发编码到应用调测的配套案例,结合云上存储空间,为 DeepSeek 技术开发提供了完整的流程支持。开发者可借助这些资源,在华为根技术生态下,更高效地进行 DeepSeek 模型的知识学习、技术体验以及应用创新。同时,DeepSeek 完全开源 R1 等模型、采用 MIT 协议的开源策略,与华为开发者空间的开放生态相契合,开发者可在云主机环境中自由定制和二次开发 DeepSeek 模型,进一步推动技术共享与协作。开放的 API 定价优势,也能让更多中小企业在华为开发者空间云主机上开发和应用 DeepSeek 技术,降低进入 AI 领域的门槛,促进 DeepSeek 在各行业的广泛应用。全链路高效数据分析工作流搭建与应用实践1.配置云主机首先进入到开发者空间,之后点击工作台,开始配置云主机:配置相应的云主机:以上系统模拟我们开发生产环境的主要机器,之后我们来开始一步步搭建,首先进入到云开发空间里面,打开终端界面,输入curl -fsSL https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0035/install.sh | sudo bash2.下载ollama先下载ollama下载完毕之后我们可以借助 Ollama 工具来部署 Deepseek 大模型,部署 deepseek-r1:1.5b 版本,如果硬件支撑可以部署更高效的模型,执行命令:ollama run deepseek-r1:1.5b以上我们就部署完了,可以尝试输入prompt来测试效果:通过命令:sudo netstat -tunlp可以查看olloama开放的本地端口:3.CodeArt IDE for Python那么接下来我们可以打开CodeArt IDE for Python,对端口进行通信,完成这一步之后我们可以开始尝试构建智能体:我们知道ollama serve默认监听地址为 http://localhost:11434,首先下载requests库:pip install requests我们可以通过Python代码尝试通信:import requests def chat_with_ollama(prompt, model="deepseek-r1:1.5b"): url = "http://localhost:11434/api/generate" headers = { "Content-Type": "application/json" } data = { "model": model, "prompt": prompt, "stream": False # 关闭流式返回,适合简单测试 } try: response = requests.post(url, json=data, headers=headers) response.raise_for_status() result = response.json() print("模型回复:", result["response"]) except requests.exceptions.RequestException as e: print("❌ 请求出错:", e) except Exception as e: print("❌ 其他错误:", e) if __name__ == "__main__": test_prompt = "你好" chat_with_ollama(test_prompt) 如何能获取到大模型输出,说明我们之前的过程都没有问题:4.工作流搭建.那么我们下一步就可以开始全链路高效数据分析工作流搭建了:4.数据获取/清洗/提取首先我们可以思考数据获取层,这方面可以是企业存储数据和历史数据,也可以爬取互联网上相关信息数据,这方面不需要AI介入,而数据清洗和提取就可以通过大模型完美替代,而且清洗提取特别高效。我们可以将这个 Agent 封装为一个 Python 类,支持如下功能:功能说明clean_text(text)文本清洗:去除空格、标点符号、HTML、无用词等extract_fields(text, instruction)利用大模型提取指定结构信息(如姓名、地址、公司名等)batch_process(data_list)支持批量数据清洗和字段抽取custom_prompt(data, task)通过自定义任务 prompt 构造更复杂的清洗与抽取任务具体代码可以如下编写:import requests import re class DataCleaningAgent: def __init__(self, model_name="deepseek-r1:1.5b", host="http://localhost:11434"): self.model = model_name self.api_url = f"{host}/api/generate" def _call_model(self, prompt, stream=False): payload = { "model": self.model, "prompt": prompt, "stream": stream } try: response = requests.post(self.api_url, json=payload) response.raise_for_status() result = response.json() return result.get("response", "").strip() except Exception as e: print("调用失败:", e) return "" def clean_text(self, text): """ 基础清洗:去除HTML标签、特殊字符、重复空格等 """ text = re.sub(r"<.*?>", "", text) # 去HTML text = re.sub(r"\s+", " ", text) # 合并空格 text = re.sub(r"[^\w\s\u4e00-\u9fff]", "", text) # 去除特殊符号 return text.strip() def extract_fields(self, text, instruction="请从中提取所有公司名称和联系人"): """ 调用LLM进行字段提取 """ prompt = f"以下是原始数据:\n{text}\n\n{instruction}" return self._call_model(prompt) def batch_process(self, data_list, instruction): results = [] for i, text in enumerate(data_list): print(f"处理第{i+1}条数据...") cleaned = self.clean_text(text) extracted = self.extract_fields(cleaned, instruction) results.append({ "original": text, "cleaned": cleaned, "extracted": extracted }) return results # 示例调用 if __name__ == "__main__": agent = DataCleaningAgent() sample_data = [ "联系人:张三,联系电话:123456789,公司:江西省招标有限公司", "地址:南昌市东湖区,北京华为技术有限公司,联系人王五" ] instruction = "请提取所有公司名称和联系人姓名,返回JSON格式" results = agent.batch_process(sample_data, instruction) for res in results: print("\n原始:", res["original"]) print("清洗后:", res["cleaned"]) print("提取信息:", res["extracted"]) 大家可自行验证:4.2 数据库读取SQL清洗完毕之后我们将数据转入库中即可,那么这是建立在我们需要收集外部数据的情况下设置的数据清洗和提取智能体,大部分企业是有存储自己业务数据的,一般直接放置在数据库中。但是获取这部分数据需要比较繁琐的步骤,一般来说数据分析师通过编写SQL获取,但也有不是数据分析师的客户或者是企业管理者想直接拿到数据分析,为了降低数据分析的门槛,我们可以直接设定一个获取数据的智能体,返回给我们基础数据。简而言之就是构建一个自然语言 → 数据库查询 → 自动执行SQL → 返回结果的智能体系统,为企业管理者、运营、产品等非技术用户提供低门槛的数据访问能力。需要注意的是这对我们的Prompt以及知识库要求较高,这里需要我们根据企业业务数据库去制作一份对应的数据字典,也就是说这份数据字典是包含所有业务数据字段的解释和各个表模块的介绍。这里给出一部分的Prompt示例:请根据下方表结构,从表 `sales_data` 中查询 2024 年每个月的销售总额和增长率: 表结构: CREATE TABLE sales_data ( id INT, sale_date DATE, amount DECIMAL, region VARCHAR(50) ) 问题: 2024年每个月的销售额是多少?同比去年增长了多少? 我们可以先解决需要代码编写的部分,比如执行层Python 实现数据库访问和结果返回:from sqlalchemy import create_engine import pandas as pd def execute_sql(sql: str, db_url: str): engine = create_engine(db_url) with engine.connect() as conn: df = pd.read_sql_query(sql, conn) return df 组件含义sqlalchemy.create_engine创建数据库连接对象,支持多种数据库(如 MySQL、PostgreSQL、SQLite)db_url数据库连接字符串,格式示例: mysql+pymysql://user:password@host:port/dbnamepd.read_sql_query(sql, conn)使用 pandas 执行 SQL 语句并将结果返回为 DataFrameconn数据库连接上下文,自动管理连接释放返回值 df查询结果组成的 DataFrame,可用于打印、导出、图表分析等调用实例如下:sql = "SELECT region, SUM(amount) as total FROM sales_data GROUP BY region" db_url = "mysql+pymysql://root:123456@localhost:3306/mydb" df = execute_sql(sql, db_url) print(df) 之后我们可以封装DeepSeek大模型,封装成一个DataQueryAgent,示例:class DataQueryAgent: def __init__(self, db_url: str, model_host="http://localhost:11434", model="deepseek-r1:1.5b"): ... def _generate_sql(self, question: str, schema_hint: str = ""): ... def query(self, question: str, schema_hint: str = ""): ... 设定面向用户的“自然语言问数据库”的封装类,封装了SQL生成 + 执行 两个流程。__init__ 方法比较简单定义:def __init__(self, db_url: str, model_host="http://localhost:11434", model="deepseek-r1:1.5b"): self.db_url = db_url self.model_host = model_host self.model = model _generate_sql() 方法就是完成功能(自然语言 → SQL)def _generate_sql(self, question: str, schema_hint: str = ""): prompt = f"根据以下数据库结构:\n{schema_hint}\n请生成对应SQL语句来回答问题:{question}" response = requests.post(f"{self.model_host}/api/generate", json={ "model": self.model, "prompt": prompt, "stream": False }) return response.json().get("response", "") 用本地部署的 DeepSeek 模型,将自然语言问题 + 数据库结构作为 Prompt,发送请求后解析返回结果为 SQL。query() 方法完成整个工作流(完整工作流:问题 → SQL → 查询结果)def query(self, question: str, schema_hint: str = ""): sql = self._generate_sql(question, schema_hint) print("生成的SQL:", sql) try: engine = create_engine(self.db_url) with engine.connect() as conn: df = pd.read_sql_query(sql, conn) return df except Exception as e: return f"SQL 执行失败: {e}" 示例调用:agent = DataQueryAgent( db_url="mysql+pymysql://root:password@localhost:3306/mydb" ) schema_hint = """ CREATE TABLE orders ( id INT, customer_name VARCHAR(50), amount DECIMAL(10,2), order_date DATE, status VARCHAR(20) ); """ question = "查询今年每个月的订单总金额" df = agent.query(question, schema_hint) print(df) 这样我们就得到一个完整的dataframe,之后我们就可以很轻松对其进行数据可视化了。4.3 DataFrame 可视化智能体(Visualization Agent)也可以将DataFrame 交给大模型智能体,让它根据数据内容决定可视化方式,并自动生成图表代码(如用 matplotlib / plotly / seaborn)。这种做法本质上就是构建一个 DataFrame 可视化智能体(Visualization Agent),它能够结合数据结构、字段含义与任务需求,为用户自动设计图表并呈现。具体实现逻辑很简单:DataFrame → LLM → 图表自动生成。构建可视化智能体类:import requests import pandas as pd import contextlib import io import traceback class VisualizationAgent: def __init__(self, model_host="http://localhost:11434", model="deepseek-r1:1.5b"): self.model_host = model_host self.model = model def _generate_plot_code(self, df: pd.DataFrame, task_description: str): # 将 df 转为 CSV 方便 LLM 解析 csv_data = df.to_csv(index=False) prompt = f""" 你是一个数据分析专家,以下是CSV格式的数据,以及用户的可视化需求。请根据这些数据生成 Python 绘图代码,使用 matplotlib(优先)或 plotly。 用户需求:{task_description} CSV数据如下:{csv_data} 请返回完整可运行的 Python 绘图代码: """ response = requests.post(f"{self.model_host}/api/generate", json={ "model": self.model, "prompt": prompt, "stream": False }) return response.json().get("response", "") def _safe_exec(self, code: str, local_vars=None): """ 安全执行模型生成的代码 """ local_vars = local_vars or {} global_vars = {"__builtins__": __builtins__, "pd": pd} try: # 重定向输出,避免污染控制台 with contextlib.redirect_stdout(io.StringIO()) as f: exec(code, global_vars, local_vars) except Exception as e: print("⚠️ 代码执行错误:") traceback.print_exc() def visualize(self, df: pd.DataFrame, task_description: str = "绘制销售额柱状图", show_code: bool = True): code = self._generate_plot_code(df, task_description) if show_code: print("模型生成绘图代码:\n") print(code) print("\n正在执行绘图代码...") self._safe_exec(code, local_vars={"df": df}) 使用示例if __name__ == "__main__": df = pd.DataFrame({ "region": ["华东", "华南", "华北", "西南"], "sales": [120000, 95000, 78000, 67000] }) agent = VisualizationAgent() agent.visualize(df, task_description="请生成一个地区销售额柱状图") 当运行这段代码后,它将调用模型生成图表代码,并自动执行、展示图表。5.总结在本章中,我们把“想法”一步步落地成了一条 端到端的智能数据分析流水线:环境就绪——先在云开发空间上快速拉起一台高配云主机,借助 curl install.sh 一键初始化开发环境,再用 Ollama 把 Deepseek-r1:1.5b 模型部署好并通过 netstat 确认端口;模型打通——用最简洁的 requests 脚本验证模型能正常对话,确保后面所有智能体都能调用;数据获取 & 清洗——编写 DataCleaningAgent,让大模型接管繁琐的文本去噪、实体抽取,批量输出结构化 JSON;自然语言查库——通过 DataQueryAgent 把 “一句中文 → SQL → DataFrame” 自动串起来,让非技术同事也能秒查运营数据;智能可视化——把查询得到的 DataFrame 交给 VisualizationAgent,由大模型自动产出 Matplotlib/Plotly 代码并即时执行,图表立现;全链路闭环——至此,数据从 获取 → 清洗 → 入库 → 查询 → 展示 全程自动化完成,真正实现了“低门槛、高效率、可复用”的企业级数据分析工作流。关键收益零 SQL / 零绘图门槛:业务人员只需说人话,背后全部自动完成。高度可插拔:每个 Agent 都是独立模块,清洗、查询、可视化可按需组合或替换更强模型。私有化可控:全部部署在企业自己的云主机与数据库内,安全合规。企业实战案例分享基于以上我们全链路的数据分析工作流的搭建,我们已经有足够的能力来实践一套供应链周报自动生成系统。一句话目标:让供应链经理把“写周报”这件事,彻底交给代码和大模型——数据自己来、图表自己画、结论自己写,人只需要点头确认。1. 背景与痛点典型痛点传统做法带来的问题数据源多、格式乱手动从 ERP / WMS / OMS 导出 Excel粗糙拼表、易漏字段,费时费神维度多、指标杂人肉写 SQL 拉数据运营/采购不懂 SQL,严重依赖数据团队图表重复劳动“复制数据 → 贴进模板 → 调样式”一键回车变成一上午文字结论经理凭经验手写主观、易漏看趋势结果:一个 10 页左右的供应链周报,往往要 3-4 人、费时半天才能端出来。2. 解决思路 :全链路工作流上场3. 核心模块落地3.1 数据清洗 & 入库接入源:ERP(采购、到货)、WMS(库存)、OMS(销售订单)工具:DataCleaningAgent任务:消歧同品名、规格(“A4纸80g” = “A4-80g”)解析自然语言备注,提取 供应商投诉 字段输出标准化 CSV,按天入 supply_dw 数据仓库3.2 自然语言取数使用者:采购经理、供应链分析师典型问句“近 12 周每周的采购金额与去年同期对比”“本周供应商到货准时率前 5 & 后 5”流程DataQueryAgent 读取 数据字典(自动生成或手写)Deepseek 模型根据问句 + Schema → 生成 SQL执行后返回 DataFrame示例快速验证:question = "列出最近4周库存周转天数趋势" schema_hint = "TABLE inv_summary(id, item, turnover_days, stat_week)" df_turnover = agent.query(question, schema_hint) 3.3 自动可视化 + 结论生成VisualizationAgent:DataFrame → 图表代码 → 即时渲染支持多图联排、双轴折线、漏斗、热力地图结论生成:再次调用 Deepseek:prompt = f"下面是近12周库存周转天数表格,请用200字生成总结性分析:\n{df.to_markdown()}" summary = llm(prompt) 3.4 报告编排 & 交付ReportBot(Python):收集所有图 PNG + 文字结论用 python-pptx 拼成周报 Deck,或 WeasyPrint 导出 PDF调用企业 IM / 邮件 API:“Hi @Team,本周周报已生成 👉 链接/附件”调度:Crontab / Airflow 每周一早 8 点自动跑4.关键代码骨架一览def weekly_report(): # 1. 拉取核心指标 metrics = { "采购金额": query_agent.query("近4周采购金额趋势", sales_schema), "到货准时率": query_agent.query("近4周到货准时率", inbound_schema), "库存周转": query_agent.query("近12周库存周转天数", inv_schema) } # 2. 生成图表 charts = {} for k, df in metrics.items(): charts[k] = viz_agent.visualize(df, f"绘制{k}折线图", show_code=False) # 3. AI 书写摘要 summary = llm("请基于以上三张表和图,总结供应链本周主要问题及建议") # 4. 组装 PPT ppt = build_ppt(charts, summary) ppt.save("weekly_supply_report.pptx") # 5. 送达 send_mail("weekly_supply_report.pptx", to=["boss@corp.com"]) 5. 效果速览指标传统方式全链路自动化周报产出时长≈ 4 小时 / 人≤ 10 分钟 / 机器参与人数运营 + 数据 + 设计0(无人值守)可追溯性低(手改 Excel)高(SQL + Git + 日志)结论一致性人工主观AI 根据数据重算6. 实施要点 & 踩坑提示数据字典必须够详细字段含义、单位、取值范围,一定要让大模型“看得懂”。SQL 安全在执行层加白名单,只允许 SELECT。图表代码安全执行VisualizationAgent 内部要过滤 os, subprocess 等危险关键字。权限管理建议给每个调用者分配专属 API Key + 查询范围。缓存/增量机制周报通常是“滚动周”,可以把前 N-1 周的数据缓存,速度更快。7. 价值回顾“让系统写报告,人来做决策。”效率:周报自动产出,数据团队有更多时间做深度分析。准确:口径统一、自动核对,避免手抄表格出错。透明:从原始数据到图表代码全链路留痕,可追溯可复盘。可扩展:同样的框架可复制到财务、营销、客服,形成企业级“智能报告工厂”。下一步,如果你想把这套系统推广到其他业务线,只需要:补充新表的 Schema;编写对应的 KPI Prompt;在调度器里新增定时任务。实践建议与关键技术要点总结大模型优化方法众多(如剪枝、量化、算子融合等),但没有 “通用最优解”。选择优化策略时,需结合业务需求、硬件条件、成本等多维度因素,避免盲目追求技术先进性而忽视实际效果。1应用场景导向应用场景导向的核心逻辑是不同场景对模型性能的需求不同,优化目标需与场景匹配。实时交互场景(如聊天机器人、自动驾驶):需低延迟,优先选择模型量化、算子融合或模型蒸馏。批量处理场景(如离线数据分析、大规模预测):需高吞吐量,可采用模型并行或动态批处理。边缘部署场景(如手机、物联网设备):受限于算力和能耗,需模型压缩+ 轻量级架构设计。若部署一个需要实时响应的智能家居语音助手,即使模型精度略低,也应优先选择量化和剪枝,以确保推理速度。2成本与性能平衡成本与性能平衡的核心逻辑是不同硬件对优化方法的支持程度不同,需充分发挥硬件优势。GPU/TPU 等加速硬件适合算子融合、模型并行等需要高并行计算的优化方法。边缘设备则需模型轻量化(剪枝、量化)+ 轻量级推理框架(如 TensorFlow Lite),避免复杂计算。CPU 服务器可选择多线程优化或内存优化(如 onnxruntime 的 CPU 优化)。比如在 GPU 集群上部署大模型时,使用 TensorRT 进行算子融合和图优化,能显著提升推理速度;而在手机端部署时,使用量化后的模型和 MNN 框架更合适。3. 实际应用中的综合决策在实际部署中,需结合多个原则进行权衡。比如自动驾驶公司需在车载设备(边缘硬件)上部署实时目标检测模型:场景导向:选择低延迟优化,如模型剪枝和量化。硬件匹配:针对车载芯片的架构,使用专用优化工具(如 Nvidia 的 TensorRT 针对 GPU 优化)。成本平衡:通过蒸馏轻量化模型,降低对高端硬件的依赖,控制成本。扩展性:设计可动态调整的流水线,未来若更换传感器或算法,可快速适配。这四个原则为大模型优化提供了从场景需求到技术落地的完整思考路径:以场景为起点,结合硬件和成本约束,选择灵活可扩展的方案。通过这种系统性的决策,企业既能在当下实现高效部署,又能为未来的业务增长预留技术空间。智能体编排未来应用趋势随着大模型从“一个聪明的回答机”逐步进化为“面向任务的执行体”,多智能体编排(Agent Orchestration) 正成为新一轮 AI 应用变革的核心引擎。相比传统单模型调用逻辑,智能体编排更像是构建“具身智能系统”或“数字员工团队”,将感知、思考、决策与执行完整串联起来,实现从“回答你”到“替你做”的飞跃。在我们展示的数据分析系统中,其实已经具备“雏形智能体”的要素:如 DataCleaningAgent、DataQueryAgent、VisualizationAgent 等等。这些模块虽然是按功能划分,但本质上已经具备“接收任务 → 理解意图 → 执行操作 → 返回结果”的 Agent 行为模式。而在更复杂的未来业务中,一个任务往往无法由单个智能体完成,这时需要:多个 Agent 分工合作、传递信息、联合完成复杂任务,甚至具备自治能力。比如在一个“企业经营分析”智能系统中:角色智能体职责说明任务协调 Agent(Coordinator)理解高层命令,如“生成月度经营报告”,并拆解成子任务数据智能体(Query Agent)根据需求调用数据库并返回 DataFrame图表智能体(Viz Agent)生成图表代码并渲染结果洞察智能体(Insight Agent)结合数据输出摘要分析与趋势判断报告生成 Agent汇总图表与文字,输出 Markdown/PPT/邮件等格式监控反馈 Agent记录执行日志、收集用户反馈并优化流程每一个 Agent 都是可复用的能力单元,而智能体间的协作流转由Agent Framework 或 编排平台调度控制。要真正落地多智能体协同系统,以下几个能力将成为技术团队不可回避的核心能力:意图解析能力需要将用户自然语言转化为结构化任务链(如 AWEL DSL、JSON Graph 等);任务拆解与分发能力使用树状或 DAG 结构,支持任务自动拆解与并发执行;智能体能力注册与调度机制类似“插件系统”,支持注册各类智能体,并调度调用;记忆与上下文管理实现智能体在多轮协作中共享上下文、传递中间变量;异常处理与回滚机制构建面向业务场景的“容错能力”,支持失败重试、断点续跑;安全与权限机制管理智能体访问数据的边界,防止越权调用或数据泄漏;未来的 AI,不再只是一个“回答者”,而是一个主动工作的“数字合作者”。从数据分析到知识总结,从任务执行到流程协同,我们已经看到多智能体系统开始扮演团队中的新角色。“让系统成为员工的一部分,而不仅仅是工具。”这不仅是数据智能化的进化方向,更是企业迈向新一代智能生产力时代的起点。下一阶段,智能体将不再只是调用函数的代理,而是逐步演化为具备推理、感知、社交能力的数字个体,真正融入业务、参与决策、持续学习与成长。我正在参加【案例共创】第4期 基于华为开发者空间+仓颉/DeepSeek/MCP完成应用构建开发实践 https://bbs.huaweicloud.com/forum/thread-02127182415062274055-1-1.html
-
案例介绍本案例将以场景化工程样例中的通用工程SHA256为例来学习如何通过鲲鹏开发框架工具完成工程的创建、编译和运行。案例内容1 概述1.1 背景介绍鲲鹏开发框架是一款使能用户在鲲鹏服务器上进行开发的工具。鲲鹏开发框架充分利用鲲鹏平台的各类型算力及性能更优的第三方组件,提供鲲鹏工程向导、启发式编程、代码亲和检查等能力,一键引入鲲鹏加速库、快速构建鲲鹏应用软件框架,帮助开发者更便捷地开发鲲鹏应用,使能开发者高效创新。鲲鹏原生开发基于鲲鹏平台的新软件和新功能特性开发,应用鲲鹏DevKit工具把鲲鹏架构亲和性能充分体现的开发场景。1.2 适用对象企业个人开发者高校学生1.3 案例时间本案例总时长预计30分钟。1.4 案例流程说明:① 自动部署鲲鹏服务器;② 安装鲲鹏Devkit插件;③ 登录DevKit工具;④ 创建工程;⑤ 编译工程⑥ 运行工程。1.5 资源总览本案例预计花费总计0元。资源名称规格单价(元)时长(分钟)云主机2vCPUs | 4GB RAM免费302 操作步骤2.1 自动部署鲲鹏服务器在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。执行自动部署命令如下:hcd deploy --password abcd1234@ --time 1800命令的参数说明:password:password关键字后设置的是鲲鹏服务器的root用户密码,命令中给出的默认为abcd1234@,开发者可以替换成自定义密码(至少8个字符)。time:time关键字后面设置的为鲲鹏服务器的可用时间,单位为秒,至少600秒。在命令中申请的时间为30分钟,即1800秒。该命令会自动部署鲲鹏服务器。首次部署会直接执行,旧资源未到期时重复部署,会提示是否删除前面创建的资源,可以删除旧资源再次部署。记录部署鲲鹏服务器公网IP,如截图中对应的就是:113.44.86.210。2.2 安装鲲鹏Devkit插件由于CodeArts IDE在线安装的鲲鹏DevKit工具版本过低,所以需要前往鲲鹏社区官网下载最新鲲鹏DevKit插件到云主机,下载地址为:CodeArts IDE插件市场(https://marketplace.visualstudio.com/items?itemName=kunpengfamily.kunpeng-dev-kit&ssr=false#version-history)。如下图所示,进入到下载页面后选择最新版本进行下载。在云主机桌面,打开CodeArts IDE for Python/Java开发环境,单击右侧“扩展”按钮,点击从本地安装,选择下载好的插件安装。在弹窗中选择“继续安装”。2.3 登录DevKit工具点击左侧“鲲鹏Devkit”按钮,在配置指引页面点击“开始使用”。填写自动部署的远端服务器信息,点击“确定”。首次登录需要创建管理员密码。2.4 创建工程工具登录成功后,选择“开发”,在应用开发下点击“创建”工程,在鲲鹏应用工程下选择“通用计算应用”。在通用计算应用中选择“加速库应用”。在加速库应用中工程类别选择“模板工程”下的“信息摘要”,工程名称和位置自定义即可,点击“下一步”。配置目标节点界面,部署服务器选择“暂不部署”,点击“创建工程”。工程创建成功后,点击“打开工程”。即在工程打开SHA256_Project工程代码。2.5 编译工程点击“编译”弹出配置运行界面。远程服务器配置,点击“添加目标服务器”。在目标服务器管理界面,点击“添加目标服务器”。在弹窗中填写目标服务器的信息,服务器IP地址填写自动部署拉起的服务器IP,免费公私钥对选择自动生成,输入SSH用户名和密码,点击“确定”。点击“登录”连接目标服务器执行安装cmake命令。命令如下:sudo yum install cmake再次点击“编译”按钮,在远程服务器配置中选择目标服务器,保持默认的编译命令,点击“开始编译”,编译命令如下:cd /root/workspace/h/src/sha256/; mkdir -p build && cd build && cmake .. && make编译成功。2.6 运行工程点击“开发”-“运行”弹出配置运行界面。在远程服务器配置中选择目标服务器,其中应用程序填入刚编译完成的二进制文件/root/workspace/SHA256_Project/src/sha256/build/sha256(其中SHA256_Project为项目名称,请按照实际操作路径填写),应用程序参数填入用于测试的数据文件,可以为任意文件,本例以/home/devkit/libssl/libcrypto.so为例。填写完成后,点击“开始运行”。从结果看出,对比汇编实现的sha256算法所用时间和C实现的时间,性能提升明显。至此,秒级创建鲲鹏工程进行原生开发全部内容完成。
-
基于华为开发者空间使用 FastAPI 构建 MCP 天气查询服务案例介绍本案例将指导您在华为云开发者空间中使用 FastAPI 框架构建一个功能完整的 MCP(Model Context Protocol)天气查询服务。通过本案例,您将学会如何将传统的 REST API 转换为 MCP 工具,让 AI 模型能够实时获取天气信息并与用户进行智能交互。技术栈后端框架: FastAPI协议标准: MCP (Model Context Protocol)天气数据: 和风天气 API认证方式: JWT (JSON Web Token)客户端: Cherry Studio部署环境: 华为云开发者空间学习目标掌握 MCP 协议的基本概念和实现方式实现 AI 模型与外部服务的实时数据交互体验华为云开发者空间的开发便利性以及 Maas DeepSeek 模型服务的无缝集成案例内容1. 概述1.1 案例背景在传统的 AI 对话系统中,模型只能基于训练数据回答问题,无法获取实时信息。MCP 协议的出现解决了这一痛点,它允许 AI 模型通过标准化的接口调用外部工具和服务,获取实时数据。本案例选择天气查询作为示例,因为:实时性强: 天气数据需要实时获取,体现 MCP 的价值应用广泛: 天气查询是用户常见需求技术完整: 涵盖 API 调用、数据处理、错误处理等完整流程易于扩展: 可以基于此案例扩展更多功能1.2 适用对象企业用户:关注业务自动化、提升开发效率、集成AI能力,适合希望快速构建智能工具、提升企业数字化水平的团队。个人开发者:具备一定Python基础(或能借助 AI 辅助编程),关注技术创新与个人成长,适合希望掌握MCP协议、API开发与AI集成的开发者。高校学生:有编程基础(或能借助 AI 辅助编程),关注AI应用实践与创新能力培养,适合希望参与AI+云平台项目实训、提升综合开发能力的学生群体。1.3 案例时间准备阶段: 30 分钟(环境配置、账号注册)开发阶段: 20 分钟(代码编写、调试)测试阶段: 10 分钟(功能验证、MCP 集成)总计时间: 约 60 分钟1.4 案例流程环境准备API 注册项目初始化依赖安装核心代码开发JWT 认证实现天气接口开发MCP 集成本地测试客户端配置端到端验证1.5 资源总览本案例预计花费0元。资源类型名称/说明免费额度/价格备注开发资源华为云开发者空间0元免费注册使用Maas DeepSeek 模型服务0元免费额度,按需扩展和风天气开发者账号0元免费额度,1000次/天Cherry Studio 客户端0元开源免费API 配额和风天气免费版0元1000次/天Maas DeepSeek 模型服务0元免费额度注意事项:本案例基于免费额度,如需更高配额请自行申请。API 可能存在调用次数限制,超出免费额度需付费或申请扩容。2. 环境配置2.1 开发者空间配置步骤 1: 登录华为云领取免费云主机访问 华为云官网,注册并登录华为云账号点击“开发者->开发者空间”,进入。如果没有领取过云主机可以点击"立即体验"进行开通。步骤 2: 配置云主机访问开发者空间工作台, 点击"配置云主机"配置基础资源: CPU架构为 ARM,规格为 4 vCPUs 8 GB,操作系统为 Ubuntu ,镜像为 Ubuntu 24.04 Server定制版等待环境初始化完成后点击"打开云主机-进入桌面",打开云主机桌面2.2 MaaS 领取 DeepSeek步骤 1: 访问华为云 MaaS 服务在华为云控制台搜索"MaaS",点击进入 Maas 控制台区域选择西南-贵阳一,在左侧菜单栏,选择在线推理 > 预置服务 > 免费服务,选择DeepSeek-R1-32K模型,点击领取额度,领取200万免费token。步骤 2: 获取API地址和模型名称领取后点击调用说明*,可以获取到对应的API地址、模型名称。步骤 3: 获取 API 密钥点击“API Key管理-创建API Key“”,自定义标签和描述,点击确定创建API Key。(⚠️注意:API Key仅会在新建后显示一次,请及时复制并妥善保存,若API Key丢失,请新建API Key。)至此,我们获取到了所需的 API 地址、模型名称和 API 密钥。2.3 安装 Cherry Studio下载安装:使用云主机中的Firefox访问 [Cherry Studio 官网] https://cherry-studio.com根据操作系统下载对应版本,如 **Cherry-Studio-1.3.12-arm64.AppImage给下载的文件添加执行权限chmod +x Cherry-Studio-1.3.12-arm64.AppImage安装运行相关依赖sudo apt update sudo apt install zlib1g zlib1g-dev sudo add-apt-repository universe sudo apt install libfuse2运行安装包./Cherry-Studio-1.3.12-arm64.AppImage --no-sandbox基础配置:配置 DeepSeek 模型连接测试模型连接是否正常2.4 和风天气 API 注册(可选)💡 提示: 教程代码中已包含测试用的 API 配置,如无法使用请自行注册注册流程:访问 和风天气开发者平台 https://id.qweather.com/注册开发者账号并完成邮箱验证进入开发服务控制台创建项目并获取必要的认证信息获取配置信息:PROJECT_ID: 项目标识符KEY_ID: JWT 密钥标识PRIVATE_KEY: JWT 签名私钥WEATHER_API_HOST: API 服务地址访问[https://id.qweather.com/] https://id.qweather.com/ 注册账号,初次使用需绑定手机号和邮箱。注册成功后,点击菜单中的 开发服务控制台,进入开发控制台。点击项目管理-创建项目,创建一个项目,如 fastapi, 创建之后此步骤获得PROJECT_ID。点击项目如fastapi,进入项目详情页并点击创建凭据开始创建 JWT 凭据,需先在本地生成公私钥对再创建,创建之后此步骤获得PRIVATE_KEY和KEY_ID。(PS: 虽然 APIKey 更简单,但推荐使用JSON Web Token (JWT)的认证方式获得更高等级的安全性以及不受限的API请求)点击设置, 从开发者信息中获取 API Host,也就是WEATHER_API_HOST至此,我们天气查询 MCP 中需要用到的配置信息已经全部获取。3. 项目搭建3.1 项目初始化使用CodeArts IDE for Python创建项目工程或者使用脚本创建项目目录:mkdir qweather-mcp cd qweather-mcp安装依赖包:pip install fastapi uvicorn fastapi-mcp pyjwt cryptography requests -i https://repo.huaweicloud.com/repository/pypi/simple创建项目结构:qweather-mcp/ ├── main.py # 主程序文件 ├── requirements.txt # 依赖列表 ├── config.py # 配置文件(可选) └── README.md # 项目说明3.2 核心代码实现详细的代码实现包括:FastAPI 应用初始化JWT 认证机制天气 API 封装MCP 协议集成错误处理机制3.3 关键功能模块JWT 认证模块: 实现安全的 API 访问控制天气查询模块: 封装和风天气 API 调用MCP 集成模块: 将 REST API 转换为 MCP 工具数据模型模块: 定义请求和响应的数据结构3.4 代码实现我们创建 main.py 文件,并编写代码。3.4.1 引入依赖from fastapi import FastAPI, HTTPException, Depends, Query, status from fastapi.security import HTTPBearer from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any import jwt import time import requests from datetime import datetime import base64 from cryptography.hazmat.primitives import serialization from cryptography.hazmat.backends import default_backend # 引入 fastapi_mcp from fastapi_mcp import FastApiMCP, AuthConfig3.4.2 配置天气服务 APIapp = FastAPI(title="天气查询API") # 配置项 - 在实际应用中应从环境变量或配置文件中读取 # PRIVATE_KEY = """YOUR_PRIVATE_KEY""" # PROJECT_ID = "YOUR_PROJECT_ID" # KEY_ID = "YOUR_KEY_ID" # WEATHER_API_HOST = "your_api_host" PRIVATE_KEY = "MC4CAQAwBQYDK2VwBCIEIG2wMZga50X1YDHmR8jkE5TGKNXpriFPXXCT/kgwZkcT" PROJECT_ID = "3MKPRE78RN" KEY_ID = "T8B7JMU7AY" WEATHER_API_HOST = "ky6mte27bb.re.qweatherapi.com" 3.4.3 定义响应 Model# 响应模型 class Location(BaseModel): name: str id: str lat: str lon: str adm2: str adm1: str country: str tz: str utcOffset: str isDst: str type: str rank: str fxLink: str class LocationResponse(BaseModel): code: str location: List[Location] class WeatherNow(BaseModel): obsTime: str temp: str feelsLike: str icon: str text: str wind360: str windDir: str windScale: str windSpeed: str humidity: str precip: str pressure: str vis: str cloud: str dew: str class ReferSources(BaseModel): sources: List[str] license: List[str] class WeatherResponse(BaseModel): code: str updateTime: str fxLink: str now: WeatherNow refer: ReferSources class JWTRequest(BaseModel): expiry_seconds: Optional[int] = 900 # 默认15分钟 custom_claims: Optional[dict] = None # 允许添加自定义声明 class WeatherQuery(BaseModel): city: str = Field(..., description="城市名,如:北京") 3.4.4 JWT 令牌生成# 解码并加载私钥 try: _der_key_bytes = base64.b64decode(PRIVATE_KEY) PRIVATE_KEY = serialization.load_der_private_key( _der_key_bytes, password=None, backend=default_backend() ) except Exception as e: print(f"关键错误:无法从配置加载EdDSA私钥。错误: {e}") PRIVATE_KEY = None if PRIVATE_KEY is None: raise RuntimeError(f"关键错误:EdDSA私钥加载失败,应用无法启动。错误: {e}") # 令牌缓存(简单实现,生产环境应使用Redis等缓存系统) token_cache = { "token": None, "expires_at": 0 } # Bearer Token 安全头 token_auth_scheme = HTTPBearer() EXPECTED_BEARER_TOKEN = "huaweicloud" # 定义期望的固定Token # Bearer Token 验证依赖 async def verify_bearer_token(token_payload = Depends(token_auth_scheme)): if token_payload.credentials != EXPECTED_BEARER_TOKEN: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的认证凭据", headers={"WWW-Authenticate": "Bearer"}, ) return token_payload.credentials # 生成JWT令牌 def generate_jwt(expiry_seconds: int = 900): current_time = int(time.time()) # 构建标准JWT载荷 payload = { 'iat': current_time - 30, # 颁发时间(提前30秒,避免时钟偏差问题) 'exp': current_time + expiry_seconds, # 过期时间 'sub': PROJECT_ID # 主题(项目ID) } # JWT头部 headers = { 'kid': KEY_ID # 密钥ID } if PRIVATE_KEY is None: raise ValueError("JWT生成失败: 私钥未初始化或加载失败。") try: # 生成JWT encoded_jwt = jwt.encode(payload, PRIVATE_KEY, algorithm='EdDSA', headers=headers) # 更新缓存 token_cache["token"] = encoded_jwt token_cache["expires_at"] = current_time + expiry_seconds - 60 # 提前1分钟过期,确保安全 return encoded_jwt except Exception as e: raise ValueError(f"JWT生成失败: {str(e)}") # 获取有效的JWT令牌(如果缓存中有有效令牌则使用缓存,否则生成新令牌) def get_valid_token(): current_time = int(time.time()) # 检查缓存中的令牌是否有效 if token_cache["token"] and token_cache["expires_at"] > current_time: return token_cache["token"] # 生成新令牌 return generate_jwt() @app.post("/generate-jwt", operation_id="generate_jwt", tags=["JWT"]) async def create_jwt( request: JWTRequest = JWTRequest() ): """ 生成JWT令牌 - 使用EdDSA算法签名 - 默认有效期为15分钟 - 可以添加自定义声明 """ try: encoded_jwt = generate_jwt(request.expiry_seconds) current_time = int(time.time()) return { "jwt": encoded_jwt, "expires_at": datetime.fromtimestamp(current_time + request.expiry_seconds).isoformat(), "issued_at": datetime.fromtimestamp(current_time - 30).isoformat(), "valid_for_seconds": request.expiry_seconds } except Exception as e: raise HTTPException(status_code=500, detail=str(e)) 3.4.5 天气查询接口# 发送HTTP请求到天气API,并处理gzip压缩 def fetch_weather_api(endpoint: str, params: Dict[str, Any]): # 获取有效的JWT令牌 token = get_valid_token() headers = { 'Authorization': f'Bearer {token}', 'Accept-Encoding': 'gzip' # 我们请求gzip压缩 } url = f"https://{WEATHER_API_HOST}/{endpoint}" try: response = requests.get(url, headers=headers, params=params) # 检查响应状态 if response.status_code != 200: # 如果是401或403,尝试刷新令牌并重试 if response.status_code in [401, 403]: # 强制生成新令牌 new_token = generate_jwt() # 更新请求头 headers['Authorization'] = f'Bearer {new_token}' # 重试请求 response = requests.get(url, headers=headers, params=params) # 如果还是失败,则抛出异常 if response.status_code != 200: raise HTTPException( status_code=response.status_code, detail=f"天气API请求失败: HTTP {response.status_code}" ) else: raise HTTPException( status_code=response.status_code, detail=f"天气API请求失败: HTTP {response.status_code}" ) # 依赖 requests 库自动处理Gzip解压缩,并直接解析JSON # 旧的Gzip处理逻辑已被移除 return response.json() except requests.exceptions.JSONDecodeError as e: # 如果响应不是有效的JSON(即使在解压缩后),则捕获此特定错误 raise HTTPException(status_code=500, detail=f"天气API响应解析失败: 无效的JSON内容 - {str(e)}") except HTTPException: # 重新抛出已捕获的HTTPException,以便FastAPI处理 raise except Exception as e: # 捕获其他潜在错误 raise HTTPException(status_code=500, detail=f"天气API请求时发生未知错误: {str(e)}") @app.get("/city/lookup", response_model=LocationResponse, operation_id="lookup_city", tags=["天气查询"]) async def lookup_city( location: str = Query(..., description="城市名称,如:北京") ): """ 根据城市名称查询位置ID - 返回城市的详细信息和位置ID - 位置ID用于后续天气查询 """ try: data = fetch_weather_api("geo/v2/city/lookup", {"location": location}) return data except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.get("/weather/now", response_model=WeatherResponse, operation_id="get_weather_now", tags=["天气查询"]) async def get_weather_now( location: str = Query(..., description="位置ID,如:101010100") ): """ 获取指定位置的实时天气 - 需要提供位置ID - 返回当前天气详情 """ try: data = fetch_weather_api("v7/weather/now", {"location": location}) return data except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/weather/by-city", response_model=WeatherResponse, operation_id="get_weather_by_city", tags=["天气查询"]) async def get_weather_by_city( query: WeatherQuery ): """ 一站式查询城市天气 - 只需提供城市名 - 自动查询位置ID并获取天气 """ try: # 先查询城市ID location_data = fetch_weather_api("geo/v2/city/lookup", {"location": query.city}) # 检查是否找到城市 if location_data.get("code") != "200" or not location_data.get("location"): raise HTTPException(status_code=404, detail=f"找不到城市: {query.city}") # 获取第一个匹配城市的ID location_id = location_data["location"][0]["id"] # 查询天气 weather_data = fetch_weather_api("v7/weather/now", {"location": location_id}) return weather_data except HTTPException: raise except Exception as e: raise HTTPException(status_code=500, detail=str(e)) 3.4.6 主程序及 MCP 集成@app.get("/") async def root(): """主页 - 提供API简介""" return { "message": "天气查询API", "endpoints": [ "/generate-jwt - 生成JWT令牌", "/city/lookup - 根据城市名查询位置ID", "/weather/now - 根据位置ID查询当前天气", "/weather/by-city - 一站式查询城市天气" ], "docs": "/docs 查看完整API文档" } # mcp 实现 mcp = FastApiMCP( app, name="My Weather MCP", description="天气查询API", include_operations=["get_weather_by_city"], # 只公开 get_weather_by_city 接口作为 MCP tool auth_config=AuthConfig(dependencies=[Depends(verify_bearer_token)]) # MCP 使用 Bearer Token 验证 ) mcp.mount() # 启动服务器的命令(在命令行中运行): # uvicorn main:app --reload if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8009) 4. 测试验证4.1 本地服务测试启动服务:python main.pyAPI 文档验证:访问 http://localhost:8009/docs测试各个接口功能验证数据格式正确性我们可以使用浏览器访问 http://localhost:8009/docs 来查看并测试API。4.2 MCP 客户端集成Cherry Studio 配置:服务名称: FastAPI 天气查询连接类型: 服务器发送事件(SSE)服务地址: http://localhost:8009/mcp认证头: Authorization=Bearer huaweicloud功能验证:配置 MCP 服务连接验证工具列表显示测试天气查询功能对比启用前后的效果在 Cherry Studio 中配置好的 MCP 服务,我们可以直接在 MCP 客户端中使用 get_weather_by_city 接口:名称:FastAPI 天气查询类型:服务器发送事件(SSE)URL:http://localhost:8009/mcp请求头:Authorization=Bearer zishu.co在工具中,我们可以看到get_weather_by_city接口已经添加到MCP服务中。新建一个话题,先不开启 MCP 服务器设置,直接输入北京天气怎么样,我们会发现大模型无法实时获取天气。接着我们启用 MCP 服务,并输入北京天气怎么样,我们会发现大模型可以实时获取天气。get_weather_by_city tool 被成功调用,并返回了天气信息。5. 总结5.1 技术收获通过本案例,您将掌握:MCP 协议: 理解 AI 模型与外部工具的交互机制FastAPI 开发: 快速构建高性能 Web APIJWT 认证: 实现安全的 API 访问控制第三方 API 集成: 学会封装和调用外部服务错误处理: 构建健壮的服务应用5.2 应用价值实时数据获取: AI 模型可以获取最新的天气信息用户体验提升: 提供准确、及时的天气查询服务技术架构: 为更复杂的 MCP 应用奠定基础可扩展性: 可以轻松添加更多天气相关功能如果想要拓展更多功能,您可以动手试试看!
-
案例介绍本实践中使用鲲鹏DevKit系统性能分析工具对业务中使用Python进行字符串拼接接口执行系统全景分析,应用热点函数分析,找到性能瓶颈点,并根据分析结果进行优化修改,从而实现使用Python进行字符串拼接性能增强。案例内容1 概述1.1 实验介绍鲲鹏DevKit系统性能分析是针对基于鲲鹏的服务器的性能分析工具,能收集服务器的处理器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析出系统性能指标,定位到系统瓶颈点及热点函数,给出优化建议。该工具可以辅助用户快速定位和处理软件性能问题。本实验选择Python进行字符串拼接性能分析作为示例,并借助开发者空间云主机提供的鲲鹏沙箱资源进行安装、配置,直观地展示Devkit中系统性能分析能力在实际应用开发中为开发者带来的便利。1.2 实验对象企业个人开发者高校学生1.3 实验时间本次实验总时长预计40分钟。1.4 实验流程说明:自动部署鲲鹏云服务器;安装鲲鹏Devkit插件;通过浏览器访问,添加IP节点,以配置在线分析环境;安装Python3;使用Python3命令执行代码;在线分析,通过全景分析和进程分析查看CPU负载和使用率情况进行对比分析;修改执行命令,再次分析。1.5 实验资源本次实验预计花费总计0元资源名称规格单价(元)时长(h)云主机4vCPUs | 8GB |ARM | Ubuntu免费12 鲲鹏DevKit之Python字符串拼接系统性能分析2.1 自动部署鲲鹏云服务器在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。执行自动部署命令如下,该命令会自动部署鲲鹏云服务器。hcd deploy --password abcd@1234 --time 3600–password 待部署项目所在ECS的root用户密码(至少8个字符),如果不修改部署命令,鲲鹏云服务器密码就是abcd@1234。–time 待部署资源的保留期(单位为秒,至少600秒,默认600秒)。当前实验预估需要40分钟,可以配置time为1小时保留期。看到“application is running, service addr: https://xxx.xxx.xxx.xxx:8084”表示部署成功,记录部署远端服务器公网IP,如截图中对应的就是:115.175.25.9 。自动部署的鲲鹏云务器已经预装了鲲鹏DevKit插件,该案例会用到DevKit的系统性能分析能力。2.2 添加IP节点在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。通过ssh连接云服务器,然后输入“密码”,出现“Welcome to XXX”代表连接成功。ssh root@云主机IP登录鲲鹏云服务器查询鲲鹏云服务器内网IP地址。ifconfig通过浏览器访问鲲鹏云服务器,添加目标节点,以配置在线分析环境。打开浏览器,输入“https://xxx.xxx.xxx.xxx:8086”(IP为2.1自动部署的鲲鹏云服务器IP),如果提示风险,点击接受并继续。首次登录需要设置密码,设置后登录。登录完成后添加节点:点击“调优”,选择通用分析下面的“新建”按钮,右边窗口选择“管理节点”。进入管理界面后,点击“添加节点”,勾选协议,弹窗节点IP输入上面ifconfig查询到的鲲鹏云服务器内网IP,输入“密码”,点击“确定”。选择“继续添加”。添加成功如下图所示,点击左上角“DevKit Tools”返回上一级菜单。上一级菜单如下图所示,可以看到节点添加成功。2.3 执行Python代码回到云主机桌面打开终端,创建concatenate_string.py文件。vim concatenate_string.py回车进入,点击“i”进入编辑模式。concatenate_string.py代码如下(concatenate_string.py 代码仓地址请至案例原文获取):import sysBASE_STRING = "Hello world"LOOP_TIMES = 100000000STRING_LIST = [BASE_STRING] * LOOP_TIMESdef string_plus(): new_string = '' for string in STRING_LIST: new_string += string print(len(new_string)) def string_join(): new_string = ''.join(STRING_LIST) print(len(new_string)) def main(): function_map = { 'string_plus': string_plus, 'string_join': string_join, } print(sys.argv) _, function = sys.argv if function in function_map: function_map[function]() else: print('function {} not exist'.format(function)) if __name__ == "__main__": main()代码复制完毕,键盘点击“esc”,然后输入“:wq”保存退出。执行以下指令,可以代码看到执行成功,该代码中使用“+”在for循环中拼接字符串,运行时间为10s。time python3 concatenate_string.py string_plus2.4 在线分析2.4.1 创建全景分析任务回到浏览器,可以看到2.2添加的节点界面。分析类型选择“全景分析”,采样类型全部勾选,采样时长设置为“20”,其他默认,点击“确定”,跳出弹窗点击“确定”。出现如下界面时,点击“开始分析”,等待分析进度条完成。采样完成后,点击“系统性能”,打开“CPU负载”,可以看到数据显示CPU负载值。2.4.2 创建进程线程分析任务回到执行Python终端,如连接超时重新连接即可。再次执行Python3命令。time python3 concatenate_string.py string_plus执行成功返回浏览器。点击左上角系统性能分析后的新建任务图标,选择“通用分析”。分析类型选择“进程分析”,采样类型全部勾选,采样时长设置为“20”,其他默认,点击“确定”,跳出弹窗点击“确定”出现如下界面时,点击“开始分析”。等待分析进度条完成。分析完成后查看进程性能数据,CPU使用率也比其他大部分进程高。2.5 修改执行命令并再次分析回到Python终端,将执行命令进行修改,使用join拼接字符串,执行如下命令,可以看到运行时间变为3s。time python3 concatenate_string.py string_join再次创建全景分析,参数与2.4.1保持一致,分析成功后查看结果。再次创建进程分析,参数与2.4.2保持一致,分析成功后查看结果。时间对比:字符串拼接方式运行时长使用“+”拼接10.850s使用“join”拼接3.112s总结使用鲲鹏DevKit系统性能分析工具查看性能数据,通过系统全景分析和进程分析的数据采集,可以分析出性能瓶颈点,Python中的string是不可变对象,循环中使用+进行大量字符串拼接时,会频繁的进行内存的申请、分配以及字符串的复制,导致性能低下。将代码进行修改,使用join拼接字符串,执行时间减少,性能明显提升。至此本次实验全部内容完成。更多案例戳→https://devstation.connect.huaweicloud.com/space/devportal/casecenter
-
高校开发者作为数智产业发展的生力军,成为技术创新的核心驱动力。为进一步深化产教融合,助力未来开发者成长。近日,由华为云计算技术有限公司主办、北京邮电大学承办的“华为云HCSD校园公开课”在北京邮电大学成功举办。华为云开发者支持与运营部部长林华鼎、华为公司云计算招聘调配部部长刘红、华为云高校生态总监罗静带领技术专家团队走进校园,与北京邮电大学叶培大创新创业学院副院长高鹏、北京邮电大学叶培大创新创业学院主任韩康榕等学院领导及师生代表展开深入交流。活动聚焦就业、华为开发者空间实践、AI、仓颉等前沿领域,启迪创新思维,培养符合数智时代需求的高素质开发人才。 教育、科技、人才三位一体共创育人新路径 “华为云HCSD校园公开课进入北京邮电大学,体现了华为对北邮本科教育、创新创业教育的重视和支持。”北京邮电大学双创学院副院长高鹏在致辞中表示,长期以来,北邮和华为具有良好的合作基础,双方携手成立北邮-华为学院,建设“智能基座”基地,还以华为云HCSD公开课等形式推进产教融合。北邮是信息行业高端人才最大生源地,华为云是云领域的领军代表,双方合作有强大的内生动力,是彼此不可替代的重要合作伙伴。▲ 北京邮电大学叶培大创新创业学院副院长 高鹏“高校是开发者的源头,华为云致力于将先进技术和平台融入高校的教学和实践,鼓励高校师生在华为统一开发者平台上开展教学和实践开发。”华为云开发者支持与运营部部长林华鼎表示,近年来,华为云一直将AI作为战略核心,从云原生全面跃迁至AI原生,通过持续创新,引领产业发展。北京邮电大学作为国内外信息科技领域的人才培养重要基地,华为云将与校方深化合作,协力为学生创造更好的学习环境,为实现加快建设世界重要人才中心的目标贡献力量。▲ 华为云开发者支持与运营部部长 林华鼎随后,激动人心的校园大使授证仪式举行。北京邮电大学叶培大创新创业学院副院长高鹏、华为云开发者支持与运营部部长林华鼎、华为公司云计算招聘调配部部长刘红为校园大使蒋真雨、崔金硕、鲁奕文同学颁发证书。这些校园大使将成为华为云与学校之间的桥梁,促进技术交流与创新实践活动的开展。他们将积极参与华为云相关活动的组织与推广,带动更多同学了解和应用华为云技术。 ▲ 华为云HCSD校园大使授证一直以来,华为云积极推动产教融合,从学习、实践、成果化等方面打通数字人才培养全链条,致力于成为数字经济、人才培养的黑土地。活动中,华为公司云计算招聘调配部部长刘红分享了《云创未来,跨界成长》的主题演讲,介绍了华为云在智能时代的行业领先地位,列举了其在智能制造、金融、医药等领域的AI创新成果,盘古大模型的突破性应用,以及全球化的研发体系。还通过多位北邮校友在华为云的职业成长案例,展现华为云的人才培养机制,吸引优秀学子加入云计算创新行列,让最优秀的人培养更优秀的人。 ▲ 华为公司云计算招聘调配部部长 刘红从理论到实践校企联合编织人才“摇篮” 华为云AI算法工程师刘越展开了《大模型时代下,高校开发者如何学好AI》的主题演讲,从AI的发展历程和入门难点引入,讲解大模型的一般构建流程、低成本参与关键技术以及如何影响未来产业格局。一直以来,华为云持续推动昇腾云服务全面升级,为开发者提供全栈支持,可显著降低学习门槛,实现低成本、高性价比的AI实践。高校开发者可通过昇腾云资源,如免费算力、AI Gallery案例库,快速部署大模型,构建编程助手、知识库问答等应用,鼓励学生们抓住时代机遇,学好AI。▲ 华为云AI算法工程师 刘越仓颉编程语言于2019年在华为诞生,历经5年研发沉淀,2024年与全球开发者见面。华为仓颉语言生态发展经理许亦然在《面向全场景应用的新一代编程语言——仓颉》主题演讲中提到,仓颉编程语言主打“原生智能化、天生全场景、高性能,强安全”四大特性,旨在为鸿蒙生态及全场景应用提供高效、安全的开发工具。对高校生来说,仓颉编程语言更易上手,编码更加轻松,能够显著提升20%的研发效率。演讲中还介绍了诸多案例,无论是个人开发者还是企业用户,均可通过丰富的资源与案例快速上手,探索更多创新可能。▲ 华为仓颉语言生态发展经理 许亦然活动还特设技术实战环节,华为云高校生态运营布道师罗树国在《基于华为开发者空间部署和体验大模型》的案例中,详细介绍了华为开发者空间,手把手指导学生在云主机上部署了DeepSeek模型,学生们踊跃参与,氛围十分活跃,不少同学抓住机会与专家进行互动问答,切磋交流。这是以开发者为对象进行开发者关系关联和交流、学习、实践的生态运营平台和统一入口,具备开发桌面便捷访问、开发者工具合集开箱即用、沙箱调测资源灵活调用、成长数据云上保存等核心功能,助力高校师生开发实践、应用构建和开源共创。▲ 华为云高校生态运营布道师 罗树国华为云AI算法工程师刘越为同学们带来了《在ComfyUI中将人像转换为复古日漫风格》的案例,现场带领学生基于ComfyUI搭建工作流,最后将人像转换为日本漫画黄金时期的漫画大师风格。 ▲ 现场实操数字浪潮奔涌向前,构建产业生态、人才培育体系是高质量发展的关键。华为云将持续在人才培养、科学研究、产学研合作等方面发力,以体系化、常态化的校企合作关系,携手更多高校铸造人才蓄水池,为数字中国建设注入源源不断的创新动能。
-
获奖信息已公示,见此帖最新评论___________________________________________________________________________________________________ 一年一度的开发者盛会“华为开发者大会(HDC2025)”如约来袭,各位小伙伴已经准备好观看姿势了吗?不仅能深度体验HarmonyOS创新技术,更能带你实战最新AI应用开发,这次HDC2025,华为开发者空间不仅有单独的展区,还有专属的产品体验区,6月21-22日,我们在现场等你体验。不能如愿去现场感受的小伙伴,可以提前线上参与互动,小编准备了限定的HDC好礼,欢迎叫上小伙伴一起来实践打卡哦~ 【活动时间】即日起—6月30日 【活动流程】完成报名 → 选择活动方式 → 参与活动 → 获得激励 【活动方式】(以下活动均可参与,奖励可叠加)活动一【体验打卡】:体验打卡开发者空间功能,参与华为云开发者定制礼品抽奖参与方式:活动期间,进入开发者空间,体验空间各项能力,比如体验云主机、知识课程、体验案例、应用构建等,活动结束后将在参与活动报名并在活动期间登录名单中抽奖。奖项设置:华为手环9(NFC款)*2个,HDC定制挂脖风扇*10个中奖小妙招:小编会进行2轮抽奖,5月和6月都有体验开发者空间可以增加中奖概率哦~ 活动二【实践互动】:完成开发者空间AI案例,赢HDC定制礼包参与方式:活动期间在进入开发者空间 → 案例中心 → 技术标签选择“AI”,在云主机中完成AI标签下任意一个或多个案例,并在评论区分享案例截图,活动结束后,将在评论区用户中抽奖。奖项设置:华为FreeBuds 6i耳机*1个、HDC定制礼包*5个(内含双肩包、短袖T恤、帽子等),HDC定制挂脖风扇15个中奖小妙招:1、完成案例后,回帖说明和案例应用截图有HDC元素的,会额外增加中奖概率,比如完成DeepSeek部署案例,提问大模型HDC期间天气情况或者部署完高德地图后,规划去HDC的3天行程等2、完成多个案例,会增加中奖概率!完成后请在回帖中注明完成了几个案例,以及案例名称。小编会对案例完成情况进行复核,请大家真实完成哦!部分礼品示意 【活动规则】1、抽奖方式:活动结束后,我们将从参与活动的用户中(华为云新老用户均可参与),通过巨公平台或Excel 函数形式抽取获奖用户。获奖名单将在活动结束后的7个工作日内公布。2、活动二仅限于在“华为开发者空间”内体验相关案例项目,其他项目建议不参与此次活动,否则视为无效内容,具体参考案例中心内容。另外活动将根据有效评论数设置获奖人员数量,规则如下:有效评论数量获奖名额105201030以上213、本次活动将根据实际参与情况发放奖励,包括但不限于用户百分之百中奖或奖项轮空的情况。【活动说明】用户限制说明:1、参加本次社区活动的用户必须为华为云注册用户。同时为保证活动公平性,禁止用户以IAM账号身份参与活动,否则将视为无效。2、领取奖品的用户需为华为云实名用户,未完成实名认证的用户将不发放活动奖励。3、本次活动如一个实名认证对应多个账号,只有一个账号可领取奖励。如在同一概率活动中,同一账号重复获奖,只发放首先获奖奖品。4、本次活动一个实名认证账号只能对应一个收件人,如同一账号填写多个不同收件人,不予发放奖励。5、请开发者不要在活动期间随意修改社区昵称和华为云账号,由此产生的统计问题,如过了申诉期,小助手不再处理。(申诉期为活动结果公示3天内。)奖品发放说明:1、本活动结束之后10个工作日内公示获奖信息,获奖开发者用户需在截止时间在获奖信息收集表中填写获奖信息,获奖信息截止收集日过后10个工作日内,将统一发出奖品。华为云遵守《中华人民共和国个人信息保护法》规定,将以上个人信息仅用于礼品发放之目的,不会向任何第三方披露。若由于获奖开发者用户自身原因(包括但不限于联系方式有误、身份不符或超过截止登记日期等)造成奖品无法发送,视为获奖开发者用户放弃领奖。2、为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等破坏活动公平性的行为),利用资源从事违法违规行为的开发者用户收回抽奖及奖励资格。3、若发放奖品时,出现库存不足,则优先发放等价值的其他实物奖品;HDC限定礼包为24/25年款随机发货;活动二中华为耳机需要在有效评论>40个开启。4、所有参加本活动的开发者用户,均视为认可并同意遵守《华为云开发者用户协议》,包括以援引方式纳入《华为云开发者用户协议》、《可接受的使用政策》、《法律声明》、《隐私政策声明》、相关服务等级协议(SLA),以及华为云服务网站规定的其他协议和政策(统称为“云服务协议”)的约束。5、如果您不同意本活动规则和云服务协议的条款,请勿参加本活动。
-
统计时长中显示一小时,但是工作台显示180小时已经耗尽,且从未提交延时请求,不知道为什么时长就突然没了。
-
请问在哪里可以看到【华为开发者空间】体验打卡+技术实践 活动获奖名单?https://developer.huaweicloud.com/signup/f8a3298e6e854f52bb92abb242d66264?utm_source=wechat
-
每个人有免费的5G,请问下只能再浏览器里上传和下载文件,这样来使用吗?是否可以在开发者云主机里访问到?就是这里云主机能访问到吗?
-
案例介绍毕昇编译器基于开源LLVM开发,并进行了优化和改进,同时支持Fortran语言前端,是针对鲲鹏平台的高性能编译器。案例内容1 概述1.1 背景介绍鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲鹏服务器具有高性能、低功耗、灵活的扩展能力,适合大数据分析、软件定义存储、Web等应用场景。毕昇编译器基于开源LLVM开发,并进行了优化和改进,同时支持Fortran语言前端,是针对鲲鹏平台的高性能编译器。除LLVM通用功能和优化外,对中端及后端的关键技术点进行了深度优化,并集成Auto-tuner特性支持编译器自动调优。1.2 适用对象企业个人开发者高校学生1.3 案例时间本案例总时长预计60分钟。1.4 案例流程说明:① 自动部署鲲鹏服务器;② 安装Python软件包;③ 安装毕昇编译器AutoTuner;④ AutoTuner自动调优。1.5资源总览本案例预计花费总计0元。资源名称规格单价(元)时长(分钟)云主机2vCPUs 4GB免费602 操作步骤2.1 自动部署鲲鹏服务器在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。执行自动部署命令如下:hcd deploy --password abcd1234@ --time 3600命令的参数说明:password:password关键字后设置的是鲲鹏服务器的root用户密码,命令中给出的默认为abcd1234@,开发者可以替换成自定义密码(至少8个字符)。time:time关键字后面设置的为鲲鹏服务器的可用时间,单位为秒,至少600秒。在命令中申请的时间为60分钟,即3600秒。该命令会自动部署鲲鹏服务器。首次部署会直接执行,旧资源未到期时重复部署,会提示是否删除前面创建的资源,可以删除旧资源再次部署。记录部署鲲鹏服务器公网IP,如截图中对应的就是:115.120.242.46。2.2 安装Python软件包新打开一个终端窗口,使用上一步中记录的公网IP登录鲲鹏服务器,命令如下:ssh root@鲲鹏服务器公网IP输入密码,密码为步骤2.1中自动部署命令行中“–password”后面的参数,命令中给出的默认为abcd1234@,如果没有修改,就使用abcd1234@进行登录,如果设置了自定义密码,直接输入自定义的密码(注意:输入过程中密码不会显示,密码输入完成按回车键结束)。登录成功后,输入命令安装Python依赖包,命令如下:yum -y groupinstall "Development Tools" --nogpgcheckyum -y install gcc openssl-devel bzip2-devel libffi-devel python3-devel sqlite-devel --nogpgcheckPython-3.11.4不支持OpenSSL-1.1.1以下的版本,所以需要下载编译OpenSSL-1.1.1版本,下载并解压源码命令如下:(*openssl下载备用链接:https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0014/openssl-1.1.1t.tar.gz)wget https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0014/openssl-1.1.1t.tar.gztar -xzf openssl-1.1.1t.tar.gzcd openssl-1.1.1t编译并安装 OpenSSL 到自定义目录以避免覆盖系统版本。./config --prefix=/usr/local/openssl-1.1.1 --openssldir=/usr/local/openssl-1.1.1 shared zlibmakemake install更新动态链接库缓存。echo "/usr/local/openssl-1.1.1/lib" > /etc/ld.so.conf.d/openssl-1.1.1.confldconfig毕昇编译器AutoTuner环境要求Python版本为Python-3.11.4,进入到/opt目录下载并解压Python3.11.4源码。cd /optwget https://mirrors.huaweicloud.com/python/3.11.4/Python-3.11.4.tar.xztar -xvJf Python-3.11.4.tar.xzcd Python-3.11.4编译和安装,配置编译选项并开始编译。./configure --prefix=/usr/local/ --with-openssl=/usr/local/openssl-1.1.1makemake installpython3 -m pip install --upgrade pip2.3 安装毕昇编译器AutoTuner下载并解压毕昇编译器。mkdir -p /opt/compilercd /opt/compilerwget https://kunpeng-repo.obs.cn-north-4.myhuaweicloud.com/BiSheng%20Enterprise/BiSheng%20Enterprise%20203.0.0/BiShengCompiler-4.1.0-aarch64-linux.tar.gztar -zxvf BiShengCompiler-4.1.0-aarch64-linux.tar.gz配置毕昇编译器环境变量。export PATH=/opt/compiler/BiShengCompiler-4.1.0-aarch64-linux/bin:$PATH export LD_LIBRARY_PATH=/opt/compiler/BiShengCompiler-4.1.0-aarch64-linux/lib:/opt/compiler/BiShengCompiler-4.1.0-aarch64-linux/lib/aarch64-unknown-linux-gnu:$LD_LIBRARY_PATH安装完毕后执行命令验证毕昇编译器版本。clang -v安装Autotuner。install-autotuner.shllvm-autotune -hauto-tuner -h2.4 AutoTuner自动调优实践CoreMark是衡量中央处理器(CPU)和嵌入式微控制器(MCU)性能的行业标准基准。我们这里以CoreMark为例展示如何运行自动调优。下载CoreMark代码。mkdir bisheng_compiler_democd bisheng_compiler_demogit clone https://github.com/eembc/coremark.git如果克隆失败,可以通过以下链接下载并解压:wget https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0014/coremark.zipunzip coremark.zip创建执行脚本,将进行20次迭代调优coremark代码并对比调优效果。cd coremark/vi run_autotuner.sh进入到vim编辑器界面内,按下“i”键将下段代码复制到编辑器内。#!/bin/bashexport AUTOTUNE_DATADIR=/tmp/autotuner_datarm -rf $AUTOTUNE_DATADIRmkdir -p $AUTOTUNE_DATADIRCompileCommand="clang -Iposix -I. -g -DFLAGS_STR=\"\" -DITERATIONS=300000 core_list_join.c core_main.c core_matrix.c core_state.c core_util.c posix/core_portme.c -O2 -o coremark"$CompileCommand -fautotune-generate;llvm-autotune minimize;for i in $(seq 20)do $CompileCommand -fautotune; ( time -p ./coremark 0x0 0x0 0x66 300000 ) 2>time.log time=$( grep real time.log | sed 's/real\s*//' ) echo "iteration: " $i "cost time:" $time; llvm-autotune feedback $time;donellvm-autotune finalize;复制完成后,按下“ESC”键->输入“:wq”保存并退出编辑器界面。添加该文档执行权限。chmod u+x run_autotuner.sh在终端中输入命令执行脚本,开始进行Autotuner迭代调优,进行20次循环迭代,并获取每次的性能数据作为反馈,执行过程约5~10分钟。./run_autotuner.sh打印内容如下所示,完成20次迭代后,将迭代获取的最优编译配置文件到脚本设置的AUTOTUNE_DATADIR目录:/tmp/autotuner_data/config.yaml调用最优配置文件,为了进行后续的优化编译,首先配置AUTOTUNE_DATADIR环境变量。export AUTOTUNE_DATADIR=/tmp/autotuner_data/直接使用-fautotune选项调用最优配置文件config.yaml进行优化编译,执行如下命令,编译生成优化后的coremark可执行文件coremark_autotuner:clang -Iposix -I. -g -DFLAGS_STR=\"\" -DITERATIONS=300000 core_list_join.c core_main.c core_matrix.c core_state.c core_util.c posix/core_portme.c -O2 -g -o coremark_autotuner -fautotune执行如下命令,获取优化后coremark可执行文件的运行时间(单位为秒):( time -p ./coremark_autotuner 0x0 0x0 0x66 300000 ) 2> time.log从图中可以看出,经过Autotuner优化后的coremark300000次迭代的执行时间为18.40s。使用毕昇编译器编译coremark用户代码,执行如下命令,生成未调优的coremark可执行文件进行对比,通过运行coremark可执行文件的时间差异来测试调优性能是否有提升,软件运行时间越短表示性能越好:clang -Iposix -I. -g -DFLAGS_STR=\"\" -DITERATIONS=300000 core_list_join.c core_main.c core_matrix.c core_state.c core_util.c posix/core_portme.c -O2 -g -o coremark之后执行如下命令,获取优化前coremark可执行文件的运行时间(单位为秒):( time -p ./coremark 0x0 0x0 0x66 300000 ) 2> time.log从图中可以看出,未经过Autotuner优化后的coremark300000次迭代的执行时间为19.56s。经比较可以发现,调优后的性能可以提升6%~7%(优化前时间/优化后时间-100%)左右,说明使用Autotuner编译调优对性能有较大改善。至此,基于鲲鹏使用毕昇编译器Autotuner自动调优实践全部完成。
-
【华为开发者空间+仓颉编程语言案例】产品体验官活动获奖名单如下:积分榜获奖名单yd_238822659、yd_284637750、banjin恭喜以上3名获奖用户,请获奖用户通过以下问卷反馈奖品收件信息(7月15日前反馈有效),感谢大家对云声平台的关注和支持~近期热门的仓颉编程语言小伙伴们用了吗?还不知道怎么实践?可以来华为开发者空间,空间提供的云主机环境已经预装了仓颉工具链和CodeArts IDE for Cangjie,即开即用,非常便捷。我们提供的案例结合代码体验,让大家更直观的了解仓颉语言。还不来试一试?体验完后提交开发者空间优化建议,还可以领取开发者礼包,包括但不限于华为耳机、手环、鼠标、云宝等好礼,快叫上小伙伴一起提建议吧~ 【实践项目】体验项目项目名称难度系数1仓颉初体验:开启仓颉语言的神秘大门★★2仓颉基础大揭秘:数据类型的奇妙世界★★3仓颉之函数的魔法宝典★★★4仓颉之结构体、类与接口的奇幻乐园★★★5仓颉之枚举类型与模式匹配的冒险之旅★★★6仓颉之泛型和扩展的神奇天地★★★7仓颉之Collection 类型的精彩舞台★★8仓颉之包与异常处理的智慧战场★★★9仓颉之I/O 操作的交互奥秘★★★10仓颉宏实现语言集成查询LINQ★11仓颉 – C跨语言编程实现控制台小游戏★★12基于仓颉编程语言+DeepSeek实现智能聊天助手开发秘籍★★★更多实践案例见“开发者空间案例中心” 【活动时间】2025年5月15日-6月10日 【参与方式】01 体验仓颉实践项目 》 02 去云声平台提建议 》 03 建议评估公示(5个工作日内) 》 04 获奖公示 ps:建议标题需要以“开发者空间体验官”开头 【奖项设置】奖项设置评选条件获奖名额激励礼品有效建议奖1、有效建议数量不少于2条,有效建议由内部技术专家评审得出2、建议内容需针对上述仓颉编程语言实践项目PS:有效建议数量达到3个,建议总积分额外增加10%;建议数量5个及以上,建议总积分额外增加15%;3名积分榜第1名:1000元礼品/人积分榜第2名:800元礼品/人积分榜第3名:500元礼品/人优质建议奖1、有效建议不少于2条,由内部技术专家评审选出10名每人100-200元开发者定制礼品【活动说明】1、建议预审通过即为有效建议,其中1条有效功能类建议为1分,1条有效体验类建议为0.3分;有效建议奖与优质建议奖可叠加2、建议提交时需要在标题中以“【开发者空间体验官】”为建议标题开头,比如【开发者空间体验官】开发者空间增加XX/优化XX/导入XX等3、建议内容仅针对以上“华为开发者空间+仓颉编程语言实践”项目中涉及的云产品,非以上实践项目涉及产品建议内容不参与此活动4、优质建议要求建议对云产品功能及优化改进有重要作用,优先从已被采纳的建议的选择;建议内容需要表述清晰,有明确的建议方案,最好有操作截图或链接等能进一步详细描述;高价值建议数量不限,且与有效建议奖可叠加,每位用户每月最多可获得一次。5、注意事项1)若出现积分相同且排名一致的情况,结合已实现和已采纳建议情况,由内部技术专家选出价值更高的建议用户给予奖励2)同一用户在同一页面(文档)提出的同一类用户体验问题(包括但不限于错别字、语句不通顺、视觉体验等),在通过审核后仅算作一条有效建议数3)若发现代他人提交优化建议,此建议分值只取原分值30%;若发现2次及以上重复提交他人建议,或3次及以上重复提交体验类相关建议进行恶意刷量(包括但不限于错别字、语句不通顺、视觉体验等),取消本人活动参与资格;在活动截止日前进行大量刷屏提交建议,或者重复提交同类型体验建议,直接取消活动参与资格4)以上兑换礼品均为仓库现有实物礼品,有货的情况下优先满足,其中1-3名可优先选择华为自营品牌电子礼品,礼品价值不能超过商品原价,无货则不可以指定,如遇商品缺货,将随机换成其他等价值礼品发放5)此【开发者空间体验官】与云声月度例行激励活动不叠加,若标题无【开发者空间体验官】标记,则有效建议默认参与月度例行激励
-
是那个180h的云主机,输入ping 8.8.8.8 正常连通,然后点击“关机”键会导致网络丢失连接。请问该如何解决?具体是今天下午5月8日17.37出现的问题,之前都是可以关机状态下联网的
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签