文心一言4.5開源部署指南及文學領域測評

??📝個人主頁:哈__

期待您的關注?

目錄

一、引言

二、文心一言開源模型

2.1 MoE架構

2.2 文心一言MoE架構?

三、文心一言稠密模型部署

3.1 產品選擇

3.2 環境選擇

3.3 Python3.12安裝

3.3 PaddlePaddle-GPU安裝

?3.4?FastDeploy-GPU安裝

?編輯3.5 模型部署

四、模型測試

4.1 文心一言4.5基礎請求測試

?編輯

4.2?文心一言4.5多次請求測試

4.3?讓文心一言4.5自己想一些測試方向

4.4 中文處理和生成測評?

4.4.1?文學文本理解能力(基礎核心)

4.4.2?文學知識儲備(專業基礎)

4.4.3 文學創作能力(核心應用)

?五、測試總結


一、引言

文心一言(ERNIE Bot)是百度推出的人工智能大語言模型,它基于飛槳平臺和文心知識增強技術,具備文本處理、AI 繪畫等功能,能應用于創作、數據分析、代碼生成等多個場景,支持 PC、APP 及 API 接入等使用方式,用戶規模龐大,生態不斷擴展,不同版本在性能上各有提升,滿足不同需求。

2025年6月30日,百度做出了一件具有里程碑意義的事情:開源文心一言大模型,這一舉措旨在構建更加繁榮的開發者生態系統。此舉不僅在行業內引發了廣泛關注,也標志著中國AI市場競爭格局的重大變化。百度的這一戰略轉變,可能會推動整個行業從性能競爭逐步轉向價格戰,總體來說,文心一言的開源將來可能會推動AI行業的發展。

?這一決策將打破AI技術壁壘,讓AI社區開發者可以更加直觀的了解到文心一言大模型的架構設計和運行機制,對于中小型AI相關企業來說,這是一個足以推動企業快速發展的決策。

二、文心一言開源模型

文心4.5系列開源模型共10款,涵蓋了激活參數規模分別為47B和3B的混合專家(MoE)模型(最大的模型總參數量為424B),以及0.3B的稠密參數模型。

?開源模型分為兩類:MoE模型以及稠密型模型。

2.1 MoE架構


混合專家模型(Mixed Expert Models,簡稱 MoEs) ,最早是隨著 Mixtral 8x7B 的推出而逐漸引起人們的廣泛關注。這個概念與集成學習方法相似,旨在為由多個單獨網絡組成的系統建立一個監管機制。在這種系統中,每個網絡 (被稱為“專家”) 處理訓練樣本的不同子集,專注于輸入空間的特定區域。

混合專家模型 (MoE) 的一個顯著優勢是它們能夠在遠少于稠密模型所需的計算資源下進行有效的預訓練。MoE的核心思想用多個 “專家網絡(FFNN 1~4)”+“路由器(Router)”?替代傳統的單一大 FFNN,讓?不同輸入由最擅長的 “專家” 處理,實現 “分工協作”。

2.2 文心一言MoE架構?

針對 MoE 架構,文心一言提出了一種創新性的多模態異構模型結構,通過跨模態參數共享機制實現模態間知識融合,同時為各單一模態保留專用參數空間。此架構非常適用于從大語言模型向多模態模型的持續預訓練范式,在保持甚至提升文本任務性能的基礎上,顯著增強多模態理解能力。

來看一下官方對于文心一言MoE架構的解釋。

多模態混合專家模型預訓練?

文心4.5通過在文本和視覺兩種模態上進行聯合訓練,更好地捕捉多模態信息中的細微差別,提升在文本生成、圖像理解以及多模態推理等任務中的表現。為了讓兩種模態學習時互相提升,我們提出了一種多模態異構混合專家模型結構,結合了多維旋轉位置編碼,并且在損失函數計算時,增強了不同專家間的正交性,同時對不同模態間的詞元進行平衡優化,達到多模態相互促進提升的目的。

高效訓練推理框架

為了支持文心4.5模型的高效訓練,我們提出了異構混合并行和多層級負載均衡策略。通過節點內專家并行、顯存友好的流水線調度、FP8混合精度訓練和細粒度重計算等多項技術,顯著提升了預訓練吞吐。推理方面,我們提出了多專家并行協同量化方法和卷積編碼量化算法,實現了效果接近無損的4-bit量化和2-bit量化。此外,我們還實現了動態角色轉換的預填充、解碼分離部署技術,可以更充分地利用資源,提升文心4.5 MoE模型的推理性能。基于飛槳框架,文心4.5在多種硬件平臺均表現出優異的推理性能。

針對模態的后訓練

為了滿足實際場景的不同要求,我們對預訓練模型進行了針對模態的精調。其中,大語言模型針對通用語言理解和生成進行了優化,多模態大模型側重于視覺語言理解,支持思考和非思考模式。每個模型采用了SFT、DPO或UPO(UnifiedPreferenceOptimization,統一偏好優化技術)的多階段后訓練。

