用 AI Shell 开发并部署抽奖大转盘应用

举报
deli007 发表于 2026/07/24 22:55:01 2026/07/24
【摘要】 本案例完整记录使用华为云AI Shell通过自然语言描述需求让AI自动完成代码开发查询云资源部署应用的全流程展示了从开发到部署的完整过程

鏈渚嬪畬鏁磋褰曚簡浣跨敤鍗庝负浜?AI Shell锛岄€氳繃鑷劧璇█鎻忚堪闇€姹傦紝璁?AI 鑷姩瀹屾垚浠g爜寮€鍙戙€佹煡璇簯璧勬簮銆侀儴缃插簲鐢ㄧ殑鍏ㄦ祦绋嬨€?

妗堜緥鑳屾櫙

AI Shell 鏄崕涓轰簯寮€鍙戣€呯┖闂存彁渚涚殑 AI 杈呭姪寮€鍙戝伐鍏凤紝瀹冩槸涓€涓畬鏁寸殑 AI Agent锛屽叿澶囦互涓嬭兘鍔涳細

  • 馃 鑷劧璇█鐞嗚В锛氱敤涓枃鎻忚堪闇€姹傦紝AI 鑷姩鐢熸垚浠g爜
  • 馃攳 **浜戣祫婧愭煡璇?*锛氬彲鏌ヨ鍗庝负浜?ECS銆丗lexus 绛夎祫婧愪俊鎭?
  • 馃殌 鑷姩閮ㄧ讲锛氬彲鐩存帴閮ㄧ讲搴旂敤鍒版寚瀹氱殑浜戞湇鍔″櫒
  • 馃捇 缁堢鎿嶄綔锛氬彲鎵ц Shell 鍛戒护銆佸畨瑁呬緷璧栥€佸惎鍔ㄦ湇鍔?

鏍稿績浼樺娍锛氬紑鍙戣€呭彧闇€鎻忚堪"鍋氫粈涔?锛孉I Shell 鑷姩瀹屾垚"鎬庝箞鍋?銆?


瀹屾暣鎿嶄綔娴佺▼

姝ラ 1锛氳繘鍏?AI Shell

  1. 璁块棶鍗庝负浜戝紑鍙戣€呯┖闂?AI Shell 鍏ュ彛锛?

    https://devstation.connect.huaweicloud.com/aishell
    
  2. 浣跨敤鍗庝负浜戣处鍙风櫥褰?

瀹為檯鎿嶄綔鎴浘锛?

