??事情是這樣的,我們公司不是有個讀書小組嘛,但是今年大家都忙于工作,忽視了讀書這件事,所以我就想著搞個群機器人,讓它明天定時向群里推薦一本書,用來喚起大家對讀書的興趣。但在調試的過程中就發現gpt4o老喜歡推薦同樣的幾本書,這可就勾起我的好奇心了,是不是gpt4o就只知道推薦那幾本,正好周末有空,我就斥巨資調用gpt4o的接口讓它給我推薦書,調用1000次+,發現gpt4o最喜歡的書是…… 具體讓我們來看下推薦結果的簡單分析。
TOP20
??首先我們直接看下Top20推薦書及其所占推薦比例:
??排名前三的分別是《百年孤獨》《人類簡史:從動物到上帝》《殺死一直知更鳥》,前三的推薦比例接近一半,尤其是第一的《百年孤獨》,在一千多次推薦中直接占有了超過25%的推薦比例,說明gpt4o是非常喜歡《百年孤獨》這本書。
??從上圖中也可以看到,推薦比例前20的書都是一些很知名的書,我自己的話僅有其中6本沒有看過,說來慚愧排名第一的《百年孤獨》我自己收藏了一本紙質版,但一直都沒看進去過,之前晚上傳把里面任務的名字換成鄉村愛情里角色的名字有利于閱讀,不知道是真是假。 扯遠了,gpt4o推薦排前二十書還是很推薦閱讀的。
TOP50
??這里我也順便將推薦排名前50的書及推薦次數列在下面,當然在總的1608次推薦里,gpt4o一共推薦出了200多本書,看剩下沒列出的推薦次數都是1-2次,而且有些書根本就不存在(應該是大模型幻覺),所以我這里就不再列出。
書名 | 推薦次數 |
---|---|
百年孤獨 | 431 |
人類簡史:從動物到上帝 | 244 |
殺死一只知更鳥 | 99 |
槍炮、病菌與鋼鐵:人類社會的命運 | 93 |
三體 | 87 |
思考,快與慢 | 78 |
一九八四 | 76 |
追風箏的人 | 52 |
小王子 | 37 |
了不起的蓋茨比 | 34 |
蘇菲的世界 | 29 |
高效能人士的七個習慣 | 27 |
戰爭與和平 | 26 |
基地 | 26 |
挪威的森林 | 20 |
原子習慣 | 14 |
如何贏得朋友與影響他人 | 11 |
從優秀到卓越 | 11 |
影響力 | 9 |
被討厭的勇氣 | 9 |
沙丘 | 8 |
霍亂時期的愛情 | 8 |
活著 | 8 |
銀河系漫游指南 | 7 |
從零到一 | 7 |
成為 | 7 |
2001:太空漫游 | 7 |
自控力 | 6 |
當下的力量 | 6 |
當呼吸化為空氣 | 6 |
習慣的力量 | 5 |
悉達多 | 5 |
老人與海 | 5 |
心流:最優體驗心理學 | 4 |
無人生還 | 4 |
史蒂夫·喬布斯傳 | 4 |
少有人走的路 | 4 |
從0到1 | 4 |
自私的基因 | 3 |
自卑與超越 | 3 |
學會提問 | 3 |
心態:成功的心理學 | 3 |
深度工作 | 3 |
窮爸爸富爸爸 | 3 |
局外人 | 3 |
活出生命的意義 | 3 |
海伯利安 | 3 |
創新者的窘境 | 3 |
消失的愛人 | 2 |
堂吉訶德 | 2 |
統計方法
??這里公開下我的統計代碼,如果大家有興趣可以復現下,或者研究下其他LLM模型推薦的數據,這里主體用langChain實現,用到了gpt4o來推薦書,然后用了deepseek用來洗數據統計(主要是便宜),最后兩個模型總共花了20多塊錢(RMB)。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser,JsonOutputParser
from langchain_core.runnables import RunnablePassthrough
from collections import Counter
import json
from collections import Counter
from concurrent.futures import ThreadPoolExecutor, as_completedgpt4o = ChatOpenAI(model="gpt-4o", max_tokens=1024, temperature=1) # 這里temperature設置為1,增加返回結果的隨機性
recommend_prompt = ChatPromptTemplate.from_messages([("human", "請給我推薦一本你認為比較好的書"),]
)
recommend_chain = recommend_prompt | gpt4o | StrOutputParser()deepseek = ChatOpenAI(model="deepseek-chat",base_url = "https://api.deepseek.com", api_key = 'sk-xxxxxxxxxxxxx', max_tokens=1024, temperature=0)
book_name_prompt = ChatPromptTemplate.from_template('請從下面這段文字中提取出其中的書名,用jsonArray的形式返回,比如["百年孤獨","學會提問"],其他任何內容都不要返回。 \n\n {content}'
)
# 用deepseek將gpt4的推薦結果中的書名提取出來
composed_chain = {"content":recommend_chain} | book_name_prompt | deepseek | JsonOutputParser()frequency_counter = Counter()
def invoke_with_catch():try:res = composed_chain.invoke({})return resexcept Exception as e:print(f"Exception occurred: {e}")return []def main():# 這里用線程池提升統計速度 with ThreadPoolExecutor(max_workers=10) as executor: futures = [executor.submit(invoke_with_catch) for _ in range(1000)]for future in as_completed(futures):res = future.result()if res is not None:print(res)frequency_counter.update(res)if __name__ == "__main__":main()