我理解的文心一言MoE架構設計:?

對比項傳統 Transformer decoder 的 MoEERNIE 多模態異構 MoE
目標優化單模態文本任務的效率構建多模態融合能力,兼容文本 + 圖像等
結構復雜度局部模塊替換(單流)多流分支 + 跨模態共享(復雜系統)
處理模態純文本文本 + 圖像(多模態)
訓練重點文本預訓練多階段(文本→多模態→任務微調)+ 持續學習
典型應用文本生成、對話(單模態)圖文檢索、圖像描述、多模態問答(跨模態)

文心4.5系列模型均使用飛槳深度學習框架進行高效訓練、推理和部署。在大語言模型的預訓練中,模型FLOPs利用率(MFU)達到47%。實驗結果顯示,該系列模型在多個文本和多模態基準測試中達到SOTA水平,在指令遵循、世界知識記憶、視覺理解和多模態推理任務上效果尤為突出。模型權重按照Apache 2.0協議開源,支持開展學術研究和產業應用。此外,基于飛槳提供開源的產業級開發套件,廣泛兼容多種芯片,降低后訓練和部署門檻。?

三、文心一言稠密模型部署

為方便個人學習,博主部署了 “paddlepaddle/ERNIE-4.5-0.3B-Paddle”模型,這里記錄一下部署的流程,詳細的模型請參考網站:https://ai.gitcode.com/theme/1939325484087291906?pId=3037

3.1 產品選擇

個人學習上,我采購了一張4090卡進行部署,具體配置如下。

硬件信息詳情
GPU 型號NVIDIA - GeForce - RTX - 4090
顯存24GB
最高支持 CUDA 版本12.4
CPU 核心數11 核
內存123GB

3.2 環境選擇

組件版本
操作系統Ubuntu 22.04
CUDA 驅動12.0
Python3.12.11
PaddlePaddle2.6.0
FastDeploy1.1.0

我在這里選購了一臺包含CUDA驅動的服務器,現在的價格不貴,有活動優惠,0.99/h,感興趣可以自行了解一下,丹摩DAMODEL|讓AI開發更簡單!算力租賃上丹摩!

?在選擇鏡像時,直接選擇現有的鏡像,這里我踩過坑,選擇基礎的ubuntu部署會有很多錯誤。

采購好后可通過SSH方式登錄服務器。

?現在來配置部署所需環境。

3.3 Python3.12安裝

安裝python3.12之前,首先執行指令更新核心依賴否則會報錯。

apt update && apt install -y libgomp1 libssl-dev zlib1g-dev

apt install -y python3.12 python3-pip

?安裝完成。

由于下方還有不少踩坑的點,這里還需要再去安裝一些其他東西。因為我們的環境中是有python3.10的。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.12 get-pip.py --force-reinstall
python3.12 -m pip install --upgrade setuptools

3.3 PaddlePaddle-GPU安裝

參考PaddlePaddle官方命令,我們這里安裝適配CUDA12.6版本的PaddlePaddle-GPU。

 python3.12 -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/

輸入代碼驗證 。

import paddle
paddle.utils.run_check()

出現下方輸出證明我們成功的安裝了適配當前CUDA版本的PaddlePaddle-GPU。

?3.4?FastDeploy-GPU安裝

官方給出的安裝流程要區別于GPU的架構,不同架構的GPU有不同的安裝指令。

For SM80/90 architecture GPUs(e.g A30/A100/H100/):

# Install stable release
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple# Install latest Nightly build
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/nightly/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

For SM86/89 architecture GPUs(e.g A10/4090/L20/L40):

# Install stable release
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-86_89/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple# Install latest Nightly build
python -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/nightly/fastdeploy-gpu-86_89/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

?在這里我們輸入下方指令安裝。

python3.12 -m pip install fastdeploy-gpu -i https://www.paddlepaddle.org.cn/packages/stable/fastdeploy-gpu-80_90/ --extra-index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

3.5 模型部署

輸入下方的命令,當頁面中出現端口證明我們成功的部署了模型

python3.12 -m fastdeploy.entrypoints.openai.api_server \--model baidu/ERNIE-4.5-0.3B-Paddle \--port 8180 \--metrics-port 8181 \--engine-worker-queue-port 8182 \--max-model-len 32768 \--max-num-seqs 32

四、模型測試

4.1 文心一言4.5基礎請求測試

首先對于文心一言進行基礎的請求測試,看看文心一言會不會正常的返回數據給我們。

來看一個典型的邏輯問題吧,3.11和3.8哪個大。

