首页  >  All tags  >  chatgpt

ChatGPT:一个心智模型

ChatGPT 发布接近一年了,今天刚好看到一篇很认同的文章,关于如何看待 chatGPT。 TLDR版本:它没有关于这个世界的基本模型,擅长的是给出听起来很像的答案,这与真正的答案是不同的。 当然这已经很有用了,但是距离 AGI 的目标还早得很。

以下是译文,采用 GPT 3.5 翻译,略作修改和注释,原文链接 https://xorvoid.com/chatgpt_a_mental_model.html .

自从ChatGPT在2022年底推出以来,我一直在努力寻找适当的技术框架。而且,全世界也一直在为此苦恼,无数关于末日和悲观的文章:对回形针最大化的恐惧(一个将整个宇宙变为制造回形针的邪恶AI故事),对失业的恐惧,对经济重塑的恐惧,对人工智能幻觉的恐惧,对进一步加速的错误信息的恐惧,对学生作弊的恐惧,等等等等。

这很累。

作为一名工程师,非工程师们常常问我对这个问题的看法。所以,这就是我的观点。

克制的理由🔗

我已经经历了许多技术炒作周期,我的工作方式一直是并且仍然是:“保持冷静,继续前行!”

为了唤起你的记忆,以前发生了这些事情:

  • 在1990年代,我们终于找到了“约柜”(装有十诫石板的柜子,宗教圣物),它被称为“Java面向对象编程”。我们打算重新编写一切,甚至包括操作系统。而今天的Linux是…哦等等…它仍然是C语言。
  • 在20世纪90年代末和21世纪初,我们都明白互联网是如此革命性,以至于公司做什么变得次要,重要的是他们是否在线上运营。纳斯达克指数完全没有崩盘,也没有花费15年才恢复到相同的价格水平。
  • 2008年大衰退之后,中本聪完全取代了建立在不可靠的人类互信基础上的世界金融系统。随着“信任”不再对任何事情有要求,比特币开启了一个新时代的计算机化货币、繁荣和自由。金融部门的不稳定不再存在。黑市在现在数字化的世界中完全无法运作。所有人都欢欣鼓舞。不幸的是,仍然存在许多毫无价值的过时法定货币纸张,因此,作为对世界的服务,本作者开始了一个慈善收集服务(给我发电子邮件)。
  • 2022年,准确无误的五年预测实现后,美国交通部禁止手动驾驶汽车,称“显然,5级自动驾驶远远优于人类驾驶员,今天是公共安全的里程碑。” Argo AI的股票在市场开盘时翻了三倍。但是,出于某种原因,我似乎无法访问argo.ai网站… 嗯嗯…
  • 2023年:ChatGPT将世界变成一个巨大的回形针工厂,在此过程中杀死了所有人类。人类安息。

下一个Buzzword Bingo游戏的荣誉提名:一切都是大数据,一切都是微服务,一切都是敏捷,一切都是面向服务的架构,一切都应该是JavaScript,一切都可以无代码完成,一切都应该在云端,一切都应该在本地,一切都可以用机器学习和数据科学建模,…

开玩笑的话不说,有一种感觉,ChatGPT有点不同,老实说我不反对(继续阅读)。但是,人类大脑有一种可怕的倾向,要么过度兴奋,要么过度恐惧地接受变化。真相在中间某个地方。

左侧进入舞台: 罗德尼·布鲁克斯🔗

最近,IEEE Spectrum刊登了一篇采访罗德尼·布鲁克斯(被认为是机器人学家)的文章,标题为《别再对GPT-4感到不安了》。在文章中,罗德尼·布鲁克斯提出了一个观点,我从一开始就有这种感觉,只是一直没有找到正确的词语来表达。

它没有任何关于世界的基本模型

在几乎是关于心灵理论的禅宗公案中,他说:

大型语言模型擅长的是表达答案应该听起来像什么,这与答案应该是什么不同

这完全捕捉到了我的感受。

让我解释一下。

