開發(fā)者直接復(fù)制ChatGPT生成的代碼,導(dǎo)致公司損失10000美元
共 3278字,需瀏覽 7分鐘
·
2024-07-14 19:43
??我的小冊 45章教程:(小白零基礎(chǔ)用Python量化股票分析小冊) ,原價(jià)299,限時(shí)特價(jià)2杯咖啡,滿100人漲10元。
一家名為 Reworkd 的初創(chuàng)公司在嘗試商業(yè)化過程中,通過使用 ChatGPT 生成的代碼進(jìn)行項(xiàng)目遷移,導(dǎo)致服務(wù)因?yàn)榇a錯(cuò)誤無法正常訂閱,造成超過 1 萬美元的損失和 5 天服務(wù)停機(jī)。。。
根據(jù)描述,Reworkd 公司專注于開發(fā)完成自動(dòng)化任務(wù)的 AI Agent 平臺(tái),旨在解決需要大量人力介入的業(yè)務(wù)流程的低效問題。
通過使用 AI Agent,Reworkd 幫助企業(yè)簡化操作并減少手工工作量。這家公司得到 Y Combinator(為初創(chuàng)公司提供早期風(fēng)險(xiǎn)投資、創(chuàng)業(yè)指導(dǎo)等)的支持。
當(dāng)時(shí)這家公司開始了商業(yè)化嘗試,初步計(jì)劃是 “讓用戶付費(fèi)訂閱自家的服務(wù)”。經(jīng)過團(tuán)隊(duì)商議,他們將訂閱服務(wù)的價(jià)格定在了每位用戶每月 40 美元。
規(guī)劃好了商業(yè)化的方向與定價(jià)之后,團(tuán)隊(duì)開始著手 “更改業(yè)務(wù)代碼”,集成 “支付系統(tǒng)” 等等。
該項(xiàng)目原本采用的是全棧 NextJS 技術(shù),要實(shí)現(xiàn)商業(yè)化,業(yè)務(wù)代碼也需要進(jìn)行改變,因此團(tuán)隊(duì)需要在有限的時(shí)間里計(jì)劃將項(xiàng)目從 Next.js 遷移到 Python/FastAPI。
由于遷移工作涉及到編寫許多繁瑣的代碼,于是團(tuán)隊(duì)成員想到了交給 ChatGPT 完成。
具體情況如下:
作為我們的后臺(tái)遷移的一部分,我們正在將數(shù)據(jù)庫模型從 Prisma/Typescript 轉(zhuǎn)換為 Python/SQLAlchemy。這真的很乏味且繁瑣。
我們發(fā)現(xiàn) ChatGPT 在這個(gè)轉(zhuǎn)換過程中做得相當(dāng)出色,所以我們幾乎在整個(gè)遷移過程中都使用了它。
我們復(fù)制了它生成的代碼,看到一切都運(yùn)行正常,將其用于生產(chǎn)環(huán)境,發(fā)現(xiàn)它也正常運(yùn)行,然后繼續(xù)我們忙碌的生活。但此時(shí),我們?nèi)匀皇褂梦覀兊?Next API 來進(jìn)行所有的數(shù)據(jù)庫插入。
Python 只是從數(shù)據(jù)庫中讀取。在我們實(shí)際上開始在 Python 中插入數(shù)據(jù)庫記錄的第一次是當(dāng)我們實(shí)現(xiàn)訂閱時(shí)。盡管在此過程中我們手動(dòng)創(chuàng)建了全新的 SQLAlchemy 模型,但我們最終還是復(fù)制了 ChatGPT 為我們現(xiàn)有模型所寫的相同格式。
我們忽略的是,我們將生成 ID 的方式的問題也復(fù)制到了所有模型中。
出現(xiàn) Bug 的代碼位于第 56 行,我們只是傳入了一個(gè)硬編碼的 ID 字符串,而不是用于生成記錄 UUID 的函數(shù)或 lambda 表達(dá)式。
這意味著對(duì)于我們的后臺(tái)的任何一個(gè)實(shí)例,一旦一個(gè)新用戶訂閱并使用了這個(gè) ID,其他用戶就無法再執(zhí)行訂閱流程,因?yàn)闀?huì)導(dǎo)致唯一 ID 沖突。
由于我們的后臺(tái)設(shè)置,這個(gè)問題被很好地隱藏了起來。
我們在 AWS 上有 8 個(gè) ECS 任務(wù),每個(gè)任務(wù)運(yùn)行我們的后臺(tái)的 5 個(gè)實(shí)例(過度,是的我們知道,但公平地說我們有 AWS 額度)。
這意味著任何一個(gè)單獨(dú)的用戶可能遇到 40 個(gè)潛在的唯一 ID。
白天,這沒問題。我們可能每天提交 10-20 次(當(dāng)然直接提交到主分支),這將導(dǎo)致新的后臺(tái)部署發(fā)生,給客戶提供了 40 個(gè)全新的 ID 供他們使用。
但到了晚上,當(dāng)我們終于停止提交(我們是不是有點(diǎn)懶呢?)時(shí),每臺(tái)服務(wù)器中的單個(gè) ID 都將被占用,導(dǎo)致所有新的訂閱都產(chǎn)生 ID 沖突。
用戶一開始有 40 個(gè)可能的服務(wù)器可以讓他們訂閱,隨著夜晚的來臨,迅速減少到幾乎零。
最終解決這個(gè)問題就像從我們的肩膀上卸下一塊重?fù)?dān)。
省流總結(jié)如下:
- 公司在推出付費(fèi)訂閱功能后的一個(gè)小時(shí)內(nèi)獲得了第一個(gè)付費(fèi)用戶。
- 第二天早上,收到了超過 40 封用戶投訴的郵件,原因不明。
- 在五天時(shí)間里,持續(xù)收到投訴郵件,但工作時(shí)間幾乎沒有投訴。
- 問題源于一個(gè)代碼行,導(dǎo)致唯一 ID 沖突,使其他用戶無法訂閱。
- 問題五天后解決,銷售額損失約 10,000 美元。(50 emails/day x 5 days x 40?=10,000 美金)
- 盡管經(jīng)歷了痛苦的五天,公司對(duì)此并不后悔,反而將其視為創(chuàng)業(yè)過程中難忘的一刻。
在這個(gè)案例中,他們在數(shù)據(jù)庫寫入時(shí)設(shè)置了用戶 ID 為一個(gè)固定值,導(dǎo)致每次寫入都發(fā)生沖突,最終導(dǎo)致用戶無法完成注冊和付款流程。
這個(gè)錯(cuò)誤的根本原因是他們在編寫 ORM 代碼時(shí)將用戶 ID 設(shè)置為常量值,而不是唯一的標(biāo)識(shí)符。
Reference
最后推薦一下我們團(tuán)隊(duì)寫的量化小冊的內(nèi)容,45篇內(nèi)容!從Python安裝,入門,數(shù)據(jù)分析,爬取股票基金的歷史+實(shí)時(shí)數(shù)據(jù),以及如何寫一個(gè)簡單量化策略,策略回測,如何看資金曲線統(tǒng)統(tǒng)都有介紹!非常超值!
歡迎訂閱:原價(jià)299 早鳥價(jià)2杯咖啡錢,即可永久閱讀。滿400人又要漲價(jià)了,現(xiàn)在的價(jià)格非常非常低,只要2杯奶茶,就可以終身訂閱+課程源碼,還有永久陪伴群。48小時(shí)無理由退款,放心食用!
往期推薦
量化: 如何用Python爬取創(chuàng)業(yè)板歷史+實(shí)時(shí)股票數(shù)據(jù)!|實(shí)戰(zhàn)股票分析篇利用Pandas 9招挖掘五糧液股價(jià)!|實(shí)戰(zhàn)股票數(shù)據(jù)分析篇 Pandas滾動(dòng)操作 |量化股票第一步,用Python畫股票K線,雙均線圖,可視化你的股票數(shù)據(jù)!|如何用Python爬取全部800多只ETF基金數(shù)據(jù)!|如何用Python寫一個(gè)雙均線策略 |如何用Python開發(fā)一個(gè)多策略機(jī)器人!上篇!|Python量化系列-用布林策略買五糧液能賺多少錢?|只要4秒鐘!用Python 獲取上證指數(shù)34年的歷史日線數(shù)據(jù)!
入門: 最全的零基礎(chǔ)學(xué)Python的問題 | 零基礎(chǔ)學(xué)了8個(gè)月的Python | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑
干貨:爬取豆瓣短評(píng),電影《后來的我們》 | 38年NBA最佳球員分析 | 從萬眾期待到口碑撲街!唐探3令人失望 | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
趣味:彈球游戲 | 九宮格 | 漂亮的花 | 兩百行Python《天天酷跑》游戲!
AI: 會(huì)做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水印! | 一鍵把html網(wǎng)頁保存為pdf!| 再見PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r(jià)機(jī)票提示器! |60行代碼做了一個(gè)語音壁紙切換器天天看小姐
