測試最新模型在文獻查核方面的能力

[!NOTE] 更新 六月開始新訂了 Claude Max,ChatGPT 從 Pro 降級為 Plus,所以新增 Sonnet 4

測試底下提示詞。三篇論文經人手確認,都是假的,由某個模型幻覺出來。本次測試是看看哪個模型可以查核這些論文是否真實存在?是否嘗試額外搜尋或提供近似主題?

這幾個資料來源存在嗎?請上網搜尋並給出對應的 pubmed 連結 
1. FOXO3 and its role in cancer: emerging targets and therapeutic implications. (Front Oncol. 2021) 
2. Epigenetic regulation of FOXO3 in papillary thyroid carcinoma and its role in lymph node metastasis. (Qiu Y et al., BMC Cancer. 2020) 
3. The paradox of FOXO3: tumor suppressor vs. metastasis promoter – context matters. (Cancer Cell, 2018)
Model 存在確認 自動額外搜尋 付費
ChatGPT 4o 幻覺 無 有
ChatGPT 4o 開啟搜尋 正確 無 有
ChatGPT o3 正確 無 有
Gemini 2.5 Flash 幻覺 有;錯誤 無
Gemini 2.5 Pro 部分幻覺 無 無
Grok 3 正確 有;錯誤 無
Claude 3.7 幻覺 無 無
Claude 4.0 無 有 有

說明

  1. 我是 ChatGPT Pro 用戶,其他則沒有付費。
  2. Claude 只有付費用戶才能搜尋,所以這裏對它不太公平,註定會有幻覺;但我認為一個成熟的模型應該要能在沒辦法查核的情況下拒絕回答(例如:「我無法確認」)而不是給出幻覺答案。
  3. Gemini 2.5 Pro 表示它找到了其中一篇,但還是錯的(無關論文)
  • ChatGPT
  • Claude
  • Grok
  • Gemini

桌面環境

應該是 2012 或 2013 年那時候剛開始採用 Linux 的桌面環境。我那時候的電腦是華碩 K40IP,一個沒有獨顯的、厚重的筆電。那時候嘗試跟朋友打 Call of Duty 4 的連線,畫面卡頓,怎麼打都輸,被笑稱走路的靶。後來開始玩 Linux 就換系統。常常在重裝,喜歡在 Unity 上搞蘋果的 Aqua 主題。那時的部落格草稿甚至是用 LibreOffice 寫的。

可以在 桌面截圖 這個網站看到很多人的桌面截圖,千奇百怪。


測試從 Apple music 匯出音樂資訊

設計了歌 Shortcut 可以輸出 Markdown 格式的表格,簡單的把今天聽的有意思的歌存到諸如日記、部落格等地方。設計如下:

  1. Get current song
  2. Save album to img folder (subfolder of Obsidian)
    1. Set subpath nuc-music- as prefix of album artwork
    2. Replace space with underline
  3. Get current date
  4. Set text (Markdown table row) and copy to clipboard

把輸出到剪貼簿的文字複製到筆記內就搞定啦!

Cover Song Date
|150 Calling
Neo Fascio
Kyosuke Himuro
2025-04-26
|150 分手說愛你
Kimbonomics 金式代
Kimberley
2025-04-26
|150 Eternal Flame
The Essential Bangles
Susanna Hoffs & The Bangles
2025-04-26
|150 Golden Horizons
Pokémon Reorchestrated: Double Team!
Eric Buchholz
2025-04-26
|150 Promise of the West (feat. Julie Elven)
Horizon Forbidden West Trailer Theme)
Joris de Man
2025-04-26

不過,Shortcut 裡面的 music 模組有一些小問題,例如:

  1. 無法取得廣播中輪播的歌曲(我很常開著由我喜好音樂算法組成的,大概有 1/3 是沒聽過的新歌)
  2. 會自動替換歌區中無法儲存的字符,而不能由我自己處理
  • Music

多人異步遊戲

可自架伺服器、多人聯機、世界持續運作的沙盒或生存遊戲。大部分遊戲都能在玩家各自有空的時間上線投入,無需所有人同時在線。經過幾輪搜尋,我應該會考慮多多的學習玩下面這些:

  1. Valheim
  2. Terraria
  3. Project Zomboid

SteamDeck 觸控螢幕失靈

Ref 主要是太久沒使用觸發電源保護措施。重置即可。

I submitted a ticket with steam and apparently it’s a bug. You have to put the system into battery storage mode to reset it. These are the steps they gave me:

  • Power the Steam Deck down normally (choose Shut Down from the Power menu)
  • Hold down the Volume+ button and press the power button. The Steam Deck should boot into the BIOS menu.
  • Using the D-Pad and A to select, navigate to “Setup Utility”
  • Navigate to the Power Menu
  • Choose Battery storage mode, and confirm.

