GitHub Copilot的编程助手依然缺乏常识!你遇到过哪些搞笑的错误?评论分享一下!


4 个月前

GitHub Copilot 的编码助手仍然缺乏常识

我已经等了很久想要一个免费的编码助手,一旦 GitHub Copilot 的预览版在 VScode 中可用,我便开始测试它,并将其性能与两个通用编码助手进行比较:DeepSeek-R1 和 chatGPT O3-mini。

我给助手的问题是:“ 我想通过在 Google Scholar 上搜索过去五年发布的论文数量,来查看 LLMs 在生命科学中的趋势,并可视化结果。 ” 这个简单的问题实际上有点棘手,因为有多种方式可以实现它,有些可能会陷入陷阱(见下文)。

为了让这些助手顺利完成任务,我需要给他们提供上下文,所以我说:“ 你现在是一名经验丰富的软件工程师。你熟悉多种编程语言和开发框架,并且对软件开发生命周期有深入的理解。你擅长解决技术问题,具备出色的逻辑思维能力。请以这个角色回答我接下来的问题。

DeepSeek-R1

我首先尝试了 DeepSeek-R1 (distilled to llama-70b) 托管在 Groq 上。不得不说,Groq 的速度非常快!它的思考过程只用了 0.4 秒:

好的,用户想通过查看 Google Scholar 上过去五年发表的论文数量来了解 LLMs 在生命科学中的趋势,然后可视化结果。嗯,我需要想出一种方法来处理这个问题。

首先,我应该考虑如何高效搜索 Google Scholar。也许可以使用像“生命科学中的大型语言模型”或“生物信息学中的 LLMs”这样的特定关键词。但等等,用户提到的是过去五年,所以我需要正确设定时间框架。Google Scholar 允许按年份过滤,这样就可以了。

我想知道用户是否了解这些限制。由于 Google Scholar 不提供 API,因此自动化搜索可能有些困难。他们可能需要手动进行搜索或使用工具。此外,结果的数量可能会根据使用的关键词而有所不同。也许我应该建议一些替代关键词,以确保他们能够捕获所有相关论文。

接下来是可视化数据。他们需要提取出版年份,并计算每年发表的论文数量。Excel 或 Google Sheets 可以用于此。但如果想要更动态的效果,Python 的 matplotlib 或 seaborn 可能会更好。我应该提到这两种选择,以便他们可以根据自己的舒适度进行选择。

我还需要考虑他们可能面临的潜在问题。例如,主题重叠或可能与生命科学中的 LLMs 并不严格相关的论文。也许我可以建议一种方法,以便更精准地进行搜索。此外,考虑到人工智能在该领域的快速增长,趋势可能会显示出急剧增加,因此可视化应该清晰地展示这一点。

也许用户是一名研究人员或生命科学领域的人,想要了解 LLMs 的应用情况。他们可能在计划自己的研究或寻找趋势来为他们的工作提供信息。因此,提供明确的步骤和一些其他人进行类似分析的示例可能会很有帮助。

我还应该提到,虽然 Google Scholar 是一个不错的起点,但还有其他数据库如 PubMed 或 IEEE Xplore 可能提供更精确的结果,特别是在生命科学领域。但由于用户特别要求使用 Google Scholar,除非他们另有说明,我就专注于此。

总之,我将概述以下步骤:使用特定关键词进行搜索,按年份过滤,收集数据,然后进行可视化。我还会注意到这些限制,并提供可视化的替代工具。这应该能为用户提供清晰的路径,让他们实现目标。

然后它给出了以下答案,并提供了一个用于可视化的 Python 脚本示例。

要分析在生命科学中大型语言模型(LLMs)在过去五年的发展趋势,您可以按以下步骤操作:

1. 在 Google Scholar 上搜索

  • 使用关键词如“生命科学中的大型语言模型”、“生物信息学中的 LLMs”、“医疗保健中的 LLMs”或“生命科学中的变压器”。
  • 过滤结果,只包含过去五年发布的论文(2018–2023)。

