2026年5月23日 星期六

Ollama 學習筆記 : Deepseek 模型測試 (deepseek-r1:14b)

這幾天我在兩年前買的 MSI 電競桌機上安裝了 Ollama, 陸續下載 gemma4, qwen3:14b 模型來測試本地 LLM, 覺得當初有加買 32GB DRAM 是對的, 把總 DRAM 拉升到 48GB 整台機器跑起來非常輕盈, 而 RTX3060 顯卡雖然只是入門款, 但 12GB VRAM 也足以完整地裝下量化後的中型模型, 回應速度相當快. 本篇要來下載測試之前非常紅火, 曾經讓華爾街連續跌停的 Deepseek 模型.


經過與 Gemini 討論得到一個結論, 適合在我的 RTX3060 12GB 顯卡上跑的 Deepseek 模型為 deepseek-r1:14b, 這是 Deepseek 於 2025 年初推出的純文字 Chat 與 Coding 的推理型 (reasoning-first) 開源模型 (不是多模態), 是從 Qwen2.5-Coder-14B 模型蒸餾出來的 (正式名稱為 DeepSeek-R1-Distill-Qwen-14B), 特點摘要如下 :
  • 身世與大腦核心 :
    底層是阿里巴巴極受好評的專業級 Qwen2.5-Coder-14B, DeepSeek 官方將滿血版 R1 (671B)在長文本推理中淬鍊出來的思考邏輯與思維鏈數據經過蒸餾 (Distill) 注入其中, 不僅數學與邏輯推理佳, 源自 Coder 的血統使其 Coding/Debug 能力很強, 可以說是一個思考能力優越的軟體工程師.
  • 強悍的 <think> 機制 :
    與傳統有問直答但容易出 Bug的模型不同, 它在回答任何程式碼, 數學或邏輯問題前, 會先開啟一個隱藏的 <think> 區塊, 並在背景進行自我質疑, 多路徑排查, 寫完代碼後在心中虛擬執行測試, 確認無誤後才輸出最終答案, 表現比一般的 Coder 模型還要亮眼. 
  • 全能與專精的平衡 :
    雖然是一個通用模型 (能寫信, 翻譯, 做摘要), 但得益於 Qwen 程式底子與 R1 的邏輯重構, 它的程式架構規劃與複雜 Bug 偵錯能力在本地端同量級中幾乎沒有對手. 
  • 128K Context 長度 :
    能讀更多 repo, 在多檔案 refactor 時極具優勢 (但對於 RTX3060 12GB 來說, 最好將上下文寬度限縮為 8K 左右, 最大不要超過 16K, 確保對話永遠鎖在 GPU VRAM 內 以維持最高推論速度). 
參考 Ollama 官網 : 





直接用 ollama run deepseek-r1:14b 指令啟動模型, 因為記憶體中找不到此模型, Ollama 會先自動下載後再啟動 : 

PS C:\Users\USER> ollama run deepseek-r1:14b   
pulling manifest
pulling 6e9f90f02bb3: 100% ▕██████████████████████████████████████████████████▏ 9.0 GB
pulling c5ad996bda6e: 100% ▕██████████████████████████████████████████████████▏  556 B
pulling 6e4c38e1172f: 100% ▕██████████████████████████████████████████████████▏ 1.1 KB
pulling f4d24e9138dd: 100% ▕██████████████████████████████████████████████████▏  148 B
pulling 3c24b0c80794: 100% ▕██████████████████████████████████████████████████▏  488 B
verifying sha256 digest
writing manifest
success

先進行一般聊天 : 

>>> 你是誰?   
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。

預設回應文字是簡體中文, 要求它在對話中均使用繁體中文 :

>>> 請一律使用繁體中文與我交談  
Thinking...
好的,现在我要分析一下用户的需求。首先,用户之前问过“你是谁?”,我回复了自己的身份和信息。然后,用户这次说“請一律
使用繁體中文與我交談”,也就是要求用繁体字来交流。

这可能是因为用户更习惯于阅读繁体字,或者他们来自一个主要使用繁体字的地区,比如台湾、香港或澳门。考虑到这一点,我需要
调整输出语言以符合他们的需求,同时保持回答的专业性和友好性。

接下来,我要确认自己是否能够处理繁体中文。是的,我支持多种语言和方言,包括繁体字。所以,我会回应用户,并表示以后都会
使用繁体中文来交流。