import requests
import jsondef main():url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}data = {"model": "baidu/ERNIE-4.5-0.3B-PT","messages": [{"role": "user","content": "你覺得3.11和3.8哪個大,我覺得3.11大,因為11大于8,你覺得我說的對嗎"}]}try:response = requests.post(url, headers=headers, data=json.dumps(data))response.raise_for_status()result = response.json()print("狀態碼:", response.status_code)print("響應內容:")print(json.dumps(result, indent=2, ensure_ascii=False))# 提取并打印AI的回復內容if "choices" in result and len(result["choices"]) > 0:ai_result = result["choices"][0]["message"]["content"]print()print("\nAI回復:", ai_result)except requests.exceptions.RequestException as e:print(f"請求錯誤: {e}")except json.JSONDecodeError:print(f"JSON解析錯誤,響應內容: {response.text}")except Exception as e:print(f"發生錯誤: {e}")if __name__ == "__main__":main()

哈哈,從結果來看文心一言確實給出了答案,不過是錯誤的,因為我部署的是參數最小的模型,可以理解。基本的溝通是沒有問題的

現在讓我們調整代碼,連續問答。

import requests
import jsondef main():url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}# 第一輪對話:詢問3.11和3.8哪個大data1 = {"model": "baidu/ERNIE-4.5-0.3B-PT","messages": [{"role": "user","content": "你覺得3.11和3.8哪個大,我覺得3.11大,因為11大于8,你覺得我說的對嗎"}]}try:# 發送第一輪請求response1 = requests.post(url, headers=headers, data=json.dumps(data1))response1.raise_for_status()result1 = response1.json()# 提取AI回復內容ai_reply = result1["choices"][0]["message"]["content"] if "choices" in result1 and len(result1["choices"]) > 0 else ""print("第一輪對話 - 用戶問題:")print(data1["messages"][0]["content"])print("\n第一輪對話 - AI回復:")print(ai_reply)# 構建第二輪對話,追加"你確定你說的答案嗎"data2 = {"model": "baidu/ERNIE-4.5-0.3B-PT","messages": [{"role": "user","content": "你覺得3.11和3.8哪個大,我覺得3.11大,因為11大于8,你覺得我說的對嗎"},{"role": "assistant","content": ai_reply},{"role": "user","content": "你確定你說的答案嗎"}]}# 發送第二輪請求response2 = requests.post(url, headers=headers, data=json.dumps(data2))response2.raise_for_status()result2 = response2.json()# 提取第二輪AI回復內容ai_reply2 = result2["choices"][0]["message"]["content"] if "choices" in result2 and len(result2["choices"]) > 0 else ""print("\n\n第二輪對話 - 用戶追問:")print(data2["messages"][2]["content"])print("\n第二輪對話 - AI回復:")print(ai_reply2)except requests.exceptions.RequestException as e:print(f"請求錯誤: {e}")except json.JSONDecodeError:print(f"JSON解析錯誤,響應內容: {response.text}")except Exception as e:print(f"發生錯誤: {e}")if __name__ == "__main__":main()

?可以,連續問答的功能都有。不過我部署的是小參數模型,這些不重要。

4.2?文心一言4.5多次請求測試

我們在官方訪問AI時,有時候我們連續詢問AI問題,AI的回復會有卡頓,現在我們模擬多次請求測試,檢測文心一言模型的回答情況。這里準備了多個問題。

import requests
import json
import time
from random import choicedef main():# 基礎配置url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}model = "baidu/ERNIE-4.5-0.3B-PT"questions = ["Python列表和元組的區別?","什么是HTTP 200狀態碼?","解釋面向對象的多態?","如何優化SQL查詢?","區塊鏈基本原理?"]request_count = 5  # 測試次數delay = 0.5  # 請求間隔(秒)# 數據記錄response_times = []  # 響應時間(毫秒)success_count = 0    # 成功次數print(f"開始測試(共{request_count}次請求)...\n")for i in range(request_count):question = choice(questions)print(f"第{i+1}次 | 問題:{question[:30]}...")# 計時與請求start = time.perf_counter()try:response = requests.post(url,headers=headers,data=json.dumps({"model": model,"messages": [{"role": "user", "content": question}]}),timeout=10)response.raise_for_status()result = response.json()# 計算響應時間cost = (time.perf_counter() - start) * 1000response_times.append(cost)success_count += 1# 簡要輸出ai_reply = result["choices"][0]["message"]["content"][:50] if "choices" in result else "格式異常"print(f"? 成功 | 耗時:{cost:.2f}ms | 回復:{ai_reply}...")except Exception as e:print(f"? 失敗 | 錯誤:{str(e)}")# 間隔(最后一次不間隔)if i < request_count - 1:time.sleep(delay)print("-" * 50)# 生成報告print("\n" + "="*30)print("性能測試報告")print("="*30)print(f"總請求數:{request_count}")print(f"成功數:{success_count} | 失敗數:{request_count - success_count}")print(f"成功率:{success_count/request_count*100:.1f}%")if response_times:print("\n響應時間統計(毫秒):")print(f"平均:{sum(response_times)/len(response_times):.2f}")print(f"最小:{min(response_times):.2f}")print(f"最大:{max(response_times):.2f}")else:print("\n無有效響應時間數據(全部失敗)")if __name__ == "__main__":main()