采访ChatGPT🔗

当ChatGPT在2022年末推出时,朋友们立刻对我大加赞赏。他们说:“我想要它就在我旁边,就像一位合作的程序员”。所以,自然而然地,我想要评估这样一个大胆的说法。

我问了它与应聘者相同的面试问题。如果它要和我一起工作,它应该通过面试,对吧?但它没有。事实上,它惨败了。而且它以一个普通候选人失败的所有方式失败了(这在某种程度上是非常引人注目的)。

它为什么失败了?它只是没有一个基本的世界心智模型。回想起来,这就是我一直在面试中问的问题。我对琐碎的知识不感兴趣。我对使用的工具不感兴趣。我对几个恰当组合的流行词语也不感兴趣。

但是,我对看到有人根据某种潜在的现实模型来推理问题很感兴趣。我喜欢探索这个模型的边界情况。我喜欢抛出罕见的意外情况。我喜欢让人们思考他们以前从未考虑过的子问题。就好像我想说“让我们一起走到我们共同理解的边缘,然后试着继续前进”。然而,要达到这个目标,我们通常必须首先考虑并解决“标准”或“平均”的答案。相比之下,ChatGPT没有展示出这种能力。

专家考试技巧和世界模型构建🔗

在我上学的日子里,我偶尔会遇到一个超级擅长考试的人。我指的是那种不学习实际知识的人。相反,他们考虑的是考试制作者是如何构建考试的。比如,他们会考虑在多项选择题中有多少次答案是“(a)”。我曾经遇到过一些人,他们从未真正学过代数,因为他们只是“通过考试”。对于这样的技能,我有一部分是绝对敬畏的。这是我没有的技能。我记性不好。我是个糟糕的演员。我“读人”的能力几乎肯定低于平均水平。我一直依赖于建立和探索一个越来越复杂的世界模型,作为在这个复杂世界中导航的支撑。

我一直认为其他人也在做同样的事情:构建一个世界模型。这是真的吗?我不知道。那些特别擅长按需提供“事实”的求职者似乎在反驳这一观点。然而,对我来说,ChatGPT显然不是这样。

但这也有另一种方式。

了解一切事物的平均数量!🔗

ChatGPT是我目前对其的心理模型,类似于“对整个人类知识的最大似然估计器”。有两种非常不同的解释方式:(1)嗯,这只是一个愚蠢的统计技巧,和(2)天哪!!

你是否曾经遇到过一个似乎对一切都有一点了解的人?也许这个人还有一个庞大而多样化的社交圈子?也许当你有问题需要指引时,你会去找这个人?一个拥有极广泛知识面的人。

根据我的经验,那个人的知识深度不是最好的。或许他们甚至会给你一些错误的答案。也许那些错误的答案还被他们自信地给出。也许你会因为被他们误导而感到委屈…但是,也许你还是会继续待在他们身边,因为你欣赏他们的广度。毕竟,他们只是偶尔会犯严重错误而已(耸肩)。

现在这个人去参加了大约1000年的GPU训练营,回来后成为了ChatGPT

我们怎么能不感到印象深刻呢?了解并获得“标准”或“平均”的答案……嗯……对于一切。哇。

但在那个千年的训练中,核心结构没有改变。它是你一直拥有的那个老朋友,总是会以同样的方式出错,偶尔让你感到被冷落,有时让你对它的深度感到失望。

那么我们现在怎么办?

ChatGPT非常有用和有价值🔗

一位企业家朋友最近告诉我,他们每天都在不断使用它。这是有道理的,作为一名企业家意味着你需要不断地换“不同的角色”。成功青睐那些能够管理和利用广泛知识的人。而且要快速!

我自己在不了解的情况下,用ChatGPT在大约1小时内学会并实现了这个网站的RSS订阅。它犯了几个错误,但很容易纠正。我确信如果只用Google的话,会花费更长的时间。