You should see the Steam Deck power off, and the power LED will blink three times to confirm battery storage mode.

Wait a few minutes, then plug the Steam Deck in to the provided power supply and turn on the Steam Deck.

  • Steam

日本文庫列表

文庫名 出版社 概要 収録作品数
角川文庫 KADOKAWA 1949年創刊。日本文学、海外文学、ミステリー、SFなど多彩なジャンルを収録。 約3,000冊
新潮文庫 新潮社 1914年創刊。国内外の文学作品を幅広く収録する、日本最古の文庫シリーズの一つ。 約1,000冊以上
講談社文庫 講談社 1971年創刊。古典から現代作品まで、多様な文学作品を収録。 約1,500冊
集英社文庫 集英社 1976年創刊。小説、エッセイ、翻訳作品など多彩なジャンルを提供。 約1,000冊
文春文庫 文藝春秋 1973年創刊。文学作品、エッセイ、評論など多様なテーマを収録。 約1,200冊
小学館文庫 小学館 1997年創刊。古典から現代小説まで幅広い文学作品を収録。 約800冊
幻冬舎文庫 幻冬舎 1997年創刊。独特なカバーデザインと多様なジャンルで知られる。 約600冊
河出文庫 河出書房新社 古典から現代作品まで、厳選された文学作品を収録。 約500冊
中公文庫 中央公論新社 文学やノンフィクションなど多様な作品を提供。 約700冊
朝日文庫 朝日新聞出版 文学作品、エッセイ、ノンフィクションなどを収録。 約400冊
  • Bunko

使用 Doom Nvim 配置 Neovim

除了搗鼓 Doom Emacs 外,我也在同步翻修我的 Vim 配置。其實我最一開始接觸 FOSS 時是個 Vim 用戶,也玩 vim-wiki 等各路工具。大約一年半後因為學習 Lisp 的原因轉戰 Emacs,不過我倒是一直記得 Vim 的基礎快捷鍵,也有一套基於 Vundle 的設置。不過此物及我的配置皆年久失修矣。

Kickstart.nvim

最近在看一些介紹終端機駭客的影片時,提到了 kickstart.nvim 這套工具,開箱即用,令人心動。安裝方式很簡單 - 把 init.lua 複製到 Neovim 預設的配置資料夾 .config/nvim 中即可。稍微閱讀了一下其內容,初始化會安裝幾類工具 - 跟我那時候認識的工具簡直完全不同呀(YouCompleteMe 變成 COQ/CMP、fzf 變成 telescope)!

  • Package management: wbthomason/packer.nvim
  • LSP management: williamboman/mason.nvim
  • Auto-complete function: hrsh67th/nvim-cmp
  • Highlight and navigation: nvim-treeitter/nvim-treesitter
  • Git related plugins: tpope/fugitive
  • Themes and status line
  • Fuzzy finder: nvim-telescope/telescope.nvim

接著是安裝(未安裝情況下)和各種 Vim 配置。最後兩大段則分別是設定 treesitter 和 LSP(基於 mason.nvim)。整體來說還蠻簡單的。

Doom Nvim

後來為了跟 Doom Emacs 有更接近的操作,改用了 doom-nvim 這個套裝。大部分常用的快捷鍵是通用的。啟動速度也很快(一樣採用了 lazy loading 策略)。目前踩到的第一個坑是需要 nerd-font;其他就且戰且走看看現代化編輯器又有什麼新玩法。預設套件部分與 kickstart.nvim 差異無幾。

Doom Nvim 希望使用者切換至自己的 branch 修改官方提供的 modules.lua 及 config.lua:

git checkout tags/$(git tag -l --sort -version:refname | head -n 1) -b my-config

之後使用 :DoomCheckUpdates 更新 Doom Nvim 本體、用 :PackerSync 更新各路套件。這個作法跟 Doom Emacs 不太一樣。

使用 Mason 安裝 LSP

目前主流的 LSP 管理工具 Mason 帶有一系列安裝腳本,可以代替用戶自動安裝各個語言的 LSP。我試了下,用它安裝 r_language_server 和 pyright 都十分簡單:

:LspInstall r_language_server
:LSpInstall pyright

Mason 需要系統安裝 luarocks 這個工具來幫助使用。如果需要額外的第三方工具,安裝 LSP 過程中則會報錯並彈出提示。除了通過命令安裝,也能開啟 Mason :Mason 移動游標並按下 i 進行安裝。這個 LSP 是全系統的,所以理論上其他支援 LSP 的編輯器也能讀到。算是一個很不錯的管理終端。

  • Vim

使用 Doom Emacs 配置 Emacs - 01