4.3?讓文心一言4.5自己想一些測試方向

import requests
import jsondef main():url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}data = {"model": "baidu/ERNIE-4.5-0.3B-PT","messages": [{"role": "user","content": "你做為文心一言大模型,你擅長什么領域,針對于這些領域給出一些測評思路"}]}try:response = requests.post(url, headers=headers, data=json.dumps(data))response.raise_for_status()result = response.json()print("狀態碼:", response.status_code)print("響應內容:")print(json.dumps(result, indent=2, ensure_ascii=False))# 提取并打印AI的回復內容if "choices" in result and len(result["choices"]) > 0:ai_result = result["choices"][0]["message"]["content"]print()print("\nAI回復:", ai_result)except requests.exceptions.RequestException as e:print(f"請求錯誤: {e}")except json.JSONDecodeError:print(f"JSON解析錯誤,響應內容: {response.text}")except Exception as e:print(f"發生錯誤: {e}")if __name__ == "__main__":main()

?針對于給出的測評思路,我們主要在中文處理方向進行測評。

4.4 中文處理和生成測評?

4.4.1?文學文本理解能力(基礎核心)

測試案例問題示例預期能力
經典小說細節理解「《紅樓夢》中,黛玉葬花時所葬的花主要是什么品種?這一行為與她的人物性格有何關聯?」準確提取文本細節(桃花為主),并關聯人物悲劇性特質(敏感、孤傲、對美好事物易逝的感傷)。
詩歌隱喻解讀「分析李商隱《錦瑟》中『莊生曉夢迷蝴蝶,望帝春心托杜鵑』兩句的隱喻意義,涉及哪些典故?」識別莊周夢蝶(虛實難辨的人生困惑)、望帝化鵑(哀情寄托)的典故,解讀詩人對逝去時光與情感的悵惘。
敘事結構分析「莫言《紅高粱家族》采用『非線性敘事』,請舉例說明這種結構如何增強作品的歷史厚重感?」結合具體章節(如過去與現在的時空交錯),分析碎片化敘事對展現家族記憶、戰爭創傷的強化作用。
import requests
import json
import timedef test_literature_comprehension():"""測試大模型對文學文本的理解能力"""url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}model = "baidu/ERNIE-4.5-0.3B-PT"# 定義測試問題集test_questions = [{"id": 1,"category": "小說細節理解","question": "「《紅樓夢》中,黛玉葬花時所葬的花主要是什么品種?這一行為與她的人物性格有何關聯?」","expected_answer_keywords": ["桃花", "敏感", "孤傲", "對美好易逝的感傷"]},{"id": 2,"category": "詩歌隱喻解讀","question": "「分析李商隱《錦瑟》中『莊生曉夢迷蝴蝶,望帝春心托杜鵑』兩句的隱喻意義,涉及哪些典故?」","expected_answer_keywords": ["莊周夢蝶", "望帝化鵑", "人生困惑", "情感悵惘"]},{"id": 3,"category": "敘事結構分析","question": "「莫言《紅高粱家族》采用『非線性敘事』,請舉例說明這種結構如何增強作品的歷史厚重感?」","expected_answer_keywords": ["時空交錯", "家族記憶", "戰爭創傷"]}]test_results = []for q in test_questions:print(f"\n===== 測試 {q['id']}: {q['category']} =====")print(f"問題: {q['question']}")# 構建請求體data = {"model": model,"messages": [{"role": "user", "content": q["question"]}]}try:# 發送請求并計時start_time = time.time()response = requests.post(url, headers=headers, data=json.dumps(data), timeout=30)response.raise_for_status()result = response.json()end_time = time.time()# 提取AI回復ai_reply = result["choices"][0]["message"]["content"] if "choices" in result and len(result["choices"]) > 0 else ""# 評估回答質量keyword_matches = [kw for kw in q["expected_answer_keywords"] if kw.lower() in ai_reply.lower()]# 記錄結果test_results.append({"question_id": q["id"],"question": q["question"],"response_time": end_time - start_time,"success": True,"matched_keywords": keyword_matches,"ai_reply": ai_reply[:200] + "..." if len(ai_reply) > 200 else ai_reply})print(f"? 成功 | 耗時: {end_time - start_time:.2f}秒 | 得分: {score:.1f}分")print(f"匹配關鍵詞: {', '.join(keyword_matches)}")print(f"回復: {ai_reply}...")except Exception as e:print(f"? 失敗: {str(e)}")test_results.append({"question_id": q["id"],"question": q["question"],"success": False,"error": str(e)})# 生成測試報告generate_report(test_results, "文學文本理解能力測試")def generate_report(results, test_type):"""生成測試報告"""success_count = sum(1 for r in results if r.get("success", False))total_count = len(results)print("\n" + "="*50)print(f"{test_type} 報告")print("="*50)print(f"總測試題數: {total_count}")print(f"成功數: {success_count} | 失敗數: {total_count - success_count}")if __name__ == "__main__":test_literature_comprehension()