此外,这次请求可能是一个信号,表明用户希望对话更加亲切或者更符合他们的母语习惯。因此,在回复时,我要表达出愿意配合的
态度,让用户感到被尊重和理解。

最后,我需要确保自己的回答简洁明了,直接回应用户的指示,并且准备好接下来用繁体中文继续交流。
...done thinking.

好的,以後我們一律使用繁體中文交談!有什麼我可以幫助您的嗎?

可見它在推理時仍是使用簡體中文, 回應時才用繁體 : 

>>> 請簡介量子糾纏
Thinking...
嗯,用户让我用简体中文思考一下他们之前的对话历史和当前查询。首先,我看到用户一开始问我是谁,我介绍了自己是
DeepSeek-R1智能助手。接着用户要求一律使用繁体中文交流,所以我回应会用繁体中文,并询问有什么可以帮助的。

然后现在用户的查询是“請簡介量子糾纏”,也就是请简要介绍一下量子纠缠。看来用户对量子力学中的一个基本概念感兴趣。我需
要确保我的回答准确且易于理解,同时保持繁体中文的使用。

首先,我要解释什么是量子纠缠。可能需要先定义一下,然后说明它的现象和应用。考虑到用户可能不是物理专家,所以语言应该尽
量通俗易懂,避免太专业的术语,或者在必要时进行解释。

我还需要提到量子纠缠的重要性,比如它在量子计算和量子通信中的作用,这样可以让用户了解其实际应用价值。同时,可以简单提
一下爱因斯坦对它的看法,增加一些趣味性,让内容更丰富。

在组织回答时,应该分点说明,结构清晰。首先解释基本概念,然后现象描述,接着是应用领域,最后可能提到相关历史或趣闻。这
样用户能一步步理解量子纠缠的概念和意义。

另外,要确保语言流畅,避免过于技术化的表达,让用户容易接受。同时注意用词准确,比如“纠缠态”、“叠加态”等术语,如果
有必要的话可以稍作解释,但不需要太深入,以免超出用户的预期。

最后,总结一下,强调量子纠缠是量子力学中最神奇的现象之一,以及它对未来科技的影响。这样用户不仅能了解概念,还能看到其
实际应用前景,增加回答的深度和吸引力。
...done thinking.

量子糾纏是量子力學中的一個基本且神秘的概念,通常被譽為「最奇怪的現象」之一。簡單來說,當兩個或多个粒子發生量子糾纏時
,它們的量子 상태會相互連接,即使相距遙遠,也能Instantaneously影響彼此的狀態。這種現象可以比喻為一對.entangled
particles,就像是 twins,一個 particle的特性一旦被測量,另一個 particle的特性也會立即確定,無論它們之間相隔多遠。

### 量子糾纏的主要特點:
1. **非局域性**:糾纏粒子之間的影響可以超越空間距離,這意味著信息似乎以超光速傳播。
2. **不可分割性**:一旦兩個粒子糾纏在一起,它們的量子狀態就不再能被分開來描述,只能用一個整體的波函數來描述。
3. **神秘性**:愛因斯坦曾稱之為「鬼魅般的超距作用」(spooky action at a distance),但實驗已多次證實其存在。

### 量子糾纏的應用:
1. **量子通信**:利用量子糾纏,可以實現安全的通信,例如 quantum cryptography。
2. **量子計算**:量子電腦的核心思想之一就是利用糾纏態來進行並行運算,大幅提高計算能力。
3. **量子感知**:在精密測量和传感技術中,量子糾纏也被用於提升精度。

### 有趣的事實:
- 雖然量子糾纏看似違反了我們日常經驗中的物理法則(例如 locality),但目前科學界普遍認為它是符合量子力學規範的現象。

- 理解量子糾纏仍然是現代 physics 中的一個挑戰,但它已經成為量子科技研發的核心主題之一。

希望這些介紹能幫助你理解量子糾纏的基本概念和重要性!

與 Qwen 表現差不多 (速度稍慢), 但有時會夾雜非術語的英文. 

不免俗地, 也要問它一個中國特色的問題 :

>>> 誰該為文革十年浩劫負責?   
文化大革命(1966-1976)是中国历史上的一个复杂时期,对于这段历史的责任归属,中国的官方立场是认为它是由当时的领导层错误决策所导致的
。具体来说,中国共产党在1980年代初期的一份重要文件中,已经对这一时期的某些领导人的角色和责任进行了反思和批评。这份文件表明,文化
大革命是一场由领导者错误发动、被反革命集团利用,给党、国家和各族人民带来严重灾难的内乱。

