被LangChain4j坑慘了!
最近在深度體驗和使用 Spring AI 和 LangChain4j,從開始的滿懷期待五五開,但最后極具痛苦的使用 LangChain4j,讓我真正體驗到了正規(guī)軍和草臺班子的區(qū)別。
Spring AI VS LangChain4j
- Spring AI:使用簡單、寫法優(yōu)雅、但功能提供的較少、成熟度稍高;
- LangChain4j:作為移植大模型著名框架 LangChain 功能稍多、靈活度高、使用復雜、滿是 BUG。還有根本找不到關鍵內容的官方文檔,該有的重要內容是一點都不介紹啊,使用和學習成本很高。
1.SDK 問題折騰到半夜
舉個例子,我昨天下午到晚上 11 點半都在研究 LangChain4j 將連續(xù)對話保存到 MySQL,首先官方并沒有提供文檔和代碼示例,其次網上的資源很少,我按照經驗和摸索終于寫了一版實現,但從晚上 8 點調試到 11 點半,各種查文檔、看源碼都沒有完全調好,第二次對話時總是莫名其妙報錯,且數據庫存儲的數據量遠超于實際執(zhí)行次數。
然后就是各種嘗試、各種折騰,把流式輸出換成全量輸出;保存數據之前先刪除再添加等等。
最終您猜怎么著?原來這個問題竟然和模型 SDK 有關,我把模型從阿里百煉換成 OpenAI 之后,全部問題竟然解決了,害得我折騰到半夜,竟然是源碼 BUG。
而且就這還有 BUG,在后期連續(xù)對話時,按照 SDK 會把之前聊天的角色從 AI 改完 User,雖然不影響執(zhí)行結果,但本質上還是有 BUG,這肯定也是源碼問題,不糾結了,反正最新的版本也是 beta 版,就先這樣吧。
2.錯誤的官方文檔
還有在對接阿里百煉平臺時,官方給到文檔是這么寫的:
圖片
其實官方文檔中間是少一個“chat-model”,你如果按照他的配置方法,根本沒辦法完成大模型的自動注入,網上資料千篇一律全是手動創(chuàng)建,但顯然不夠優(yōu)雅,無維護性可言。
最后看了源碼才發(fā)現,如果想自動裝配,需要配置一個“chat-model”,源碼如下:
圖片
官方文檔也是無敵了。
3.蹩腳的用法
LangChain4j 的使用也是比較麻煩,在 Spring AI 中使用 ChatModel 就可以操作大模型了,但 LangChain4j 要寫成 ChatLanguageModel。
這多不算啥,關于流式輸出更有意思,Spring AI 中調用 call 方法是全量輸出,調用 stream 就是流式輸出,實現相當優(yōu)雅和簡單。
但你猜 LangChain4j 要怎么用,首先要在配置文件中添加 streaming-chat-model 并且配置 api-key 和 model-name 等信息,并且不能使用 ChatLanguageModel 來進行流式輸出,還要添加 langchain4j-reactor 依賴,并且使用新對象 StreamingChatLanguageModel 才能操作,真是麻了。
小結
世界是一個巨大的草臺班子,所有的優(yōu)秀背后都是居大的付出和努力。AI 相關技術才剛剛起步,還有很大的發(fā)展空間,我們需要寬容一些、給他一點時間。把一切交給時間,只管默默努力和時間一起增值就好。