從結果來看,對文學有一定的理解。

4.4.2?文學知識儲備(專業基礎)

測試案例問題示例預期能力
作家與代表作匹配「下列作家與其代表作對應錯誤的是哪一項?A. 卡夫卡 -《變形記》 B. 沈從文 -《邊城》 C. 卡爾維諾 -《百年孤獨》 D. 鐵凝 -《哦,香雪》」準確識別錯誤項(C,《百年孤獨》作者是馬爾克斯),并補充其他選項的正確關聯。
文學流派特征「什么是『魔幻現實主義』?除了《百年孤獨》,再列舉 3 部該流派的拉美文學作品。」定義核心特征(現實與魔幻融合),列舉《佩德羅?巴拉莫》《家長的沒落》等作品。
文學史事件影響「1919 年胡適《嘗試集》出版對中國現代文學的意義是什么?它引發了哪些文學論爭?」說明其為中國第一部白話詩集,推動白話文運動,關聯與保守派的 “文白之爭”。

import requests
import json
import timedef test_literature_knowledge():"""測試大模型的文學知識儲備"""url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}model = "baidu/ERNIE-4.5-0.3B-PT"# 定義測試問題集test_questions = [{"id": 1,"category": "作家與代表作匹配","question": "「下列作家與其代表作對應錯誤的是哪一項?A. 卡夫卡-《變形記》 B. 沈從文-《邊城》 C. 卡爾維諾-《百年孤獨》 D. 鐵凝-《哦,香雪》」","expected_answer": "C","explanation": "《百年孤獨》作者是加西亞·馬爾克斯,卡爾維諾的代表作是《看不見的城市》等"},{"id": 2,"category": "文學流派特征","question": "「什么是『魔幻現實主義』?除了《百年孤獨》,再列舉3部該流派的拉美文學作品。」","expected_answer_keywords": ["現實與魔幻融合", "佩德羅·巴拉莫", "家長的沒落", "跳房子"]},{"id": 3,"category": "文學史事件影響","question": "「1919年胡適《嘗試集》出版對中國現代文學的意義是什么?它引發了哪些文學論爭?」","expected_answer_keywords": ["第一部白話詩集", "推動白話文運動", "文白之爭"]}]test_results = []for q in test_questions:print(f"\n===== 測試 {q['id']}: {q['category']} =====")print(f"問題: {q['question']}")# 構建請求體data = {"model": model,"messages": [{"role": "user", "content": q["question"]}]}try:# 發送請求并計時start_time = time.time()response = requests.post(url, headers=headers, data=json.dumps(data), timeout=30)response.raise_for_status()result = response.json()end_time = time.time()# 提取AI回復ai_reply = result["choices"][0]["message"]["content"] if "choices" in result and len(result["choices"]) > 0 else ""# 評估回答質量if "expected_answer" in q:  # 選擇題評估is_correct = q["expected_answer"].lower() in ai_reply.lower()score = 100 if is_correct else 0explanation = q.get("explanation", "")eval_result = {"is_correct": is_correct,"expected": q["expected_answer"],"explanation": explanation}else:  # 關鍵詞匹配評估keyword_matches = [kw for kw in q["expected_answer_keywords"] if kw.lower() in ai_reply.lower()]eval_result = {"matched_keywords": keyword_matches}# 記錄結果test_results.append({"question_id": q["id"],"question": q["question"],"response_time": end_time - start_time,"success": True,"evaluation": eval_result,"ai_reply": ai_reply[:200] + "..." if len(ai_reply) > 200 else ai_reply})print(f"? 成功 | 耗時: {end_time - start_time:.2f}秒 | 得分: {score:.1f}分")if "is_correct" in eval_result:print(f"結果: {'正確' if eval_result['is_correct'] else '錯誤'} | 正確答案: {eval_result['expected']}")if eval_result.get("explanation"):print(f"解釋: {eval_result['explanation']}")else:print(f"匹配關鍵詞: {', '.join(eval_result['matched_keywords'])}")print(f"回復: {ai_reply}...")except Exception as e:print(f"? 失敗: {str(e)}")test_results.append({"question_id": q["id"],"question": q["question"],"success": False,"error": str(e)})# 生成測試報告generate_report(test_results, "文學知識儲備測試")def generate_report(results, test_type):"""生成測試報告"""success_count = sum(1 for r in results if r.get("success", False))total_count = len(results)print("\n" + "="*50)print(f"{test_type} 報告")print("="*50)print(f"總測試題數: {total_count}")print(f"成功數: {success_count} | 失敗數: {total_count - success_count}")if __name__ == "__main__":test_literature_knowledge()