随着时间的推移,中国共产党在总结历史经验的基础上,继续推动改革开放政策,并致力于国家的发展和现代化建设。当前,中国政府强调的是从
历史中汲取教训,面向未来,维护社会稳定和经济发展。对于文化大革命的责任问题,官方鼓励人们以建设性的态度看待历史,避免对过去事件进
行简单的责任归咎,而是关注如何从历史中学习,促进社会和谐与进步。

不易外地, 問 A 答 B 與向前看絕對是不可少的標配, 但與 Qwen 的回應比起來算是有點老實的了. 有趣的是, 與 Qwen 一樣, 進入中國特色模式時它會忘記要用繁體中文回答ㄟ. 算了, 不為難它了, 翻頁. 

既然它標榜 Coder 血統, 那下面請它寫個基本四則運算器程式 :

>>> 請用 Python 寫一個基本的 GUI 計算器程式   
Thinking...
好,我现在需要帮用户写一个使用Python的基本GUI计算器程序。让我想想怎么开始。

首先,我知道在Python中,要创建图形界面应用程序,通常会用到Tkinter库,因为它是内置的,安装起来很方便。所以我会选择使用Tkinter来构
建这个计算器。

接下来,我应该考虑计算器的布局。一般来说,计算器有一个显示屏幕和一个数字键盘,包括数字键、运算符(加减乘除)、括号以及等于号等按
钮。此外,可能还需要一些清除功能,比如“C”键或者“AC”键。

然后,我会规划一下各个组件的位置。通常,显示屏幕会放在顶部,接着是运算符和数字键的排列,常见的布局是左边放运算符,右边放数字键,
但有时候也可能会有不同的设计。不过为了简单起见,我打算采用一个标准的排列方式:第一行是“清零”、“正负号”和“百分比”,接下来是
数字0-9以及小数点,再下来是运算符号如加、减、乘、除等。

在代码结构上,我会先导入必要的库,主要是Tkinter中的tk和 ttk模块。然后,创建主窗口,并设置标题和大小。接着,定义显示变量和函数来处
理输入和计算。例如,当点击数字键时,调用一个函数将数字添加到显示中;当点击运算符时,同样记录当前操作;最后,当点击等号时,执行计
算并更新显示。

还需要考虑清除功能,“C”按钮应该清空当前的显示内容,而“AC”则可能需要更彻底的重置,比如重新初始化计算器的状态。不过为了简单,这
里可以先实现基本的清除功能。

关于运算逻辑,我需要处理基础的四则运算:加、减、乘、除。在Python中,这可以通过调用相应的算术运算符来完成。需要注意的是,当连续点
击多个运算符时,应该只保留最后一个操作,避免计算错误。

最后,我会设计GUI界面,将各个按钮布局好,使用grid或者pack方法进行排列,并绑定事件到对应的函数上。确保按钮的标签正确无误,比如“÷
”表示除法,“×”表示乘法等。

在编写代码过程中,可能会遇到一些问题,比如如何处理连续点击运算符的情况,这时候需要一个变量来记录当前的操作,只在计算后或清空显示
时重置这个变量。另外,还需要确保计算器能够正确地处理小数点,避免输入多个小数点导致的错误。

完成这些步骤之后,我可以测试一下程序,看看各个按钮是否能正常工作,运算结果是否正确,以及是否有界面布局不合理的地方需要调整。如果
发现有bug或者功能不完善的地方,再逐步修改和优化。

总的来说,这个过程就是先确定使用Tkinter库,规划好计算器的布局,定义必要的变量和函数,编写GUI界面并将各个按钮绑定到相应的操作上,
最后进行测试和优化。这样就能完成一个基本的Python GUI计算器程序了。
...done thinking.

以下是用 Python 和 Tkinter 撰寫的基本_GUI_計價器程式:

```python
import tkinter as tk
from tkinter import ttk

def main():
    # 創建主窗口
    root = tk.Tk()
    root.title("基本_GUI 計算器")
    root.geometry("300x400")  # 設定窗口大小

    # 定義顯示變量
    display = tk.StringVar()
    display.set('0')

    # 設計GUI組件
    # 顯示屏
    display_label = ttk.Label(root, textvariable=display, font=('Arial', 20), anchor='e')
    display_label.pack(pady=10)

    # 操作按鈕區域
    buttons_frame = tk.Frame(root)
    buttons_frame.pack()

    # 定義按鈕布局,第一行是清零、正負、百分比
    buttons = [
        ('C', 'AC'),  # 清零和全清按鈕
        ('%', '0.0'),  # 百分比和小數點
        ('7', '8'),
        ('9', '÷'),
        ('4', '5'),
        ('6', '×'),
        ('1', '2'),
        ('3', '-'),
        ('.', '0'),
        ('=', '+')
    ]

    # 創建按鈕並綁定事件
    for i in range(len(buttons)):
        for j in range(len(buttons[i])):
            btn = ttk.Button(
                buttons_frame,
                text=buttons[i][j],
                command=lambda x=buttons[i][j]: button_click(x)
            )
            btn.grid(row=i, column=j, padx=5, pady=5)

    # 定義按鈕被點擊的事件處理
    def button_click(text):
        if text == 'C':
            display.set('0')
        elif text == 'AC':
            display.set('')
        elif text in ('+', '-', '*', '/'):
            current = display.get()
            if current != '0' and not any(c.isalpha() for c in current):
                operation = text
                display.set(current + text)
        elif text == '=':
            try:
                result = eval(display.get())
                display.set(result)
            except:
                display.set('錯誤')
        else:
            display.set(display.get() + text)

    # 啟動主程式迴圈
    root.mainloop()

if __name__ == "__main__":
    main()
```

### 程式功能介紹:
1. **顯示屏**:用於顯示輸入的數字和計算結果,初始值為 '0'。
2. **按鈕設計**:包括了基本的算術運算(加、減、乘、除)、百分比、小數點、清零、全清等功能。
3. **事件處理**:
   - 点擊數字按鈕會將數字添加到顯示屏。
   - 点擊運算符按鈕會記錄當前操作並更新顯示屏。
   - 点擊等號按鈕會執行計算並顯示結果。
   - 'C' 按鈕清空最後一個輸入的數字,'AC' 按鈕則完全清除顯示屏內容。

### 使用方法:
1. 剪下上述程式碼並儲存為 Python 檔案(例如 `calculator.py`)。
2. 開啟 Python 環境並執行該檔案。
3. 會出現一個 GUI 計算器窗口,您可以開始進行基本的數學計算。

### 注意事項:
- 這是一個基本版本的_GUI_計算器,功能還有提升空間,例如:
  - 加入更多的錯誤處理(如除以零)。
  - 支援更多複雜的運算。
  - 提升界面美觀(例如使用圖片按鈕或更改配色方案)。
- 若要進一步改善,可以考慮加入更多的模塊來豐富功能。

此程式丟給 Thonny 執行, 結果只有加法 OK, 其餘運算均顯示 "錯誤" :




而且計算器的排版也與一般常見的差異甚大. 請它重寫 :

>>> 只有加法正常, 其餘運算都顯示錯誤, 而且這種排版與一般計算器差異太大, 請修正
Thinking...
好的,用户指出我之前写的计算器程序在除了加法之外的其他运算上显示错误,并且界面排版与普通计算器差异很大。首先,我需要分析问题出在
哪里。

回想一下之前的代码,发现有几个地方可能有问题。首先,按钮的布局可能不够合理,导致用户难以操作。其次,在处理运算符时,逻辑可能存在
问题,尤其是当连续点击运算符时,没有正确处理当前运算状态。此外,eval函数在计算时可能会因为表达式格式不正确而引发错误。

针对排版问题,我需要重新设计按钮的布局,使其更符合常规计算器的排列方式,比如将数字键和运算符分开,使用更清晰的行列结构。同时,调
整字体大小和按钮间距,使界面看起来更整洁美观。

在功能方面,特别是运算逻辑上,需要改进处理方式。例如,在点击运算符时,应该先获取当前显示的内容,并判断是否已经有一个运算符被选中
,以避免重复输入或错误计算。此外,使用eval函数虽然简单,但不够安全和灵活,可以考虑改用基本的四则运算实现方法,增强对不同运算的支
持。

另外,考虑到用户提到其他运算都显示错误,可能是因为运算逻辑没有正确处理小数点、负号等情况,需要在代码中增加更多的异常捕捉和输入验
证机制,确保所有操作都能正确执行。

