
阿里妹導讀
本文基於M站首頁重構專案中的一個真實需求,講述如何藉助 AI程式設計工具 Cursor + 結構化 Prompt 設計,完成從 Rax 到 React 的元件遷移、DX 到 React 的跨端重寫,並實現業務邏輯最佳化與工程規範落地的全過程。
一、背景
最近在進行M站(WAP)首頁專案重構時,遇到了一個頗為頭疼的問題:需要將原有的Rax框架工廠推薦瀑布流元件遷移到新的React框架專案中,同時還要把原本用DX框架實現的FactoryCard元件用React重寫。如果按傳統開發方式,這種跨框架、跨端的遷移工作往往要花費大量時間去理解跨端程式碼原有邏輯、適配新框架API、處理樣式相容等問題。
但這次我想試試用AI+Code(基於Cursor開發環境)來加速這個過程。事實證明,這確實是一次有趣的實踐,既有讓人驚喜的提效體驗,也暴露了一些需要人工把控的細節問題。
元件樣式如下:

二、挑戰
這次遷移面臨幾個核心挑戰:
-
跨框架適配:Rax和React雖然語法相似,但在一些細節上存在差異;
-
DX到React的跨端重寫:原本的FactoryCard是用內部DX框架寫的,需要轉換為React+CSS實現,本身閱讀理解原有DX程式碼就非常耗時,更不要說將其轉化為React元件了;
-
業務邏輯最佳化:原有的篩選邏輯是兩級結構,這裡因為需要保持同步App的體驗,需要簡化為一級,但還要相容原有資料結構(改動現有服務端成本與副作用過大)。
老元件-二層篩選
|
新元件-一層篩選
|
![]() |
![]() |
-
符合新專案規範:遷移後的元件也需要滿足新的專案元件規範:例如響應式、RTL、無障礙等等
-
工程化改造:需要將API呼叫邏輯抽離原元件,適配新的工程專案,建立Mock資料體系,確保開發環境的穩定性。
三、AI輔助開發的完整流程
整個遷移過程就像是在拆解一臺複雜的機器,然後用新的零件重新組裝。Agent在這個過程中充當了一個經驗豐富的技師,能夠快速識別零件的對應關係,但具體的精細調校還需要人工來完成。
整體流程如下:

第一步:需求分析——明確遷移目標與約束條件
在專案開始前,我透過Prompt方式和AI首先明確了這次遷移的具體目標和限制條件:
提示詞
核心目標:
● 將Rax框架的new-m-site專案中的MultiFloors元件遷移到fy25-m-site專案中去,重構為React框架
● 重新命名為FactoryRecommendWaterfall元件,體現業務特性
● 將DX原生元件用React+CSS重新實現
● 簡化二級篩選為一級篩選,只需要subTab部分
技術約束:
● 必須保持資料結構的向後相容
● 樣式需要從scss+rpx轉換為less+px
● API呼叫需要抽離到服務層
● 需要建立本地Mock資料系統
● 符合fy25-m-site M站元件規範(RTL、響應式、無障礙)
業務約束:
● 移除點選Tab滾動到頂部的功能(產品要求)
● 確保埋點元件MDotElement使用正確
最後你先把遷移計劃寫一下給我,調整明確之後再改程式碼
這個階段的關鍵是讓AI完全理解專案背景和限制條件,避免後續的返工。
第二步:現有程式碼與框架分析——充分理解原有元件結構
接下來,我讓Agent提前深入分析與理解原有的程式碼結構和技術體系。這個階段我透過VSCode工作區功能同時打開了兩個專案,讓其能夠直接對比新老專案的模組程式碼進行分析:

第三步:方案設計——共同討論與明確遷移技術方案
基於上述方案要求與專案程式碼分析,我協同Agent共同制定了詳細的遷移技術方案,這裡的方案設計尤其重要的,還是需要我們仔細的校驗與完善,好的規劃與設計會大大提高Agent最後生成的元件程式碼準確性和完整性:
Agent設計的計劃
## MultiFloors 元件遷移計劃
### 📋 **遷移概況**
-**源元件**: `new-m-site/src/components/MultiFloors` (Rax框架)
-**目標元件**: `fy25-m-site/src/components/FactoryRecommendWaterfall` (React框架)
-**主要變更**: Rax → React,介面呼叫抽離,保持邏輯和樣式一致
### 🏗️ **目錄結構規劃**
```
fy25-m-site/src/components/FactoryRecommendWaterfall/
├── index.tsx # 主元件檔案
├── index.scss # 樣式檔案 (遷移自原元件)
├── Tab/ # Tab子元件目錄
│ ├── index.tsx # Tab元件 (只保留subTab部分)
│ └── index.scss # Tab樣式
└── types.ts # TypeScript型別定義
```
### 🔄 **核心改動清單**
#### 1. **框架遷移 (Rax → React)**
- ✅ `View` → `div`
- ✅ `Text` → `span` 或合適的HTML標籤
- ✅ `createElement` → React的 `createElement`
- ✅ Rax hooks → React hooks (已經是相同的)
#### 2. **介面呼叫抽離**
- ✅ 將以下介面呼叫遷移到 `services/api.ts`:
- `initTabs()` → `getMultiFloorsTabs()`
- `getResultList()` → `getMultiFloorsData(dataParams)`
- ✅ 使用 `gatewayRequest` 替代直接的 `axios` 呼叫
- ✅ 保持相同的請求引數和資料結構
#### 3. **元件入參最佳化**
- ✅ 新增 `tabId` 作為必需的入參
- ✅ 支援外部傳入初始tab配置
- ✅ 元件介面定義:
```typescript
interface FactoryRecommendWaterfallProps {
tabId: string; // 必需引數
className?: string; // 可選樣式類名
onTabChange?: (tabItem: any, currentSub?: string) => void; // 可選回撥
}
```
#### 4. **Tab元件簡化**
- ✅ 只保留 `subTab` 部分的功能
- ✅ 移除多層級tab,只支援一層篩選
- ✅ 遷移相關樣式到React元件
#### 5. **DxRender處理**
- ✅ 將 `<DxRender />` 呼叫註釋掉
- ✅ 添加註釋說明需要替換為React元件
- ✅ 保留資料結構供後續React元件使用
#### 6. **樣式遷移**
- ✅ 保持原有樣式不變
- ✅ 調整Rax特有的樣式類名 (如 `.rax-text-v2`)
- ✅ 確保響應式佈局正常工作
#### 7. **Hooks和邏輯保持**
- ✅ `useOnScreen` hook保持不變
- ✅ 滾動載入邏輯保持不變
- ✅ 分頁和篩選邏輯保持不變
- ✅ 粘性tab定位邏輯保持不變
### 📝 **介面遷移詳情**
#### **新增API方法** (在 `services/api.ts` 中)
```typescript
// 獲取多樓層tabs配置
exportconst getMultiFloorsTabs = async () => {
return await gatewayRequest({
query: { modelId: '10161' }
});
};
// 獲取多樓層資料列表
exportconst getMultiFloorsData = async (params: DataParams) => {
return await gatewayRequest({
query: {
modelId: '10162',
...params,
pageSize: 10,
endpoint: 'wap',
}
});
};
```
### 🎯 **驗收標準**
1. ✅ 元件能夠正常渲染和互動
2. ✅ Tab切換功能正常,支援一層篩選
3. ✅ 滾動載入功能正常
4. ✅ 樣式與原元件保持一致
5. ✅ 介面呼叫正常,資料展示正確
6. ✅ DxRender部分已註釋,不影響元件執行
7. ✅ 元件接受 `tabId` 引數並正常工作
### ⚠️ **注意事項**
- DxRender元件呼叫將被註釋,需要後續替換為React元件
- 保持原有的模板處理邏輯,供React元件後續使用
- Tab元件簡化為單層,如需要多層可後續擴充套件
- 樣式單位使用rpx,確保移動端適配正常
---
**請確認此遷移計劃是否符合您的要求,我將根據您的反饋調整後開始實施程式碼遷移。**
第四步:分步驟實施
按照上述既定技術方案,允許Agent開始著手進行具體的遷移實施工作,以下都是擷取的部分Agent生成的具有代表性的程式碼片段:
4.1 基礎框架轉換——從Rax到React
// Rax版本核心結構
import { createElement, useEffect, useState, useRef } from'rax';
importViewfrom'rax-view';
constMultiFloors = () => {
return (
<ViewclassName="Grid-cell u-full">
<ViewclassName="sticky-tab">
<Tabtabs={tabs}onChange={onTabChange} />
</View>
{dxData.moduleList?.map((item) => (
<DxRenderkey={item.data.action}data={item.data}templateDTO={templateDTO} />
))}
</View>
);
};
// React版本轉換結果
importReact, { useEffect, useState } from'react';
constFactoryRecommendWaterfall: React.FC<FactoryRecommendWaterfallProps> = (props) => {
return (
<divclassName="factory-recommend-waterfall">
<divclassName="sticky-tab">
<Tabtabs={tabs}onChange={handleTabChange} />
</div>
{dxData.moduleList?.map((item, index) => (
<FactoryCardkey={item?.data?.action}data={item?.data}index={index} />
))}
</div>
);
};
這一步驟完成後,其實整體瀑布流的容器佈局已經基本搞定了(確實有點出乎意料的順利),剩下來就是將原先DX渲染的FactoryCard部分搞定(即圖中的佔位部分):