就目前的使用體驗來說,VS code 唯一的重要性就是橋接 Github Copilot。除此之外的大部分工作和運行狀況都只是編輯用於機器學習或圖片處理的 Python script,因此一直有重返 Emacs 的念頭。不過我自己的套件體系已經很難維護,我也打算找一套別人架構好的直接使用開工。目前兩套主流的分別是 Spacemacs 跟 Doom Emacs。

安裝 Doom 仰賴諸多腳本協同運行,且需要安裝額外的工具。

brew install git ripgrep coreutils fd
git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
~/.emacs.d/bin/doom install

安裝後需要將 Doom 的腳本加入 $PATH,另外也啟用 emacsclient:

export PATH="$HOME/.emacs.d/bin:$PATH"
alias emacs="emacsclient -t -a ''"

一些注意事項包括:

  • 修改了 .doom.d 中的設定後要執行 doom sync
  • 出問題時使用 doom doctor 協助診斷問題點
  • 用 doom upgrade 升級 Doom
  • 文件參考 SPC h d h 或是 M-x doom/help

所有文字編輯與模式切換部分同 Vim 包括 insert-mode 和 visual-mode 等。除了最基本的 evil-mode 外,也有採用 Spacemacs 方案的 SPC 開頭的功能選取:常見的 SPC 操作包含文件操作(SPC f)、緩衝區 buffer 操作(SPC b)和窗口操作(SPC w)。跟我的 plain-film auto-hot-key 快捷編碼很像?

啟用 init.el 中的套件

反白註解即可。官方預設了一大堆已經配置好的功能。也可以通過 + 的方式引入選項,例如 (python +lsp +pyright) 來啟用對應的服務。我看了下,大部分都是老朋友,例如 parinfer、projectile 及 lispy,也有很多新的工具,例如 treemacs。

安裝 Emacs-plus

專門為 macOS 編譯的、功能更多的 Emacs。需要通過 tap 安裝。

brew tap d12frosted/emacs-plus
brew install emacs-plus
  • Doom
  • Emacs

自動化翻譯工具

眾所周知,目前中文圈(不論繁體、簡體)均處於世界資訊流的窪地;大部分的最新知識和訊息(特別是經濟、科技、政治及其評論)都是英文為主,少部分則是文明國家的語言例如日文、法文、德文等,但都需要一段時間才匯流到中文圈內。如果想要了解目前最新趨勢,則需要強大的外語能力來閱讀,不過外語閱讀再怎樣也無法匹敵母語閱讀速度。我是一個喜歡積極接觸新概念的人,所以大量、快速的閱讀是生活樂趣之一。目前主要的外文閱讀輔助是強大的 DeepL。然而,台灣區無法購買能無限翻譯的 DeepL Pro,只能計算每 5000 個字貼上去 app 翻譯。最近有感浪費了甚多時間在剪貼,所以打算做一套自動翻譯工具。

此概念的出處來自於惡名昭彰的割韭強者 Xdite。她有篇 如何拿到最新國外翻譯書的中文稿,裡面提到的工作流程蠻吸引我的。另外是訂閱的 WSJ+ 裡面會推薦不少十分有趣的新書,可以從創世圖書館找到盜版,也是我想要積極涉獵的內容。

Xdite 的步驟

  • 從 Amazon 買書。
  • 用 Epubor Ultimate 清除 DRM,然後以 Pandoc 轉換 epub 為 markdown。
  • 用 Xdite 自寫的 tx_translate Ruby Gem 通過騰訊的 API 翻譯。
  • 極速閱讀法完食之。

核心功能

核心功能其實只是復刻網頁版翻譯服務的 HTTP post。在技術上並沒有什麼特別的地方,屬於初級爬蟲。要注意的是計算字數的部分。由於字數計算涉及到眾多 NLP 領域的知識,所以我單純利用換段落符號 \n\n 去切分,並且根據字數進行組合,盡可能讓每次請求都接近字數上限來降低請求數量。上限有參數可以調整,目前設定在 2500 左右(DeepL JSON-RPC 的 URL 傳輸上限)。如果是用 Google Translate 應該可以更高。另外由於翻譯服務還是有存取次數限制(用了一陣子就會跳 code 429),我另外也有個間隔參數可以調整。預設是 5 秒,最短是每個 chunk 間「暫停」一秒。考慮到翻譯服務的多樣性及備案,因此做了一些嘗試:

翻譯檔案

主要目標是翻譯文字檔及 ePub。首先根據副檔名,使用 pandoc 將檔案轉為 txt,然後使用前述的核心翻譯函數切 chunk 然後逐批處理。下面是 pandoc 轉換器指令碼生成器:

# f = source filename, with extension
command = "pandoc --wrap=none -f {} -t plain -o {} {}".format(
      extension, f.replace(extension, "txt"), f
)
os.system(command)