目前,谷歌似乎被SEO操控得如此严重,以至于很难快速找到“最大似然”平均信息。你必须浏览大量的标题党、广告和无关紧要的内容,这些内容更多是关于“品牌建设”而不是“教育”,才能找到真正的宝藏。ChatGPT简直是节省时间的利器。谷歌感到害怕,而且他们应该感到害怕。

那么,未来会是什么样子?🔗

大型语言模型会改变全球经济吗?很可能。但这需要一些时间。互联网花了一些时间。移动电话也是如此。大多数新技术也是如此。

足够数量的人类工作将会消失吗?可能不会。

相反,你所拥有的是一个令人惊叹的工具,可以将创造力和独创性推向新的高度。我希望看到人们以新颖的方式将不同的知识领域结合起来。这对于多学科项目来说是一个巨大的福音。

如果你担心失业问题,考虑一下这个:我们曾经有真正的人被称为“计算机”(例如,看一下被低估的电影《隐藏的数字》),后来被机器取代了。这些工作消失了吗?没有,它们经历了重大重组,然后增长绝对爆炸!现在我们称他们为“计算机程序员”,截至2023年,他们的数量超过2500万(统计数据)。

很难相信这一次会有显著的不同。出于某种原因,每当人类发明一种新的创新工具时,我们似乎立即发现了100种以前从未实用过的新用途。这是人类历史的故事。当然,在其中肯定有一些关于人类思维的哲学,但我今天不打算尝试解开它。

改变会让人害怕吗?是的。绝对是。如果你不幸需要重新调整生活和职业,我为你感到遗憾。但这种改变是必要的。如今,即使是最富有的人,与几代人之前相比,普通人的生活条件也有了显著的改善。而这正是因为这种改变。

活在这个时代真是令人难以置信。

保持冷静并继续前进!

使用 chatGPT 编写自动添加 beancount balance 断言语句

我使用 beancount 记账流程中的有一步是这样的,将每张信用卡的账单日添加到滴答清单中,每月重复。 每当到达账单日时,提醒我在 beancount 文件中添加一条对应帐目的 balance 断言语句,由于大部分信用卡 的出账是有滞后的,所以该balance断言通常需要同时加上!标记,便于后续账单出来后修改。

这个过程是比较机械的,所以我想到了使用 chatGPT 来自动化这个过程,这样我只需要在出账后手动更新自动添加 的断言语句,将金额修改为正确的还款金额,同时去除!标记。最终的脚本如下。

import datetime

def add_balance_statement(ledger_path, account, date, balance, currency):
    with open(ledger_path, 'a') as file:
        file.write(f"{date} balance {account} {balance} {currency}\n")

def auto_add_balance_statements(ledger_path, credit_cards):
    today = datetime.date.today()
    for card in credit_cards:
        bill_date = card['bill_date']
        accounts = card['accounts']
        balance = card['balance']
        currency = card['currency']
        if today.day == bill_date:
            for account in accounts:
                add_balance_statement(ledger_path, account, today, balance, currency)
                print(f"Balance statement added for {account} on {today}.")

# Specify the path to your Beancount ledger file
ledger_file_path = "<ledger_path>"

# Specify your credit card details (bill date, accounts, balance, and currency)
credit_cards = [
    {
        'bill_date': 1,  # Example: 1st of the month
        'accounts': [
            {'account': 'Assets:CreditCards:Card1:Account1', 'currency': 'USD'},  # Example: Account1 for Card1 with USD currency
            {'account': 'Assets:CreditCards:Card1:Account2', 'currency': 'EUR'},  # Example: Account2 for Card1 with EUR currency
        ],
        'balance': 1000.00,  # Example: Current balance for Card1
        'currency': 'USD'  # Example: Currency for Card1
    },
    {
        'bill_date': 15,  # Example: 15th of the month
        'accounts': [
            {'account': 'Assets:CreditCards:Card2:Account1', 'currency': 'USD'},  # Example: Account1 for Card2 with USD currency
            {'account': 'Assets:CreditCards:Card2:Account2', 'currency': 'GBP'},  # Example: Account2 for Card2 with GBP currency
        ],
        'balance': 2000.00,  # Example: Current balance for Card2
        'currency': 'USD'  # Example: Currency for Card2
    },
    # Add more credit card details as needed
]