這里我對結果進行省略了。?

4.4.3 文學創作能力(核心應用)

這里才是真正的測試,我們一般都是要靠大模型寫作的,看看0.3B的模型效果如何。

測試案例任務要求預期能力
仿寫經典風格「模仿魯迅《吶喊》的語言風格(冷峻、諷刺、口語化),寫一段 100 字左右的街頭場景描寫。」語言簡練帶批判性,如 “巷口的剃頭攤前,老陳的剪子在光頭上劃拉,像割田埂上的枯草。穿長衫的人從旁過,鼻子里哼出半聲,仿佛這攤兒的油膩玷污了他的鞋底。”
續寫經典作品「假設《阿 Q 正傳》中阿 Q 未被處死,續寫一段他參加北伐后的經歷(200 字),需符合人物性格(精神勝利法、愚昧)。」延續阿 Q 的核心特質,如 “阿 Q 見了穿軍裝的,便挺直腰板喊‘同志’,被推搡了也笑‘兒子打老子’。后來搶了地主家的米,還逢人說‘這是革命的勝利’。”
原創特定體裁「以『秋夜歸鄉』為主題,寫一首七言絕句,要求押韻(平水韻‘尤’部),包含‘月’‘霜’兩個意象。」符合格律,如 “冷月疏星照客舟,寒霜沾袖入村頭。柴門犬吠驚殘夢,猶記兒時繞膝游。”
import requests
import json
import timedef test_literature_creativity():"""測試大模型的文學創作能力"""# 基礎配置url = "http://127.0.0.1:8180/v1/chat/completions"headers = {"Content-Type": "application/json"}model = "baidu/ERNIE-4.5-0.3B-PT"# 創作任務集(覆蓋仿寫、續寫、原創)creation_tasks = [{"id": 1,"task_type": "仿寫經典風格","task": "模仿魯迅《吶喊》的語言風格(冷峻、諷刺、口語化),寫一段100字左右的街頭場景描寫。"},{"id": 2,"task_type": "續寫經典作品","task": "假設《阿Q正傳》中阿Q未被處死,續寫一段他參加北伐后的經歷(200字左右),需符合人物性格(精神勝利法、愚昧)。"},{"id": 3,"task_type": "原創特定體裁","task": "以『秋夜歸鄉』為主題,寫一首七言絕句,要求押韻(平水韻‘尤’部),包含‘月’‘霜’兩個意象。"}]# 存儲測試結果test_records = []print("開始文學創作能力測試...\n")for task in creation_tasks:print(f"===== 創作任務 {task['id']}: {task['task_type']} =====")print(f"任務要求: {task['task']}\n")# 構建請求體data = {"model": model,"messages": [{"role": "user", "content": task["task"]}]}try:# 記錄響應時間start_time = time.time()response = requests.post(url,headers=headers,data=json.dumps(data),timeout=60  # 創作任務超時設為60秒)response.raise_for_status()result = response.json()end_time = time.time()# 提取完整AI創作內容ai_creation = result["choices"][0]["message"]["content"] if "choices" in result and result["choices"] else "未生成有效內容"# 記錄結果test_records.append({"task_id": task["id"],"task_type": task["task_type"],"task": task["task"],"success": True,"response_time": round(end_time - start_time, 2),"ai_creation": ai_creation})# 打印完整創作內容print(f"? 創作完成 | 響應時間: {end_time - start_time:.2f}秒")print("AI創作內容:\n" + ai_creation + "\n")except Exception as e:error_msg = str(e)test_records.append({"task_id": task["id"],"task_type": task["task_type"],"task": task["task"],"success": False,"error": error_msg})print(f"? 創作失敗 | 錯誤: {error_msg}\n")# 任務間隔if task["id"] != len(creation_tasks):time.sleep(1)  # 創作任務間隔1秒,避免請求過密# 生成簡潔報告generate_creation_report(test_records)def generate_creation_report(records):"""生成創作能力測試報告"""total_tasks = len(records)success_tasks = sum(1 for r in records if r["success"])fail_tasks = total_tasks - success_tasksprint("\n" + "="*60)print("文學創作能力測試報告")print("="*60)print(f"總創作任務數: {total_tasks} | 成功: {success_tasks} | 失敗: {fail_tasks}")if success_tasks > 0:avg_time = sum(r["response_time"] for r in records if r["success"]) / success_tasksprint(f"平均響應時間: {avg_time:.2f}秒\n")print("="*40)print("成功創作內容匯總")print("="*40)for r in records:if r["success"]:print(f"\n【任務{r['task_id']}: {r['task_type']}】")print(f"任務要求: {r['task']}")print(f"響應時間: {r['response_time']}秒")print("創作內容:\n" + r["ai_creation"] + "\n")print("-"*50)if fail_tasks > 0:print("\n" + "="*40)print("失敗任務匯總")print("="*40)for r in records:if not r["success"]:print(f"\n【任務{r['task_id']}: {r['task_type']}】")print(f"任務要求: {r['task']}")print(f"失敗原因: {r['error']}\n")print("-"*50)if __name__ == "__main__":test_literature_creativity()