4.2 跨端元件重寫——從DX到React
這部分工作其實也是我想象中對AI最大的挑戰,也是工作量最為集中的部分,需要將DX框架程式碼轉換為React元件程式碼,這裡我嘗試藉助之前首頁雙端程式碼生成的DX知識庫來讓Agent學習後進行轉換:
指導AI生成轉換方案
下面我需要生成最核心的FactoryCard來把替換臨時渲染佔位內容。這裡的轉換邏輯是這樣的:
1. 原來的Card是DX框架寫的,這裡你需要參考“@DX-generate-guide.md”這篇文件獲取DX框架知識
2. 我給你DX程式碼,你將其逆向轉化為React的Card元件,生成對應tsx和less
3. 轉換方案先給我看一下
這是對應FactoryCard的DX程式碼:
<LinearLayout
width="match_parent"
height="match_content"
orientation="vertical"
backgroundColor="#ffffff"
paddingBottom="16"
direction="@triple{@isRTL{}, 'RTL', 'LTR'}"
>
<!--頭部資訊-->
<LinearLayout
width="match_parent"
height="match_content"
orientation="horizontal"
paddingLeft="20"
paddingRight="20"
paddingTop="8"
backgroundColor="#ffffff"
onTap="@link{@data{}}"
onBindData="@onBindData{@data{}}"
direction="@triple{@isRTL{}, 'RTL', 'LTR'}"
>
<!-- 公司Icon -->
<FrameLayout
width="46"
height="43"
>
<FrameLayout
width="42"
height="42"
cornerRadius="8"
clipsToBounds="true"
>
<ImageView
width="match_parent"
height="match_parent"
scaleType="fitCenter"
cornerRadius="8"
gravity="center"
clipsToBounds="true"
imageUrl="@triple{@data{companyLogo}, @data{companyLogo}, 'https://sc01.alicdn.com/kf/H59bcea42cbb74830829df99a64f0ed6a2.png'}"
/>
<View
width="match_parent"
height="match_parent"
cornerRadius="8"
borderColor="#DDDDDD"
borderWidth="1"
clipsToBounds="true"
/>
</FrameLayout>
<!--直播標需要右移4px-->
<ImageView
width="17"
height="match_content"
gravity="rightBottom"
scaleType="fitCenter"
imageUrl="@data{businessLogo}"
visibility="@triple{@data{businessLogo},'visible','gone'}"
/>
</FrameLayout>
<LinearLayout
width="match_parent"
height="match_content"
marginLeft="8"
orientation="vertical"
>
<!-- 公司名 -->
<LinearLayout
width="match_parent"
height="match_content"
orientation="horizontal"
>
<ListLayout
width="match_content"
height="match_content"
orientation="horizontal"
listData="@data{nameIconList}"
gravity="center"
>
<ImageView
width="30"
height="12"
marginRight="4"
scaleType="fitCenter"
imageUrl="@subdata{}"
/>
</ListLayout>
<TextView
width="match_parent"
height="22"
text="@data{companyName}"
textColor="#222222"
textSize="16"
isBold="true"
maxLines="1"
lineBreakMode="end"
weight="1"
/>
<View
width="8"
height="2"
backgroundColor="#FFFFFF"
gravity="center"
/>
<!--Ad-->
<TextView
width="25"
height="16"
text="Ad"
textGravity="center"
textSize="13"
textColor="#888888"
backgroundColor="#05000000"
gravity="center"
cornerRadius="4"
visibility="@triple{@data{isP4P},'visible','gone'}"
/>
</LinearLayout>
<!-- 公司簡介第一行 -->
<LinearLayout
width="match_parent"
height="match_content"
marginTop="6"
orientation="horizontal"
>
<ListLayout
width="match_content"
height="match_content"
orientation="horizontal"
listData="@data{detailIconList}"
>
<ImageView
width="match_content"
height="14"
marginRight="4"
scaleType="fitCenter"
imageUrl="@subdata{}"
/>
</ListLayout>
<ListLayout
width="match_content"
height="14"
orientation="horizontal"
listData="@data{subtitleList}"
>
<TextView
width="match_content"
height="14"
text="@subdata{}"
textColor="#222222"
textSize="11"
maxLines="1"
lineBreakMode="end"
/>
</ListLayout>
</LinearLayout>
<!-- 公司簡介第二行 -->
<LinearLayout
width="match_parent"
height="match_content"
marginTop="8"
orientation="horizontal"
>
<TextView
width="match_content"
height="14"
text="@data{industryAuthTag[0]}"
textColor="#222222"
textSize="11"
maxLines="1"
lineBreakMode="end"
visibility="@triple{@data{industryAuthTag[0]}, 'visible', 'gone'}"
/>
<TextView
width="match_content"
height="14"
text=" • "
textColor="#222222"
textSize="11"
visibility="@triple{@data{industryAuthTag[1]}, 'visible', 'gone'}"
/>
<TextView
width="match_content"
height="14"
text="@data{industryAuthTag[1]}"
textColor="#222222"
textSize="11"
maxLines="1"
lineBreakMode="end"
visibility="@triple{@data{industryAuthTag[1]}, 'visible', 'gone'}"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<FrameLayout
height="12"
width="match_parent"
/>
<ScrollerLayout
width="match_parent"
height="match_content"
orientation="horizontal"
showIndicator="false"
>
<LinearLayout
width="match_content"
height="match_content"
orientation="horizontal"
paddingLeft="20"
paddingRight="8"
listData="@data{productList}"
>
<LinearLayout
width="156"
height="match_content"
orientation="vertical"
onBindData="@onBindData{@subdata{}}"
onTap="@link{@subdata{}}"
>
<FrameLayout
width="144"
height="144"
cornerRadius="8"
>
<ImageView
width="match_parent"
height="match_parent"
imageUrl="@subdata{image}"
/>
<ImageView
width="match_parent"
height="match_parent"
imageUrl="https://sc01.alicdn.com/kf/H0b5abe3843d3493cb57ccb7d20217320D.png"
/>
</FrameLayout>
<View
height="8"
width="match_parent"
/>
<TextView
text="@subdata{minPrice}"
textSize="16"
height="20"
width="match_content"
textColor="#222222"
isBold="true"
gravity="center"
visibility="@triple{@subdata{minPrice}, 'visible', 'gone'}"
/>
<View
height="8"
width="match_parent"
visibility="@triple{@subdata{minPrice}, 'visible', 'gone'}"
/>
</LinearLayout>
</LinearLayout>
</ScrollerLayout>
</LinearLayout>
緊接著AI會給出他的轉換方案:

人工check後還是有一些細節問題,這裡透過二次對話完善:
二次對話完善方案
1. TextView用div,ImageView用div + img
2. types放到父元件下面
3. 存在onBindData的節點可以用MDotElement元件包裹下進行打點配置,onTap就是跳轉url
4. 給你一個Mock測試資料:
{
"companyLogo": "https://sc02.alicdn.com/kf/HTB1mWiVnkfb_uJjSsrb7626bVXaX.png",
"companyName": "Shenzhen Quanyaohui Technology Co., Ltd.",
"businessLogo":"https://gw.alicdn.com/imgextra/i3/O1CN011u0HZD1lVRNPKwzTq_!!6000000004824-1-tps-48-48.gif",
"subtitleList": [
"3 yrs",
" • ",
"40+ 名員工",
" • ",
"3,600+ ㎡",
" • ",
"US$700,000+"
],
"action": "...",
"eurl": "product_1",
"pid": "607_0000_8917",
"nameIconList": [
"https://gw.alicdn.com/imgextra/i3/O1CN01sog9Zi1Ha4vsMZzkW_!!6000000000773-2-tps-90-36.png"
],
"detailIconList": [
"https://gw.alicdn.com/imgextra/i4/O1CN01oR5RHV1sorSuIbjiH_!!6000000005814-2-tps-123-42.png"
],
"productList": [
{
"image": "https://s.alicdn.com/@sc04/kf/H385f60b975f94623aaaf44b7f9f1fb47y.jpg_220x220.jpg",
"productId": "1600438021206",
"traceInfo": {
"activityTraceId": "homepageId:0$homepageType:factory$zoneId:0_$zoneType:home_factory_just4u$zoneIndex:0$moduleId:247802646$moduleType:manufacture$moduleIndex:0$elementId:1600438021206$elementType:product$elementIndex:0",
"clickParam": "click_cid-3852#click_senseid-26426_500#pvid-8bd14d4b-d1c3-454a-9d5c-eaea2ebdd15e#realPos-0_0#id-1600438021206#pos-0#matchType-6#fatherId-null#isCurrentControl-baseline#cateId-127684037#cardId-247802646#isAIRefresh-false#triggerId-CN#rankScore-0.3845406174659729#score-0.95757860274634#",
"spm": "a271p.page_home.just4u.0_0_0",
"name": "home_factory_just4u"
},
"minPrice": "US$1.70",
"action": "enalibaba://detail?id=1600438021206",
"p4p": true,
"eurl": "product_1",
"pid": "607_0000_8917"
},
{...}
]
}
最後AI進行了這次工作的總結,這裡也需要人為校驗下:

最終DX模組直接轉化為FactoryCard子元件並嵌入到上一步的父容器中:

然後這裡樣式問題透過對話讓AI進行最佳化,不過試了三輪都沒改對…最後還是自己下場debug最佳化好了樣式,這一點還是略有失望~但整體瑕不掩瑜:

4.3 API層重構與Mock資料建設
// 服務層抽離
exportconstgetFactoryRecommendWaterfallTabs = async () => {
if (window.location.hostname === 'localhost') {
const { mockTabs } = awaitimport('@/components/FactoryRecommendWaterfall/mock');
return { tabs: mockTabs };
}
// 生產環境API呼叫...
};
4.4 業務邏輯最佳化
將原有的二級篩選簡化為一級,同時保持資料結構相容:
// Tab元件簡化處理
constallSubs: TabItem[] = [];
tabs.forEach(tab => {
if (tab.children && tab.children.length > 0) {
allSubs.push(...tab.children); // 將子標籤提升為主導航
}
});
setAllSubTabs(allSubs);
第五步:問題發現與修復
在實施過程中,遇到了一些典型問題,可以透過多輪對話嘗試讓AI協助進行了針對性修復:
樣式細節問題:
// 問題:產品列表滾動邊界處理不當
.factory-product-list {
display: flex;
padding-right: 12px;
gap: 4px;
// 解決方案:用偽元素處理末尾間距(雖然不完美,但是也能解決問題)
&::after {
content: '';
width: 12px;
flex-shrink: 0;
}
}
文字截斷問題:
// 問題:多行文字截斷不生效
.company-detail-row {
.subtitle-list {
flex: 1;
min-width: 0;
.subtitle-text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
CORS跨域問題:
透過環境檢測自動切換Mock資料,徹底解決開發階段的跨域問題。
Tab互動體驗:
移除滾動到頂部功能,避免使用者在瀏覽過程中的突兀體驗。
不過這裡其實樣式方面細節問題還不少,透過2-3輪對話AI也沒辦法完全改對,最後還是透過人工方式debug後修復,這部分可以說是不太順的一個地方吧,其他方面尤其是元件規範、命名、互動功能都還是挺滿意的
第六步:遷移完成總結
最後,Agent也會對此次的遷移過程進行總結,方便人為進行審查與最佳化:
總結
## ✅ 遷移完成總結
我已經成功完成了 **MultiFloors** 元件從 `new-m-site` (Rax框架) 到 `fy25-m-site` (React框架) 的遷移,元件重新命名為 **FactoryRecommendWaterfall**。
### 🎯 **遷移成果**
#### **1. 目錄結構**
```
fy25-m-site/src/components/FactoryRecommendWaterfall/
├── index.tsx # 主元件(React版本)
├── index.less # 主樣式檔案
├── Tab/ # Tab子元件
│ ├── index.tsx # Tab元件(簡化版,只保留subTab)
│ └── index.less # Tab樣式
└── types.ts # TypeScript型別定義
```
#### **2. 核心變更完成**
- ✅ **框架遷移**: Rax → React (View→div, Text→span)
- ✅ **介面抽離**: 新增 `getFactoryRecommendWaterfallTabs()` 和 `getFactoryRecommendWaterfallData()`
- ✅ **樣式遷移**: SCSS → Less,保持原有樣式效果
- ✅ **Tab元件簡化**: 只保留subTab部分,支援單層篩選
- ✅ **DxRender註釋**: 已註釋並新增佔位內容
- ✅ **入參最佳化**: 支援必需的 `tabId` 引數
#### **3. 新增檔案**
-**useOnScreen Hook**: `src/hooks/useOnScreen.ts` (React版本)
-**API介面**: 在 `services/api.ts` 中新增FactoryRecommendWaterfall相關介面
-**型別定義**: 完整的 TypeScript 介面定義
#### **4. 元件使用示例**
```tsx
import FactoryRecommendWaterfall from '@/components/FactoryRecommendWaterfall';
// 基礎使用
<FactoryRecommendWaterfall tabId="your-tab-id" />
// 帶回調使用
<FactoryRecommendWaterfall
tabId="your-tab-id"
className="custom-class"
onTabChange={(tabItem, currentSub) => {
console.log('Tab changed:', tabItem, currentSub);
}}
/>
```
### 🚀 **下一步工作**
1.**DxRender替換**: 將註釋的 `DxRender` 元件替換為對應的React元件
2.**測試驗證**: 在實際專案中測試元件功能
3.**樣式調優**: 根據實際效果進行樣式微調
元件現在已經可以正常使用,具備完整的tab切換、滾動載入、資料篩選功能,只需要後續替換DxRender元件即可完全投入使用!
四、AI提效分析:優勢與侷限並存
顯著優勢
1.模式識別能力強:在本地DX知識庫加持下,能夠快速理解DX元件的佈局結構,並生成對應的Web實現方案。
2.工程化思維:主動建議API抽離、Mock資料設計等工程化實踐。
3.持續學習與改進:在迭代過程中,AI能夠記住之前的修改要求,後續的調整越來越精準。
4.多專案對比分析能力:透過VSCode工作區(Workspace)功能,可以同時開啟新老專案,AI能夠直接對比分析兩個專案的程式碼結構,快速識別差異點和轉換規律。特別是針對我這種新老專案遷移重構的case來說,讓AI的上下文理解能力得到最大化利用,減少了反覆解釋專案背景的時間成本。
現實侷限
1.樣式細節把控不足:特別是在文字截斷、佈局邊界、響應式適配等方面,經常需要人工調優。
2.業務邏輯理解深度有限:對於一些隱含的業務規則,比如什麼情況下顯示AD標籤、如何處理資料異常等,理解不夠深入。
3.跨平臺差異感知不敏感:在DX到Web的轉換中,對於一些平臺特性差異(如滾動行為、點選反饋等)考慮不夠周全。
五、可複用的遷移正規化
透過這次實踐,我總結出一套可複用的AI輔助元件遷移正規化:
標準化流程模板
1.預分析階段
-
梳理源元件的功能邊界
-
識別跨框架的關鍵差異點
-
制定分步驟的遷移計劃
2.架構設計階段
-
API層抽離與設計
-
資料流重構
-
元件拆分策略
3.逐步實施階段
-
基礎框架轉換
-
樣式系統遷移
-
業務邏輯適配
4.精細化調優階段
-
樣式細節調整
-
效能最佳化
-
相容性測試
還有一些AICode實踐建議:

六、總結與展望
這次AI輔助的元件遷移實踐,讓我對AI+Code的開發模式有了更深的認識。AI就像一個高效的初級開發者,能夠快速完成基礎的編碼工作,但在業務理解、細節把控、效能最佳化等方面還需要資深開發者的指導。
從效率角度來看,這種協作模式確實帶來了顯著的提升:
-
原本需要2-3天的遷移工作,壓縮到1天內完成;
-
減少了80%的重複性編碼工作,人工編碼只涉及到了Prompt與樣式邏輯調優;
-
提升了工程化實踐的規範性;
但更重要的是,這種模式改變了我們的工作方式。開發者的角色從"編碼者"更多地轉向了"架構師"和"審查者",我們需要:
-
更好地定義需求和約束;
-
更敏銳地識別和修正AI的偏差;
-
更深入地思考系統的整體設計;
展望未來,隨著AI能力的不斷提升,我相信這種協作模式會越來越成熟。但技術的本質不會改變——好的軟體依然需要深入的業務理解、精細的技術把控和持續的最佳化迭代。
對於團隊而言,建議在類似的遷移專案中:
1.建立AI輔助開發的標準流程
2.積累常見問題的解決方案庫
3.培養開發者的AI協作能力
4.持續最佳化人機協作的工作模式
畢竟,最好的工具不是替代人的工具,而是能夠放大人的能力的工具。
全面安全保障:等保 2.0 解決方案
阿里雲安全整合雲平臺等保測評經驗和雲安全產品優勢,聯合等保諮詢、等保測評機構等合作資源,提供一站式等保測評服務,覆蓋等保定級、備案、建設整改及測評階段,助您快速透過等保測評。
點選閱讀原文檢視詳情。