• [技术干货] AI Agent智能体系列解读 | ModelArts Versatile-AI原生应用引擎插件类——MCP/工具能力详解
    <ModelArts Versatile-AI原生应用引擎 体验入口> 华为开发者空间 -- 开发平台 --Versatile Agent( 请在PC端打开 )  什么是AI AgentAI Agent人工智能体,是一种能够自主感知环境、制定目标、规划行动、执行任务并持续学习的智能程序或系统。比如,告诉AI Agent帮忙下单一份外卖,它就可以直接调用 APP选择外卖,再调用支付程序下单支付,无需人类去指定每一步的操作。从本质上来讲,大模型作为大脑发号施令,推理能力决定它的决策能力上限,工具模块决定他行动能力的上限、可完成任务的横向宽度、操作场域。· AI Agent之ModelArts VersatileModelArts Versatile-AI原生应用引擎是一站式企业级全生命周期的智能体平台,为企业专属大模型应用开发的工具链,提供灵活的画布式AI Agent开发能力,让Agent能够准确解决复杂的业务场景问题。提供从Agent开发,使用,运营和运维的全生命周期管理能力。  快速了解 AI Agent的插件——MCP/工具 · MCP2024年11月底 Anthropic(Claude提供商)提出了MCP协议,并在Claude 客户端支持了MCP。MCP,全称Model Context Protocol,模型上下文协议。被认为是未来AI生态的「标准USB接口」,AI界的 “万能转换器”。MCP 是一个开放协议,核心目标是打通大语言模型(LLM)应用与外部数据源、工具之间的交互壁垒。由于每项数据源、工具或服务都有独立的格式规范、对接协议和认证体系,在传统的Agent开发场景中,如果AI模型需要与各类外部资源对接,开发者需要针对每个API进行独立的代码、文档、认证方式、错误处理和后续维护,这意味着每一种具体的连接都需要编写代码,效率低下且耗时费力。而MCP的出现,如同在AI模型与外部世界之间搭建了一座标准化的桥梁。MCP以通用的“标准语言”把工具、数据通过“MCP服务器”的方式供给(一次开发、无限连接),可以更高效、更便捷地实现Agent与成千上万的外部工具与数据的互通。 Before MCP:每个AI应用都需要单独封装API对接相同的外部系统,存在碎片化集成的问题。With MCP:统一抽象AI应用与外部系统的交互的标准化接口,不同AI应用通过相同Client即可连接到对应的Server。 MCP核心组件MCP Host:LLM应用程序(例如Claude Desktop,Agent智能体应用)MCP Client(MCP客户端):嵌入在MCP Host中,MCP Client对象与MCP Server的关系是1:1MCP Server(MCP服务器):向MCP Client提供上下文(例如外置的对话历史),工具执行,prompt模板等能力MCP Protocol(MCP协议):MCP Client和MCP Server之间数据传输的协议,当前支持本地stdio和远程http sse两种模式 其中MCP Server能力-工具执行:向AI应用提供工具执行能力,例如网页搜索、发送消息、执行LLM生成的代码等-资源访问:向AI应用提供资源访问的能力,例如访问文件系统、数据库等资源-Prompt模板:向AI应用提供预定义好的Prompt或工作流模板,指导LLM输出更准确的内容· 工具工具是一组相关的API集合,一个工具通常包含多个执行动作,每个执行动作用于实现特定功能,工具可以是函数、算法、或者是其他任何能够帮助Agent提高工作效率的辅助性资源。在创建Agent时调用工具,可以有效提高Agent开发的效率。例如,在人工智能领域,智能体可以通过调用不同的函数或算法来实现特定的功能,这些函数或算法可以被视为智能体的工具。通过这些工具的支持,智能体能够更加灵活地应对各种复杂任务和环境变化,从而提高其解决问题的效率和准确性。在创建工具时,需要先将选定的API服务注册为一个工具,然后再添加该服务下的API作为工具的执行动作。 ModelArts Versatile--AI原生应用引擎 MCP资产与工具的竞争力优势 · MCP资产 技术亮点01 ModelArts Versatile平台预置海量MCP资产,一键安装,开箱即用无码化开发,无需额外部署,预置MCP资产可实现Versatile AI Agent(智能体)能力边界拓展延伸。 02 兼容主流的三方插件及MCP接入标准,无缝集成MCP通过统一协议替代传统"MXN"式开发模式,使AI应用可通过单一接口访问文件、数据库、API、第三方工具等异构资源,降低开发复杂度300%以上。同时具备动态兼容性:当新增工具时,只需将其注册到MCP Server,所有接入MCP的LLM均可立即调用,无需重新训练或调整模型。 03 基于MoA架构和MCP协议,实现生态扩展及Multi Agent架构服务提供商按照MCP协议发布服务,一次发布。模型提供商按照MCP协议集成服务,一次集成。 相关特性ModelArts Versatile资产中心提供多种MCP资源,用户通过简单安装即可快速集成调用;平台支持灵活拓展,兼容开源社区MCP及自主开发MCP服务的接入。   · 工具 技术亮点01 预置60+常用工具资产Tools,让Agent天生具备强大问题解决能力,开箱即用ModelArts Versatile平台在资产中心预置了丰富的工具,拓展能力边界,突破模型固有局限,连接真实世界需求,提供广泛能力,并实现复杂任务自动化。 02 自定义插件工具,极大丰富智能体功能生态Versatile平台提供插件定制化体验、帮助用户构建专属工具、从广场选择他人插件/智能添加。同时也支持用户创建、上架、编辑、导入更新等工具管理方式,精准满足特定业务场景的需求。 03 灵活配置调用工具,保障Agent行动效率Agent支持工具识别、检索、调用;支持手动选择工具,支持工具搜索;支持根据基础信息自动选择工具; 相关特性资产库-预置工具:ModelArts Versatile资产中心展示了平台预置的第三方工具,这些工具可在创建Agent时便捷调用,同时可对60+工具可设置鉴权、收藏。创建工具:将选定的API服务注册为一个工具;添加API服务下的具体接口作为工具的执行动作。导入工具:平台支持通过导入OpenAPI规范文件(.json格式)自动解析并生成工具配置,从而提升工具创建效率。  · Versatile MCP资产与工具的差异与协作差异-工具:是AI 可调用的功能模块集合,实现智能体能力扩展。工具暂不适配MCP协议,部分为用户本地部署仅供内部使用,补齐能力。-MCP资产:该类资产适配当下大火的技术点——MCP协议,通过标准化协议实现AI模型与外部工具、数据源的高效连接。可在平台内一键安装,快速调用。而MCP标准化促进开发者生态的可持续快速发展。 协作单Agent (自主规划模式):MCP+工具相辅相成,加速能力延伸,快速构建出千行百业的AI智能体。MCP资产是工具Tools类插件在技术迭代背景下的升级,而MCP为基于大模型的助手与代理系统提供一个通用的接口标准,可实现即刻连接海量外部工具。两者加持赋能ModelArts Versatile,面向开发者、伙伴、生态,加速推动AI原生应用领域生态繁荣,实现智能体价值闭环。  Versatile--AI原生应用引擎 MCP/工具主要解决什么问题(Agent编排中心) · MCP使 AI 能够获取实时、准确的上下文信息;让不同平台、服务之间无缝协作;MCP是 Function Calling (函数调用)和 Tools 高效运行的基础。 打破数据孤岛:传统大模型无法直接访问实时数据或本地资源,而MCP让AI“连接万物”,例如,查询天气时自动调用气象API,分析企业数据时直接连接内部数据库。降低开发成本:在MCP出现之前,每个大模型需要为每个工具单独开发接口,导致重复劳动。而通过MCP,开发者只需写一次服务端,所有兼容MCP的模型都能调用。提升安全性与互操作性:MCP内置权限控制和加密机制,比直接开放数据库更安全;同时,类似USB接口的标准化让不同厂商的工具能“即插即用”,避免生态分裂。 · 工具 ‌能力扩展‌:通过集成各种工具,AI Agent可以访问外部数据源、执行特定计算或操作,从而扩展其原生能力范围。‌任务执行‌:工具使AI Agent能将抽象决策转化为具体操作,如调用API、操作数据库、生成代码等。‌环境交互‌:通过传感器接口、设备控制等工具,AI Agent能感知物理/数字环境并施加影响。工业领域的IoT监控Agent就是通过专用工具实现设备状态采集。‌智能增强‌:特定工具可以提升Agent的推理、规划能力。如LangGraph框架中的状态机工具支持复杂业务流程的编排与回溯。  总体来说,ModelArts Versatile-AI原生应用引擎拥有丰富的插件生态,包含平台预置的海量MCP资产/工具、由用户自定义配置的实用插件等,达成Agent能力边界无限拓展。开发者们通过可视化轻松编排Agent,无码化分钟级构建智能体,推动AI生产方式革新,助力千行万业实现产业升级、数字化转型迈向新高度。    点击可前往>>华为云ModelArts Versatile-AI原生应用 引擎官网  
  • [案例共创] 【案例共创】在开发者空间云开发环境使用Vanna配合ollama/maas基于GaussDB的自然语言分析系统
    案例介绍本案例使用Vanna配合本地Ollama/华为mass服务,并借助开发者空间云开发环境提供的免费GaussDB数据库和HCE2.0开发环境进行本地部署,来构建一个先进的AI自然语言分析系统。 案例内容一、概述1.1 案例介绍使用Vanna配合本地Ollama/华为mass服务,并借助开发者空间云开发环境提供的免费GaussDB数据库开发环境进构建一个先进的AI自然语言分析系统。GaussDB:华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。Vanna‌:作为数据处理和自然语言处理(NLP)的关键组件,Vanna负责数据的预处理、清洗、转换以及NLP任务的执行,如文本分类、情感分析、实体识别等。‌Ollama‌:作为AI模型和算法的核心,Ollama提供了丰富的机器学习模型和深度学习算法,用于训练和优化自然语言处理任务。它与Vanna紧密集成,共同实现高效的数据分析和知识提取。ModelArts Studio(MaaS)平台:是华为云推出的一款大模型即服务平台,可以一站式的对业界主流开源大模型进行部署托管,同时开放大模型API服务,可以结合业界主流Agent开发框架,轻松构建AI Agent应用。华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云开发环境、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者 从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。1.2 适用对象企业个人开发者高校学生1.3 案例时间本案例总时长预计60分钟。1.4 案例流程说明:在开发者空间中安装Ollama与Vanna申请华为云开发者空间的GaussDB数据库;启动vanna链接GaussDB数据库进行自然语言数据库分析。申请ModelArts Studio(MaaS)免费服务1.5 资源总览本案例预计花费0.8元。资源名称规格单价(元)时长(分钟)华为开发者空间 - 云开发环境鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE2.0免费60华为开发者空间 - 生态版GaussDB单副本集中式版 | 4 vCPUs | 16G | HCE OS 64bit (200GB)免费60弹性公网IP按流量计费 5Mbit/s0.8元/GB60二、案例准备工作2.1 配置云开发环境根据案例《开发者空间 - 云开发环境使用指导》,请查看下面链接,配置云开发环境,并通过xshell、crt等链接工具登录云开发环境。开发者空间 - 云开发环境使用指导参考如上案例链接进行配置并连接:创建本地PC和远程云开发环境的隧道链接通过xshell、crt等链接工具登录云开发环境,进行测试2.2 领取GaussDB数据库2.2.1 免费领取GaussDB在线试用版(2025年 06月 21日 - 2025年 12月 31日)。华为开发者空间-GaussDB云数据库领取与使用指导注:部署的Django项目需要对接GaussDB,因此GaussDB需要绑定EIP,参考上述指导中领取部分第(5)步因为默认vanna的postgrs驱动连接gaussdb认证方式有问题,实例创建完成后修改password_encryption_type参数为0,然后在基本信息里修改一下root密码 2.2.2 进行数据初始化领取Gaussdb实例后连接数据库点击登录 输入用户名密码进行登录 点击新建数据库,创建数据库school,兼容选择mysql点击确定 点击去school数据库,创建schema名字school,点击确认 初始化表和数据点击sql窗口,数据库选择school,schema也选择上面创建的school,拷贝表和数据脚本到窗口栏,点击执行sql样例数据: CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID', name VARCHAR(50) NOT NULL COMMENT '学生姓名', age INT COMMENT '年龄', major VARCHAR(100) COMMENT '专业', email VARCHAR(100) UNIQUE COMMENT '电子邮件'); INSERT INTO students (name, age, major, email) VALUES('张三', 20, '计算机科学', 'zhangsan@example.com'),('李四', 21, '电子工程', 'lisi@example.com'),('王五', 19, '数学', 'wangwu@example.com'),('赵六', 22, '物理', 'zhaoliu@example.com'),('钱七', 20, '化学', 'qianqi@example.com'),('孙八', 21, '生物', 'sunba@example.com'),('周九', 19, '历史', 'zhoujiu@example.com'),('吴十', 22, '哲学', 'wushi@example.com'),('郑十一', 20, '艺术', 'zhengshiyi@example.com'),('王十二', 21, '音乐', 'wangshier@example.com'),('陈十三', 19, '体育', 'chenshisan@example.com'),('冯十四', 22, '英语', 'fengshisi@example.com'),('董十五', 20, '法语', 'dongshiwu@example.com'),('萧十六', 21, '德语', 'xiaoshiliu@example.com'),('曹十七', 19, '日语', 'caoshiqi@example.com'),('许十八', 22, '韩语', 'xushiba@example.com'),('蒋十九', 20, '西班牙语', 'jiangshijiu@example.com'),('沈二十', 21, '意大利语', 'shenshier@example.com'),('韩二十一', 19, '心理学', 'hanershiyi@example.com'),('杨二十二', 22, '社会学', 'yangershi@example.com'); CREATE TABLE courses ( course_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID', course_name VARCHAR(100) NOT NULL COMMENT '课程名称', credits INT COMMENT '学分', teacher_id INT COMMENT '教师ID'); INSERT INTO courses (course_name, credits, teacher_id) VALUES('数据结构', 4, 1),('微积分', 3, 2),('编程基础', 3, 3),('物理实验', 2, 4),('化学原理', 3, 5),('生物技术', 4, 6),('历史概论', 2, 7),('哲学思考', 3, 8); CREATE TABLE enrollments ( enrollment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '选课记录ID', student_id INT NOT NULL COMMENT '学生ID', course_id INT NOT NULL COMMENT '课程ID', grade FLOAT COMMENT '成绩'); INSERT INTO enrollments (student_id, course_id, grade) VALUES(1, 1, 85.5),(2, 2, 90.0),(3, 3, 78.5),(4, 4, 82.0),(5, 5, 88.5),(6, 6, 75.0),(7, 7, 80.5),(8, 8, 87.0),(9, 1, 81.0),(10, 2, 85.5),(11, 3, 79.0),(12, 4, 83.0),(13, 5, 86.5),(14, 6, 77.0),(15, 7, 82.5),(16, 8, 88.0),(17, 1, 84.0),(18, 2, 87.5),(19, 3, 80.0),(20, 4, 85.0),(21, 5, 83.5),(22, 6, 78.0),(23, 7, 81.5),(24, 8, 86.0),(25, 1, 82.0),(26, 2, 84.5),(27, 3, 79.5),(28, 4, 83.0),(29, 5, 86.5),(30, 6, 77.5); 2.3 验证云开发环境与GaussDB互通通过xshell或windows命令终端登录云开发环境,测试GaussDB能否连接,如下是通的 如不通去修改安全组的入方向规则,增加需要的端口如图(默认应该没通的)三、 安装Ollama首先我们要先配置pycharm远程开发环境可参考如下用例基于华为开发者空间-云开发环境,PyCharm SSH远程开发环境搭建:cid:link_2后续所有操作都基于pycharm的远程命令行进行操作 3.1 安装OllamaOllama 是一个强大的开源工具,旨在帮助用户轻松地在本地运行、部署和管理大型语言模型(LLMs)。它提供了一个简单的命令行界面,使用户能够快速下载、运行和与各种预训练的语言模型进行交互执行安装命令如下:方式一(推荐,安装速度快):curl -fsSL https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0035/install.sh | sudo bash 3.2 模型部署接下来可以借助 Ollama 工具来部署 Deepseek 大模型,部署 deepseek-r1:1.5b 版本,因为资源有限我们部署一个小一点的模型,执行命令:ollama pull deepseek-r1:1.5b 部署的时间长短依赖于网络的情况,部署完成后,我们就可以与 Deepseek 大模型进行对话了:ollama run deepseek-r1:1.5b 四、 安装配置Vanna4.1 更新python配置虚拟环境vanna使用python 安装建议3.10以上,开发者空间中的python版本为3.9.9,需要先升级python4.1.1 安装所需包sudo yum groupinstall "Development Tools" -ysudo yum install openssl-devel -ysudo yum install gcc -y sudo yum install gcc-c++ -y sudo yum install bzip2-devel -y sudo yum install libffi-devel -y sudo yum install zlib-devel -y sudo yum install wget -y sudo yum install make -y sudo yum install glibc-devel -y sudo yum install libgcc -y sudo yum install tar -y sudo yum install bzip2 -y sudo yum install zlib -y sudo yum install xz -y sudo yum install readline-devel -y sudo yum install sqlite-devel -y sudo yum install sqlite-libs -y 4.1.2 升级pythonsudo wget https://mirrors.huaweicloud.com/python/3.10.14/Python-3.10.14.tgzsudo tar xzf Python-3.10.14.tgzcd Python-3.10.14OPENSSL_PREFIX=/usrsudo ./configure --enable-optimizations --with-ensurepip=install \ --with-openssl=$OPENSSL_PREFIXsudo make -j$(nproc)sudo make altinstallpython3.10 -m sslpython3.10 --version4.1.3 配置python虚拟环境因为业务场景的Python开发,多数都是构建一个大型应用程序,并且不希望各种组件的各种版本之间相互冲突,所以需要设置一个虚拟环境。先需要更新下载源。执行如下命令sudo yum -y updatesudo yum -y upgradepip3 install virtualenv   -i cid:link_8       #安装virtualenvpython3.10 -m venv myenv #创建虚拟环境source myenv/bin/activate #激活环境 4.2 python下安装Vannapython 安装建议3.10以上安装前更新下pip,然后执行安装python3.10 -m pip install --upgrade pip -i cid:link_8pip3 install 'vanna[chromadb,ollama,postgres]'  -i cid:link_8 4.3 Vanna官网生成示例代码Vanna是一款基于开源Python框架的SQL生成工具,可以用日常用语提问,Vanna自动将其转换为SQL语句,简化数据库查询过程。生成实例代码官网:https://vanna.ai/文档:https://vanna.ai/docs/Vanna的例子,链接如下,按照如下图选择生成示例代码:https://vanna.ai/docs/postgres-ollama-chromadb/依次选择Ollama-ChromaDB-postgres 会生成示例代码, 选择使用的模型商选择使用向量数据库的类型  选择要连接的数据库  样例代码:from vanna.ollama import Ollamafrom vanna.chromadb import ChromaDB_VectorStoreclass MyVanna(ChromaDB_VectorStore, Ollama): def __init__(self, config=None): ChromaDB_VectorStore.__init__(self, config=config) Ollama.__init__(self, config=config)vn = MyVanna(config={'model': 'deepseek-r1:1.5b', 'ollama_host': 'http://localhost:11434'})vn.connect_to_postgres(host='xxxxxxx', dbname='school', user='xxxx', password='xxxx', port='8000')vn.train(ddl="""CREATE TABLE school.students ( student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID', name VARCHAR(50) NOT NULL COMMENT '学生姓名', age INT COMMENT '年龄', major VARCHAR(100) COMMENT '专业', email VARCHAR(100) UNIQUE COMMENT '电子邮件');CREATE TABLE school.courses ( course_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID', course_name VARCHAR(100) NOT NULL COMMENT '课程名称', credits INT COMMENT '学分', teacher_id INT COMMENT '教师ID');CREATE TABLE school.enrollments ( enrollment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '选课记录ID', student_id INT NOT NULL COMMENT '学生ID', course_id INT NOT NULL COMMENT '课程ID', grade FLOAT COMMENT '成绩');""")from vanna.flask import VannaFlaskAppVannaFlaskApp(vn, allow_llm_to_see_data=True).run() 五、 启动应用并使用4.1 代码配置打开pycham把样例代码粘贴进main.py,并修改模型和数据库配置vn = MyVanna(config={'model': 'deepseek-r1:1.5b', 'ollama_host': 'http://localhost:11434'})vn.connect_to_postgres(host='xxxx', dbname='school', user='xxxx', password='xxxx', port='8000')上传代码到远程开发环境 5.2 启动应用进入自己配置的ssh远程目录启动应用nohup python3.10 main.py & 查看输出日志,日志最后有系统的登录地址tail nohup.out  创建应用启动的对应端口(8084)的隧道协议,可参考开发者空间 - 云开发环境使用指导-第4章2小节hdspace devenv start-tunnel --instance-id=0edfc31f922c4b54b74ba8819 --remote-port=8084 --local-port=8084 5.3 使用自然语言分析数据库在浏览器输入http://127.0.0.1:8084,进行登录,第一次比较慢等待一下  然后我们可以用自然语言操作数据库了,因为已开发环境内存有限,deepseek-r1:1.5b回答的不太好,如果资源充足可以换别的模型,生成的sql问题可以点击修复;使用自然语言提问:每门课程的做高分是多少  sql结果会自动生成表格和图表 六、 使用华为maas部署使用ollama本地模型比较安全但相对复杂,我们还可以使用华为ModelArts Studio(MaaS)服务来作为系统的智能模型6.1 申请ModelArts免费服务参考下面的步骤,免费体验ModelArts Studio(MaaS)预置服务cid:link_5按下面的步骤获取相关信息:区域切换到“西南-贵阳一”,依次点击:ModelArts Studio->模型推理->在线推理->预置服务->免费服务->领取 领取后点击->调用说明->OpenAI SDKAPI Key管理-> 创建API Key把api key,api地址,model参数保留好备用 6.2 生成vanna代码整体可参考<<四、安装配置vanna>>https://vanna.ai/docs/postgres-ollama-chromadb/依次选择OpenAI-ChromaDB-postgres 成示例代码 生成的示例代码6.3 安装python包注意: 要重新安装使用的包与ollama部署时的不一样pip3 install 'vanna[chromadb,openai,postgres]'  -i cid:link_8pip3 install openai    #安装openai本地客户端 6.4 修改代码并运行整体可参考步骤<<五、启动应用并使用>>在6.2生成的模板代码下我们进行修改,添加进去华为maas的参数及OpanAI客户端的代码运行前修改如下模型和数据库配置my_llm_api_key = 'key' #上面步骤我们创建的apikeymy_llm_base_url = 'https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/271c9332-4aa6-4ff5-95b3-0cf8bd94c394/v1' # 上面步骤调用说明里的apiurlmy_llm_name = 'DeepSeek-V3' #上面步骤的modelnamevn.connect_to_postgres(host='xxx', dbname='school', user='root', password='xxx', port='8000')代码:from vanna.ollama import Ollamafrom vanna.chromadb import ChromaDB_VectorStorefrom vanna.openai import OpenAI_Chatfrom openai import OpenAImy_llm_api_key = 'key' #上面步骤我们创建的apikeymy_llm_base_url = 'https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/271c9332-4aa6-4ff5-95b3-0cf8bd94c394/v1' # 上面步骤调用说明里的apiurlmy_llm_name = 'DeepSeek-V3' #上面步骤的modelnameclient = OpenAI( api_key=my_llm_api_key, base_url=my_llm_base_url)class MyVanna(ChromaDB_VectorStore, OpenAI_Chat): def __init__(self, client=None, config=None): ChromaDB_VectorStore.__init__(self, config=config) OpenAI_Chat.__init__(self, client=client, config=config)vn = MyVanna(client=client, config={"model": my_llm_name})vn.connect_to_postgres(host='xxx', dbname='school', user='root', password='xxx', port='8000')vn.train(ddl="""CREATE TABLE school.students ( student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID', name VARCHAR(50) NOT NULL COMMENT '学生姓名', age INT COMMENT '年龄', major VARCHAR(100) COMMENT '专业', email VARCHAR(100) UNIQUE COMMENT '电子邮件');CREATE TABLE school.courses ( course_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID', course_name VARCHAR(100) NOT NULL COMMENT '课程名称', credits INT COMMENT '学分', teacher_id INT COMMENT '教师ID');CREATE TABLE school.enrollments ( enrollment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '选课记录ID', student_id INT NOT NULL COMMENT '学生ID', course_id INT NOT NULL COMMENT '课程ID', grade FLOAT COMMENT '成绩');""")from vanna.flask import VannaFlaskAppVannaFlaskApp(vn, allow_llm_to_see_data=True).run() 上传代码并运行整体可参考步骤<<五、启动应用并使用>>nohup python3.10 main.py & 在浏览器输入http://127.0.0.1:8084,进行登录使用,我们可以看到使用准确的模型一次就回答对了,如果生产部署选对模型很重要 至此本案例关于在开发者空间–远程开发环境中使用Vanna配合ollama/maas基于GaussDB的自然语言分析系统实践操作完毕。 我正在参加【案例共创】第6期 开发者空间-基于云开发环境和GaussDB构建应用  cid:link_7
  • 基于开发者空间 - 开发平台工作流构建旅行行程规划应用 案例建议反馈贴
    体验华为开发者空间案例:基于开发者空间开发平台工作流构建旅行行程规划应用,反馈改进建议,请直接在评论区反馈即可。体验指导:cid:link_0
  • [技术干货] 昇腾平台YOLO训练和推理技术洞察
    1      YOLO介绍YOLO(You Only Look Once)是一种流行的实时目标检测算法,以其高速和高精度著称。与传统的目标检测方法(如R-CNN系列)不同,YOLO将目标检测任务视为单一的回归问题,直接从图像像素中预测边界框和类别概率,实现了“端到端”的检测。         YOLO将输入图像划分为 S×S 的网格(例如7×7),每个网格负责预测多个边界框(Bounding Box)及其置信度(Confidence Score)和类别概率。边界框:包含框的中心坐标、宽高。置信度:反映框内是否存在目标以及预测的准确性。类别概率:使用Softmax预测框内物体的类别。         传统方法(如滑动窗口)需要多次扫描图像,而YOLO仅需“看一次”(You Only Look Once),通过卷积神经网络一次性输出所有检测结果,因此速度极快。         在昇腾(Ascend)平台上运行YOLO(You Only Look Once)目标检测算法具有重要的技术意义和商业价值,尤其在AI加速计算领域。昇腾是华为推出的高性能AI处理器(如Ascend 910/310),结合昇腾AI软件栈(CANN、MindSpore等),能够显著提升YOLO的推理和训练效率。以下是其核心意义:1. 高性能加速,满足实时性需求;2. 边缘到云的灵活部署;3. 软硬件协同优化。 2      系统环境安装         昇腾平台运行YOLO需要安装这些工具:1.     Ascend-cann-toolkit_8.0.RC3_linux-aarch64,2.     Ascend-cann-kernels-910b_8.0.RC3_linux-aarch64,3.     mindspore=2.5.0,4.     python=3.9, python3.9的环境的安装命令如下,python的版本号为3.10或者3.11会报错:conda create -n yolo20250705python3d9d8 python=3.9conda activate yolo20250705python3d9d8 下载CANN8.0相关工具的网址:https://www.hiascend.com/developer/download/community/result?module=cann&cann=8.0.RC3.beta1;将下载得到的工具包传至服务器,然后安装;使用CANN=8.1或者8.2运行YOLO有可能会报错;安装CANN的命令如下:/tmp/Ascend-cann-toolkit_8.0.RC3_linux-aarch64.run --install/tmp/Ascend-cann-kernels-910b_8.0.RC3_linux-aarch64.run --devel  下载MindSpore的网址:cid:link_0;安装MindSpore的命令如下:pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.5.0/MindSpore/unified/aarch64/mindspore-2.5.0-cp39-cp39-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple 代码目录:/apply/yolo20250811/ 进入代码目录:cd /apply/yolo20250811安装环境包资源:pip install -r requirements.txt系统需要安装mesa-libGL工具包,不安装有时会报错:sudo yum install mesa-libGLpython环境需要安装这些工具包,不安装有时会报错;albumentations的版本号>=2.0会报错:pip install sympypip install tepip install albumentations==1.4.24 3      昇腾平台的YOLO的训练与推理训练命令;没有“--ms_mode 1”会报错:python train.py --epochs 600 --config ./configs/yolov11/yolov11-n.yaml --data_dir  ./cache/data/coco --keep_checkpoint_max 1 --auto_accumulate True --per_batch_size 25 --weight ./cache/pretrain_ckpt/yolov11n.ckpt --ms_mode 1 推理命令:python ./demo/predict.py --config ./configs/yolov11/yolov11-n.yaml --weight ./cache/pretrain_ckpt/yolov11n.ckpt --image_path ./cache/data/coco/images/val2017/000000550691.jpg yolo训练日志: (yolo20250705python3d9d8) [root@bms-jp ascendyolo_run_for_v811_20250417a1]# python train.py --epochs 600 --config ./configs/yolov11/yolov11-n.yaml --data_dir  ./cache/data/coco --keep_checkpoint_max 1 --auto_accumulate True --per_batch_size 25 --weight ./cache/pretrain_ckpt/yolov11n.ckpt --ms_mode 1/root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.  setattr(self, word, getattr(machar, word).flat[0])/root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.  return self._float_to_str(self.smallest_subnormal)/root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.  setattr(self, word, getattr(machar, word).flat[0])/root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.  return self._float_to_str(self.smallest_subnormal)2025-07-05 22:45:27,447 [INFO] parse_args:2025-07-05 22:45:27,447 [INFO] task                                    detect2025-07-05 22:45:27,447 [INFO] device_target                           Ascend2025-07-05 22:45:27,447 [INFO] save_dir                                ./runs/2025.07.05-22.45.272025-07-05 22:45:27,447 [INFO] log_level                               INFO2025-07-05 22:45:27,447 [INFO] is_parallel                             False2025-07-05 22:45:27,447 [INFO] ms_mode                                 12025-07-05 22:45:27,447 [INFO] max_call_depth                          20002025-07-05 22:45:27,447 [INFO] ms_amp_level                            O22025-07-05 22:45:27,447 [INFO] keep_loss_fp32                          True2025-07-05 22:45:27,447 [INFO] anchor_base                             False2025-07-05 22:45:27,447 [INFO] ms_loss_scaler                          dynamic2025-07-05 22:45:27,447 [INFO] ms_loss_scaler_value                    65536.02025-07-05 22:45:27,447 [INFO] ms_jit                                  True2025-07-05 22:45:27,447 [INFO] ms_enable_graph_kernel                  False2025-07-05 22:45:27,447 [INFO] ms_datasink                             False2025-07-05 22:45:27,447 [INFO] overflow_still_update                   False2025-07-05 22:45:27,447 [INFO] clip_grad                               True2025-07-05 22:45:27,447 [INFO] clip_grad_value                         10.02025-07-05 22:45:27,447 [INFO] ema                                     True2025-07-05 22:45:27,447 [INFO] weight                                  ./cache/pretrain_ckpt/yolov11n.ckpt2025-07-05 22:45:27,447 [INFO] ema_weight                              2025-07-05 22:45:27,447 [INFO] freeze                                  []2025-07-05 22:45:27,447 [INFO] epochs                                  6002025-07-05 22:45:27,447 [INFO] per_batch_size                          252025-07-05 22:45:27,447 [INFO] img_size                                6402025-07-05 22:45:27,447 [INFO] nbs                                     642025-07-05 22:45:27,447 [INFO] accumulate                              3.02025-07-05 22:45:27,447 [INFO] auto_accumulate                         True2025-07-05 22:45:27,447 [INFO] log_interval                            1002025-07-05 22:45:27,447 [INFO] single_cls                              False2025-07-05 22:45:27,447 [INFO] sync_bn                                 False2025-07-05 22:45:27,447 [INFO] keep_checkpoint_max                     12025-07-05 22:45:27,447 [INFO] run_eval                                False2025-07-05 22:45:27,447 [INFO] conf_thres                              0.0012025-07-05 22:45:27,447 [INFO] iou_thres                               0.72025-07-05 22:45:27,447 [INFO] conf_free                               True2025-07-05 22:45:27,447 [INFO] rect                                    False2025-07-05 22:45:27,447 [INFO] nms_time_limit                          20.02025-07-05 22:45:27,447 [INFO] recompute                               False2025-07-05 22:45:27,447 [INFO] recompute_layers                        02025-07-05 22:45:27,447 [INFO] seed                                    22025-07-05 22:45:27,447 [INFO] summary                                 True2025-07-05 22:45:27,447 [INFO] profiler                                False2025-07-05 22:45:27,447 [INFO] profiler_step_num                       12025-07-05 22:45:27,447 [INFO] opencv_threads_num                      02025-07-05 22:45:27,447 [INFO] strict_load                             True2025-07-05 22:45:27,447 [INFO] enable_modelarts                        False2025-07-05 22:45:27,447 [INFO] data_url                                2025-07-05 22:45:27,447 [INFO] ckpt_url                                2025-07-05 22:45:27,447 [INFO] multi_data_url                          2025-07-05 22:45:27,447 [INFO] pretrain_url                            2025-07-05 22:45:27,447 [INFO] train_url                               2025-07-05 22:45:27,447 [INFO] data_dir                                ./cache/data/coco2025-07-05 22:45:27,447 [INFO] ckpt_dir                                /cache/pretrain_ckpt/2025-07-05 22:45:27,447 [INFO] data.dataset_name                       coco2025-07-05 22:45:27,447 [INFO] data.train_set                          /apply/yolo20250811/cache/data/coco/train2017.txt2025-07-05 22:45:27,447 [INFO] data.val_set                            /apply/yolo20250811/cache/data/coco/val2017.txt2025-07-05 22:45:27,447 [INFO] data.test_set                           /apply/yolo20250811/cache/data/coco/test-dev2017.txt2025-07-05 22:45:27,447 [INFO] data.nc                                 802025-07-05 22:45:27,447 [INFO] data.names                              ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']2025-07-05 22:45:27,447 [INFO] train_transforms.stage_epochs           [590, 10]2025-07-05 22:45:27,447 [INFO] train_transforms.trans_list             [[{'func_name': 'mosaic', 'prob': 1.0}, {'func_name': 'copy_paste', 'prob': 0.1, 'sorted': True}, {'func_name': 'resample_segments'}, {'func_name': 'random_perspective', 'prob': 1.0, 'degrees': 0.0, 'translate': 0.1, 'scale': 0.5, 'shear': 0.0}, {'func_name': 'albumentations'}, {'func_name': 'hsv_augment', 'prob': 1.0, 'hgain': 0.015, 'sgain': 0.7, 'vgain': 0.4}, {'func_name': 'fliplr', 'prob': 0.5}, {'func_name': 'label_norm', 'xyxy2xywh_': True}, {'func_name': 'label_pad', 'padding_size': 160, 'padding_value': -1}, {'func_name': 'image_norm', 'scale': 255.0}, {'func_name': 'image_transpose', 'bgr2rgb': True, 'hwc2chw': True}], [{'func_name': 'letterbox', 'scaleup': True}, {'func_name': 'resample_segments'}, {'func_name': 'random_perspective', 'prob': 1.0, 'degrees': 0.0, 'translate': 0.1, 'scale': 0.5, 'shear': 0.0}, {'func_name': 'albumentations'}, {'func_name': 'hsv_augment', 'prob': 1.0, 'hgain': 0.015, 'sgain': 0.7, 'vgain': 0.4}, {'func_name': 'fliplr', 'prob': 0.5}, {'func_name': 'label_norm', 'xyxy2xywh_': True}, {'func_name': 'label_pad', 'padding_size': 160, 'padding_value': -1}, {'func_name': 'image_norm', 'scale': 255.0}, {'func_name': 'image_transpose', 'bgr2rgb': True, 'hwc2chw': True}]]2025-07-05 22:45:27,447 [INFO] data.test_transforms                    [{'func_name': 'letterbox', 'scaleup': False, 'only_image': True}, {'func_name': 'image_norm', 'scale': 255.0}, {'func_name': 'image_transpose', 'bgr2rgb': True, 'hwc2chw': True}]。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。[INFO] albumentations load success[WARNING] ME(50295:281473090502688,MainProcess):2025-07-05-22:46:03.231.109 [mindspore/run_check/_check_version.py:305] The version 7.6 used for compiling the custom operator does not match Ascend AI software package version 7.5 in the current environment......2025-07-05 22:47:15,474 [WARNING] Epoch 1/600, Step 1/2, accumulate: 3.0, this step grad overflow, drop. Loss scale adjust to 32768.02025-07-05 22:47:15,809 [WARNING] Epoch 1/600, Step 2/2, accumulate: 3.0, this step grad overflow, drop. Loss scale adjust to 16384.02025-07-05 22:47:16,184 [INFO] Epoch 1/600, Step 2/2, imgsize (640, 640), loss: 3.5250, lbox: 1.0629, lcls: 1.3194, dfl: 1.1426, cur_lr: 1.9966999388998374e-052025-07-05 22:47:17,505 [INFO] Epoch 1/600, Step 2/2, step time: 49088.29 ms2025-07-05 22:47:18,444 [INFO] Saving model to ./runs/2025.07.05-22.45.27/weights/yolov11-n-1_2.ckpt2025-07-05 22:47:18,444 [INFO] Epoch 1/600, epoch time: 1.65 min.2025-07-05 22:47:18,710 [WARNING] Epoch 2/600, Step 1/2, accumulate: 3.0, this step grad overflow, drop. Loss scale adjust to 8192.02025-07-05 22:47:19,024 [INFO] Epoch 2/600, Step 2/2, imgsize (640, 640), loss: 3.6963, lbox: 1.0847, lcls: 1.4422, dfl: 1.1694, cur_lr: 3.986799856647849e-052025-07-05 22:47:19,037 [INFO] Epoch 2/600, Step 2/2, step time: 296.27 ms2025-07-05 22:47:19,945 [INFO] Saving model to ./runs/2025.07.05-22.45.27/weights/yolov11-n-2_2.ckpt2025-07-05 22:47:19,946 [INFO] Epoch 2/600, epoch time: 0.03 min.2025-07-05 22:47:20,223 [WARNING] Epoch 3/600, Step 1/2, accumulate: 3.0, this step grad overflow, drop. Loss scale adjust to 4096.0   yolo推理日志: (yolo20250705python3d9d8) [root@bms-jp ascendyolo_run_for_v811_20250417a1]# python ./demo/predict.py --config ./configs/yolov11/yolov11-n.yaml --weight ./cache/pretrain_ckpt/yolov11n.ckpt --image_path ./cache/data/coco/images/val2017/000000550691.jpg                                                                                                                                              /root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for  type is zero.     setattr(self, word, getattr(machar, word).flat[0])                                                                                                                                                /root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for  type is zero.      return self._float_to_str(self.smallest_subnormal)                                                                                                                                                /root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for  type is zero.     setattr(self, word, getattr(machar, word).flat[0])                                                                                                                                                /root/miniconda3/envs/yolo20250705python3d9d8/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for  type is zero.      return self._float_to_str(self.smallest_subnormal)                                                                                                                                                2025-07-05 22:50:19,157 [WARNING] Parse Model, args: nearest, keep str type                                                                                                                         2025-07-05 22:50:19,204 [WARNING] Parse Model, args: nearest, keep str type                                                                                                                         2025-07-05 22:50:19,584 [INFO] number of network params, total: 2.639747M, trainable: 2.624064M                                                                                                     [WARNING] ME(66771:281473260486688,MainProcess):2025-07-05-22:50:26.245.7 [mindspore/train/serialization.py:1956] For 'load_param_into_net', remove parameter prefix name: ema., continue to load.  2025-07-05 22:50:26,023 [INFO] Load checkpoint from [./cache/pretrain_ckpt/yolov11n.ckpt] success.                                                                                                  .Warning: tiling offset out of range, index: 32                                                                                                                                                     .Warning: tiling offset out of range, index: 32                                                                                                                                                     .Warning: tiling offset out of range, index: 32                                                                                                                                                     Warning: tiling offset out of range, index: 32                                                                                                                                                      Warning: tiling offset out of range, index: 32                                                                                                                                                      Warning: tiling offset out of range, index: 32                                                                                                                                                      ..2025-07-05 22:51:27,507 [INFO] Predict result is: {'category_id': [6, 3, 3, 6, 6], 'bbox': [[194.125, 54.75, 243.875, 354.25], [115.25, 286.5, 82.25, 68.0], [442.0, 283.0, 24.0, 20.0], [3.25, 215.25, 160.75, 64.0], [3.875, 215.5, 159.875, 96.5]], 'score': [0.93115, 0.90283, 0.70898, 0.58154, 0.45508]}                                                                                        2025-07-05 22:51:27,507 [INFO] Speed: 61360.0/11.5/61371.5 ms inference/NMS/total per 640x640 image at batch-size 1;                                                                                2025-07-05 22:51:27,507 [INFO] Detect a image success.                                                                                                                                              2025-07-05 22:51:27,516 [INFO] Infer completed.     4      总结         在昇腾(Ascend)平台上成功运行YOLO模型的训练和推理,通过CANN软件栈和MindSpore框架的深度适配,实现了高效的算子优化及硬件加速(如昇腾910B/310)。关键技术包括动态分片、混合精度训练和DVPP硬件预处理,显著提升了目标检测的推理性能。昇腾NPU在CV任务中的具有强大的竞争力。昇腾显卡在边缘计算、智能安防等场景的AI部署具有重要的产业意义。        
  • 华为云ModelArts Versatile训练营基础实验手册——零基础秒变大师!快速开发帮你打造爆款AI Agent:出行规划助手
    华为云ModelArts Versatile训练营基础实验之AI原生应用开发—零基础秒变大师!快速开发帮你打造爆款AI Agent:出行规划助手  一 基本信息实验类型实验难度:简单实验时长:30分钟实验类型:实操型实验简介本次实验将指导开发者通过零码快速构建复杂任务规划专家AI Agent“出行规划助手”,并在应用生成后体验试用,体验快速创建AI原生应用,轻松完成行业场景的乐趣实验目标完成出行Agent的从0创建自定义出行Agent描述,技能等与出行Agent交互,助手回答用户相关提问实验任务3.配置MCP服务信息4.创建并配置Agent信息2.创建MCP服务1.登录Versatile6.根据Agent返回确认结果5.点击开始体验登录Versatile界面点击创建MCP服务,进入MCP服务创建界面配置MCP服务信息创建并配置Agent信息点击开始体验,并在对话框中输入和出行Agent交互的内容根据Agent返回确认结果:根据出行Agent的返回内容,确认是否完成了用户的指令学前建议1. 了解相关技能2. 了解MCP服务3. 了解Agent知识二 实验实操步骤一:进入Versatile首页,左边菜单栏选择“我的MCP”点击创建MCP服务步骤二:配置MCP服务信息,部署12306和高德MCP服务1. 选择12306-MCP服务模板后点击下一步2. 点击安装MCP点击安装后,等待MCP服务安装完成,显示安装中。3. 选择高德地图MCP模板后点击下一步4. 配置高德api-key后点击安装MCP请填写api-key:API Key创建方式请见:cid:link_05. 等待MCP安装完成步骤三:创建并配置Agent信息1. 左边菜单栏选择“我的Agent”点击创建Agent。2. 选择单Agent(复杂任务规划),配置Agent信息并添加前面部署的MCP服务,点击发布。经验模板填写:# 工具使用你可以使用12306相关mcp工具查询火车票相关信息。你可以使用高德相关mcp工具查询导航相关信息。3. 填写api-key,点击发布。请填写api-key:API Key创建方式请见:cid:link_0步骤四:旅游出行助手交互体验1. 在agent列表中,选择“旅游出行助手”体验2. 在对话框中输入:6月23日中午坐高铁从深圳到上海,请规划详细的行程路线规划,我早上从深圳华为基地出发,坐地铁到高铁站。最终用网页为我呈现,并等待Agent返回:生成计划后,点击开始任务,也可以进一步修改任务:最终生成网页进行浏览:3. 完成后,可自由提问相关问题。
  • 华为云ModelArts Versatile训练营基础实验手册——零基础秒变大师!快速开发帮你打造爆款AI Agent:热点新闻助手
    华为云ModelArts Versatile训练营基础实验之AI原生应用开发—零基础秒变大师!快速开发帮你打造爆款AI Agent:热点新闻助手  一 基本信息实验类型实验难度:简单实验时长:30分钟实验类型:实操型实验简介本次实验将指导开发者通过零码快速构建复杂任务规划专家AI Agent“热点新闻助手”,并在应用生成后体验试用,体验快速创建AI原生应用,轻松完成行业场景的乐趣实验目标完成出行Agent的从0创建自定义出行Agent描述,技能等与出行Agent交互,助手回答用户相关提问实验任务3.配置MCP服务信息4.创建并配置Agent信息2.创建MCP服务1.登录Versatile6.根据Agent返回确认结果5.点击开始体验登录Versatile界面点击创建MCP服务,进入MCP服务创建界面配置MCP服务信息创建并配置Agent信息点击开始体验,并在对话框中输入和出行Agent交互的内容根据Agent返回确认结果:根据出行Agent的返回内容,确认是否完成了用户的指令学前建议1. 了解相关技能2. 了解MCP服务3. 了解Agent知识二 实验实操步骤一:进入Versatile首页,左边菜单栏选择“我的MCP”点击创建MCP服务步骤二:配置MCP服务信息,部署中文趋势聚合服务1. 选择“中文趋势聚合”服务模板后点击下一步2. 点击安装MCP3. 点击安装后,等待MCP服务安装完成,显示安装中步骤三:创建并配置Agent信息1. 左边菜单栏选择“我的Agent”点击创建Agent。2. 选择单Agent(复杂任务规划),配置Agent信息并添加前面部署的MCP服务,点击发布。经验模板填写:# 工具使用- get-36kr-trending获取 36 氪热榜,提供创业、商业、科技领域的热门资讯,包含投融资动态、新兴产业分析和商业模式创新信息- get-bilibili-rank获取哔哩哔哩视频排行榜,包含全站、动画、音乐、游戏等多个分区的热门视频,反映当下年轻人的内容消费趋势- get-douban-rank获取豆瓣实时热门榜单,提供当前热门的图书、电影、电视剧、综艺等作品信息,包含评分和热度数据- get-douyin-trending获取抖音热搜榜单,展示当下最热门的社会话题、娱乐事件、网络热点和流行趋势- get-ifanr-news获取爱范儿科技快讯,包含最新的科技产品、数码设备、互联网动态等前沿科技资讯- get-netease-news-trending获取网易新闻热点榜,包含时政要闻、社会事件、财经资讯、科技动态及娱乐体育的全方位中文新闻资讯- get-tencent-news-trending获取腾讯新闻热点榜,包含国内外时事、社会热点、财经资讯、娱乐动态及体育赛事的综合性中文新闻资讯- get-toutiao-trending获取今日头条热榜,包含时政要闻、社会事件、国际新闻、科技发展及娱乐八卦等多领域的热门中文资讯3. 填写api-key,点击发布。请填写api-key:API Key创建方式请见:cid:link_0步骤四:热点新闻助手交互体验1. 在agent列表中,选择“热点新闻助手”体验2. 在对话框中输入:最近有哪些热点新闻、热门电影和即将上映的热门电影,请详细列举下,并用图文并茂的网页为我呈现,并等待Agent返回:生成计划后,点击开始任务,也可以进一步修改任务:最终生成网页进行浏览:3. 完成后,可自由提问相关问题。
  • Kubernetes (K8s) 中的ServiceAccount
    在 Kubernetes (K8s) 中,ServiceAccount 是一种特殊类型的 账户对象,用于为 Pod 中的容器提供身份标识。它的核心作用是为 Pod 内的进程(如应用程序)授予对集群内资源的访问权限。以下是详细说明及查看方法:一、什么是 ServiceAccount?核心功能:身份标识每个 ServiceAccount 都有一个唯一的名称和一个关联的加密签名密钥对(存放在 Secret 中),用于证明请求来自该账户。权限控制通过与 Role/ClusterRole + RoleBinding/ClusterRoleBinding 的组合,定义此账户能执行的操作(如读写 ConfigMap、调用外部 API 等)。自动挂载凭证当 Pod 使用了某个 ServiceAccount,Kubernetes 会自动将其凭证(包含 CA证书、命名空间、Token)注入到 Pod 的特定挂载点:/var/run/secrets/kubernetes.io/serviceaccount/包括三个文件:ca.crt, namespace, token。关键特点:特性    说明作用域    可作用于单个命名空间(默认)或整个集群(需配合 ClusterRole)默认行为    新创建的 Pod 若未显式指定 SA,则使用命名空间下的 default SA安全性    推荐遵循最小权限原则,仅授予必要权限二、如何查看 ServiceAccount 对象?以下是常用查看方式及命令示例:查看当前命名空间的所有 ServiceAccount# 查看当前命名空间的所有 SA(含简要信息)kubectl get serviceaccounts# 显示完整详细信息(JSON/YAML格式)kubectl get serviceaccounts -o wide          # 表格+额外字段kubectl get serviceaccounts -o json        # JSON格式kubectl get serviceaccounts -o yaml        # YAML格式查看指定命名空间的 ServiceAccount# 查看名为 "my-namespace" 命名空间下的所有 SAkubectl get serviceaccounts --namespace=my-namespace# 查看特定 SA 的详细信息(如名为 "my-sa")kubectl describe serviceaccount my-sa --namespace=my-namespace跨命名空间搜索 ServiceAccount# 查看所有命名空间下的 SA 列表kubectl get serviceaccounts --all-namespaces1.2.导出 ServiceAccount 的配置为文件# 将名为 "my-sa" 的 SA 配置导出为 YAML 文件kubectl get serviceaccount my-sa -n my-namespace -o yaml > my-sa.yaml三、典型使用场景示例假设你有一个名为 app-pod 的 Pod,它使用了自定义的 app-sa ServiceAccount,并绑定了一个允许读取 ConfigMap 的角色:# deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:  name: app-deploymentspec:  replicas: 1  template:    metadata: {}    spec:      serviceAccountName: app-sa # 指定使用的 ServiceAccount      containers:      - name: app-container        image: my-image此时,app-sa 就是该 Pod 的身份标识,其权限由对应的 RoleBinding 决定。四、注意事项不要混淆 IAM 账号Kubernetes 的 ServiceAccount ≠ 云厂商的 IAM 账号,它是集群内部的虚拟身份。避免裸奔权限默认的 default SA 通常没有绑定任何角色,但如果你手动绑定了高权限角色(如 edit),可能导致安全风险。多租户环境隔离在共享集群中,建议为不同团队/应用创建独立的 ServiceAccount 并严格限制权限。五、相关概念扩展对象类型    描述Role / ClusterRole    定义一组权限规则RoleBinding / ClusterRoleBinding    将角色绑定到 ServiceAccountPod    使用 ServiceAccount 的主体Secret    存储 ServiceAccount 的私钥和令牌总结ServiceAccount 是 Pod 的身份卡,用于控制容器对集群资源的访问。查看命令:kubectl get serviceaccounts(基础)、kubectl describe serviceaccount <name>(详情)。最佳实践:为每个应用创建专用 SA,并按需绑定最小权限角色。
  • [技术干货] Raft 分布式系统设计的共识算法
    **Raft协议**是一种专为分布式系统设计的共识算法,旨在解决多个节点之间的数据一致性问题。以下是对Raft协议的介绍以及核心内容的详细说明:### Raft协议概述1. **目标定位**:作为一种替代传统Paxos协议的新型方案诞生,侧重于提升可理解性与工程实践便利性。2. **核心理念**:采用强领导权模式,将复杂的一致性问题拆解为相互独立的子问题进行处理。3. **适用场景**:适用于构建高可用分布式存储系统、数据库集群等需强一致性的场景。### 核心角色与状态转换1. **三种节点状态**   - **Leader(领导者)**:唯一有权接受客户端请求并协调日志复制的中心节点。   - **Follower(追随者)**:被动响应领导者或候选人的请求,定期接收心跳信号维持状态。   - **Candidate(候选人)**:当追随者超时未收到心跳时触发选举产生的临时角色,参与投票竞争成为新领导者。2. **状态转换逻辑**   - **稳定期**:领导者持续发送心跳消息压制其他节点的选举行为。   - **选举触发**:若超过选举超时时间未收到心跳,追随者转为候选人发起投票。   - **多数决选**:获得集群多数选票的候选人晋升为领导者,开启新的任期。### 关键机制详解1. **领导者选举**   - **任期机制**:每个任期用单调递增的数字标识,确保过期无效的请求不会被处理。   - **随机超时**:每个节点设置随机范围的选举超时时间,减少分裂投票概率。   - **投票规则**:节点按“先到先得”原则投票,且仅支持同一任期内的单一候选者。   - **心跳抑制**:领导者定期发送心跳消息重置追随者的选举定时器,防止不必要的选举。2. **日志复制**   - **指令序列化**:客户端请求被领导者转换为日志条目,按顺序编号后同步至多数追随者。   - **提交条件**:当日志条目被复制到多数节点后,领导者提交该条目并通知所有节点执行。   - **一致性保障**:通过前缀匹配原则确保日志一致性,落后节点会丢弃冲突日志并同步最新条目。3. **安全属性**   - **领导完备性**:领导者必须包含所有已提交的日志条目,保证后续操作基于完整数据。   - **日志匹配原则**:若两个日志条目索引和任期相同,则认定其内容一致。   - **只追加特性**:领导者不会修改或删除已存在的日志条目,仅做增量添加。### 技术优势1. **模块化设计**:将一致性问题分解为领导者选举、日志复制、安全性等独立模块,降低实现复杂度。2. **强领导权简化逻辑**:所有操作由领导者驱动,避免无主状态下的决策冲突。3. **容错能力**:可容忍集群内少数节点故障,只要多数节点存活即可维持服务。4. **易于调试**:清晰的日志结构和状态转换便于排查问题。总的来说,Raft协议通过结构化的领导权设计和严格的日志复制机制,在保证强一致性的同时提供了良好的可扩展性和容错能力。其模块化思想和清晰的状态转换逻辑使其成为分布式系统领域的重要基础组件。
  • [技术干货] k8s-node02 节点 `NotReady` 状态的详细分析和解决方案
    k8s-node02 节点 `NotReady` 状态的详细分析和解决方案### **一、核心问题定位**从 `kubectl describe node` 输出可见,所有关键条件(MemoryPressure/DiskPressure/PIDPressure/Ready)均处于 **Unknown** 状态,且最终错误原因是 **"Kubelet stopped posting node status"**。这表明 **Kubelet 进程未能正常向 API Server 汇报节点状态**,导致节点被标记为 `NotReady`。### **二、分步解决方案**#### **1️⃣ 紧急修复:重启 Kubelet 服务**```bashsystemctl restart kubelet```**目的**:尝试恢复 Kubelet 进程与 API Server 的通信。  **注意**:若重启后仍无法恢复,需进一步排查底层原因。#### **2️⃣ 深度排查:查看 Kubelet 日志**```bashjournalctl -f -u kubelet          # 实时查看日志journalctl -u kubelet --since "1 hour ago"  # 查看历史日志``` **重点关注以下错误类型**:| 错误类型 | 可能原因 | 解决方案 ||||-|| `NetworkPluginNotReady` | CNI 插件(如 Calico)未就绪 | 检查 CNI 组件状态 || `Failed to connect to API Server` | 网络隔离/证书过期 | 检查网络连通性及证书 || `Disk pressure detected` | 磁盘空间不足 | 清理磁盘 || `Container runtime failed` | Docker/Containerd 异常 | 重启容器运行时 |#### **3️⃣ 检查 CNI 网络插件(Calico)**```bashkubectl get pods -n kube-system -l k8s-app=calico-node``` **若发现 Calico Pod 异常**:- 重新部署 Calico 组件:    ```bash  kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml  ```- 确保宿主机网络策略允许 Calico 流量(检查 `iptables` 规则)。#### **4️⃣ 验证容器运行时(Docker)**```bashsystemctl status docker       # 检查服务状态docker info                   # 验证 Docker 功能```**若 Docker 异常**:- 重启 Docker 服务:    ```bash  systemctl restart docker  ```- 检查 Docker 日志:    ```bash  journalctl -u docker.service  ```#### **5️⃣ 检查磁盘空间**```bashdf -h                       # 查看全局磁盘使用率du -sh /var/lib/docker/*    # 检查 Docker 目录占用``` **若磁盘空间不足**:- 清理无用镜像:    ```bash  docker system prune -a  ```- 扩展磁盘配额或迁移数据到更大分区。#### **6️⃣ 校验 Kubelet 配置**检查 `/etc/kubernetes/kubelet.conf` 文件:- 确保 `cgroupDriver` 与集群其他节点一致(如 `systemd` 或 `cgroupfs`)。- 确认 `--container-runtime` 参数指向正确的容器运行时(如 `remote` 对应 containerd)。#### **7️⃣ 升级 Kubelet 版本**当前版本 **v1.20.15** 已过时,建议升级至最新稳定版(如 v1.28+):```bash# 示例:升级 Kubelet(需匹配控制平面版本)yum install -y kubelet-<new_version> && systemctl restart kubelet``` **注意**:升级前需备份配置文件,并确保控制平面兼容新版本。#### **8️⃣ 清理节点 Taints**当前节点存在两个危险 Taints:```bashTaints:             node.kubernetes.io/unreachable:NoExecute                    node.kubernetes.io/unreachable:NoSchedule``` **清理命令**:```bashkubectl taint nodes k8s-node02 node.kubernetes.io/unreachable:NoExecute-kubectl taint nodes k8s-node02 node.kubernetes.io/unreachable:NoSchedule-```### **三、典型错误场景及处理**| **现象**                          | **可能原因**               | **解决方案**                     ||--||-|| `NetworkPluginNotReady`          | Calico 组件未启动           | 重启 Calico Pod 或重新部署        || `Failed to dial tcp ...`         | API Server 网络不通        | 检查防火墙规则及节点网络配置     || `No space left on device`       | 磁盘空间不足               | 清理磁盘或扩容                    || `Connection refused by API Server` | API Server 未响应          | 检查控制平面健康状态              |### **四、预防措施**1. **监控告警**:部署 Prometheus + Grafana,监控节点 CPU/内存/磁盘使用率及 Kubelet 状态。2. **日志轮转**:定期清理 Kubelet 日志(`/var/log/kubelet.log`),避免磁盘占满。3. **版本管理**:保持 Kubelet 与 API Server 版本同步,避免兼容性问题。4. **CNI 高可用**:确保 Calico 等网络插件的冗余配置,避免单点故障。### **五、最终验证**执行以下命令确认节点状态:```bashkubectl get nodes k8s-node02      # 应显示 Ready 状态kubectl describe node k8s-node02  # 检查 Conditions 均为 True```若问题仍未解决,请提供以下信息进一步分析:1. `kubectl describe node k8s-node02 -o json > node.json`(导出完整 JSON)。2. `journalctl -u kubelet --since "1 hour ago"`(最近 1 小时 Kubelet 日志)。3. `docker ps` 和 `crictl ps`(容器运行时状态)。
  • [技术干货] DeekSeek R1 与 DeepSeek V3 模型对比
    DeepSeek开源了两种模型,一种是包含深度思考的DeekSeek R1,另一种是不带深度思考的 DeepSeek V3以下是 DeepSeek R1 与 DeepSeek V3 的对比表格:模型上下文窗口最大输入 Token 长度最大生成 Token 长度DeepSeek R1128k96k16kDeepSeek V3128k128k16k对比说明:上下文窗口:两者均支持 128k 的上下文窗口,适合处理长文本任务(如长文档分析、多轮对话等)。输入 Token 长度:R1 限制为 96k,适合中等规模输入。V3 扩展至 128k,可处理更长的输入内容(如完整书籍章节、复杂代码库等)。生成 Token 长度:两者均支持 16k 的生成长度,满足长文本输出需求(如文章撰写、报告生成等)。适用场景建议:DeepSeek R1:适合对输入长度要求适中、需平衡性能与成本的任务。DeepSeek V3:适合需要处理超长输入(如法律合同分析、科研论文深度解析)的场景。
  • [新特性] 华为云ModelArts Versatile-AI原生应用引擎新增特性介绍(2025年7月发布)
    2025年07月版本 <ModelArts Versatile-AI原生应用引擎 体验入口>华为开发者空间--开发平台--AI Agent (请在PC端点击进入) Agent编排中心 · 我的工作流01 工作流支持多模态大模型的接入节点在创建工作流时,大模型节点从LLM(大语言模型)拓展至VLM(视觉语音大模型)/LMM(多模态大模型) 业务价值:让多模态模型在视频/图片理解、摘要分析等场景上进行处理,整合多种信息源,以更全面、准确的方式理解信息,丰富工作流的构建方式,深化工作流的设计科学度与执行精准度。  · 我的Agent 02 支持智能体中定期触发任务的能力在Agent开发过程中添加触发器,按照触发器的设置使Agent定时执行任务,自主规划/工作流模式下,定时任务按分钟/小时间隔触发;复杂任务规划模式下,可自主配置触发时间设置任务。 业务价值:实现智能化工作流程,更好地适配业务场景,训练AI助手自主开展任务,保障实时信息刷新,支撑连续性且高效的服务。  03 复杂任务规划模式下支持知识库在创建单Agent(复杂任务规划)模式下,可为Agent添加知识库 业务价值:丰富Agent任务规划数据来源,可以使Agent进行更专业的信息输入,扩大相关数据交互范围,增强回答的专业可信度,提升任务生成质量,为复杂任务的精准稳定运行护航。  模型中心 · 我的模型服务 04 支持接入华为云MaaS大模型支持从Modelarts大模型开发平台自动拉取大模型,如当前免费的DeepSeek-V3、R1,接入作为智能体的模型服务。 业务价值:打通开发者用户在MaaS服务下的模型,实现灵活调用,简化操作,提高模型利用率。    工程中心 · 项目管理 05 新增项目功能,支持项目导入导出项目是用来将一组相关的元素进行统一管理,其中元素包括Agent、工具、MCP、工作流、知识库、提示语、模型服务等。工程中心-项目管理,用户可对当前租户下的项目导出为本地压缩文件,同时支持一键导入已导出的项目。 业务价值:面对多租户切换的需求,帮助用户将前期已经开发完成的Agent、工具、工作流、知识库等实现快速迁移,满足多租户无痛迁移,适用多业务场景,通过导出,方便将该项目迁移到不同的环境中;通过导入,帮助用户快速创建复杂的智能应用。  APIModelArts Versatile-AI原生应用引擎调用接口支持AK/SK、API Key或Token认证鉴权,进行身份认证与快速调用。 · 应用中心 06 提供对话式智能体的增删改查接口涵盖创建Agent、更新Agent、根据ID查询Agent、删除指定Agent4项,支持API模式下的快速操作。创建:创建一个新的智能体。调用此接口创建一个智能体后,此智能体为未发布的草稿状态,创建后可以在Versatile智能体列表中查看智能体。更新:通过此API可更新通过Versatile平台或API方式创建的所有智能体。查询:根据智能体的ID查询指定的Agent,包含草稿状态的智能体和已发布的智能体。删除:根据Agent智能体的ID删除指定的Agent。 07 提供查询MCP列表的接口提供API接口给开发者空间查询MCP资产,接口符合开发者合约规范。通过传入的limit参数查询资产中心MCP列表。  · 知识中心 08 平台开放接口支持IAM鉴权方式开放Agent接口,支持公共知识库和个人知识库,支持IAM鉴权。涵盖查询知识库详情/更新知识库/查询知识库列表(Token认证)、查询知识数据集列表(Token认证)接口。   点击可前往>>华为云ModelArts Versatile-AI原生应用引擎官网
  • 基于开发者空间,使用MateChat+MaaS构建智能对话应用案例建议反馈贴
    体验华为开发者空间案例:基于开发者空间云开发环境,使用MateChat+MaaS构建智能对话应用,反馈改进建议,请直接在评论区反馈即可。体验指导:cid:link_0
  • [技术干货] MCP和API调用的异同
    MCP(Multi-Agent Control Platform)是多智能体协作平台,用于协调多个智能体共同完成任务。与允许智能体调用外部API的区别:MCP:侧重多智能体间的任务分配、协作与调度(如团队协作)。API调用:是单个智能体的扩展能力(如查天气),不涉及多智能体交互。简单说,MCP管“团队合作”,API调用是“个人技能”。在AI领域,MCP(通常指 Memory, Composition, and Planning)是由 DeepMind 团队在2023年提出的概念,核心是增强AI智能体的长期记忆、任务组合和规划能力,使其能像人类一样分解复杂任务并持续学习。发展过程如下:早期基础(2010s):强化学习(如AlphaGo)和语言模型(如GPT)的发展,奠定智能体的基础能力。关键突破(2023):DeepMind 在《Towards Generalized Agentic AI》等研究中提出 MCP 框架,强调 记忆存储(Memory)、任务组合(Composition)、分层规划(Planning) 的结合。后续演进:OpenAI 的 “Agentic Workflows”、Anthropic 的 “Recursive Task Decomposition” 进一步优化类似架构。MCP让AI自主管理复杂任务流(如“写论文→查资料→修订”),依赖内部记忆和推理。 API调用仅是单一工具使用(如查天气),无长期规划能力。 简单说,MCP 是 AI的“大脑”,而API调用是它的“手”。
  • [技术干货] Flash Attention如何提高长序列处理的效率
    Flash Attention是一种高效计算注意力机制的算法,由斯坦福大学团队于2022年提出,专门针对Transformer模型中的自注意力(Self-Attention)模块进行优化。它的核心创新在于通过分块计算(Tiling)和内存访问优化,显著减少了注意力计算过程中的GPU显存读写次数,从而在保持模型精度的同时大幅提升训练速度并降低显存消耗。传统注意力机制的计算复杂度为O(N²)(N为序列长度),且需要频繁读写显存存储中间结果,而Flash Attention通过重新组织计算顺序,利用硬件层次的内存层次结构(如SRAM和HBM),实现了近似最优的内存访问效率,使得长序列处理的效率提升数倍。在大模型中,Flash Attention之所以“大名鼎鼎”,主要因为它解决了Transformer训练的两大瓶颈:显存占用和计算效率。例如,GPT-3、PaLM等千亿级参数的模型需要处理超长序列(如数万token),传统注意力机制会因显存不足而无法训练,而Flash Attention通过减少显存需求,使得单卡或分布式训练更长序列成为可能。此外,它的变种Flash Attention-2进一步优化了并行性和计算速度,成为许多开源大模型框架(如Hugging Face、Megatron-LM)的标配组件。Flash Attention 的具体实现细节可以分为以下几个方面:1. 分块计算(Tiling)传统注意力机制需要计算整个序列的注意力矩阵(QKᵀ),其显存占用为 O(N²),其中 N 是序列长度。Flash Attention 将计算过程分解为更小的块(tiles),每次只加载一部分 Q、K、V 到快速但容量有限的 SRAM(如 GPU 的共享内存)进行计算,避免一次性存储庞大的中间矩阵。分块策略:Q、K、V 被切分为多个小块,每个块在 SRAM 内计算局部注意力得分,并逐步累加全局结果。避免中间存储:传统方法需要存储 softmax(QKᵀ) 和最终的注意力输出,而 Flash Attention 通过动态更新部分结果,避免存储完整的中间矩阵。2. 内存层次优化(Memory Hierarchy Awareness)GPU 的显存(HBM)访问速度远慢于 SRAM(共享内存),传统注意力机制频繁读写 HBM 导致瓶颈。Flash Attention 通过以下方式优化:减少 HBM 访问次数:仅在必要时读写 HBM,大部分计算在 SRAM 内完成。融合计算(Kernel Fusion):将 softmax、缩放、dropout 等操作合并成一个 CUDA 内核,减少多次内存传输。3. 数值稳定性优化传统 softmax 计算需要存储整个 QKᵀ 矩阵,而 Flash Attention 采用在线 softmax 计算(online softmax),逐块计算并动态调整归一化因子,避免数值溢出问题。4. Flash Attention-2 的进一步优化2023 年推出的 Flash Attention-2 进一步改进:并行化增强:更高效地利用 GPU 的 warps(线程束),减少空闲计算单元。计算顺序调整:重新组织 QKᵀ 计算,减少同步开销,提升计算密度。为什么这些优化在大模型中至关重要?显存节省:传统方法训练 16k token 的序列可能需要数百 GB 显存,而 Flash Attention 可降低 5-20 倍显存占用。训练加速:在 GPT-3 类模型上,Flash Attention 可提升训练速度 2-4 倍,使长序列训练可行。支持更长上下文:如 Llama 2、GPT-4 等模型依赖 Flash Attention 处理 32k 甚至 128k token 的上下文窗口。综上,Flash Attention 通过算法-硬件协同设计,成为大模型训练和推理的核心技术,直接影响了大模型的规模和效率上限。
  • [技术干货] OpenCL(Open Computing Language)的发展和式微
    OpenCL(Open Computing Language)的前身可以追溯到苹果公司在2000年代中期发起的GPU通用计算研究。当时,苹果希望利用GPU的强大并行能力加速图形之外的通用计算任务,为此开发了名为“Close to Metal”(CTM)的低级编程接口。2008年,苹果将这一技术贡献给Khronos Group,并与其他成员(如AMD、Intel、NVIDIA和IBM)共同制定了OpenCL 1.0标准。Khronos Group以其在开放图形标准(如OpenGL)上的经验为基础,迅速将OpenCL打造成跨平台的异构计算框架。它的核心目标是让开发者能够利用CPU、GPU、FPGA等不同硬件的计算能力,通过统一的编程模型简化并行程序的开发。OpenCL的诞生正值GPU通用计算(GPGPU)兴起之时,作为对NVIDIA专有CUDA的开放替代方案,它迅速获得了AMD、Intel等厂商的支持。早期,OpenCL在科学计算、图像处理和机器学习等领域展现了潜力,尤其是其平台无关性为开发者提供了更大的灵活性。然而,OpenCL的发展逐渐面临挑战。一方面,NVIDIA凭借CUDA的成熟生态和性能优化优势,在GPU计算领域占据了主导地位,而OpenCL由于不同硬件厂商的实现差异,性能和兼容性问题始终存在。另一方面,随着深度学习的爆发,CUDA与主流AI框架(如TensorFlow、PyTorch)的深度整合进一步挤压了OpenCL的生存空间。2018年,苹果宣布弃用OpenCL,转而推广自研的Metal框架,这对OpenCL的生态造成了显著打击。尽管Khronos Group持续更新标准(如2020年推出OpenCL 3.0,强调向后兼容和模块化),但社区活跃度和行业支持已大幅减弱。OpenCL的式微反映了技术竞争和生态演变的残酷性。尽管它在某些领域(如嵌入式系统和FPGA开发)仍有应用,但主流GPU计算的主导地位已被NVIDIA的CUDA牢牢占据。与此同时,一些新兴的开放标准,如Intel主导的OneAPI(现由UXL Foundation管理)和AMD的ROCm(Radeon Open Compute),正试图在特定领域提供替代方案,但它们尚未能动摇CUDA的统治地位。OpenCL的衰落启示在于:开放标准不仅需要技术上的通用性,还需强大的生态支持和持续的行业协作,否则难以与专有解决方案竞争。
总条数:7868 到第
上滑加载中