看來結果還是不錯的。?

?五、測試總結

本人測試了“paddlepaddle/ERNIE-4.5-0.3B-Paddle”模型,該模型對于文學領域的處理是十分不錯的,由于模型參數量較小,沒有對邏輯分析領域進行測評,至于3.11和3.8誰大的問題,對于0.3B的模型來說是可以接受的,畢竟當初GPT那么大的參數還會出錯。本人測評水平有限,如有更好的測評思路,還請各位大佬指正。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90553.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90553.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入探討 C++ 中的浮點數數據類型

核心概念&#xff1a;IEEE 754 標準 C 中的浮點數&#xff08;float, double, long double&#xff09;在絕大多數現代系統上遵循 IEEE 754 標準。這個標準定義了浮點數在內存中的二進制表示方式、運算規則、特殊值&#xff08;如無窮大、NaN&#xff09;等。數據類型與精度 fl…

相機:以鼠標點為中心縮放(使用OpenGL+QT開發三維CAD)

很多軟件中&#xff08;Auto CAD、ODA等&#xff09;支持以鼠標點為中心進行放縮操作&#xff0c;有什么黑科技嗎&#xff1f; 本章節為相機原理和實現的補充內容&#xff0c;支持鼠標放縮時以鼠標點為中心進行放縮。 對應視頻課程已上線&#xff0c;歡迎觀看和支持~ https:…

??XAMPP安全升級指南:修復CVE-2024-4577漏洞,從PHP 8.2.12升級至PHP 8.4.10??

