用 AI Shell 开发并部署抽奖大转盘应用
鏈渚嬪畬鏁磋褰曚簡浣跨敤鍗庝负浜?AI Shell锛岄€氳繃鑷劧璇█鎻忚堪闇€姹傦紝璁?AI 鑷姩瀹屾垚浠g爜寮€鍙戙€佹煡璇簯璧勬簮銆侀儴缃插簲鐢ㄧ殑鍏ㄦ祦绋嬨€?
妗堜緥鑳屾櫙
AI Shell 鏄崕涓轰簯寮€鍙戣€呯┖闂存彁渚涚殑 AI 杈呭姪寮€鍙戝伐鍏凤紝瀹冩槸涓€涓畬鏁寸殑 AI Agent锛屽叿澶囦互涓嬭兘鍔涳細
- 馃 鑷劧璇█鐞嗚В锛氱敤涓枃鎻忚堪闇€姹傦紝AI 鑷姩鐢熸垚浠g爜
- 馃攳 **浜戣祫婧愭煡璇?*锛氬彲鏌ヨ鍗庝负浜?ECS銆丗lexus 绛夎祫婧愪俊鎭?
- 馃殌 鑷姩閮ㄧ讲锛氬彲鐩存帴閮ㄧ讲搴旂敤鍒版寚瀹氱殑浜戞湇鍔″櫒
- 馃捇 缁堢鎿嶄綔锛氬彲鎵ц Shell 鍛戒护銆佸畨瑁呬緷璧栥€佸惎鍔ㄦ湇鍔?
鏍稿績浼樺娍锛氬紑鍙戣€呭彧闇€鎻忚堪"鍋氫粈涔?锛孉I Shell 鑷姩瀹屾垚"鎬庝箞鍋?銆?
瀹屾暣鎿嶄綔娴佺▼
姝ラ 1锛氳繘鍏?AI Shell
-
璁块棶鍗庝负浜戝紑鍙戣€呯┖闂?AI Shell 鍏ュ彛锛?
https://devstation.connect.huaweicloud.com/aishell -
浣跨敤鍗庝负浜戣处鍙风櫥褰?
瀹為檯鎿嶄綔鎴浘锛?
[鎴浘: 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 浼氾細
- **瑙f瀽闇€姹?*锛氱悊瑙d綘鐨勮嚜鐒惰瑷€鎻忚堪
- 鍒跺畾璁″垝锛氱敓鎴愭墽琛岃鍒掞紙Plans 鍒楄〃锛?
- 閫愭鎵ц锛氫緷娆″畬鎴愭瘡涓换鍔?
- 瀹炴椂鍙嶉锛氬湪缁堢鏄剧ず鎵ц杩囩▼
姝ラ 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
鎿嶄綔鏂瑰紡锛?
- 鎸夊彸绠ご閿紙鈫掞級閫夋嫨 “Allow always”
- 鎸夊洖杞﹂敭锛圗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 浼氳嚜鍔細
- 鏌ヨ鏈嶅姟鍣ㄤ俊鎭?
- 閫氳繃 SSH 杩炴帴鏈嶅姟鍣紙浣跨敤 paramiko锛?
- 涓婁紶鏂囦欢鍒版湇鍔″櫒
- 閰嶇疆 Nginx
- 閲嶅惎 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
鍏抽敭鎵ц姝ラ
-
鍒涘缓鏂囦欢锛?
[鉁揮 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=...) -
SSH 杩炴帴锛?
[鉁揮 bash_exec (command=python3 << 'EOF' import paramiko ssh = paramiko.SSHClient() ssh.connect('<YOUR_SERVER_IP>', 22, 'root', '<YOUR_PASSWORD>') ... -
閰嶇疆 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:
- 妫€鏌?SSH 鍑嵁鏄惁姝g‘
- 纭鏈嶅姟鍣ㄥ畨鍏ㄧ粍寮€鏀句簡 22 绔彛
- 鎻愪緵鏄庣‘鐨勬枃浠惰矾寰勫拰鐩爣鐩綍
- 璁?AI Shell 鑷繁澶勭悊锛屼笉瑕佹墜鍔ㄥ共棰?
Q4: 濡備綍鑾峰彇鏈€缁堣闂?URL锛?
A: 鍦ㄥ畬鎴愭枃鏈腑鎼滅储 “http://” 鎴?"https://"锛屾彁鍙?URL銆傛垨鑰呯洿鎺ヨ闂?https://鏈嶅姟鍣↖P/lottery/銆?
Q5: AI Shell 浼氫娇鐢ㄤ粈涔堟柟寮忛儴缃诧紵
A: AI Shell 浼氫娇鐢?Python paramiko 搴撻€氳繃 SSH 杩炴帴鏈嶅姟鍣紝浣跨敤 SFTP 涓婁紶鏂囦欢锛屾墽琛?Shell 鍛戒护閰嶇疆鏈嶅姟銆?
鐩稿叧璧勬簮
- AI Shell 瀹樻柟鏂囨。
- [鍗庝负浜戝紑鍙戣€呯┖闂碷(https://devstation.connect.huaweicloud.com/)
- AI Shell 浣跨敤 Skill
妗堜緥鎬荤粨
鏈渚嬪畬鏁村睍绀轰簡 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
-
访问华为云开发者空间 AI Shell 入口:
https://devstation.connect.huaweicloud.com/aishell -
使用华为云账号登录
实际操作截图:
[截图: 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. 创建 HTML、CSS、JavaScript 文件
2. 包含 6 个奖区:一等奖、二等奖、三等奖、四等奖、两个"谢谢参与"
3. 每个奖项有可配置的中奖概率
4. 转盘有平滑的旋转动画和减速效果
5. 界面美观,支持响应式布局
6. 每天限制 3 次抽奖机会
实际操作截图:
[截图: 输入开发指令]
按 Enter 发送指令后,AI Shell 会:
- 解析需求:理解你的自然语言描述
- 制定计划:生成执行计划(Plans 列表)
- 逐步执行:依次完成每个任务
- 实时反馈:在终端显示执行过程
步骤 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
操作方式:
- 按右箭头键(→)选择 “Allow always”
- 按回车键(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 会自动:
- 查询服务器信息
- 通过 SSH 连接服务器(使用 paramiko)
- 上传文件到服务器
- 配置 Nginx
- 重启 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
关键执行步骤
-
创建文件:
[✓] 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=...) -
SSH 连接:
[✓] bash_exec (command=python3 << 'EOF' import paramiko ssh = paramiko.SSHClient() ssh.connect('<YOUR_SERVER_IP>', 22, 'root', '<YOUR_PASSWORD>') ... -
配置 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:
- 检查 SSH 凭据是否正确
- 确认服务器安全组开放了 22 端口
- 提供明确的文件路径和目标目录
- 让 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 使用 Skill
案例总结
本案例完整展示了 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 完成部署:✅ 应用已成功部署并通过验证
- 点赞
- 收藏
- 关注作者
评论(0)