2. 收集数据

  • 记录每年发表的论文数量。

3. 可视化结果

  • 使用 Excel、Google Sheets 或 Python(使用 matplotlibseaborn 等库)创建一个展示每年论文数量的折线图或柱状图。

它还通过提供以下注释来暗示其方法的局限性。

注释:

  • 局限性:Google Scholar 不提供 API,因此您可能需要手动收集数据或使用像 scholarly(一个 Python 库)这样的工具来自动化处理。
  • 细化:通过使用更具体的关键词或关注特定应用(例如、“药物发现中的 LLMs”)来缩小搜索范围。

我认为 DeepSeek 的解决方案是 合理的,因为这个方法正是我自己实施时的第一直觉。它确实建议使用 scholarly 库来自动化过程(然后陷入了一个陷阱,见下文),但实际上并没有实现这一点——唉!总的来说,我给 DeepSeek 的评分是 A。

chatGPT-O3-mini

接下来是 chatGPT 的思考过程,这花了 13 秒的时间进行推理:

用户在询问 LLMs 在生命科学的发展趋势,特别是通过 Google Scholar 上的过去五年的论文。我需要找到一种方法来可视化该趋势。但是等等——由于 Google Scholar 没有 API 供方便访问数据,这让事情变得复杂。我可能需要使用 Python 库如 matplotlib 来绘制趋势,但我需要想办法在没有 API 访问权限的情况下从 Google Scholar 收集数据。

对于抓取 Google Scholar,我知道它并不正式支持 API,因此抓取并不严格允许。一种替代方案是使用 scholarly 库,但这可能违反服务条款,因此我会小心。我将集中精力生成搜索查询以查找“生命科学中的 LLMs”,并计算 2020-2024 年每年发表的论文数量。我可以提供用于自动化的代码片段或手动搜索的说明!只需强调抓取带来的服务条款风险。

我建议使用 Python 和像 BeautifulSoup 和 requests 这样的库来抓取 Google Scholar。但是,我应该注意抓取可能会违反 Google Scholar 的服务条款。另外,我可以使用 scholarly 包来搜索出版物,尽管它可能无法按年提供确切的数量。如果用户倾向于手动搜索,我可以建议在 Google Scholar 的高级搜索中按年份过滤结果。我还将提供一个伪代码示例,以使用 matplotlib 可视化出版数据并给出逐步说明。

然后它提供了两种方法:手动和自动。

手动方法

1. 访问 Google Scholar

2. 使用高级搜索:

点击菜单(三条水平线)→ “高级搜索”。

3. 输入您的搜索词:

例如,您可以使用“生命科学中的大型语言模型”作为搜索词。

4. 设置出版日期范围:

将“返回发布于”字段设置为特定年份(例如,第一个查询为2019)。

5. 记录结果计数:

查找结果顶部的一行,大致内容为“约 1,230 个结果”。

6. 对每一年重复上述步骤:

针对过去五年(例如,2019、2020、……、2023)进行此操作。

7. 将计数输入您喜欢的工具(如 Excel、Python 等),并绘制柱状图或折线图。

手动解决方案基本上与 DeepSeek 的解决方案相同,但提供了更详细和易于理解的步骤。之后,它还给出了一个自动化的方法和示例代码。

以下是一个使用 requests 和 BeautifulSoup 库从 Google Scholar 获取每年“结果计数”的示例 Python 脚本,然后使用 matplotlib 绘制数据。 注意:这个脚本仅用于演示。频繁的自动请求可能导致您的 IP 被限制或封锁。

import requests
from bs4 import BeautifulSoup
import re
import matplotlib.pyplot as plt
import time

# 定义年份范围(根据需要调整)
years = range(2019, 2024)  # 例如,2019 至 2023,为五年
counts = []

# Google Scholar 搜索的基础 URL
base_url = "https://scholar.google.com/scholar"

# 注意:根据需要自定义查询。
query = '"large language models" life science'

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/90.0.4430.93 Safari/537.36"
}

