ChatGPT可以取代搜索引擎嗎?
ChatGPT對于一些簡單的問題,可以完美的完成任務。但是我讓它寫一篇完整的文章,看看它能否代替我進行寫作地的時候,我確定它不能完全取代人類。
但是我們可以使用更多的指導來讓AI在日常工作流程為我們工作,所以本文將討論如何有效利用ChatGPT。這個想法是從簡單的日常用例開始,然后進入更復雜的階段。最后讓我們看看ChatGPT能否替代搜索引擎,給我們提供日常需要的信息。
從Google遷移到ChatGPT
Google是用來顯示其他人類似的問題,而ChatGPT是來回答你確切的問題的。
像大多數人一樣,當我不知道的時候,我會谷歌。標準的工作流程是去谷歌,點擊最上面的結果,然后閱讀,直到感覺你已經得到了正確的答案。如果幸運的話,有人已經問過你同樣的問題了,那我們能夠直接得到答案。但更多的時候,我們需要看很多結果,并將答案拼接在一起。
讓我們問一個非常簡單的問題:
這些Google搜索結果主要回答了這個問題:“如何從DynamoDB表中刪除項?!苯酉聛?,我們需要將搜索重寫為“如何向DynamoDB表中添加項”。然后我們需要自己拼湊答案,得到最終結果。
那么讓ChatGPT呢
ChatGPT提供了Python和AWS CLI的描述和確切的代碼。這就是我們上面說的:Google盡其所能返回與我的問題相似的內容,而ChatGPT則盡其所能生成答案。
ChatGPT自動化了頂級結果并過濾出答案(當然是它認為的答案)。
對于這種簡單的問題
- 可以通過谷歌得到同樣的答案嗎? 是的。
- 可以通過ChatGPT更快地得到答案嗎? 沒問題。
- 人工智能能取代我的工作嗎? 無法取代
- 人工智能能提高我的速度嗎? 絕對可以
那么再復雜一點的問題呢
使用ChatGPT進行結對編程
我們要完整以下的任務
使用Databricks調查S3中的數據。Databricks非常依賴sql,這意味著要執行多個表連接、條件和復雜的分組。
ChatGPT是肯定可以回答一些簡單的問題,比如“如何在SQL中連接兩個表”。但是你可以用ChatGPT做更多的事情,就需要把上下文的信息給他。
回應如下:
ChatGPT可以根據提供的輸入形成響應。
可以看到,ChatGPT根據所提供的上下文定制其響應,這遠遠超過了Google所能做的。沒有任何搜索的結果會給出上面的代碼。所以就算我們有答案,也需要將多個不同的文章內容拼接在一起。
ChatGPT在制定響應時考慮整個對話的上下文,所以對于一個問題,越深入我們得到的答案越確切:
ChatGPT會記住前面的對話,就像結對編程一樣。提供新的輸入,可以回滾到以前的步驟,或者嘗試一個實驗性的路徑。但是ChatGPT也會犯錯誤,就像人類一樣,所以還是需要我們人工來進行最終的判斷和對ChatGPT進行提示。
如果需要使用ChatGPT構建一個復雜的解決方案。需要從簡單的開始,逐步增加復雜性。
我現在我們可以使用ChatGPT回答簡單的問題或構建小的代碼片段。還能更進一步嗎?
使用ChatGPT進行頭腦風暴
這里一個很好的例子是使用ChatGPT為項目提供額外的思路。
比如說:如何能夠將程序許可文件自動傳輸到遠程開發環境中
ChatGPT給了一個可靠的答案,說明了上傳和下載文件的過程,以及管理AWS Secrets管理器所需的AWS IAM策略等等。每個部分都包括示例代碼和解釋。
然后我問了ChatGPT一個更普遍的問題:
它還提出了另外八件需要考慮的事情:權限、成本、加密、密鑰輪換、區域、資源策略、密鑰版本控制和初始帳戶設置。每一篇文章都有一段對主題的總結。
這些問題有一些是我們可能沒想到的,所以我們可以使用ChatGPT作為頭腦風暴的伙伴嗎?
I am a software engineer at a software company with a public REST API. I want to start stress-testing it, and I am evaluating several frameworks. What are the important features I should be looking for?
I am a software company that runs a SaaS product. I need to add SSO to my product so each company can log in with its authentication platform. I’m trying to compare tools like Auth0 and WorkOS. What are some important features to consider?
I’m a software engineer at a company building an enterprise (self-hosted) application. In my case, the customers manage the entire product themselves without me. I am worried about the maintenance burden of supporting my app long term. What should I consider?
上面這幾個問題返回的答案非常有用,這是一個很好的例子,因為這些無法在谷歌上搜索到。
使用ChatGPT對的工作進行頭腦風暴是可行的,因為他的預料集我們可能一輩子都看不完
使用ChatGPT編寫復雜代碼
當涉及到編寫自定義代碼庫(私有)代碼時,ChatGPT絕對是錯誤的工具(所以我這里會用GitHub Copilot替代)。但是當涉及到編寫針對公共api的集成時,ChatGPT的表現非常出色。
如果仔細想想,這是有道理的。因為ChatGPT無法訪問你的自定義代碼庫,而Copilot會掃描本地的代碼。
我們問ChatGPT一個公共API的問題:
這里是它生成的代碼如下:
import requests
import os
GITHUB_TOKEN = 'YOUR_GITHUB_TOKEN'
ASANA_TOKEN = 'YOUR_ASANA_TOKEN'
ASANA_PROJECT_ID = 'YOUR_ASANA_PROJECT_ID'
GITHUB_REPOS = ["user/repo1", "user/repo2", ...] # List your repos here
HEADERS_GITHUB = {
'Authorization': f'token {GITHUB_TOKEN}',
'Accept': 'application/vnd.github.v3+json',
}
HEADERS_ASANA = {
'Authorization': f'Bearer {ASANA_TOKEN}',
'Accept': 'application/json',
'Content-Type': 'application/json',
}
def fetch_github_issues(repo):
url = f"https://api.github.com/repos/{repo}/issues"
response = requests.get(url, headers=HEADERS_GITHUB)
return response.json()
def find_or_create_asana_section(project_id, name):
# Check if section exists
sections_url = f"https://app.asana.com/api/1.0/projects/{project_id}/sections"
response = requests.get(sections_url, headers=HEADERS_ASANA)
for section in response.json().get("data", []):
if section["name"] == name:
return section["gid"]
# Create new section
data = {
"data": {
"name": name,
}
}
response = requests.post(sections_url, headers=HEADERS_ASANA, jsnotallow=data)
return response.json()["data"]["gid"]
def create_asana_task(project_id, section_gid, issue):
url = f"https://app.asana.com/api/1.0/tasks"
data = {
"data": {
"projects": [project_id],
"memberships": [
{
"project": project_id,
"section": section_gid,
}
],
"name": issue["title"],
"notes": issue["body"],
}
}
requests.post(url, headers=HEADERS_ASANA, jsnotallow=data)
def main():
for repo in GITHUB_REPOS:
issues = fetch_github_issues(repo)
section_name = repo.split("/")[-1] # Assuming you want the repo name as the section name
section_gid = find_or_create_asana_section(ASANA_PROJECT_ID, section_name)
for issue in issues:
create_asana_task(ASANA_PROJECT_ID, section_gid, issue)
if __name__ == "__main__":
main()
看著非常不錯,下面我們提高難度讓ChatGPT構建一個具有以下限制的小軟件程序:
我不輸入任何代碼。只能執行ChatGPT生成的。然后錯誤也會讓ChatGPT自己更正。
一開始,ChatGPT做得很好。它很容易編寫一個RESTful客戶端。我告訴ChatGPT需要更多的調試語句,它在整個代碼中添加了打印語句。在其他庫中封裝函數調用也很漂亮。
但是我想到,如果下載和重新上傳大文件,時間會很長,所以我問ChatGPT是否可以在命令行上用進度條可視化包裝它們。它是這樣做的:
略顯臃腫,但是可以用。
對于要求ChatGPT重構代碼并添加抽象,得到的答案都出現了拼寫錯誤和邏輯錯誤。所以需要花費很多的時間與ChatGPT進行溝通修改(前面說了,為了測試,所有代碼都讓ChatGPT寫)
對于這個問題,盲猜原因是ChatGPT的每個問題只得到有限的計算時間。情況越復雜,ChatGPT不能完全完善它的響應,只是拋出了一個未經修飾的結果,還有可能是因為token大小的限制。
ChatGPT擅長編寫單個函數,但在處理抽象或多個方法時很快就會崩潰。
但是對于ChatGPT,一個非常好的表現是他可以幫我們轉換代碼,比如:
將Python代碼翻譯成Typescript。將linux的shell腳本變為windows的cmd腳本
總結
ChatGPT可以用來增強你的能力,而不是取代你的工作
將ChatGPT融入到日常工作中,這是一個很酷的噱頭,也許它適用于其他人的工作流程,但不適用于我的。因為有一些工作要么太復雜,要么太專業,外部AI工具無法發揮作用。
最后還有一個問題,ChatGPT數據的更新時間是2022年,所以最近數據它是沒有的,這對于經常需要最新數據的行業來說基本就沒什么幫助了。
所以回到我們的標題:進行頭腦風暴,并作為簡單代碼的結對程序員是一個非常好應用場景,可以提高我們的效率,但是它并不能代替谷歌,除了時間以外,對于一些信息我們更看重的是準確性。