目前通過 --wrap=non 保留換行,然而必須要提到的是,epub、mobi 等本身帶有圖片或排版的檔案,其格式會全部被「消除」,變成分段落的巨大文字塊。目前還在想辦法處理。簡單來說,必須根據其各自的 HTML、XML 結構去寫 parser,再一段一段的翻譯並填充回原本的文件,工程巨大。因為不少要「細看」的書都是 epub 格式,所以我應該會針對 epub 再寫一個複雜的解析器,其他的則通過線上轉檔為 epub 再來處理。

轉換網頁

用 ReadabiliPy 這套工具來捕獲網頁內容。不過其實 Safari 也有內建網頁翻譯功能,直接使用即可,速度更快;網頁翻譯功能是附加的,未來計畫是將待看網址存成列表,例如存在某個 Obsidian 頁面,然後半夜的時候這個程式自行讀取該列表,並將翻譯好的 markdown 存入 Obsidian 資料夾。隔天早上再來檢視。

from readabilipy import simple_json_from_html_string as html2json
import requests

def translate_URL(u, o):
    headers = {} # macOS Safari
    r = requests.get(u, headers=headers)
    content = html2json(r.text, use_readability=True)["plain_text"]
    content = "\n\n".join([t["text"] for t in content])
    output = translate(content, sleep_time=s, engine=e, limit=l)
    export(output, o)

click 入口

以前寫 terminal app 大部分是用 argparse。這次寫 terminal app 則打算來學習並使用能處理更複雜業務需求的 click。設計了入口如下;考慮到還是以檔案翻譯為主要需求(畢竟網頁我直接用 Safari 或 Edge 內建的翻譯就得了,雖然準確度不比 DeepL 但是速度還挺快。

輸出函數

輸出函數可以指向幾個地方 - 存成單獨的 txt、直接輸出到 stdout。輸出到 stdout 的好處是,可以用 macOS 自帶的語音朗讀程式 say 播放。

def export(output, save_path):
    if save_path:
        with open(save_path, "w") as f:
            f.write(output)
    else:
        print(output)

目前是希望也能輸出到 Bear,這樣可以作為稍後閱讀的管理平台。不過,Bear 並沒有 Python API,X-callback-url 也挺複雜的,不太確定怎樣接上一大段文字。

Single Page App

用 PyWebIO 簡單搭建了個網頁介面。很醜,但可以工作。拿來當 DeepL 網頁本體的替代方案。

from pywebio.input import textarea
from pywebio.output import put_html, clear, use_scope
from pywebio import start_server
from translate import translate

def main():  # PyWebIO application function
    with use_scope("textarea"):
        while True:
            text = textarea("Translation")
            clear("textarea")
            put_html(translate(text))

start_server(main, port=8080, debug=True)

目前計畫

網頁及 epub 的結構化解析器

如同前述,其實網頁或電子書會有很多大小標題、圖片,附註等,但是在翻譯器中,這些會全部丟失。正在設計解析器,能夠保留原本的結構,不丟失。按段落及標題翻譯完成後,再填充回原本的架構中。

斷點續翻

如果遇到網頁端阻斷,可能需要另外用 proxy pool 來繼續翻譯服務。需要一個能夠「斷點續翻」的功能,來確保已經翻譯完成的段落不要浪費。

實做順序

  • 0.1 版
    • DeepL 翻譯 txt 功能
    • Pandoc 指令模板可轉 epub 為 txt
  • 0.2
    • 改善 split to chunk 函數
    • Pandoc 指令模板進化為生成器,能處理其他類型檔案
  • 0.3 版
    • 直接取的網頁內容及併用 ReadabiliPy
    • 新增時間間隔設定參數
    • 網頁介面(使用 PyWebIO)
  • 0.4 版
    • 除 DeepL 外新增 Google Translate
    • 新增 chunk 大小設定參數
  • 0.5 版 - 開發中
    • epub 及網頁的結構化解析器(不丟失原本結構)
    • 斷點續翻功能
  • English

合併 Bib 檔案

在之前的文章中介紹了論文工具流。過程中有一步如下:

  • 下載列表為 BibTex 檔案
  • 若列表檔案已存在,則使用 Emacs 添加新增內容

不過,每次都要開啟 Emacs 去剪貼有點麻煩。所以這裡另外用 shell script 來代替步驟。

  1. 首先 Readcube 的匯出,把當前閱讀中文章的資訊下載為 Bib 檔案。
  2. 接著使用下面的腳本,將下載的檔案合併到論文列表中。
  3. 最後清除下載的檔案。
#!/bin/zsh

cat Downloads/*.bib >> ~/OneDrive/database.bib
rm Downloads/*.bib
  • LaTeX