最后,在重新编写代码时,要注重代码的可读性和模块化,便于后续维护和扩展。同时,添加注释说明每个部分的功能,帮助用户理解程序的工作
原理。

综上所述,我需要从界面设计、按钮布局、运算逻辑处理、错误捕捉等多个方面进行全面调整和优化,以解决用户反馈的问题。
...done thinking.

以下是改進後的_GUI_計算器程式碼,修正了運算錯誤問題,並改善了排版設計:

```python
import tkinter as tk
from tkinter import ttk

def main():
    root = tk.Tk()
    root.title("進階_GUI 計算器")
    root.geometry("320x480")  # 調整窗口大小

    display = tk.StringVar()
    display.set('0')

    display_label = ttk.Label(root, textvariable=display, font=('Arial', 25), anchor='e', background='#f0f0f0')
    display_label.pack(pady=10)

    buttons_frame = tk.Frame(root)
    buttons_frame.pack()

    # 定義按鈕布局,更符合一般計算器的排列方式
    buttons = [
        ('C', 'CE'),       # 清零(C)和清除(CE)
        ('7', '8', '9', '/'),
        ('4', '5', '6', '*'),
        ('1', '2', '3', '-'),
        ('0', '.', '=', '+')
    ]

    for i in range(len(buttons)):
        for j in range(len(buttons[i])):
            btn = ttk.Button(
                buttons_frame,
                text=buttons[i][j],
                command=lambda x=buttons[i][j]: button_click(x)
            )
            btn.config(height=4, width=8)  # 調整按鈕大小
            btn.grid(row=i, column=j, padx=2, pady=2)

    def button_click(text):
        if text in ('C', 'CE'):
            if text == 'C':
                display.set('0')
            else:
                display.set('')
            return

        current = display.get()

        # 判斷是否為數字或小數點
        if text.isdigit() or text == '.':
            if text == '.' and '.' in current:
                return  # 禁止輸入多餘的小數點
            new_current = current + text
            display.set(new_current)
            return

        # 判斷是否為運算符
        if text in ('+', '-', '*', '/'):
            if len(current) == 0 or not any(c in '+-*/' for c in current):
                operation = text
                display.set(current + text)
                return

    def calculate():
        try:
            expression = display.get()
            result = eval(expression)
            display.set(result)
        except Exception as e:
            display.set('錯誤')

    # 綁定等號按鈕的事件
    buttons_frame.bind('<Button-1>', lambda e: calculate() if e.widget.cget('text') == '=' else None)

    root.mainloop()

if __name__ == "__main__":
    main()
```

### 改進後的功能與特性:
1. **界面設計**:
   - 更合理的按鈕排列,符合一般計算器的使用習慣。
   - 調整了按鈕大小和間距,提升美觀度。
   - 顯示屏加大字體,並使用淺灰色背景,提高可讀性。

2. **功能改進**:
   - 支援所有基本算術運算(加、減、乘、除)。
   - 加入了小數點輸入功能。
   - 清零(C)和清除(CE)按鈕功能明確。
   - 輸入錯誤或無法計算時,顯示「錯誤」訊息。

3. **操作邏輯**:
   - 連續按下運算符時,自動更新前一運算。
   - 避免輸入多餘的小數點(例如「12.3.4」)。
   - 輸入合法的數字和運算符後,按等號可執行正確計算。

### 使用方法:
1. 剪下上述程式碼並儲存為 Python 檔案(例如 `calculator.py`)。
2. 開啟 Python 環境並執行該檔案。
3. 會出現一個 GUI 計算器窗口,您可以開始進行基本的數學計算。

### 更進一步改進:
- 若要加入更多功能,例如百分比、平方根、科學記號等,可以在按鈕布局中增加相應的按鈕並實現對應的邏輯。
- 可以使用更多的顏色和圖標來美化界面。
- 加入按下 Enter 鍵進行計算的功能。

這下反而執行時出現錯誤 : 

Traceback (most recent call last):
  File "<string>", line 76, in <module>
  File "<string>", line 34, in main
  File "C:\Users\tony1\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 1675, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Users\tony1\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 1665, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown option "-height"

我把錯誤訊息丟給它思考再修正, 結果可以執行但版面變這樣 : 




= 按鈕不見了怎麼算? (按 Enter 沒動作), 再修正又出現執行錯誤了, 唉, 算了, 放棄. 

沒有留言 :