LangChain百萬代碼全解析:這個(gè)模型胃口很大! 精華
小試牛刀,很懂《三體》戀愛腦云天明!
在談?wù)揂I的代碼解析能力之前,我們不妨先看一下它在處理自然語言文本方面的表現(xiàn)。為了測(cè)試GLM-4-Long的理解力,我決定讓它嘗試閱讀并理解我最愛的科幻小說-94萬字的《三體》。
抽取概括能力
作為一個(gè)具有強(qiáng)大理解能力的模型,必須具備從復(fù)雜的文本中抽取出關(guān)鍵的信息,并進(jìn)行總結(jié)。當(dāng)一次性輸入整本小說,模型能有怎樣的表現(xiàn)呢?
我決定以《三體》中的戀愛腦云天明為例,我們可以讓模型梳理出云天明的個(gè)人故事,并按照時(shí)間線進(jìn)行概括。
結(jié)果分析:
- 十分準(zhǔn)確的,提取到了(危機(jī)紀(jì)元,廣播紀(jì)元,銀河紀(jì)元)三個(gè)階段,并嚴(yán)格遵守了指令時(shí)間線梳理的要求
- 正確梳理出來了云天明的個(gè)人故事時(shí)間線,標(biāo)注出了關(guān)鍵事件節(jié)點(diǎn)。
- 正確挖掘到了關(guān)鍵關(guān)聯(lián)人物-程心,并找到了核心的關(guān)聯(lián)事件
- 對(duì)云天明總結(jié)也十分不錯(cuò),雖然我對(duì)他的映像只有戀愛腦
上下文串聯(lián)與推理能力
除了信息抽取,一個(gè)優(yōu)秀的長文本大模型還需要具備強(qiáng)大的上下文串聯(lián)與推理能力。假設(shè)我們提出一個(gè)極端的假設(shè):如果僵尸吃掉了云天明的腦子,三體的故事將會(huì)怎么發(fā)展?通過這樣的假設(shè),模型可以根據(jù)已有的故事情節(jié)推測(cè)出后續(xù)的發(fā)展方向。
- 假如僵尸吃掉了云天明的腦子,三體的故事將會(huì)怎么發(fā)展?
結(jié)果分析:不得不說,相比時(shí)間抽取任務(wù)上的精彩表現(xiàn),在通過長文本基礎(chǔ)上進(jìn)一步推理思考的任務(wù)中,模型表現(xiàn)得則沒有那么驚艷。
- 沒有脫離大的故事框架,但把對(duì)宇宙的思考局限在了地球和三體上,這想象力完全不及大劉
- 針對(duì)地球和三體世界的關(guān)系和交流方式上,存在一定誤解,云天明并不是交流工具!
- 總體來說,在如此長上下文的基礎(chǔ)上,還具備基本的推理想象力,是值得進(jìn)一步使用的模型
不僅能讀小說,GLM-4-Long解析代碼項(xiàng)目能力幾何
用模型讀小說,只是為了一探模型能力的究竟。真正能驗(yàn)證模型能力的,還得是真實(shí)的生產(chǎn)任務(wù)。接下來整活結(jié)束,讓小智帶領(lǐng)大家將GLM-4-Long用到代碼開發(fā)中!
考慮到代碼保密的要求,接下來小智將用LangChain代碼用作示例演示。LangChain官網(wǎng)的AI助手是基于RAG實(shí)現(xiàn)的,現(xiàn)在既然我們擁有了超強(qiáng)上下文的能力,不如我們自己做一個(gè)。
準(zhǔn)備工作,LangChain-Core代碼一網(wǎng)打盡
- 首先我們需要將langchain-core代碼整體打包到一個(gè)文本文檔中,并標(biāo)注好文件目錄
import os
def integrate_python_files(directory, output_file, identifier='---'):
# 確保輸出文件是空的
open(output_file, 'w', encoding='utf-8').close()
# 遍歷目錄
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.py'):
# 構(gòu)建文件的完整路徑
full_path = os.path.join(root, file)
# 獲取文件相對(duì)于主目錄的相對(duì)路徑
relative_path = os.path.relpath(full_path, directory)
# 讀取文件內(nèi)容
with open(full_path, 'r', encoding='utf-8') as f:
file_content = f.read()
# 寫入輸出文件
with open(output_file, 'a', encoding='utf-8') as out_f:
# 添加標(biāo)識(shí)符和文件的相對(duì)路徑
out_f.write(f"{identifier} {relative_path}\n")
out_f.write(file_content)
out_f.write("\n") # 添加一個(gè)空行作為分隔
# 調(diào)用函數(shù)
directory_path = 'langchain/libs/core/langchain_core' # 替換為你的目錄路徑
output_file_path = 'integrated_code.txt' # 替換為你的輸出文件路徑
integrate_python_files(directory_path, output_file_path, identifier='=======')
GLM-4-Long 輕松幫你打造 LangChain AI 助手
對(duì)于一個(gè)完整的項(xiàng)目,GLM-4-Long在沒有額外文檔的情況下,是否能準(zhǔn)確理解并解析項(xiàng)目的功能和組件呢?我們將其應(yīng)用于一個(gè)實(shí)際的代碼項(xiàng)目,看看它能給出怎樣的分析。
問題1、項(xiàng)目主要做了什么?實(shí)現(xiàn)了什么功能?
通過將項(xiàng)目代碼輸入GLM-4-Long,我們希望模型能夠給出項(xiàng)目的整體概覽,包括其主要功能和實(shí)現(xiàn)的目標(biāo)。
結(jié)果分析:
- 模型在沒有文檔情況下,只基于代碼正確總結(jié)了LangChain的主要功能、主要組件、使用場(chǎng)景
- 對(duì)于LangChain核心設(shè)計(jì)思想,鏈?zhǔn)骄幊痰茸隽耸滞晟魄艺_的總結(jié)
- 相關(guān)的使用場(chǎng)景的列舉,也沒有超出LangChain框架的范疇,并沒有出現(xiàn)幻覺
問題2、概括LangChain核心組件和概念
LangChain是一個(gè)用于構(gòu)建語言模型應(yīng)用的框架,包含多個(gè)核心組件。我們讓GLM-4-Long對(duì)這些組件進(jìn)行概括,并解釋它們?cè)陧?xiàng)目中的作用。
結(jié)果分析:
- 模型一口氣提取了32項(xiàng)LangChain對(duì)LLM開發(fā)核心概念的抽象
- 未出現(xiàn)不存在的組件,沒有出現(xiàn)幻覺
- 針對(duì)組件的說明正確無誤
問題3、請(qǐng)以代碼方式輸出經(jīng)典的LCEL使用案例
在理解了項(xiàng)目和組件之后,我們進(jìn)一步要求GLM-4-Long展示一個(gè)經(jīng)典的LCEL( LangChain Expression Language)使用案例,以便讀者更好地理解LangChain的應(yīng)用場(chǎng)景。
結(jié)果分析:
- 代碼完整正確,且能正常運(yùn)行,學(xué)過LangChain的小伙伴對(duì)這個(gè)demo肯定倍感親切
- 配套的案例說明,也能較好的說明LCEL語法概念及使用方式
問題4、上強(qiáng)度,通過Multi Query構(gòu)建一個(gè)RAG案例,要求合并輸出文檔里的連續(xù)片段
在常規(guī)的解析任務(wù)之外,我們讓GLM-4-Long處理一個(gè)高難度任務(wù):通過Multi Query(多查詢)構(gòu)建一個(gè)RAG案例,并合并輸出文檔中的連續(xù)片段。這不僅測(cè)試了模型的理解能力,還考驗(yàn)了它的合成與輸出能力。
結(jié)果分析:
- 模型正確分析了用戶的需求,并按需求正確輸出了執(zhí)行步驟分析
- 基本正確的輸出了執(zhí)行RAG邏輯的相關(guān)代碼,包括向量存儲(chǔ)等
- 沒能正確提供加載RAG Chain的邏輯,而是直接幻覺出了加載RAG 模型
雖然沒能正確完成高階的代碼開發(fā)案例,但在如此簡(jiǎn)單的提示下,模型的表現(xiàn)仍然不錯(cuò)。如果真的完成了需求,可能廣大程序員朋友們真的得擔(dān)心失業(yè)問題了。??
總結(jié)
通過對(duì)《三體》的分析,我們可以看到GLM-4-Long在處理超長文本時(shí),展現(xiàn)出卓越的信息抽取、上下文串聯(lián)與推理能力。無論是概括復(fù)雜的故事情節(jié),還是推理出假設(shè)情境下的故事發(fā)展,GLM-4-Long都表現(xiàn)得非常出色。
更為重要的是,GLM-4-Long在代碼解析方面的能力令人印象深刻。它不僅能夠理解項(xiàng)目代碼的整體結(jié)構(gòu)和功能,還能深入到具體的組件和應(yīng)用案例中,提供詳盡的分析與建議。這使得開發(fā)者在面對(duì)復(fù)雜的代碼庫時(shí),可以更為高效地理解和改進(jìn)代碼。
本文轉(zhuǎn)載自 ??AI小智??,作者: AI小智