[鎴浘: AI Shell 鏉冮檺纭瀵硅瘽妗哴

棣栨杩涘叆鏃朵細寮瑰嚭"涓存椂鍑嵁鑷姩閰嶇疆"瀵硅瘽妗嗭紝璇㈤棶鏄惁灏?AK/SK 鍚屾鍒?AI Shell 鐜銆?

鐐瑰嚮"鍚屾剰"鎸夐挳锛孉I Shell 浼氳嚜鍔ㄩ厤缃崕涓轰簯璁块棶鍑嵁锛屽悗缁彲鐩存帴鎿嶄綔浜戣祫婧愩€?

姝ラ 2锛氳璇?AI Shell 鐣岄潰

鍚屾剰鍚庯紝AI Shell 杩涘叆涓荤晫闈細

[鎴浘: AI Shell 涓荤晫闈

鐣岄潰鍖呭惈浠ヤ笅鍖哄煙锛?

鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?? Session: 01KW9MKVCSJE8K66DQ72WDBW3T                   鈹??浼氳瘽ID? Context: 8,171 tokens                                 鈹??涓婁笅鏂囧ぇ灏?
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?? Plans:?? [ ] 鍒涘缓 HTML 椤甸潰缁撴瀯                                 鈹?? [ ] 鍒涘缓 CSS 鏍峰紡鏂囦欢                                  鈹?? [ ] 鍒涘缓 JavaScript 閫昏緫鏂囦欢                           鈹???? Thinking...??鎵ц鐘舵€?
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?? 馃挰 杈撳叆浣犵殑闇€姹?..                        [鍙戦€乚        鈹??杈撳叆妗?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?

鍏抽敭鍖哄煙璇存槑锛?

  • Session ID锛氬綋鍓嶄細璇濈殑鍞竴鏍囪瘑
  • Context tokens锛欰I 鐨勪笂涓嬫枃澶у皬锛堝奖鍝嶈蹇嗚兘鍔涳級
  • Plans锛欰I 鍒跺畾鐨勬墽琛岃鍒掞紝[鉁揮 宸插畬鎴愶紝[ ] 寰呮墽琛?
  • **Thinking…**锛欰I 姝e湪鎬濊€?鎵ц
  • **搴曢儴杈撳叆妗?*锛氳緭鍏ヨ嚜鐒惰瑷€鎸囦护鐨勫湴鏂?

姝ラ 3锛氬紑鍙戞娊濂栧簲鐢?

鍦ㄥ簳閮ㄨ緭鍏ユ涓緭鍏ヤ互涓嬭嚜鐒惰瑷€鎸囦护锛?

璇峰府鎴戝紑鍙戜竴涓娊濂栧ぇ杞洏缃戦〉搴旂敤锛岃姹傦細
1. 鍒涘缓 HTML銆丆SS銆丣avaScript 鏂囦欢
2. 鍖呭惈 6 涓鍖猴細涓€绛夊銆佷簩绛夊銆佷笁绛夊銆佸洓绛夊銆佷袱涓?璋㈣阿鍙備笌"
3. 姣忎釜濂栭」鏈夊彲閰嶇疆鐨勪腑濂栨鐜?
4. 杞洏鏈夊钩婊戠殑鏃嬭浆鍔ㄧ敾鍜屽噺閫熸晥鏋?
5. 鐣岄潰缇庤锛屾敮鎸佸搷搴斿紡甯冨眬
6. 姣忓ぉ闄愬埗 3 娆℃娊濂栨満浼?

瀹為檯鎿嶄綔鎴浘锛?

[鎴浘: 杈撳叆寮€鍙戞寚浠

鎸?Enter 鍙戦€佹寚浠ゅ悗锛孉I Shell 浼氾細

  1. **瑙f瀽闇€姹?*锛氱悊瑙d綘鐨勮嚜鐒惰瑷€鎻忚堪
  2. 鍒跺畾璁″垝锛氱敓鎴愭墽琛岃鍒掞紙Plans 鍒楄〃锛?
  3. 閫愭鎵ц锛氫緷娆″畬鎴愭瘡涓换鍔?
  4. 瀹炴椂鍙嶉锛氬湪缁堢鏄剧ず鎵ц杩囩▼

姝ラ 4锛氬鐞?Permission Request

閲嶈鍙戠幇锛歅ermission Request 鍦ㄧ粓绔腑鏄剧ず锛屼笉鏄紶缁?HTML 瀵硅瘽妗嗭紒

[鎴浘: Permission Request]

褰?AI Shell 鎵ц鏂囦欢鍒涘缓銆佸懡浠ゆ墽琛岀瓑鎿嶄綔鏃讹紝浼氳Е鍙?Permission Request锛?

?Permission Request
鈹?Write file | lottery/index.html
鈹?Allow once   Allow always   Reject once   Reject always

鎿嶄綔鏂瑰紡锛?

  1. 鎸夊彸绠ご閿紙鈫掞級閫夋嫨 “Allow always”
  2. 鎸夊洖杞﹂敭锛圗nter锛夌‘璁?

[鎴浘: 澶勭悊鍚嶿

**寤鸿閫夋嫨 “Allow always”**锛岄伩鍏嶅悗缁搷浣滈绻佺‘璁ゃ€?

姝ラ 5锛氬紑鍙戝畬鎴?

AI Shell 瀹屾垚鍚庯紝Plans 鏄剧ず鎵€鏈変换鍔″凡瀹屾垚锛?

[鎴浘: 寮€鍙戝畬鎴怾

瀹屾垚鍚庣殑杈撳嚭锛?

浣跨敤鏂瑰紡
1. 鐢ㄦ祻瑙堝櫒鎵撳紑 lottery/index.html 鍗冲彲浣跨敤
2. 鐐瑰嚮涓績銆屾娊濂栥€嶆寜閽紑濮嬭浆鍔?
3. 涓鍚庡脊鍑虹粨鏋滄彁绀烘

淇敼姒傜巼閰嶇疆
缂栬緫 script.js 鏂囦欢椤堕儴鐨勯厤缃細
const PRIZES = [
    { name: '涓€绛夊', icon: '馃弳', probability: 0.05, color: 0 },
    { name: '浜岀瓑濂?, icon: '馃巵', probability: 0.10, color: 1 },
    // ...
];

姝ラ 6锛氶儴缃插埌鏈嶅姟鍣?

缁х画鍚?AI Shell 鍙戦€侀儴缃叉寚浠わ細

璇峰皢 lottery 鏂囦欢澶归儴缃插埌鎴戠殑鍗庝负浜戞湇鍔″櫒锛?
- 鏈嶅姟鍣?IP: <YOUR_SERVER_IP>
- SSH 鐢ㄦ埛鍚? root
- SSH 瀵嗙爜: <YOUR_PASSWORD>
- 鐩爣鐩綍: /var/www/html/
- 閰嶇疆 Nginx 鎻愪緵闈欐€佹枃浠舵湇鍔?

[鎴浘: 閮ㄧ讲鎸囦护]

AI Shell 浼氳嚜鍔細

  1. 鏌ヨ鏈嶅姟鍣ㄤ俊鎭?
  2. 閫氳繃 SSH 杩炴帴鏈嶅姟鍣紙浣跨敤 paramiko锛?
  3. 涓婁紶鏂囦欢鍒版湇鍔″櫒
  4. 閰嶇疆 Nginx
  5. 閲嶅惎 Nginx 鏈嶅姟

姝ラ 7锛氶獙璇侀儴缃?

AI Shell 瀹屾垚閮ㄧ讲鍚庯紝Plans 鏄剧ず "No Plans"锛?

[鎴浘: 閮ㄧ讲瀹屾垚]

瀹為檯閮ㄧ讲缁撴灉锛?

?AI Shell 瀹屾垚鎵€鏈変换鍔★紒

Plans: No Plans

鏈嶅姟鍣ㄦ搷浣?
- 閫氳繃 paramiko SSH 杩炴帴鍒版湇鍔″櫒
- 涓婁紶鏂囦欢鍒?/var/www/html/lottery/
- 淇敼 Nginx 閰嶇疆
- 閲嶅惎 Nginx 鏈嶅姟

楠岃瘉缁撴灉:
- URL: https://<YOUR_SERVER_IP>/lottery/index.html
- HTTP 鐘舵€? 200 OK
- 鏂囦欢澶у皬: 1,576 bytes

閫氳繃娴忚鍣ㄨ闂細

https://<YOUR_SERVER_IP>/lottery/

楠岃瘉鎶藉搴旂敤鏄惁姝e父杩愯銆?


鍏抽敭缁忛獙鎬荤粨

1. Permission Request 蹇呴』涓诲姩澶勭悊

闂锛欰I Shell 鎵ц鏂囦欢鍒涘缓銆佸懡浠ゆ墽琛岀瓑鎿嶄綔鏃朵細瑙﹀彂 Permission Request锛屽鏋滀笉澶勭悊浼氫竴鐩寸瓑寰呫€?

瑙e喅锛氭寔缁洃鎺ч〉闈㈡枃鏈紝妫€娴嬪埌 “Permission Request” 绔嬪嵆澶勭悊銆?

鎿嶄綔鏂规硶锛?

  • Permission Request 鍦ㄧ粓绔腑鏄剧ず锛屼笉鏄紶缁?HTML 瀵硅瘽妗?
  • 鎸夊彸绠ご閿紙鈫掞級閫夋嫨 “Allow always”
  • 鎸夊洖杞﹂敭锛圗nter锛夌‘璁?

浠g爜绀轰緥锛?

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

# 妫€娴?Permission Request
if "Permission Request" in page_text and "Allow" in page_text:
    terminal = driver.find_element(By.CLASS_NAME, "xterm")
    terminal.click()
    
    actions = ActionChains(driver)
    actions.send_keys(Keys.ARROW_RIGHT).perform()  # 閫夋嫨 Allow always
    time.sleep(0.3)
    actions.send_keys(Keys.RETURN).perform()  # 纭

2. 閮ㄧ讲闇€瑕佹彁渚涙槑纭俊鎭?

闂锛欰I Shell 鏌ヨ Flexus 瀹炰緥鏃跺彲鑳藉け璐ワ紙hcloud CLI 涓嶆敮鎸侊級銆?

瑙e喅锛氱洿鎺ユ彁渚涙湇鍔″櫒 IP銆丼SH 鍑嵁绛変俊鎭紝璁?AI Shell 鐩存帴浣跨敤銆?

3. 鏂囦欢璺緞瑕佹槑纭?

闂锛欰I Shell 鍙兘鎵句笉鍒版湰鍦版枃浠躲€?

瑙e喅锛氭槑纭憡鐭ユ枃浠惰矾寰勶紝渚嬪 "lottery 鏂囦欢澶瑰湪褰撳墠宸ヤ綔鐩綍 /root/lottery"銆?

4. 浣跨敤 Selenium 杩炴帴宸叉湁娴忚鍣?

闂锛氫娇鐢?browserbase 绛夎繙绋嬫祻瑙堝櫒浼氭湁鍚勭闄愬埗銆?

瑙e喅锛氬惎鍔ㄦ湰鍦?Chrome 骞跺紑鍚?CDP锛岀敤 Selenium 杩炴帴锛?

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_experimental_option("debuggerAddress", "localhost:9222")
driver = webdriver.Chrome(options=options)

5. 鎸佺画鐩戞帶鑰岄潪鍗曟妫€鏌?

闂锛欰I Shell 鎵ц闇€瑕佹椂闂达紝鍗曟妫€鏌ヤ細閿欒繃 Permission Request銆?

瑙e喅锛氬惊鐜洃鎺э紝姣忔闂撮殧 10 绉掞紝鎸佺画澶勭悊 Permission Request锛岀洿鍒?Plans 鏄剧ず "No Plans"銆?

6. 璁?AI Shell 鑷繁瀹屾垚閮ㄧ讲

閲嶈锛氫笉瑕佽嚜宸遍儴缃插簲鐢紝鑰屾槸璁?AI Shell 閫氳繃 SSH 鑷繁瀹屾垚鎵€鏈夐儴缃插伐浣溿€?

**AI Shell 鐨勯儴缃叉柟寮?*锛?

  • 浣跨敤 Python paramiko 搴撳缓绔?SSH 杩炴帴
  • 閫氳繃 SFTP 涓婁紶鏂囦欢
  • 鎵ц Shell 鍛戒护閰嶇疆 Nginx
  • 閲嶅惎鏈嶅姟

AI Shell 鎵ц杩囩▼璇﹁В

Plans 鎵ц娴佺▼

AI Shell 浼氳嚜鍔ㄥ埗瀹氬苟鎵ц浠ヤ笅璁″垝锛?

Plans:
[鉁揮 妫€鏌ユ湰鍦?lottery 鏂囦欢澶?
[鉁揮 鏌ヨ鍙敤鐨?Flexus 瀹炰緥
[鉁揮 閫夋嫨骞剁‘璁ょ洰鏍囧疄渚?
[鉁揮 涓婁紶鏂囦欢鍒版湇鍔″櫒
[鉁揮 閰嶇疆 Nginx 闈欐€佹枃浠舵湇鍔?
[鉁揮 楠岃瘉 80 绔彛鍙闂苟杩斿洖 URL

鍏抽敭鎵ц姝ラ

  1. 鍒涘缓鏂囦欢锛?

    [鉁揮 bash_exec (command=mkdir -p /root/lottery)
    [鉁揮 write_file (path=lottery/index.html, content_length=1576)
    [鉁揮 write_file (path=lottery/style.css, content_length=4283)
    [鉁揮 write_file (path=lottery/script.js, content_length=...)
    
  2. SSH 杩炴帴锛?

    [鉁揮 bash_exec (command=python3 << 'EOF'
    import paramiko
    ssh = paramiko.SSHClient()
    ssh.connect('<YOUR_SERVER_IP>', 22, 'root', '<YOUR_PASSWORD>')
    ...
    
  3. 閰嶇疆 Nginx锛?

    [鉁揮 淇敼 Nginx 閰嶇疆锛屾坊鍔?lottery location
    [鉁揮 nginx -t 娴嬭瘯閰嶇疆
    [鉁揮 systemctl reload nginx
    

鎶藉搴旂敤鍔熻兘璇存槑

鍔熻兘鐗圭偣

  • 馃帯 **6 涓鍖?*锛氫竴绛夊銆佷簩绛夊銆佷笁绛夊銆佸洓绛夊銆佷袱涓?璋㈣阿鍙備笌"
  • 馃幆 姒傜巼鎺у埗锛氭瘡涓椤瑰彲閰嶇疆涓姒傜巼
  • 馃攧 骞虫粦鍔ㄧ敾锛氫娇鐢ㄨ礉濉炲皵鏇茬嚎瀹炵幇鑷劧鐨勫噺閫熸晥鏋?
  • 馃帹 绮剧編璁捐锛氭笎鍙樿壊褰┿€侀槾褰辨晥鏋溿€佽剦鍐插姩鐢?
  • 馃摫 **鍝嶅簲寮?*锛氶€傞厤绉诲姩绔樉绀?
  • 馃敘 娆℃暟闄愬埗锛氶粯璁ゆ瘡澶?3 娆℃娊濂栨満浼?

鑷畾涔夐厤缃?

**淇敼濂栧搧鍜屾鐜?*锛堢紪杈?script.js锛夛細

const PRIZES = [
    { name: '涓€绛夊', icon: '馃弳', probability: 0.05, color: 0 },
    { name: '浜岀瓑濂?, icon: '馃巵', probability: 0.10, color: 1 },
    { name: '涓夌瓑濂?, icon: '馃幆', probability: 0.15, color: 2 },
    { name: '鍥涚瓑濂?, icon: '?, probability: 0.20, color: 3 },
    { name: '璋㈣阿鍙備笌', icon: '馃挮', probability: 0.25, color: 4 },
    { name: '璋㈣阿鍙備笌', icon: '馃挮', probability: 0.25, color: 5 }
];

甯歌闂

Q1: 濡備綍鍒ゆ柇 AI Shell 瀹屾垚浜嗕换鍔★紵

A: 妫€鏌?Plans 鍒楄〃锛屾墍鏈変换鍔℃樉绀?[鉁揮 鎴?Plans 鏄剧ず "No Plans"銆?

Q2: Permission Request 鎵句笉鍒版寜閽紵

A: Permission Request 鍦ㄧ粓绔腑鏄剧ず锛岄渶瑕佺敤閿洏鎿嶄綔锛堚啋 + Enter锛夛紝涓嶆槸鐐瑰嚮鎸夐挳銆?

Q3: 閮ㄧ讲澶辫触鎬庝箞鍔烇紵

A:

  1. 妫€鏌?SSH 鍑嵁鏄惁姝g‘
  2. 纭鏈嶅姟鍣ㄥ畨鍏ㄧ粍寮€鏀句簡 22 绔彛
  3. 鎻愪緵鏄庣‘鐨勬枃浠惰矾寰勫拰鐩爣鐩綍
  4. 璁?AI Shell 鑷繁澶勭悊锛屼笉瑕佹墜鍔ㄥ共棰?

Q4: 濡備綍鑾峰彇鏈€缁堣闂?URL锛?

A: 鍦ㄥ畬鎴愭枃鏈腑鎼滅储 “http://” 鎴?"https://"锛屾彁鍙?URL銆傛垨鑰呯洿鎺ヨ闂?https://鏈嶅姟鍣↖P/lottery/銆?

Q5: AI Shell 浼氫娇鐢ㄤ粈涔堟柟寮忛儴缃诧紵

A: AI Shell 浼氫娇鐢?Python paramiko 搴撻€氳繃 SSH 杩炴帴鏈嶅姟鍣紝浣跨敤 SFTP 涓婁紶鏂囦欢锛屾墽琛?Shell 鍛戒护閰嶇疆鏈嶅姟銆?


鐩稿叧璧勬簮


妗堜緥鎬荤粨

鏈渚嬪畬鏁村睍绀轰簡 AI Shell 鐨勬牳蹇冧环鍊硷細

浼犵粺寮€鍙戞柟寮? AI Shell 鏂瑰紡
鎵嬪姩缂栧啓 HTML/CSS/JS 鑷劧璇█鎻忚堪闇€姹?
鎵嬪姩閰嶇疆鏈嶅姟鍣ㄧ幆澧? AI 鑷姩閰嶇疆
鎵嬪姩涓婁紶鏂囦欢銆侀厤缃?Nginx AI 鑷姩閮ㄧ讲
闇€瑕?2-3 灏忔椂 鍙渶 15-30 鍒嗛挓

*AI Shell 璁╁紑鍙戣€呬粠"鎬庝箞鍋?涓В鏀惧嚭鏉ワ紝涓撴敞浜?鍋氫粈涔?銆?

鍏抽敭瑕佺偣锛?

  • 鉁?璁?AI Shell 鑷繁瀹屾垚鎵€鏈夊伐浣滐紙寮€鍙?閮ㄧ讲锛?
  • 鉁?鍙渶鐩戞帶鍜屽鐞?Permission Request
  • 鉁?Plans 鏄剧ず “No Plans” 琛ㄧず瀹屾垚
  • 鉁?楠岃瘉鏈€缁堥儴缃茬粨鏋?

*鏈渚嬬敱瀹為檯鎿嶄綔鐢熸垚锛屽寘鍚?120+ 寮犵湡瀹炴埅鍥?
鏈€鍚庢洿鏂帮細2026-06-30
AI Shell 瀹屾垚閮ㄧ讲锛氣渽 搴旂敤宸叉垚鍔熼儴缃插苟閫氳繃楠岃瘉

本案例完整记录了使用华为云 AI Shell,通过自然语言描述需求,让 AI 自动完成代码开发、查询云资源、部署应用的全流程。

案例背景

AI Shell 是华为云开发者空间提供的 AI 辅助开发工具,它是一个完整的 AI Agent,具备以下能力:

  • 🤖 自然语言理解:用中文描述需求,AI 自动生成代码
  • 🔍 云资源查询:可查询华为云 ECS、Flexus 等资源信息
  • 🚀 自动部署:可直接部署应用到指定的云服务器
  • 💻 终端操作:可执行 Shell 命令、安装依赖、启动服务

核心优势:开发者只需描述"做什么",AI Shell 自动完成"怎么做"。


完整操作流程

步骤 1:进入 AI Shell

  1. 访问华为云开发者空间 AI Shell 入口:

    https://devstation.connect.huaweicloud.com/aishell
    
  2. 使用华为云账号登录

实际操作截图

[截图: AI Shell 权限确认对话框]

首次进入时会弹出"临时凭据自动配置"对话框,询问是否将 AK/SK 同步到 AI Shell 环境。

点击"同意"按钮,AI Shell 会自动配置华为云访问凭据,后续可直接操作云资源。

步骤 2:认识 AI Shell 界面

同意后,AI Shell 进入主界面:

[截图: AI Shell 主界面]

界面包含以下区域:

┌─────────────────────────────────────────────────────────┐
│  Session: 01KW9MKVCSJE8K66DQ72WDBW3T                   │  ← 会话ID
│  Context: 8,171 tokens                                 │  ← 上下文大小
├─────────────────────────────────────────────────────────┤
│  Plans:                                                 │
│  [ ] 创建 HTML 页面结构                                 │
│  [ ] 创建 CSS 样式文件                                  │
│  [ ] 创建 JavaScript 逻辑文件                           │
│                                                         │
│  Thinking...                                            │  ← 执行状态
├─────────────────────────────────────────────────────────┤
│  💬 输入你的需求...                        [发送]        │  ← 输入框
└─────────────────────────────────────────────────────────┘

关键区域说明

  • Session ID:当前会话的唯一标识
  • Context tokens:AI 的上下文大小(影响记忆能力)
  • Plans:AI 制定的执行计划,[✓] 已完成,[ ] 待执行
  • Thinking…:AI 正在思考/执行
  • 底部输入框:输入自然语言指令的地方

步骤 3:开发抽奖应用

在底部输入框中输入以下自然语言指令:

请帮我开发一个抽奖大转盘网页应用,要求:
1. 创建 HTMLCSS、JavaScript 文件
2. 包含 6 个奖区:一等奖、二等奖、三等奖、四等奖、两个"谢谢参与"
3. 每个奖项有可配置的中奖概率
4. 转盘有平滑的旋转动画和减速效果
5. 界面美观,支持响应式布局
6. 每天限制 3 次抽奖机会

实际操作截图

[截图: 输入开发指令]

按 Enter 发送指令后,AI Shell 会:

  1. 解析需求:理解你的自然语言描述
  2. 制定计划:生成执行计划(Plans 列表)
  3. 逐步执行:依次完成每个任务
  4. 实时反馈:在终端显示执行过程

步骤 4:处理 Permission Request

重要发现:Permission Request 在终端中显示,不是传统 HTML 对话框!

[截图: Permission Request]

当 AI Shell 执行文件创建、命令执行等操作时,会触发 Permission Request:

┃ Permission Request
┃ Write file | lottery/index.html
┃ Allow once   Allow always   Reject once   Reject always

操作方式

  1. 按右箭头键(→)选择 “Allow always”
  2. 按回车键(Enter)确认

[截图: 处理后]

建议选择 “Allow always”,避免后续操作频繁确认。

步骤 5:开发完成

AI Shell 完成后,Plans 显示所有任务已完成:

[截图: 开发完成]

完成后的输出

使用方式
1. 用浏览器打开 lottery/index.html 即可使用
2. 点击中心「抽奖」按钮开始转动
3. 中奖后弹出结果提示框

修改概率配置
编辑 script.js 文件顶部的配置:
const PRIZES = [
    { name: '一等奖', icon: '🏆', probability: 0.05, color: 0 },
    { name: '二等奖', icon: '🎁', probability: 0.10, color: 1 },
    // ...
];

步骤 6:部署到服务器

继续向 AI Shell 发送部署指令:

请将 lottery 文件夹部署到我的华为云服务器:
- 服务器 IP: <YOUR_SERVER_IP>
- SSH 用户名: root
- SSH 密码: <YOUR_PASSWORD>
- 目标目录: /var/www/html/
- 配置 Nginx 提供静态文件服务

[截图: 部署指令]

AI Shell 会自动:

  1. 查询服务器信息
  2. 通过 SSH 连接服务器(使用 paramiko)
  3. 上传文件到服务器
  4. 配置 Nginx
  5. 重启 Nginx 服务

步骤 7:验证部署

AI Shell 完成部署后,Plans 显示 “No Plans”:

[截图: 部署完成]

实际部署结果

AI Shell 完成所有任务!

Plans: No Plans

服务器操作:
- 通过 paramiko SSH 连接到服务器
- 上传文件到 /var/www/html/lottery/
- 修改 Nginx 配置
- 重启 Nginx 服务

验证结果:
- URL: https://<YOUR_SERVER_IP>/lottery/index.html
- HTTP 状态: 200 OK
- 文件大小: 1,576 bytes

通过浏览器访问:

https://<YOUR_SERVER_IP>/lottery/

验证抽奖应用是否正常运行。


关键经验总结

1. Permission Request 必须主动处理

问题:AI Shell 执行文件创建、命令执行等操作时会触发 Permission Request,如果不处理会一直等待。

解决:持续监控页面文本,检测到 “Permission Request” 立即处理。

操作方法

  • Permission Request 在终端中显示,不是传统 HTML 对话框
  • 按右箭头键(→)选择 “Allow always”
  • 按回车键(Enter)确认

代码示例

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

# 检测 Permission Request
if "Permission Request" in page_text and "Allow" in page_text:
    terminal = driver.find_element(By.CLASS_NAME, "xterm")
    terminal.click()
    
    actions = ActionChains(driver)
    actions.send_keys(Keys.ARROW_RIGHT).perform()  # 选择 Allow always
    time.sleep(0.3)
    actions.send_keys(Keys.RETURN).perform()  # 确认

2. 部署需要提供明确信息

问题:AI Shell 查询 Flexus 实例时可能失败(hcloud CLI 不支持)。

解决:直接提供服务器 IP、SSH 凭据等信息,让 AI Shell 直接使用。

3. 文件路径要明确

问题:AI Shell 可能找不到本地文件。

解决:明确告知文件路径,例如 “lottery 文件夹在当前工作目录 /root/lottery”。

4. 使用 Selenium 连接已有浏览器

问题:使用 browserbase 等远程浏览器会有各种限制。

解决:启动本地 Chrome 并开启 CDP,用 Selenium 连接:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_experimental_option("debuggerAddress", "localhost:9222")
driver = webdriver.Chrome(options=options)

5. 持续监控而非单次检查

问题:AI Shell 执行需要时间,单次检查会错过 Permission Request。

解决:循环监控,每次间隔 10 秒,持续处理 Permission Request,直到 Plans 显示 “No Plans”。

6. 让 AI Shell 自己完成部署

重要:不要自己部署应用,而是让 AI Shell 通过 SSH 自己完成所有部署工作。

AI Shell 的部署方式

  • 使用 Python paramiko 库建立 SSH 连接
  • 通过 SFTP 上传文件
  • 执行 Shell 命令配置 Nginx
  • 重启服务

AI Shell 执行过程详解

Plans 执行流程

AI Shell 会自动制定并执行以下计划:

Plans:
[] 检查本地 lottery 文件夹
[] 查询可用的 Flexus 实例
[] 选择并确认目标实例
[] 上传文件到服务器
[] 配置 Nginx 静态文件服务
[] 验证 80 端口可访问并返回 URL

关键执行步骤

  1. 创建文件

    [] bash_exec (command=mkdir -p /root/lottery)
    [] write_file (path=lottery/index.html, content_length=1576)
    [] write_file (path=lottery/style.css, content_length=4283)
    [] write_file (path=lottery/script.js, content_length=...)
    
  2. SSH 连接

    [] bash_exec (command=python3 << 'EOF'
    import paramiko
    ssh = paramiko.SSHClient()
    ssh.connect('<YOUR_SERVER_IP>', 22, 'root', '<YOUR_PASSWORD>')
    ...
    
  3. 配置 Nginx

    [] 修改 Nginx 配置,添加 lottery location
    [] nginx -t 测试配置
    [] systemctl reload nginx
    

抽奖应用功能说明

功能特点

  • 🎡 6 个奖区:一等奖、二等奖、三等奖、四等奖、两个"谢谢参与"
  • 🎯 概率控制:每个奖项可配置中奖概率
  • 🔄 平滑动画:使用贝塞尔曲线实现自然的减速效果
  • 🎨 精美设计:渐变色彩、阴影效果、脉冲动画
  • 📱 响应式:适配移动端显示
  • 🔢 次数限制:默认每天 3 次抽奖机会

自定义配置

修改奖品和概率(编辑 script.js):

const PRIZES = [
    { name: '一等奖', icon: '🏆', probability: 0.05, color: 0 },
    { name: '二等奖', icon: '🎁', probability: 0.10, color: 1 },
    { name: '三等奖', icon: '🎯', probability: 0.15, color: 2 },
    { name: '四等奖', icon: '⭐', probability: 0.20, color: 3 },
    { name: '谢谢参与', icon: '💫', probability: 0.25, color: 4 },
    { name: '谢谢参与', icon: '💫', probability: 0.25, color: 5 }
];

常见问题

Q1: 如何判断 AI Shell 完成了任务?

A: 检查 Plans 列表,所有任务显示 [✓] 或 Plans 显示 “No Plans”。

Q2: Permission Request 找不到按钮?

A: Permission Request 在终端中显示,需要用键盘操作(→ + Enter),不是点击按钮。

Q3: 部署失败怎么办?

A:

  1. 检查 SSH 凭据是否正确
  2. 确认服务器安全组开放了 22 端口
  3. 提供明确的文件路径和目标目录
  4. 让 AI Shell 自己处理,不要手动干预

Q4: 如何获取最终访问 URL?

A: 在完成文本中搜索 “http://” 或 “https://”,提取 URL。或者直接访问 https://服务器IP/lottery/

Q5: AI Shell 会使用什么方式部署?

A: AI Shell 会使用 Python paramiko 库通过 SSH 连接服务器,使用 SFTP 上传文件,执行 Shell 命令配置服务。


相关资源


案例总结

本案例完整展示了 AI Shell 的核心价值:

传统开发方式 AI Shell 方式
手动编写 HTML/CSS/JS 自然语言描述需求
手动配置服务器环境 AI 自动配置
手动上传文件、配置 Nginx AI 自动部署
需要 2-3 小时 只需 15-30 分钟

AI Shell 让开发者从"怎么做"中解放出来,专注于"做什么"。

关键要点

  • ✅ 让 AI Shell 自己完成所有工作(开发+部署)
  • ✅ 只需监控和处理 Permission Request
  • ✅ Plans 显示 “No Plans” 表示完成
  • ✅ 验证最终部署结果

本案例由实际操作生成,包含 120+ 张真实截图
最后更新:2026-06-30
AI Shell 完成部署:✅ 应用已成功部署并通过验证

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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