for year in years:
    # 设置高级搜索的参数(限制到特定年份)
    params = {
        "q": query,
        "as_ylo": year,  # 下界(年份)
        "as_yhi": year,  # 上界(年份)
        "hl": "en"
    }

    # 发出请求
    response = requests.get(base_url, params=params, headers=headers)
    if response.status_code != 200:
        print(f"{year} 年数据获取失败")
        counts.append(0)
        continue

    soup = BeautifulSoup(response.text, "html.parser")
    
    # Google Scholar 通常在 id 为 "gs_ab_md" 的 div 中显示结果计数。
    result_stats = soup.find("div", id="gs_ab_md")
    count = 0
    if result_stats:
        text = result_stats.get_text()
        # 查找类似“约 1,230 个结果”的模式
        match = re.search(r'About ([d,]+) result', text)
        if match:
            count = int(match.group(1).replace(",", ""))
    else:
        print(f"{year} 年的结果统计未找到")

    print(f"{year}: {count} 结果")
    counts.append(count)

    # 请礼貌地在请求之间暂停
    time.sleep(2)

# 使用 matplotlib 进行可视化
plt.figure(figsize=(8, 5))
plt.bar([str(y) for y in years], counts, color='skyblue')
plt.xlabel("年份")
plt.ylabel("发表论文数量")
plt.title("‘生命科学中的大型语言模型’发表趋势(Google Scholar)")
plt.tight_layout()
plt.show()

该算法基本上是自动化了上述手动过程。代码是 100% 正确的,因为它产生了我预期的结果(见下文)。因此,chatGPT-O3-mini 得到了 A+ 的评分。

Copilot 与 O3-mini-preview 聊天

同样,首先是它的思考过程:

以下是一种使用 Python 的方法。由于 Google Scholar 不提供官方 API,您可以使用像 scholarly 这样的第三方库进行查询。请注意,抓取 Google Scholar 可能会被限制速率,您应遵循其服务条款。在这个示例中,我们循环过去五年,查询“生命科学中的 LLMs”出版物(您可以根据需要调整搜索词),计算结果数量,然后使用 matplotlib 绘制这些数量。

然后它提供了一个 Python 脚本。

import matplotlib.pyplot as plt
from scholarly import scholarly

# 定义年份(对于当前年份 2025,过去五年包括 2020-2024)
years = range(2020, 2025)
counts = []

for year in years:
    query = scholarly.search_pubs(f"LLMs in life science {year}")
    count = 0
    try:
        # 限制每年处理的结果数量,避免长时间延迟。
        for _ in range(100):  # 根据需要调整这个限制
            pub = next(query, None)
            if pub is None:
                break
            # 可选:检查是否可以从 pub['bib'] 中获取出版年份。
            bib = pub.get('bib', {})
            pub_year = bib.get('pub_year', str(year))  # 如果缺失则回退
            if str(year) in pub_year:
                count += 1
    except Exception as e:
        print(f"{year} 年出错: {e}")
    counts.append(count)
    print(f"{year} 年:{count} 篇论文")

# 可视化趋势
plt.bar(years, counts, color='skyblue')
plt.xlabel("出版年份")
plt.ylabel("发表论文数量")
plt.title("生命科学中的 LLM 发表趋势(Google Scholar)")
plt.xticks(list(years))
plt.show()

什么?这个助手“知道”存在潜在的陷阱(Google 的速率限制),但还是掉入了其中?!它确实施加了一个硬限制(100),并要求用户自行调整(因此用户被 Google 封锁是用户的错)。而且,不仅如此,这个算法的速度也很慢——逐一检查出版物。

结论

在 VScode 中拥有一个助手对开发者来说是非常方便的。然而,奇怪的是,Copilot 聊天给出的错误答案,尽管它使用同样的模型推理意识到潜在的陷阱,结果却让用户掉入了这个陷阱。DeepSeek-R1 差点陷入这个陷阱,但幸运的是,它的“懒惰”拯救了它。ChatGPT-O3-mini 在这种情况下表现非常出色。

推荐阅读:

FluxAI 中文

© 2025. All Rights Reserved