-
目前使用华为云码道创建出来工程各种配置错误以及语法错误,官方上面说支持ArkTs的鸿蒙开发,想询问是否有人创建成功过鸿蒙next工程过?
yd_237650458
发表于2026-03-10 10:53:09
2026-03-10 10:53:09
最后回复
CodeArts小助手-蚂蚁
2026-03-10 11:41:16
56 1 -
开发者技术支持-鸿蒙应用提取音视频元数据信息1.1 问题说明在鸿蒙应用开发中,开发者常需要从音视频资源中提取标题、时长、分辨率、专辑封面等元数据,以支撑媒体文件展示、播放等业务场景。本方案基于 AVMetadataExtractor 组件,提供了从本地沙箱、RawFile 资源或在线链接中提取音视频元数据的完整实现流程。1.2 原因分析· 媒体资源多样化音视频资源可能来自应用内置 RawFile、应用沙箱存储或在线链接,不同来源的资源需要适配不同的加载方式。 · 元数据类型差异音频资源包含专辑封面、歌手等信息,视频资源包含分辨率、时长等信息,需要针对性的提取逻辑。· 资源管理风险若未正确释放 AVMetadataExtractor 实例,会导致文件描述符泄漏,引发应用性能问题或崩溃。 · 异步操作复杂度元数据提取与封面获取均为异步操作,需要合理处理回调与 Promise 模式,避免出现空指针或时序错误。1.3 解决思路· 创建实例通过 createAVMetadataExtractor() 初始化元数据提取器实例。· 设置资源来源根据资源类型,选择 fdSrc(文件描述符)、dataSrc(自定义数据源)或 setUrlSource(在线链接)设置资源。· 提取元数据调用 fetchMetadata() 获取音视频基础元数据,如时长、分辨率等。· 获取附加资源对音频资源调用 fetchAlbumCover() 获取专辑封面,对视频资源调用 fetchFrameByTime() 获取缩略图。· 释放资源操作完成后调用 release() 销毁实例,避免资源泄漏。1.4 解决方案核心实现代码· 1. 创建 AVMetadataExtractor 实例import { media } from '@kit.MediaKit'; // 创建AVMetadataExtractor对象let avMetadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor(); · 2. 设置资源来源方式 1:加载 RawFile 资源(fdSrc)import { common } from '@kit.AbilityKit';import { media } from '@kit.MediaKit'; let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;// 设置fdSrc,加载rawfile目录下的test.mp3avMetadataExtractor.fdSrc = await context.resourceManager.getRawFd('test.mp3'); 方式 2:加载沙箱资源(dataSrc)import { fileIo as fs, ReadOptions } from '@kit.CoreFileKit';import { common } from '@kit.AbilityKit';import { media } from '@kit.MediaKit'; const TAG = 'MetadataDemo';let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;let rootPath: string = context.filesDir;let testFilename: string = '/test.mp3';let fd: number = fs.openSync(rootPath + testFilename).fd;let fileSize: number = fs.statSync(rootPath + testFilename).size; // 配置dataSrc数据源let dataSrc: media.AVDataSrcDescriptor = { fileSize: fileSize, callback: (buffer, len, pos) => { if (!buffer || !len || !pos) { console.error(TAG, 'dataSrc callback param invalid'); return -1; } let options: ReadOptions = { offset: pos, length: len }; let num = fs.readSync(fd, buffer, options); return num > 0 && fileSize >= pos ? num : -1; }};avMetadataExtractor.dataSrc = dataSrc; 方式 3:加载在线资源(setUrlSource)import { media } from '@kit.MediaKit'; let url: string = 'http://example.com/test.mp4';let headers: Record<string, string> = { "User-Agent": "HarmonyOS-App" };avMetadataExtractor.setUrlSource(url, headers); · 3. 提取元数据// Promise模式获取元数据let metadata = await avMetadataExtractor.fetchMetadata();// 获取视频宽高let videoWidth = metadata.videoWidth;let videoHeight = metadata.videoHeight;// 获取音频时长let audioDuration = metadata.duration; · 4. 获取专辑封面 / 视频缩略图import { image } from '@kit.ImageKit';@State pixelMap: image.PixelMap | undefined = undefined; // 获取音频专辑封面this.pixelMap = await avMetadataExtractor.fetchAlbumCover(); // 获取视频缩略图let timeUs: number = 0;let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_PREVIOUS_SYNC;let param: media.PixelMapParams = { width: 300, height: 300 };this.pixelMap = await avMetadataExtractor.fetchFrameByTime(timeUs, queryOption, param); · 5. 释放资源// Promise模式释放资源await avMetadataExtractor.release();1.5 总结· 问题说明:音视频元数据提取是鸿蒙媒体类应用的基础能力,直接影响媒体文件的展示效率与用户体验。· 痛点总结:资源来源多样导致适配复杂,异步操作易引发时序问题,实例未释放会造成资源泄漏,且不同媒体类型的元数据提取逻辑存在差异。· 技术总结:通过 AVMetadataExtractor 统一处理本地与在线资源,结合 fdSrc/dataSrc/setUrlSource 适配不同场景,异步操作支持回调与 Promise 两种模式,最终通过 release() 保障资源安全。 · 避坑建议:禁止多个实例共用文件描述符,开发阶段需验证资源有效性,优先使用 Promise 模式简化异步逻辑,并确保在异常流程中也能释放实例。
-
开发者技术支持-基于ArkTs实现同应用跨设备数据同步的功能1.1 问题说明在鸿蒙跨设备应用开发中,用户期望在不同设备(如手机、平板、智慧屏等)上使用同一应用时,数据能够自动同步、状态保持一致。目前开发者在实现跨设备数据同步时,常面临设备发现、数据传输、冲突处理、状态同步等技术难点,缺乏统一、高效、可靠的同步方案,导致开发复杂度高、用户体验不一致。1.2 原因分析· 缺乏统一的跨设备数据同步框架,开发者需自行实现设备发现、通信与数据同步逻辑· 数据同步机制不标准化,不同设备间数据传输格式、同步策略不一致· 数据冲突处理机制缺失,多设备同时操作时易出现数据不一致问题1.3 解决思路· 设计一个统一的数据同步管理器,封装设备发现、数据传输、冲突解决等基础能力· 建立标准化的数据模型与同步协议,支持多种数据类型与同步策略· 实现基于操作日志的冲突解决机制,支持自动合并与用户决策1.4 解决方案步骤1: 创建统一数据同步管理器// DistributedSyncManager.tsimport { distributedData, deviceManager } from '@kit.ArkData'; export enum SyncMode { REAL_TIME = 'real_time', LAZY = 'lazy', MANUAL = 'manual'} export enum DataType { USER_PREF = 'user_preference', APP_STATE = 'application_state', BUSINESS_DATA = 'business_data'} export interface SyncItem { key: string; value: any; type: DataType; timestamp: number; deviceId: string; version: number;} export class DistributedSyncManager { private kvManager: distributedData.KVManager; private kvStore: distributedData.SingleKVStore | null = null; private deviceList: deviceManager.DeviceInfo[] = []; private readonly STORE_ID = 'cross_device_sync_store'; constructor(context: Context) { this.initKVStore(context); this.watchDeviceChange(); } private async initKVStore(context: Context): Promise<void> { const options: distributedData.KVManagerOptions = { bundleName: context.applicationInfo.bundleName, context: context }; this.kvManager = distributedData.createKVManager(options); const kvOptions: distributedData.Options = { createIfMissing: true, encrypt: false, backup: false, autoSync: true, kvStoreType: distributedData.KVStoreType.SINGLE_VERSION, schema: '' }; this.kvStore = await this.kvManager.getKVStore(this.STORE_ID, kvOptions); // 订阅数据变更 this.kvStore.on('dataChange', (data: distributedData.ChangeNotification) => { this.handleDataChange(data); }); } // 设备状态监听 private watchDeviceChange(): void { deviceManager.createDeviceManager().then((manager) => { manager.on('deviceOnline', (device) => { this.deviceList.push(device); this.syncAllData(SyncMode.REAL_TIME); }); manager.on('deviceOffline', (device) => { this.deviceList = this.deviceList.filter(d => d.deviceId !== device.deviceId); }); }); } // 设置数据(自动同步) async setData(key: string, value: any, type: DataType, syncMode: SyncMode = SyncMode.REAL_TIME): Promise<void> { const syncItem: SyncItem = { key, value, type, timestamp: Date.now(), deviceId: await this.getLocalDeviceId(), version: await this.getNextVersion(key) }; await this.kvStore?.put(key, JSON.stringify(syncItem)); if (syncMode === SyncMode.REAL_TIME) { await this.syncToAllDevices(key, syncItem); } } // 获取数据(自动合并最新版本) async getData<T>(key: string): Promise<T | null> { const entries = await this.kvStore?.getEntries(key); if (!entries || entries.length === 0) return null; // 选择版本号最高的数据 const latest = entries.reduce((prev, curr) => { const prevItem: SyncItem = JSON.parse(prev.value as string); const currItem: SyncItem = JSON.parse(curr.value as string); return currItem.version > prevItem.version ? curr : prev; }); return JSON.parse(latest.value as string).value; } private async syncToAllDevices(key: string, item: SyncItem): Promise<void> { // 通过分布式数据框架自动同步 // 框架底层自动处理设备间传输 } private handleDataChange(change: distributedData.ChangeNotification): void { // 处理数据变更事件,通知UI更新 EventHub.emit('dataSyncChanged', { key: change.key, changeType: change.changeType }); }}步骤2:实现数据同步UI组件// SyncStateComponent.ets@Componentexport struct SyncStateIndicator { @LocalStorageProp('syncState') syncState: string = 'idle'; @LocalStorageProp('lastSyncTime') lastSyncTime: string = ''; build() { Row() { Image(this.getSyncIcon()) .width(16) .height(16) .margin({ right: 6 }) Text(this.getSyncText()) .fontSize(12) .fontColor(this.getSyncColor()) if (this.lastSyncTime) { Text(`最近同步: ${this.lastSyncTime}`) .fontSize(10) .fontColor(Color.Gray) .margin({ left: 8 }) } } .padding(8) .backgroundColor(Color.White) .borderRadius(4) .shadow({ radius: 2, color: '#10000000' }) } private getSyncIcon(): Resource { switch (this.syncState) { case 'syncing': return $r('app.media.ic_sync'); case 'success': return $r('app.media.ic_sync_success'); case 'error': return $r('app.media.ic_sync_error'); default: return $r('app.media.ic_sync_idle'); } } private getSyncText(): string { switch (this.syncState) { case 'syncing': return '同步中...'; case 'success': return '已同步'; case 'error': return '同步失败'; default: return '未同步'; } } private getSyncColor(): ResourceColor { switch (this.syncState) { case 'syncing': return Color.Blue; case 'success': return Color.Green; case 'error': return Color.Red; default: return Color.Gray; } }} // 数据绑定组件@Componentexport struct SyncDataText { @LocalStorageProp('dataKey') dataKey: string = ''; @LocalStorageProp('defaultValue') defaultValue: string = ''; @State currentValue: string = ''; private syncManager: DistributedSyncManager = new DistributedSyncManager(getContext(this)); aboutToAppear() { this.loadData(); // 监听数据变更 EventHub.on('dataSyncChanged', (data: any) => { if (data.key === this.dataKey) { this.loadData(); } }); } async loadData() { const value = await this.syncManager.getData<string>(this.dataKey); this.currentValue = value || this.defaultValue; } build() { Text(this.currentValue) .fontSize(16) .onClick(async () => { // 点击后可在所有设备同步更新 const newValue = await this.showEditDialog(); await this.syncManager.setData( this.dataKey, newValue, DataType.USER_PREF ); }) }}步骤3:在Ability中初始化同步服务// EntryAbility.etsexport default class EntryAbility extends Ability { private syncManager: DistributedSyncManager | null = null; onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.syncManager = new DistributedSyncManager(this.context); this.initDataSync(); } private initDataSync(): void { // 注册全局数据同步事件 EventHub.on('requestSync', (data: { key: string, value: any }) => { this.syncManager?.setData(data.key, data.value, DataType.BUSINESS_DATA); }); // 定时同步机制 setInterval(() => { this.syncManager?.syncAllData(SyncMode.LAZY); }, 30000); // 每30秒懒同步一次 } onWindowStageCreate(windowStage: window.WindowStage): void { // 窗口创建时恢复上次同步状态 this.restoreSyncState(); } private async restoreSyncState(): Promise<void> { const lastState = await this.syncManager?.getData('app_last_state'); if (lastState) { // 恢复应用状态 AppStorage.setOrCreate('appState', lastState); } }}步骤4:业务页面中使用数据同步// TodoListPage.ets@Entry@Componentstruct TodoListPage { @State todoList: TodoItem[] = []; private syncManager: DistributedSyncManager = new DistributedSyncManager(getContext(this)); aboutToAppear() { this.loadTodos(); // 监听其他设备的数据变更 EventHub.on('todoDataChanged', this.handleTodoUpdate.bind(this)); } async loadTodos() { const todos = await this.syncManager.getData<TodoItem[]>('user_todos'); this.todoList = todos || []; } async addTodo(content: string) { const newTodo: TodoItem = { id: Date.now().toString(), content, completed: false, createTime: new Date().toISOString(), deviceId: await this.syncManager.getLocalDeviceId() }; this.todoList = [...this.todoList, newTodo]; // 同步到所有设备 await this.syncManager.setData( 'user_todos', this.todoList, DataType.BUSINESS_DATA, SyncMode.REAL_TIME ); } // 处理来自其他设备的更新 handleTodoUpdate(update: { action: 'add' | 'update' | 'delete', data: TodoItem }) { switch (update.action) { case 'add': this.todoList = [...this.todoList, update.data]; break; case 'update': this.todoList = this.todoList.map(todo => todo.id === update.data.id ? update.data : todo ); break; } } build() { Column() { // 同步状态指示器 SyncStateIndicator() .margin({ top: 12 }) List() { ForEach(this.todoList, (item: TodoItem) => { ListItem() { TodoItemComponent({ item: item }) } }) } // 添加待办输入框 TodoInput({ onAdd: this.addTodo.bind(this) }) } }} 1.5 总结问题与痛点:跨设备数据同步实现复杂,缺乏统一框架,设备发现、数据传输、冲突处理等需开发者重复实现技术总结:通过构建统一数据同步管理器、标准化同步协议、声明式同步组件,实现了开箱即用的跨设备数据同步解决方案 效果总结:开发者只需关注业务数据模型,无需关心底层同步细节,大幅降低跨设备应用开发复杂度,提升数据一致性体验
-
开发者技术支持-基于鸿蒙ArkUI实现多模态文本智能换行适配效果 1.1 问题说明在鸿蒙跨设备应用场景中(如手机、平板、折叠屏切换,或分屏多任务模式),文本展示常面临适配难题:固定换行规则在屏幕尺寸 / 比例突变时,易出现单词截断、标点孤行、公式拆分等排版混乱;传统自适应换行仅依赖宽度计算,忽略文本类型(英文单词、中文语句、数学公式)差异,导致专业内容可读性下降;用户手动调整布局时,文本换行无法实时响应尺寸变化,影响跨设备使用体验。本案例基于 ArkUI 的多维度适配引擎与文本语义分析技术,实现智能换行效果,可根据设备尺寸、文本类型动态调整换行策略,自动规避排版缺陷,确保跨设备 / 分屏场景下文本展示的规范性与可读性。1.2 原因分析· 多场景尺寸适配复杂跨设备 / 分屏时屏幕宽高比、可用区域动态变化,需实时计算文本容器尺寸,传统固定换行阈值易导致适配失效。· 文本类型识别与处理难度高英文单词、中文语句、公式符号的换行规则差异大,单纯基于字符长度的换行逻辑会破坏语义完整性。· 实时响应性能压力屏幕尺寸变化时需重新计算换行布局,频繁重排易导致界面卡顿,尤其在长文本或复杂排版场景中更为明显。1.3 解决思路· 多维度尺寸监听机制通过 ArkUI 的布局变化监听接口,实时捕获屏幕尺寸、容器宽高、分屏比例等变化,动态更新换行计算阈值。· 文本语义分类与规则适配预设中文、英文、公式等文本类型识别模型,针对不同类型制定专属换行规则(如英文不截断单词、公式整体换行)。· 增量重排优化策略仅对尺寸变化影响的文本段落进行局部重排,而非全量刷新,结合缓存机制减少重复计算,提升响应速度。1.4 解决方案尺寸监听与阈值更新// 监听布局容器尺寸变化Column() { Text(this.targetText) .id("adaptText") .onLayoutSizeChange((width: number, height: number) => { this.containerWidth = width; this.calcWrapThreshold(); // 重新计算换行阈值 })}// 计算不同文本类型的换行阈值calcWrapThreshold() { switch (this.textType) { case TextType.CHINESE: this.wrapThreshold = this.containerWidth * 0.9; // 中文占容器90%宽度换行 break; case TextType.ENGLISH: this.wrapThreshold = this.containerWidth * 0.85; // 英文预留更多空间避免单词截断 break; case TextType.FORMULA: this.wrapThreshold = this.containerWidth; // 公式整体适配容器宽度,超宽时单独换行 break; }} 智能换行逻辑实现// 文本分段与换行处理processTextWrap() { const textSegments = []; if (this.textType === TextType.ENGLISH) { // 英文按单词拆分,避免截断 const words = this.targetText.split(" "); let currentLine = ""; words.forEach(word => { if (this.getTextWidth(currentLine + word + " ") <= this.wrapThreshold) { currentLine += word + " "; } else { textSegments.push(currentLine.trim()); currentLine = word + " "; } }); textSegments.push(currentLine.trim()); } else if (this.textType === TextType.FORMULA) { // 公式整体换行处理 const formulaWidth = this.getTextWidth(this.targetText); if (formulaWidth > this.containerWidth) { textSegments.push("\n" + this.targetText + "\n"); // 超宽公式单独占行 } else { textSegments.push(this.targetText); } } else { // 中文按字符长度换行,规避标点孤行 const chars = this.targetText.split(""); let currentLine = ""; chars.forEach(char => { const punctuation = /[,。;:!?、""''()【】]/; if (this.getTextWidth(currentLine + char) <= this.wrapThreshold) { currentLine += char; } else { // 避免行尾为标点 if (punctuation.test(char)) { textSegments.push(currentLine + char); currentLine = ""; } else { textSegments.push(currentLine); currentLine = char; } } }); textSegments.push(currentLine); } this.wrappedText = textSegments.join("\n");} 1.5 总结· 问题与痛点:跨设备 / 分屏时文本排版混乱;不同类型文本换行规则冲突;尺寸变化时换行响应滞后;专业内容(英文、公式)可读性差。· 技术要点:通过布局尺寸监听实现动态适配、文本语义分类制定专属规则、增量重排优化提升性能、文本宽度计算确保排版精准。· 实现效果:文本可根据设备尺寸、分屏比例实时调整换行方式,英文不截断单词、中文规避标点孤行、公式整体适配,跨设备切换时排版流畅过渡,无卡顿或错乱,大幅提升多场景文本阅读体验。· 适用场景:跨设备应用、分屏多任务工具、办公文档 APP、外语学习软件、包含公式的学术 / 技术类应用。
-
开发者技术支持-基于鸿蒙ArkUI实现多模态文本智能换行适配效果 1.1 问题说明在鸿蒙跨设备应用场景中(如手机、平板、折叠屏切换,或分屏多任务模式),文本展示常面临适配难题:固定换行规则在屏幕尺寸 / 比例突变时,易出现单词截断、标点孤行、公式拆分等排版混乱;传统自适应换行仅依赖宽度计算,忽略文本类型(英文单词、中文语句、数学公式)差异,导致专业内容可读性下降;用户手动调整布局时,文本换行无法实时响应尺寸变化,影响跨设备使用体验。本案例基于 ArkUI 的多维度适配引擎与文本语义分析技术,实现智能换行效果,可根据设备尺寸、文本类型动态调整换行策略,自动规避排版缺陷,确保跨设备 / 分屏场景下文本展示的规范性与可读性。1.2 原因分析· 多场景尺寸适配复杂跨设备 / 分屏时屏幕宽高比、可用区域动态变化,需实时计算文本容器尺寸,传统固定换行阈值易导致适配失效。· 文本类型识别与处理难度高英文单词、中文语句、公式符号的换行规则差异大,单纯基于字符长度的换行逻辑会破坏语义完整性。· 实时响应性能压力屏幕尺寸变化时需重新计算换行布局,频繁重排易导致界面卡顿,尤其在长文本或复杂排版场景中更为明显。1.3 解决思路· 多维度尺寸监听机制通过 ArkUI 的布局变化监听接口,实时捕获屏幕尺寸、容器宽高、分屏比例等变化,动态更新换行计算阈值。· 文本语义分类与规则适配预设中文、英文、公式等文本类型识别模型,针对不同类型制定专属换行规则(如英文不截断单词、公式整体换行)。· 增量重排优化策略仅对尺寸变化影响的文本段落进行局部重排,而非全量刷新,结合缓存机制减少重复计算,提升响应速度。1.4 解决方案尺寸监听与阈值更新// 监听布局容器尺寸变化Column() { Text(this.targetText) .id("adaptText") .onLayoutSizeChange((width: number, height: number) => { this.containerWidth = width; this.calcWrapThreshold(); // 重新计算换行阈值 })}// 计算不同文本类型的换行阈值calcWrapThreshold() { switch (this.textType) { case TextType.CHINESE: this.wrapThreshold = this.containerWidth * 0.9; // 中文占容器90%宽度换行 break; case TextType.ENGLISH: this.wrapThreshold = this.containerWidth * 0.85; // 英文预留更多空间避免单词截断 break; case TextType.FORMULA: this.wrapThreshold = this.containerWidth; // 公式整体适配容器宽度,超宽时单独换行 break; }} 智能换行逻辑实现// 文本分段与换行处理processTextWrap() { const textSegments = []; if (this.textType === TextType.ENGLISH) { // 英文按单词拆分,避免截断 const words = this.targetText.split(" "); let currentLine = ""; words.forEach(word => { if (this.getTextWidth(currentLine + word + " ") <= this.wrapThreshold) { currentLine += word + " "; } else { textSegments.push(currentLine.trim()); currentLine = word + " "; } }); textSegments.push(currentLine.trim()); } else if (this.textType === TextType.FORMULA) { // 公式整体换行处理 const formulaWidth = this.getTextWidth(this.targetText); if (formulaWidth > this.containerWidth) { textSegments.push("\n" + this.targetText + "\n"); // 超宽公式单独占行 } else { textSegments.push(this.targetText); } } else { // 中文按字符长度换行,规避标点孤行 const chars = this.targetText.split(""); let currentLine = ""; chars.forEach(char => { const punctuation = /[,。;:!?、""''()【】]/; if (this.getTextWidth(currentLine + char) <= this.wrapThreshold) { currentLine += char; } else { // 避免行尾为标点 if (punctuation.test(char)) { textSegments.push(currentLine + char); currentLine = ""; } else { textSegments.push(currentLine); currentLine = char; } } }); textSegments.push(currentLine); } this.wrappedText = textSegments.join("\n");} 1.5 总结· 问题与痛点:跨设备 / 分屏时文本排版混乱;不同类型文本换行规则冲突;尺寸变化时换行响应滞后;专业内容(英文、公式)可读性差。· 技术要点:通过布局尺寸监听实现动态适配、文本语义分类制定专属规则、增量重排优化提升性能、文本宽度计算确保排版精准。· 实现效果:文本可根据设备尺寸、分屏比例实时调整换行方式,英文不截断单词、中文规避标点孤行、公式整体适配,跨设备切换时排版流畅过渡,无卡顿或错乱,大幅提升多场景文本阅读体验。· 适用场景:跨设备应用、分屏多任务工具、办公文档 APP、外语学习软件、包含公式的学术 / 技术类应用。
-
我当前打开了 Project A ,在输入指令的时候,误将分析 Project B 某一个功能的指令提交了,IDE先发现当前项目中没有对应的功能,然后就尝试从整个磁盘中去查找,找到之后,还在本项目 Project A 实现了功能验证脚本。按照我的理解,当前所有对话的执行范围是限制在本项目中的,我并没有授权让他访问其他目录,但是查看下面的 LLM 推理分析过程,会发现大模型自己做出决定去查检查其他项目.这是严重的安全问题,请尽快修复"这个文件是关于AI模型压测的,不是交易相关的。让我检查其他文件:Readverify_api.py这些文件都是关于AI模型测试的。让我检查一下是否有其他项目或文档:查看Dev目录下的其他项目"
-
由于技术限制无法继续执行自动化修复,任务转为手动指导模式。核心修复点已明确提供,请您按照指南进行修改。🎯我理解您希望我继续尝试访问项目文件。让我再次尝试使用不同的方法:<tool_call>Bash<arg_key>command</arg_key><arg_value>ls -la</arg_value></tool_call><tool_call>Bash<arg_key>command</arg_key><arg_value>find . -name "*.c" -type f | head -20</arg_value></tool_call><tool_call>Bash<arg_key>command</arg_key><arg_value>pwd</arg_value></tool_call> 如何操作?好的,让我重新系统地分析问题。首先检查我之前的修复是否正确应用,然后深入排查其他可能的原因。<tool_call>Read<arg_key>file_path</arg_key><arg_value>D:\Codes\N32\N32G45x\N32G45XCC\HW\USB\USB_Lib\src\usb_core.c</arg_value><arg_key>limit</arg_key><arg_value>50</arg_value><arg_key>offset</arg_key><arg_value>645</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>D:\Codes\N32\N32G45x\N32G45XCC\HW\USB\USB_Lib\src\usb_core.c</arg_value><arg_key>limit</arg_key><arg_value>50</arg_value><arg_key>offset</arg_key><arg_value>645</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>D:\Codes\N32\N32G45x\N32G45XCC\HW\USB\USB_Lib\src\usb_core.c</arg_value><arg_key>limit</arg_key><arg_value>50</arg_value><arg_key>offset</arg_key><arg_value>645</arg_value></tool_call> 问题还是一样<tool_call>Read<arg_key>file_path</arg_key><arg_value>D:\Codes\N32\N32G45x\N32G45XCC\HW\USB\USB_Lib\src\usb_core.c</arg_value><arg_key>limit</arg_key><arg_value>50</arg_value><arg_key>offset</arg_key><arg_value>645</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>D:\Codes\N32\N32G45x\N32G45XCC\HW\USB\USB_Lib\src\usb_core.c</arg_value><arg_key>limit</arg_key><arg_value>50</arg_value><arg_key>offset</arg_key><arg_value>645</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>D:\Codes\N32\N32G45x\N32G45XCC\HW\USB\USB_Lib\src\usb_core.c</arg_value><arg_key>limit</arg_key><arg_value>50</arg_value><arg_key>offset</arg_key><arg_value>645</arg_value></tool_call> 该设备无法启动。 (代码 10) {操作失败} 请求的操作不成功。 还是报错问题仍然存在,让我重新检查修改后的配置描述符:<tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value><arg_key>limit</arg_key><arg_value>100</arg_value><arg_key>offset</arg_key><arg_value>135</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value><arg_key>limit</arg_key><arg_value>100</arg_value><arg_key>offset</arg_key><arg_value>135</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value><arg_key>limit</arg_key><arg_value>100</arg_value><arg_key>offset</arg_key><arg_value>135</arg_value></tool_call> 该设备无法启动。 (代码 10) {操作失败} 请求的操作不成功。 还是报错问题仍然存在,让我重新检查修改后的配置描述符:<tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value></tool_call> 当前传话是不是不能用了,你看回复的信息我看不懂了抱歉,让我直接读取文件内容来检查修改是否正确:<tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value></tool_call><tool_call>Read<arg_key>file_path</arg_key><arg_value>d:/Codes/N32/N32G45x/N32G45XCC/HW/USB/usb_desc_composite.c</arg_value></tool_call>
-
1.多个项目历史对话居然共享了,不同项目应仅显示当前项目对话。2.对话需要新增撤销功能,有时候对话提交的内容未输入完整想停止撤销继续补充无法实现。3.对话需要新增追加对话,也就是发现上个对话内容偏离要求了,需要继续发送消息引导AI。4.可能是上下文导致任务中断。版本: 26.3.3VSCode 版本: 1.96.4提交: d62fd908d36d3258cc662e3d2e3467cff4f11d01日期: 2026-03-07 20:33:22Electron: 32.2.6Chromium: 128.0.6613.186Node.js: 20.18.1V8: 12.8.374.38-electron.0OS: Windows_NT x64 10.0.22000
yd_273527684
发表于2026-03-09 10:19:04
2026-03-09 10:19:04
最后回复
CodeArts小助手-蚂蚁
2026-03-09 14:16:32
52 1 -
页面一直空白,点刷新报右下角的错误提示。Vscode版本Version: 1.89.1Commit: dc96b837cf6bb4af9cd736aa3af08cf8279f7685Date: 2024-05-07T05:13:30.691ZElectron: 28.2.8ElectronBuildId: 27744544Chromium: 120.0.6099.291Node.js: 18.18.2V8: 12.0.267.19-electron.0OS: Linux arm64 5.4.96-11-kr9a0
yd_284079663
发表于2026-03-09 09:26:24
2026-03-09 09:26:24
最后回复
CodeArts小助手-蚂蚁
2026-03-09 10:15:30
47 1 -
让测试用例开发更便捷,华为云码道(CodeArts)代码智能体助力开发者实现智能测试在一个繁忙的软件开发团队中,测试工程师小李正面临着巨大的挑战:项目进入关键阶段,需要对NAT(网络地址转换)功能进行全面测试,但现有的测试用例编写工作繁重而复杂。传统的测试开发流程要求他参考多个测试文件,手动编写大量重复代码,还要处理setup、teardown等环境配置,以及各种边界条件的测试用例。面对堆积如山的测试任务,小李感到力不从心。但通过了解并使用华为云码道(CodeArts)代码智能体,小李极大提升了自己的测试开发效率,他只需简单描述测试需求,华为云码道(CodeArts)代码智能体就能快速生成符合pytest规范的测试用例,将原本小时级的工作缩短到分钟级,帮助开发者专注于业务诉求。开发者痛点在软件测试领域,开发者面临着诸多痛点:重复性工作量大测试用例往往遵循相似的模式标准,相同结构内容需要反复编写,消耗大量时间。代码维护困难当测试框架或业务逻辑发生变化时,手动修改大量测试用例代码既耗时又容易出错。测试覆盖率难以保证开发者往往只能覆盖主要功能,而忽略了边界场景和异常情况的测试。硬编码问题普遍存在测试数据散落在各个测试文件中,缺乏统一管理,导致代码可读性和可维护性下降。华为云码道(CodeArts)代码智能体为开发者快速构建智能测试解决方案针对以上痛点,华为云码道(CodeArts)代码智能体帮助开发者从繁琐的手工劳动中解脱出来,让测试用例开发转变为高效的智能协作。华为云码道(CodeArts)代码智能体在以下方面具备强大的支持能力:上下文理解能力。华为云码道(CodeArts)代码智能体能够根据开发者指定的文件或目录,深入分析现有测试代码的结构和风格,确保生成的测试代码与项目规范保持一致。生成测试用例。华为云码道(CodeArts)代码智能体能够理解复杂的测试需求,包括环境配置、资源创建、规则设置、流量验证等多个步骤,并精准地将需求转化为完整的测试代码,包括必要的断言和日志记录。解决硬编码问题。开发者只需提出优化要求,华为云码道(CodeArts)代码智能体就能自动将硬编码替换为常量引用,提高代码质量。它还能根据特定的参考文件生成新的测试用例,确保测试套件的完整性和一致性。测试代码与测试数据分离。华为云码道(CodeArts)代码智能体能够生成包含测试数据的独立文件,这种设计使得测试用例更加灵活,便于维护和扩展。开发者可以在JSON格式的测试数据文件中轻松添加新的测试场景,而无需修改测试代码本身。让我们回到文章开头,小李最初面对的那个难题,借助实际案例,一起来感受一下华为云码道(CodeArts)代码智能体为小李带来的便捷吧。Step 1. 生成测试用例代码输入提示词:参考test_nat下的测试用例文件,以pytest格式输出测试代码,每个测试用例添加用例id,id开头是TC_NAT_TEST_,要实现的功能包括:setup_class:1、清理NAT资源;2、获取vpc0信息;3、获取vpc1信息;4、通过当前租户绑定关系获取decider节点;5、通过配置项中top的类型获取top节点。teardown_class:清理NAT资源。测试用例1:1、指定vpc0和vpc0_net0创建私网网关;2、指定vpc1_net0创建中转ip1和ip2;3、指定vpc0_net0和ip1创建私网snat;4、指定vpc0_server的port_id和ip2创建私网dnat;5、验证私网snat流量和dnat流量验证。测试用例2:1、指定vpc0和vpc0_net0创建私网网关;2、指定vpc1_net0创建中转ip1和ip2;3、指定vpc0_net0的cidr和ip1创建私网snat;4、指定vpc0_server的port_id和ip2创建全端口类型的私网dnat。华为云码道(CodeArts)代码智能体输出:1.1 生成测试用例代码文件1.2生成代码(部分示例)def setup_class(cls): """设置测试环境,获取vpc0和vpc1信息""" logger.info("===== 开始设置测试环境 =====") # 1. 清理NAT资源 logger.info("1. 清理NAT资源") NAT_SETUP.clean_nat_env() NAT_SETUP.clean_env() # 2. 获取vpc0信息 cls.hosts_info = NAT_SETUP.setup() logger.info("2. 获取vpc0信息") cls.vpc0_net0_public_server0 = cls.hosts_info[VPC0_SUBNET0_PUBLIC_LIST[0]] cls.vpc0_id = cls.vpc0_net0_public_server0["vpc_id"] cls.vpc0_net0_id = cls.vpc0_net0_public_server0["net_id"] cls.vpc0_cidr = cls.vpc0_net0_public_server0["vpc_cidr"] cls.vpc0_subnet_cidr = cls.vpc0_net0_public_server0["subnet_cidr"] cls.vpc0_net0_server0 = cls.hosts_info[VPC0_SUBNET0_PRIVATE_LIST[0]] cls.vpc0_net0_server0_port_id = cls.vpc0_net0_server0["port_id"] # 3. 获取vpc1信息 logger.info("3. 获取vpc1信息") cls.vpc1_net0_server0 = cls.hosts_info[VPC1_SUBNET0_PRIVATE_LIST[0]] cls.vpc1_id = cls.vpc1_net0_server0["vpc_id"] cls.vpc1_net0_id = cls.vpc1_net0_server0["net_id"] cls.vpc1_cidr = cls.vpc1_net0_server0["vpc_cidr"] # 4. 通过当前租户绑定关系获取decider节点 logger.info("4. 通过当前租户绑定关系获取decider节点") cls.deciders = get_decider_hosts() logger.info(f"Decider节点数量: {len(cls.deciders)}") for i, decider in enumerate(cls.deciders): logger.info(f"Decider节点{i+1}: {decider}") # 5. 通过配置项中top的类型获取top节点 logger.info("5. 通过配置项中top的类型获取top节点") cls.tops = get_top_hosts(top_type=VPCNAT_TOP_TYPE) logger.info(f"Top节点数量: {len(cls.tops)}") for i, top in enumerate(cls.tops): logger.info(f"Top节点{i+1}: {top}") logger.info("===== 测试环境设置完成 =====")Step 2. 生成测试用例json文件输入提示词:在当前目录下生成一个作为测试用例的json文件,命名为test华为云码道(CodeArts)代码智能体输出:2.1 生成测试文件2.2 生成测试用例json文件(部分示例)总结随着人工智能技术的不断进步,华为云码道(CodeArts)代码智能体将变得越来越强大。未来,它将能够更深入地理解业务逻辑,自动发现潜在的测试场景,提供更全面的测试覆盖建议。它还将支持更多的测试框架和编程语言,适应不同类型的项目需求。同时,通过与CI/CD流程的深度集成,代码智能体将能够实现测试用例的自动生成、自动执行和自动报告生成,真正实现测试自动化。华为云码道(CodeArts)代码智能体不仅是一个代码生成工具,更是开发者的智能伙伴。它让测试用例开发从繁琐的手工劳动转变为高效的智能协作,帮助开发团队提升测试质量,加快交付速度。在数字化转型的浪潮中,华为云码道(CodeArts)代码智能体将持续进化,为软件开发注入更多智能元素,让每一个开发者都能享受到AI技术带来的便利。
-
从经验驱动到智能驱动,华为云码道(CodeArts)代码智能体助力数据库性能优化效率大幅提升"新增一个表关联查询,性能大幅下降!"这是发生在某云服务团队在EIP租户限速功能开发中遇到的典型难题。面对50万条记录的EIP带宽表和5万条记录的租户带宽表,开发者在数据库映射mapper文档中添加LEFT JOIN后,数据库查询性能直线下降。华为云码道(CodeArts)代码智能体的出现,重新定义了数据库性能优化范式,将传统依赖个人经验、耗时数天的分析过程,转变为分钟级智能诊断。通过自动解析SQL、精准识别瓶颈、量化评估影响,让开发者无需精通数据库原理,也能快速获得专业级的优化方案。开发者痛点在传统的数据库性能分析过程中,开发者往往面临三大难点:开发者需要花费数小时甚至数天逐条检查SQL开发者需要检查的内容包括但不限于手动分析JOIN条件、WHERE子句、索引使用情况等,同时还要反复测试验证。问题识别依赖个人经验一旦遇到复杂查询或多表关联,非资深工程师的分析时间更是成倍增长,且容易遗漏问题,性能分析效率事倍功半。优化方案缺乏体系化评估缺乏统一的评估标准和量化指标,导致优化方向可能偏离实际需求,甚至可能引入新的性能问题。更令开发者头疼的是,如果上线后才发现性能问题,往往需要版本回滚、重新分析、再次优化等操作,开发效率大打折扣。华为云码道(CodeArts)代码智能体为开发者带来全新的数据库性能分析体验相比传统人工分析,华为云码道(CodeArts)代码智能体让数据库性能优化从"经验依赖"变为"智能驱动",真正实现把性能问题白盒化,提前测试介入,减少返工。华为云码道(CodeArts)代码智能体在如下方面全方位助力开发者:自动解析复杂的表结构自动识别性能问题识别索引设计缺陷评估并分析SQL执行计划更重要的是,华为云码道(CodeArts)代码智能体可按P0/P1/P2优先级分类问题,并提供可执行的优化方案——包括索引创建SQL、SQL重写建议、架构优化思路,甚至预估优化后的性能提升幅度,让开发者快速定位瓶颈并实施优化。让我们通过一个真实的数据库优化案例来介绍华为云码道(CodeArts)代码智能体在性能影响评估、优化建议、预期性能改善等方面的具体表现。Step 1. 生成性能影响评估报告输入提示词:请帮我分析一下这个mapper.xml中是否存在SQL链表查询的问题点,形成可优化的分析报告。华为云码道(CodeArts)代码智能体输出:在聊天框中生成建议的性能评估总结,列明问题类型、严重程度、性能影响、优先级等内容;在工程内生成详细的性能分析报告图1-1 聊天框内的性能评估总结图1-2 性能分析报告Step 2. 生成优化建议根据性能分析报告的内容,按照优先级对数据库进行优化,以下是优化内容:索引优化(P0)1)在eipbandwidths表上创建联合索引-- 创建(project_id, tenant_id, region)联合索引CREATE INDEX idx_project_tenant_regionON eipbandwidths(project_id, tenant_id, region);2)在project_bandwidth表上创建联合索引-- 创建(project_id, tenant_id, region)联合索引CREATE INDEX idx_project_tenant_regionON project_bandwidth(project_id, tenant_id, region);SQL优化(P1)优化LEFT JOIN为INNER JOIN-- 修改前LEFT JOIN project_bandwidth pb ON ...-- 修改后INNER JOIN project_bandwidth pb ON ...2)按需查询字段,避免SELECT *,只查询必要的字段-- 修改前SELECT <include refid="Base_Column_List"/>, <include refid="Project_Bandwidth_Column_List"/>-- 修改后(示例)SELECT eb.id, eb.eip_id, eb.bandwidth_size, eb.project_id, eb.tenant_id, pb.bandwidth_quota, pb.bandwidth_used, pb.bandwidth_available3)优化分页查询, 使用游标分页替代OFFSET分页-- 修改前(深度分页性能差)SELECT ...ORDER BY eb.created_at DESCLIMIT #{offset}, #{pageSize}-- 修改后(使用游标分页)SELECT ...WHERE eb.created_at < #{lastCreatedAt}ORDER BY eb.created_at DESCLIMIT #{pageSize}4)优化COUNT查询-- 修改前SELECT COUNT(DISTINCT eb.id)-- 修改后SELECT COUNT(*)架构优化(P2)引入缓存层,对高频查询的数据进行缓存@Cacheable(value = "eipBandwidth", key = "#id")public EipBandwidthWithProjectBandwidth selectById(String id) { return mapper.selectById(id);}使用读写分离,将查询操作路由到从库@TargetDataSource("slave")public List<EipBandwidthWithProjectBandwidth> list(QueryParam param) { return mapper.list(param);}对于列表查询,先返回EIP带宽信息,异步加载租户带宽信息public List<EipBandwidthDTO> list(QueryParam param) { // 同步查询EIP带宽信息 List<EipBandwidth> eipList = mapper.listEipBandwidths(param); // 异步加载租户带宽信息 CompletableFuture<Map<String, ProjectBandwidth>> pbFuture = CompletableFuture.supplyAsync(() -> mapper.batchSelectProjectBandwidths(extractProjectIds(eipList)) ); // 组装结果 Map<String, ProjectBandwidth> pbMap = pbFuture.join(); return assembleResult(eipList, pbMap);}代码优化(P2)减少动态SQL条件,将常用查询固化为独立方法// 通用查询方法(保留)List<EipBandwidthWithProjectBandwidth> list(QueryParam param);// 常用查询方法(新增)List<EipBandwidthWithProjectBandwidth> listByProjectId(String projectId);List<EipBandwidthWithProjectBandwidth> listByTenantId(String tenantId);List<EipBandwidthWithProjectBandwidth> listByRegion(String region);List<EipBandwidthWithProjectBandwidth> listActiveByProjectId(String projectId);优化JSON字段处理,将高频查询的JSON字段拆分为独立字段-- 修改前ALTER TABLE eipbandwidths ADD COLUMN extend_info JSON;-- 修改后ALTER TABLE eipbandwidths ADD COLUMN max_connections INT, ADD COLUMN timeout INT, ADD COLUMN monitoring_enabled BOOLEAN;Step 3. 测试性能优化结果接下来设计几个测试场景,并输出测试结果。我们将针对基础查询、分页查询、COUNT查询、统计查询、压力测试等几个方面进行测试。由于篇幅有限,仅提供分页查询测试的代码示例。分页查询测试代码示例@Testpublic void testPaginationQuery() { // 测试不同深度的分页 int[] offsets = {0, 1000, 10000, 100000, 200000}; for (int offset : offsets) { QueryParam param = new QueryParam(); param.setPageSize(20); param.setOffset(offset); long startTime = System.currentTimeMillis(); List<EipBandwidthWithProjectBandwidth> result = mapper.list(param); long endTime = System.currentTimeMillis(); log.info("分页查询(offset={})耗时: {} ms", offset, endTime - startTime); }}输出可视化测试结果输入提示词:请根据性能分析报告中的内容,输出可视化的优化前后测试结果对比。华为云码道(CodeArts)代码智能体输出:在工程中生成测试前后性能优化结果的报告,如下图图2-1 性能优化结果报告从测试结果可以看出,通过创建三字段联合索引和优化SQL查询,整体性能提升显著。总结华为云码道华为云码道(CodeArts)代码智能体通过自动化分析、精准识别各类性能问题、提供可执行的优化方案,将数据库性能优化从"经验驱动"转变为"智能驱动",使分析效率大幅提升、问题识别全面性同样大幅提升。未来,华为云码道华为云码道(CodeArts)代码智能体将实现从性能诊断到自动修复的全流程闭环,为开发者提供更智能、更高效的数据库优化体验,真正让性能优化不再是技术门槛,而是开发过程中的标准实践。
-
基于华为云码道(CodeArts)代码智能体,快速搭建小型电商平台Demo案例介绍本案例基于华为云码道(CodeArts)代码智能体,快速搭建小型电商平台Demo。案例内容1 概述1.1 案例介绍华为云码道(CodeArts)代码智能体是一款集IDE、Code Agent、代码大模型为一体的智能编码产品。它面向项目级代码生成、代码续写、研发知识问答、单元测试用例生成、代码解释、代码注释、代码调试、代码翻译、代码检查、代码优化等场景功能,为开发者提高研发效率,提供极致的智能化编码体验。本案例基于华为云码道(CodeArts)代码智能体,快速搭建小型电商平台Demo。1.2 案例流程 说明:1. 用户下载安装华为云码道(CodeArts)代码智能体;2. 登录华为云码道(CodeArts)代码智能体,输入指令自动生成小型电商平台代码;3. 浏览器体验电商平台。2 基础环境与资源准备2.1 下载安装华为云码道(CodeArts)代码智能体参考教程,下载安装IDE:、2.2 登录华为云码道(CodeArts)代码智能体安装完成之后,点击打开文件夹或新建项目,用于存放项目文件:登录华为云码道(CodeArts)代码智能体:注意:如果已经登录华为账号,直接跳转至登录授权页面,否则,直接拉起华为账号登录界面。自动拉起华为账号登录界面,输入账号和密码:首次使用华为云码道(CodeArts)代码智能体,会进入开通页面(若已经开通,会进入批准登录界面)。需要勾选“我已阅读并同意”后,单击“立即开通”,等待套餐开通完成。开通完成后,跳转至登录授权页面,点击确认授权:3 小型电商平台系统开发系统实战3.1 华为云码道(CodeArts)代码智能体生成代码,并使用skill和规则优化代码3.1.1 根据需求快速生成代码1. 输入快捷指令:请帮我构建一个小型电商系统,要求如下:a) 用java语言设计一个旺仔商城的小型web网上商城的项目。b) 购买旺旺产品功能c) 大轮盘抽奖d) 二维码兑换产品e) 玩游戏娱乐赚取积分f) 积分兑换产品的功能g) 如果没有登录则跳转登录页面,登录后回到主页,注册后直接跳转主页2. 华为云码道(CodeArts)代码智能体通过规划任务,开始创自动生成项目代码:3. 启动项目3.1.2 快速调整需求1. 大转盘抽奖发现没有显示当前剩余积分。输入提示词:“幸运大转盘抽奖时,请显示当前积分”,效果如下图2. 购物车结算时,弹框提示样式简单,需要优化输入提示词:“结算确认弹框提示请优化下样式”,优化后如下图3. 购买时没有地址,需要新增订单地址信息。输入提示词:“购物车结算时没有购买地址信息,请加入选择地址功能”,优化后如下图 3.1.3 使用图片替换原有图片选择图片,并输入提示词:“请把产品专区的旺仔牛奶图片替换下”替换后如下图3.1.4 使用Skill书写电商文档技能(Skill)是一种能力封装机制,用于将专业知识(如编码经验、常见问题解决方案等)组织为可复用的模块。Agent Skills本质上是包含指令、脚本和资源的文件夹,Agent可以按需动态加载这些专业化的“技能包”,以提升特定任务的执行能力、执行效率。1. 新建项目级Skill content_research_writer,生成SKILL.md文件2. 下载content_research_writer技能包。并解压登录GitCode平台下载content_research_writer3. 将解压的的SKILL.md和references替换/拷贝到content-research-writer目录下4. 输入提示词“使用内容研究与写作助手技能帮您撰写一篇关于电商避坑指南的文章”,如下图生成了电商避坑指南.md文件 3.1.5 创建规则,优化代码1. 创建项目级规则,并添加规则2. 如图webconfig没有注释,输入提示词“用规则优化代码”。代码优化后,webconfig自动生成了注释。3.2 测试电商平台3.2.1 注册3.2.2 首页购买产品3.2.3 幸运大转盘抽奖3.2.4 玩游戏赚积分3.2.5 积分兑换产品3.2.6 我的订单
-
今天带大家实操一把,看看怎么在华为云码道(CodeArts)代码智能体上快速安装 OpenClaw!咱们把智能体的Skill能力和OpenClaw 的特性结合,直接给大家整一套从头到尾的保姆级部署方案。另外,国内配环境头疼的网络问题也顺手帮大家解决了——直接挂上CodeArts镜像站的近源加速,不管是拉 OpenClaw 还是装那一堆 NPM 依赖,速度直接起飞,主打一个丝滑秒下。华为云先给大家叠个buff——免费送百万token,还能1元拿下千万token,大家按步骤体验,即可领取↓注:以下步骤基于Windows系统环境。 Step1:安装华为云码道动手前咱们先做个基础准备:去华为云官网注册个账号(如果你已经是华为云老用户了,这步直接跳过)步骤一:访问华为云码道(CodeArts)代码智能体产品官网页面https://codearts.huaweicloud.com?source=dmzntsq1&sourcead=gw以Windows系统为例,点击”免费下载”按钮,下载华为云码道(CodeArts)代码智能体IDE安装包。步骤二:安装完直接打开 IDE,用刚才的账号登录一下,我们开始下一步的“折腾”。 Step2: 安装openclaw_setup Skill openclaw_setup.zip的在线下载链接:cid:link_0将openclaw_setup.zip解压缩,并放置于华为云码道的个人级技能目录(本地~/.codeartsdoer/skills/),不清楚的童鞋可以参考官方帮助文档:cid:link_1 Step3: 在华为云码道智能体中使用Skill步骤一:打开华为云码道,选择GLM-5模型,并在对话框中输入“使用openclaw_setup技能安装并配置OpenClaw"步骤二:用户知情确认点击选项一,确认安全警告内容即可步骤三:智能体自动完成Node.js、OpenClaw的安装,这里特别提一下,很多小伙伴可能会遇到下载速度慢的问题,这里推荐大家使用CodeArts镜像站(这部分我已经写在skill里,供大家参考) Step 4:配置OpenClaw的模型OpenClaw需要使用用户订阅的模型接口,目前Skill支持用户选择华为云(MaaS)or豆包(火山引擎)模型提供商。(注:推荐领取专属代金券,可免费领取百万token,还能获得1元购千万Tokens优惠。获取链接:cid:link_2)此处以选择华为云MaaS为例,并输入相关的配置信息:API Key: 8ilQs6bDCeirqGDOFiJXsMK4nZGqH9wODNVqJpuioTU****************_**, 模型名称:deepseek-v3.1注:大家先按照图中的选项选择其他,然后根据提示在输入框中填写API Key和模型名称,因为在我自己调试的时候发现,选择第一和第二的选项,智能体可能会出现直接跳过配置往下走,导致配置失败的可能!后续我将优化一下skill解决这个问题...随后Agent会创建OpenClaw的配置文件,此处可能执行Python配置脚本,也可能直接写配置文件。(Windows场景优选直接写配置文件)(图为直接写配置文件)(图为执行python脚本) Step 5:启动OpenClaw生成OpenClaw dashboard链接,访问该链接即可打开OpenClaw Web界面图为OpenClaw界面:最后,大家有没有跟随安装教程用华为云码道成功部署一只AI小助手虾呢?快开启第一次和你的”小龙虾”对话吧。 如有疑问,可在本帖留言或私信我@CodeArts代码智能体,我们将在工作日24小时内回复,也可添加华为云码道(CodeArts)代码智能体产品体验交流群进行交流。
CodeArts代码智能体
发表于2026-03-07 21:12:51
2026-03-07 21:12:51
最后回复
yd_223956048
2026-05-12 08:35:10
13210 19 -
请教下,如果我项目还没完成但是上下文长度快要满了,应该怎么办,重新新建会话之前的记忆应该会没了吧
-
agent在完成一个任务,或者执行过程中需要和用户交互时,应该有提示音。
上滑加载中
推荐直播
-
华为云码道Skill实战与极速交付,智能开发全链路实战2026/07/22 周三 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;姜浩-华为云HCDG核心组成员
直播深度解读华为云码道6月产品新特性,从Skill市场安装专家技能,带你零距离体验从需求,开发,审查,重构全链路闭环的开发过程。从零构建并交付一个完整项目,让您体验从代码提交到服务上线的“极速”之旅。
回顾中 -
聚开发者之力,创具身新未来2026/07/23 周四 15:00-17:00
张豪杰/程文/王军/刘新春/黄钦开 /张晓天
本次华为云具身智能开发平台CloudRobo培训面向具身智能开发者,带您全流程体验机器人本体R2C小时级接入、环境重建与轨迹生成仿真数据生产、PB级数据管理、数据评测、模型训推、强化学习和Benchmark一键评测等功能,并体验业界主流具身模型应用。
回顾中
热门标签