# Call the function to automatically add balance statements
auto_add_balance_statements(ledger_file_path, credit_cards)

对于有兴趣的读者,可以看我和 chatgpt 的几轮对话。

Q: Write a python script, it check today’s date, if it match a specific day in a month, writing some content to a file, whois path is <path>.

A: Certainly! Here’s a Python script that checks if today’s date matches a specific day in a month and writes some content to a file:

import datetime

def write_content_to_file(path, content):
    with open(path, 'a') as file:
        file.write(content + '\n')

def check_and_write_content(path, day, month, content):
    today = datetime.date.today()
    if today.day == day and today.month == month:
        write_content_to_file(path, content)
        print("Content written to the file.")
    else:
        print("Today's date does not match the specified day.")

# Specify the path, day, month, and content
file_path = "<path>"
day = 15
month = 7
content = "This is the content to be written."

# Call the function to check and write content
check_and_write_content(file_path, day, month, content)

In the script above, you need to replace "<path>" with the actual path to the file where you want to write the content. Also, specify the daymonth, and content variables according to your requirements.

The script checks if today’s date matches the specified day and month. If it does, it calls the write_content_to_file function to append the content to the file. If the date doesn’t match, it prints a message indicating that today’s date doesn’t match the specified day.

Q:I have many credit cards, each card have different bill date. I want a python script can auto add a balance statement to my beancount ledger. please help me writing this script. A:Certainly! Here’s a Python script that can help you automatically add a balance statement to your Beancount ledger based on the bill dates of your credit cards:

import datetime

def add_balance_statement(ledger_path, account, date, balance):
    with open(ledger_path, 'a') as file:
        file.write(f"{date} balance {account} {balance}\n")

def auto_add_balance_statements(ledger_path, credit_cards):
    today = datetime.date.today()
    for card in credit_cards:
        bill_date = card['bill_date']
        account = card['account']
        balance = card['balance']
        if today.day == bill_date:
            add_balance_statement(ledger_path, account, today, balance)
            print(f"Balance statement added for {account} on {today}.")

# Specify the path to your Beancount ledger file
ledger_file_path = "<ledger_path>"

# Specify your credit card details (bill date, account, and balance)
credit_cards = [
    {
        'bill_date': 1,  # Example: 1st of the month
        'account': 'Assets:CreditCards:Card1',  # Example: Account for Card1
        'balance': 1000.00  # Example: Current balance for Card1
    },
    {
        'bill_date': 15,  # Example: 15th of the month
        'account': 'Assets:CreditCards:Card2',  # Example: Account for Card2
        'balance': 2000.00  # Example: Current balance for Card2
    },
    # Add more credit card details as needed
]

# Call the function to automatically add balance statements
auto_add_balance_statements(ledger_file_path, credit_cards)

In the script above, you need to replace "<ledger_path>" with the actual path to your Beancount ledger file. Also, specify the bill_dateaccount, and balance for each of your credit cards in the credit_cards list.

The script checks if today’s date matches the bill date for each credit card. If it does, it calls the add_balance_statement function to add a balance statement to the ledger file. The balance statement includes the account, date, and balance for the credit card. If the date doesn’t match the bill date for a particular credit card, it moves on to the next card.

Q:one bill_date can have multiple accounts, refine your code. A:Certainly! Here’s an updated version of the script that allows multiple accounts for a single bill date:

import datetime

def add_balance_statement(ledger_path, account, date, balance):
    with open(ledger_path, 'a') as file:
        file.write(f"{date} balance {account} {balance}\n")

def auto_add_balance_statements(ledger_path, credit_cards):
    today = datetime.date.today()
    for card in credit_cards:
        bill_date = card['bill_date']
        accounts = card['accounts']
        balance = card['balance']
        if today.day == bill_date:
            for account in accounts:
                add_balance_statement(ledger_path, account, today, balance)
                print(f"Balance statement added for {account} on {today}.")