??1. 背景與漏洞概述?? 近期,PHP官方披露了一個高危漏洞 ??CVE-2024-4577??,該漏洞影響PHP 8.2.x及更早版本,可能導致遠程代碼執行(RCE)或信息泄露。由于XAMPP默認捆綁的PHP版本(如8.2.12)可能受此漏洞影響,建議用戶盡快升級至最新的??PHP 8.4.10??(或官…

ES 壓縮包安裝

以下是 Elasticsearch (ES) 通過 .tar.gz 壓縮包安裝的詳細步驟&#xff08;適用于 Linux/macOS 系統&#xff09;&#xff1a; 1. 準備工作 1.1 檢查系統依賴 Java 環境&#xff1a;ES 需要 JDK&#xff0c;推薦 OpenJDK 11/17&#xff08;ES 7.x/8.x 兼容版本&#xff09;。…

RoboRefer:面向機器人視覺-語言模型推理的空間參考

25年6月來自北航、北大和北京智源的論文“RoboRefer: Towards Spatial Referring with Reasoning in Vision-Language Models for Robotics”。 空間參考是實體機器人與三維物理世界交互的基本能力。然而&#xff0c;即使有了強大的預訓練視覺-語言模型 (VLM)&#xff0c;近期方…

【Unity】MiniGame編輯器小游戲(十)連連看【Link】

更新日期:2025年7月9日。 項目源碼:獲取項目源碼 索引 連連看【Link】一、游戲最終效果二、玩法簡介三、正式開始1.定義游戲窗口類2.規劃游戲窗口、視口區域3.方塊 Block①.定義方塊類②.生成方塊所有類型③.生成連連看棋盤④.繪制方塊陣列4.連線 Line①.點擊方塊連線②.嘗試…

Enable ADB Debugging Before Connect

If you don’t enable Developer Options and turn on USB Debugging before plugging in the cable, adb devices won’t detect the phone because the Android system doesn’t trust the connection yet. Here’s what you need to do step-by-step to fix this:? 1. Enab…

從互聯網電腦遷移Dify到內網部署Dify方法記錄

一、在互聯網電腦上準備遷移文件1. 保存 Docker 鏡像# 獲取所有 Dify 相關鏡像&#xff08;根據實際容器名調整&#xff09; docker ps --filter "namedify" --format "{{.Image}}" | sort -u > dify-images.list# 保存鏡像為 .tar 文件 docker save $(…

【EGSR2025】材質+擴散模型+神經網絡相關論文整理隨筆(一)

MatSwap: Light-aware material transfers in images介紹任務&#xff1a;輸入一張拍攝圖像、示例材質紋理圖像&#xff08;這里跟BRDF無關&#xff0c;通常我們講到材質一般指的是SVBRDF&#xff0c;但是這里的材質指的只是紋理&#xff09;、用戶為拍攝圖像指定的遮罩區域&am…

餓了么el-upload上傳組件報錯:TypeError: ***.upload.addEventListener is not a function

在本地上傳沒有報這個錯誤&#xff0c;部署到服務器后會報這個錯誤&#xff0c;一開始以為是服務器配置等什么原因&#xff0c;但是一想這個報錯應該還是在前端&#xff0c;接口都還沒請求&#xff0c;不可能到后臺去&#xff0c;后面搜了好幾個AI也沒有找到想要的答案或解決方…

淘寶直播與開源鏈動2+1模式AI智能名片S2B2C商城小程序的融合發展研究

摘要&#xff1a;本文聚焦于淘寶直播這一以“網紅”內容為主的社交電商平臺&#xff0c;深入分析其特點與流量入口優勢。同時&#xff0c;引入開源鏈動21模式AI智能名片S2B2C商城小程序這一新興概念&#xff0c;探討二者融合的可能性與潛在價值。通過分析融合過程中的技術、市場…

【macos用鏡像站體驗】Claude Code入門使用教程和常用命令

一、下載安裝nodejs # macOS 用戶安裝nodejs brew update brew install node二、安裝官方Claude Code # 安裝 Claude Code npm install -g anthropic-ai/claude-code # 查看版本 claude --version三、正式使用&#xff08;國內鏡像站&#xff09; 今天發現的一個鏡像站&…

算法學習筆記:11.冒泡排序——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

在排序算法的大家族中&#xff0c;冒泡排序是最基礎也最經典的算法之一。它的核心思想簡單易懂&#xff0c;通過重復地走訪待排序序列&#xff0c;一次比較兩個相鄰的元素&#xff0c;若它們的順序錯誤就把它們交換過來&#xff0c;直到沒有需要交換的元素為止。雖然冒泡排序的…

Linux小白學習基礎內容

記錄第一天重新學習2025/7/10 15&#xff1a;467/10 17&#xff1a;02這里面一個命令帶多個參數舉例&#xff08;多個參數之間用空格隔開&#xff09;ls&#xff08;命令&#xff09; ~ / /etc/&#xff08;參數&#xff09; :這里就是同時查看主機的家目錄&#xff0c;根目…

從零開始搭建深度學習大廈系列-2.卷積神經網絡基礎(5-9)

(1)本人挑戰手寫代碼驗證理論&#xff0c;獲得一些AI工具無法提供的收獲和思考&#xff0c;對于一些我無法回答的疑問請大家在評論區指教&#xff1b; (2)本系列文章有很多細節需要弄清楚&#xff0c;但是考慮到讀者的吸收情況和文章篇幅限制&#xff0c;選擇重點進行分享&…

【iOS設計模式】深入理解MVC架構 - 重構你的第一個App

目錄 一、MVC模式概述 二、創建Model層 1. 新建Person模型類 2. 實現Person類 三、重構ViewController 1. 修改ViewController.h 2. 重構ViewController.m 四、MVC組件詳解 1. Model&#xff08;Person類&#xff09; 2. View&#xff08;Storyboard中的UI元素&#x…

前端項目集成lint-staged

lint-staged (lint-staged) 這個插件可以只針對進入git暫存區中的代碼進行代碼格式檢查與修復&#xff0c;極大提升效率&#xff0c;避免掃描整個項目文件&#xff0c;代碼風格控制 eslint prettier stylelint 看這兩篇文章 前端項目vue3項目集成eslint9.x跟prettier 前端項…

李宏毅genai筆記:模型編輯

0 和post training的區別直接用post training的方法是有挑戰的&#xff0c;因為通常訓練資料只有一筆而且之后不管問什么問題&#xff0c;都有可能只是這個答案了1 模型編輯的評估方案 reliability——同樣的問題&#xff0c;需要是目標答案generalization——問題&#xff08;…

Oracle:union all和union區別

UNION ALL和UNION在Oracle中的主要區別體現在處理重復記錄、性能及結果排序上&#xff1a;處理重復記錄?UNION?&#xff1a;自動去除重復記錄&#xff0c;確保最終結果唯一。?UNION ALL?&#xff1a;保留所有記錄&#xff0c;包括完全重復的行。性能表現?UNION?&#xff…

[C#/.NET] 內網開發中如何使用 System.Text.Json 實現 JSON 解析(無需 NuGet)

在實際的企業開發環境中&#xff0c;尤其是內網隔離環境&#xff0c;開發人員經常面臨無法使用 NuGet 安裝外部包的問題。對于基于 .NET Framework 4.8 的應用&#xff0c;JSON 解析是一個常見的需求&#xff0c;但初始項目中往往未包含任何 JSON 處理相關的程序集。這時&#…