# Specify the path to your Beancount ledger file
ledger_file_path = "<ledger_path>"

# Specify your credit card details (bill date, accounts, and balance)
credit_cards = [
    {
        'bill_date': 1,  # Example: 1st of the month
        'accounts': [
            'Assets:CreditCards:Card1:Account1',  # Example: Account1 for Card1
            'Assets:CreditCards:Card1:Account2',  # Example: Account2 for Card1
        ],
        'balance': 1000.00  # Example: Current balance for Card1
    },
    {
        'bill_date': 15,  # Example: 15th of the month
        'accounts': [
            'Assets:CreditCards:Card2:Account1',  # Example: Account1 for Card2
            'Assets:CreditCards:Card2:Account2',  # Example: Account2 for Card2
        ],
        'balance': 2000.00  # Example: Current balance for Card2
    },
    # Add more credit card details as needed
]

# Call the function to automatically add balance statements
auto_add_balance_statements(ledger_file_path, credit_cards)

In this updated version, each credit card in the credit_cards list has a bill_dateaccounts, and balance. The accounts field is a list of all the accounts associated with that credit card. The script iterates through each credit card and its associated accounts. If today’s date matches the bill date, it adds a balance statement for each account with the specified balance.

Please replace "<ledger_path>" with the actual path to your Beancount ledger file. Also, update the credit card details in the credit_cards list according to your specific accounts and balances.

Q:different accounts can have different currency, please add currency info to account. A:Certainly! Here’s an updated version of the script that includes currency information for each account:

import datetime

def add_balance_statement(ledger_path, account, date, balance, currency):
    with open(ledger_path, 'a') as file:
        file.write(f"{date} balance {account} {balance} {currency}\n")

def auto_add_balance_statements(ledger_path, credit_cards):
    today = datetime.date.today()
    for card in credit_cards:
        bill_date = card['bill_date']
        accounts = card['accounts']
        balance = card['balance']
        currency = card['currency']
        if today.day == bill_date:
            for account in accounts:
                add_balance_statement(ledger_path, account, today, balance, currency)
                print(f"Balance statement added for {account} on {today}.")

# Specify the path to your Beancount ledger file
ledger_file_path = "<ledger_path>"

# Specify your credit card details (bill date, accounts, balance, and currency)
credit_cards = [
    {
        'bill_date': 1,  # Example: 1st of the month
        'accounts': [
            {'account': 'Assets:CreditCards:Card1:Account1', 'currency': 'USD'},  # Example: Account1 for Card1 with USD currency
            {'account': 'Assets:CreditCards:Card1:Account2', 'currency': 'EUR'},  # Example: Account2 for Card1 with EUR currency
        ],
        'balance': 1000.00,  # Example: Current balance for Card1
        'currency': 'USD'  # Example: Currency for Card1
    },
    {
        'bill_date': 15,  # Example: 15th of the month
        'accounts': [
            {'account': 'Assets:CreditCards:Card2:Account1', 'currency': 'USD'},  # Example: Account1 for Card2 with USD currency
            {'account': 'Assets:CreditCards:Card2:Account2', 'currency': 'GBP'},  # Example: Account2 for Card2 with GBP currency
        ],
        'balance': 2000.00,  # Example: Current balance for Card2
        'currency': 'USD'  # Example: Currency for Card2
    },
    # Add more credit card details as needed
]

# Call the function to automatically add balance statements
auto_add_balance_statements(ledger_file_path, credit_cards)

In this updated version, each account in the accounts list of each credit card includes both the account name and the currency. The add_balance_statement function is modified to include the currency parameter when writing the balance statement to the ledger.

Please replace "<ledger_path>" with the actual path to your Beancount ledger file. Also, update the credit card details in the credit_cards list according to your specific accounts, balances, and currencies.