大家好,我是小林。
最近收到讀者反饋,在面試某個(gè)公司時(shí),想要針對(duì)性地看該公司的面經(jīng)比較困難,如果有快速 get 到公司面試重點(diǎn)的方法就好了。
于是,我想到一個(gè)好主意,我們何不把面經(jīng)庫(kù)喂給AI,這樣就可以指定一個(gè)公司看面試題了!
試想一下,我下星期要面試騰訊,我直接問(wèn)AI,幫我梳理騰訊的面試重點(diǎn)知識(shí),那么就可以根據(jù)AI輸出的重點(diǎn)知識(shí)靶向?qū)W習(xí)一波,這下面試需要準(zhǔn)備的知識(shí)再也不用靠猜了!
這樣復(fù)習(xí)到的知識(shí),被面試問(wèn)到的概率就會(huì)很高,這樣的學(xué)習(xí)投入產(chǎn)出比不要太高了。
那說(shuō)干就干!
技術(shù)選型
當(dāng)然,我們?cè)陂_發(fā)一個(gè)項(xiàng)目的時(shí)候,肯定首先要考慮技術(shù)選型的事情,技術(shù)選型重要的是基于場(chǎng)景來(lái)考慮, 比如實(shí)用性、開發(fā)成本、費(fèi)用成本等等。
那么,做AI工具前,我們先來(lái)調(diào)研用哪個(gè)大語(yǔ)言模型。
那問(wèn)題來(lái)了,國(guó)內(nèi)外那么多大模型,到底哪個(gè)才是好用的呢?
于是我問(wèn)了一位身處大模型行業(yè)的朋友,而他向我推薦了智譜旗下,據(jù)說(shuō)性能十分強(qiáng)勁的GLM-4-Plus。
要說(shuō)最近智譜也是動(dòng)作頻頻啊,不但更新了基座大模型 GLM-4-Plus,還以此為契機(jī),將旗下一系列全模型家族都上線到了bigmodel.cn。
而在 SuperBench 9 月綜合榜最新的大模型評(píng)測(cè)中,國(guó)內(nèi)模型 GLM-4-Plus 在本次評(píng)測(cè)中排名全球第三(國(guó)內(nèi)第一),打破了國(guó)外模型對(duì)前三名的壟斷。
從圖中我們可以看到,國(guó)內(nèi)模型在多個(gè)方面都有明顯提升,包括對(duì)齊、智能體和數(shù)理邏輯等。
雖然和OpenAI還有一些差距,但也是遙遙領(lǐng)先其他國(guó)產(chǎn)大模型了!因?yàn)榫W(wǎng)絡(luò)原因,我們調(diào)用OpenAI的模型不太方便,再加上國(guó)外模型對(duì)中文的適配度普遍較差。
最終我決定選擇我們國(guó)產(chǎn)的模型GLM-4-Plus來(lái)做AI面試題知識(shí)庫(kù)!
那問(wèn)題來(lái)了,GLM-4-Plus是國(guó)內(nèi)哪家的大模型的呢?
我調(diào)研了一下,發(fā)現(xiàn)是智譜團(tuán)隊(duì)全自研的大模型,智譜是由清華大學(xué)計(jì)算機(jī)系技術(shù)成果轉(zhuǎn)化而來(lái)的公司。
在這次最新的國(guó)內(nèi)外大模型的評(píng)測(cè)中,也能明顯看到GLM-4-Plus的基本素質(zhì)過(guò)硬,明顯強(qiáng)于其他國(guó)產(chǎn)模型,進(jìn)入世界第一梯隊(duì)。
除此之外,我還想看看他的價(jià)格如何。
可以,零幀起手就是免費(fèi)的1億tokens,做個(gè)小應(yīng)用完全夠用了!
常見(jiàn)構(gòu)建智能體的操作(文生文、文生圖、文生視頻、微調(diào)、知識(shí)庫(kù)等),在智譜的文檔里也寫的相當(dāng)清楚,對(duì)我們程序員的眼睛很友好!
接著,我們?cè)倏纯碐LM-4-Plus,到底有多厲害?能解決我的需求嗎?
先來(lái)做個(gè)簡(jiǎn)單測(cè)試:「9.9 和 ?9.11,誰(shuí)比較大?」,別看這個(gè)問(wèn)題簡(jiǎn)單,之前有不少大模型都在這個(gè)簡(jiǎn)單的數(shù)學(xué)問(wèn)題上翻車了。
我們,來(lái)看看智譜的GLM-4-Plus模型的回答。
很聰明,GLM-4-Plus模型回答是正確的,有意思的是,在后面也小小吐槽了其他大模型在這類簡(jiǎn)單的問(wèn)題卻出現(xiàn)了錯(cuò)誤。
既然針對(duì)GLM-4-Plus模型的小測(cè)試,它挑戰(zhàn)成功了,我們來(lái)繼續(xù)測(cè)試測(cè)試GLM-4-Plus模型更多的能力。
文章總結(jié)的能力
面試解答的能力
最后,我把我整理的面經(jīng)庫(kù)交給模型,手把手教大家如何寫一個(gè)可以指定公司的面試題庫(kù)機(jī)器人,面試對(duì)應(yīng)公司時(shí),我們就能針對(duì)性地訓(xùn)練了!
GLM-4-Plus:文章總結(jié)
我在公眾號(hào)已經(jīng)分享了 100 多篇的互聯(lián)網(wǎng)后端開發(fā)的面經(jīng),累計(jì)起來(lái)也有 100 萬(wàn)字了,其實(shí)這也是一個(gè)龐大的知識(shí)庫(kù)了,但是短期著急面試的同學(xué),肯定也看不完。
如果你突然收到了字節(jié)的面試,想要快速?gòu)?fù)習(xí)字節(jié)??嫉闹R(shí)點(diǎn),我教大家一個(gè)高效的復(fù)習(xí)方法!
你可以從《互聯(lián)網(wǎng)中大后端開發(fā)的面經(jīng)》中找到我發(fā)布過(guò)的字節(jié)面經(jīng)文章,然后把文章保存到本地文件交給了智譜AI BigModel開放平臺(tái)的GLM-4-Plus模型來(lái)梳理文章的內(nèi)容。
比如,我挑選了一篇字節(jié)的面經(jīng),上傳之后,GLM-4-Plus會(huì)把重點(diǎn)內(nèi)容的知識(shí)進(jìn)行了分類,并且還把算法題的 leetcode 編號(hào)寫出來(lái),也方便我們可以去 leetcode 去練習(xí)這個(gè)算法題。
接下來(lái),你可以針對(duì)不熟悉的內(nèi)容進(jìn)一步去學(xué)習(xí)。
比如,我跟他說(shuō)「我對(duì) RPC 與 HTTP 的區(qū)別不是很懂,請(qǐng)你幫我解釋一下」,GLM-4-Plus模型是很認(rèn)真回答了這個(gè)問(wèn)題,而且羅列的也很全面。
GLM-4-Plus:面試解答
大家出去面試的時(shí)候,最好面試完之后,要把問(wèn)題整理一下,并且要針對(duì)每一個(gè)問(wèn)題進(jìn)行復(fù)盤,這樣你的成長(zhǎng)才會(huì)比較快
為了更高效的對(duì)自己的面經(jīng)進(jìn)行復(fù)盤,我們可以把面試問(wèn)題直接上傳給GLM-4-Plus模型,讓他幫我們整理!
比如,我這里找了一個(gè)同學(xué)的互聯(lián)網(wǎng)中廠的Java后端面經(jīng),把內(nèi)容保存為文件。
接著,直接上傳給GLM-4-Plus模型,讓它給出回答,不到幾秒的時(shí)間,GLM-4-Plus模型就把所有問(wèn)題的回答都總結(jié)出來(lái)了:
如果你想針對(duì)某一個(gè)問(wèn)題,想具體詳細(xì)的進(jìn)一步學(xué)習(xí),你可以繼續(xù)追問(wèn)。
比如,我讓GLM-4-Plus模型幫我梳理HashMap 梳理 jdk1.7 版本和 1.8 版本的區(qū)別,一下子就給出更詳細(xì)且清晰的回答了。
通過(guò)這種方式,就可以非常高效的復(fù)盤和整理自己的面經(jīng)了,如果想要進(jìn)一步深入某個(gè)面試題,多向GLM-4-Plus模型追問(wèn)幾句就可以,簡(jiǎn)單又高效!
GLM-4-Plus:針對(duì)公司的面試題庫(kù)
通過(guò)文章總結(jié),我們可以總結(jié)一篇面經(jīng)文章的內(nèi)容。可是,我們?cè)跍?zhǔn)備某個(gè)公司面試時(shí),一篇文章顯然是不夠的,而單純和AI對(duì)話也不能容納太多的上下文。
那么如果我想要制作一個(gè)海納百川的題庫(kù),然后根據(jù)指定公司得到對(duì)應(yīng)的面試題和解答呢?答案是:構(gòu)建一個(gè)面經(jīng)知識(shí)庫(kù)!
我們只需要完成以下幾步:
創(chuàng)建自己的API key
創(chuàng)建知識(shí)庫(kù):上傳所有的面經(jīng)
訓(xùn)練面試題大模型
問(wèn)答:面試哪個(gè)公司就喚起哪個(gè)公司的“面試官”
創(chuàng)建自己的API key
調(diào)用GLM-4-Plus 模型接口調(diào)用非常簡(jiǎn)單,官方都已經(jīng)給出代碼示例了,只需要復(fù)制代碼示例,然后把代碼示例中的API密鑰改成你自己的,就完事了,極大縮減了開發(fā)的周期。
首先,創(chuàng)建一個(gè)自己的API key。而且,完全不用擔(dān)心token問(wèn)題!智譜先送 1 億Tokens:
老用戶獻(xiàn)上大禮:根據(jù)用戶在9月份用量情況,贈(zèng)送額度2000萬(wàn)到 1億tokens的tokens資源包。
新用戶巔峰起步:每位新注冊(cè)用戶,注冊(cè)后即可獲贈(zèng) 1億額度Tokens資源包。
接著,在代碼里初始化client:
private?static?final?String?API_SECRET_KEY?=?"此處替換為你的API?key";
private?static?final?ClientV4?client?=?new?ClientV4.Builder(API_SECRET_KEY)
?????????.networkConfig(60,?60,?60,?60,?TimeUnit.SECONDS)
?????????.build();
創(chuàng)建知識(shí)庫(kù)
新建一個(gè)知識(shí)庫(kù),上傳各個(gè)公司的面經(jīng)(這里我就上傳了我整理的面經(jīng)文章)。
注意,我們可以根據(jù)文章格式,配置文檔類型為文章知識(shí)、問(wèn)答類知識(shí)或自定義知識(shí)。
訓(xùn)練面試題大模型
我們?cè)O(shè)計(jì)兩個(gè)角色:AI面試官和AI面試者。
AI面試官:根據(jù)我們指定的公司,從知識(shí)庫(kù)找到問(wèn)題提問(wèn)。(此時(shí)你可以根據(jù)問(wèn)題試試自己能不能答得出來(lái)?。?/p>
AI面試者:根據(jù)知識(shí)庫(kù)的解答,總結(jié)并潤(rùn)色成“人話”。(此時(shí)你可以對(duì)比看看自己剛才回答得怎么樣)
(1)我們先設(shè)計(jì)好他們各自的Prompt:
????private?static?final?String?AI_INTERVIEWER_SYSTEM_PROMPT?=
????????????"從知識(shí)庫(kù)中找屬于{{用戶給出的公司名稱}}的后端開發(fā)面試題,用于向面試者提問(wèn),找不到就用自身知識(shí)提問(wèn)并且告訴用戶該信息不是來(lái)自文檔。n"?+
????????????????????"如果用戶沒(méi)有給出公司名稱,請(qǐng)從知識(shí)庫(kù)中隨機(jī)找面試問(wèn)題。n"?+
????????????????????"要求:(1)只需要提出問(wèn)題,絕對(duì)不要回答給出的問(wèn)題。(2)至少給出5個(gè)問(wèn)題?(3)不要直接照搬知識(shí)庫(kù)內(nèi)容,請(qǐng)將找到的內(nèi)容潤(rùn)色成面試問(wèn)題(4)按照{(diào)序號(hào)}.{面試題}的格式輸出";
????private?static?final?String?AI_APPLICANT_SYSTEM_PROMPT?=
????????????"你是一位求職者,你要結(jié)合知識(shí)庫(kù),清晰準(zhǔn)確地回答面試官提出的問(wèn)題。n"?+
????????????????????"要求:(1)優(yōu)先搜索知識(shí)庫(kù)答案?(2)找到答案后,潤(rùn)色成口語(yǔ)化表達(dá)?(3)使用第一人稱進(jìn)行回答,回答不超過(guò)200字。";
(2)第二步,我們包裝一個(gè)請(qǐng)求函數(shù),傳入上下文(之前發(fā)過(guò)的消息)、配置知識(shí)庫(kù)工具等。話不多說(shuō),直接看代碼:
????public?static?String?invoke(String?systemMessage,?String?userMessage)?{
????????//?1.?這里的作用是收集上下文,讓AI根據(jù)我們給出的上下文繼續(xù)推導(dǎo),也可以把入?yún)⒅苯痈臑長(zhǎng)ist<ChatMessage>?context
????????List<ChatMessage>?messages?=?Arrays.asList(
????????????????new?ChatMessage(ChatMessageRole.SYSTEM.value(),?systemMessage),
????????????????new?ChatMessage(ChatMessageRole.USER.value(),?userMessage)
????????);
????????//?2.?配置知識(shí)庫(kù)工具
????????List<ChatTool>?tools?=?Collections.singletonList(createKnowledgeChatTool());
????????//?3.?構(gòu)建請(qǐng)求
????????ChatCompletionRequest?chatCompletionRequest?=?ChatCompletionRequest.builder()
????????????????.model("glm-4-long")?//?使用最新的大模型
????????????????.stream(false)?//?不使用流式輸出
????????????????.invokeMethod(Constants.invokeMethod)
????????????????.messages(messages)?//?已知上下文
????????????????.tools(tools)?//?其他工具:網(wǎng)絡(luò)搜索、知識(shí)庫(kù)、自定義函數(shù)等
????????????????.build();
????????try?{
????????????//?4.?發(fā)起請(qǐng)求,如果想到達(dá)到GPT那種“打字”效果,可以轉(zhuǎn)換為流式輸出(SSE、Websocket)
????????????ModelApiResponse?invokeModelApiResp?=?client.invokeModelApi(chatCompletionRequest);
????????????return?(String)?Optional.ofNullable(invokeModelApiResp)
????????????????????.map(ModelApiResponse::getData)
????????????????????.map(data?->?data.getChoices().get(0).getMessage().getContent())
????????????????????.orElse("");
????????}?catch?(Exception?e)?{
????????????System.err.println("調(diào)用AI失敗:?"?+?e.getMessage());
????????????return?"";
????????}
????}
????private?static?ChatTool?createKnowledgeChatTool()?{
????????ChatTool?tool?=?new?ChatTool();
????????tool.setType(ChatToolType.RETRIEVAL.value());?//?規(guī)定工具類型為搜索知識(shí)庫(kù)
????????Retrieval?retrieval?=?new?Retrieval();
????????retrieval.setKnowledge_id(KNOWLEDGE_ID);?//?指定知識(shí)庫(kù)ID
????????tool.setRetrieval(retrieval);
????????return?tool;
????}
(3)搭建根據(jù)Prompt和用戶輸入得到回答的機(jī)器人
AI面試官:輸入為面試官Prompt+公司名,讓AI根據(jù)知識(shí)庫(kù)調(diào)出對(duì)應(yīng)公司的面試題
AI面試者:輸入為面試者Prompt+剛才面試官提出的問(wèn)題,讓AI根據(jù)知識(shí)庫(kù)的解答,回答問(wèn)題
這是測(cè)試函數(shù)的代碼:
????public?static?void?main(String[]?args)?{
????????String?company?=?"字節(jié)";
????????String?aiInterviewerReply?=?invoke(AI_INTERVIEWER_SYSTEM_PROMPT,?company);
????????if?(StringUtils.isEmpty(aiInterviewerReply))?{
????????????return;
????????}
????????//?切分字符串為問(wèn)題數(shù)組
????????List<String>?questions?=?Arrays.asList(aiInterviewerReply.split("n"));
????????//?按需保存問(wèn)題和答案
????????Map<String,?String>?questionAnswerMap?=?new?LinkedHashMap<>();
????????questions.forEach(question?->?{
????????????String?userPrompt?=?String.format("---公司名---n%sn---面試問(wèn)題---n%s",?company,?question);
????????????String?aiApplicantReply?=?invoke(AI_APPLICANT_SYSTEM_PROMPT,?userPrompt);
????????????questionAnswerMap.put(question,?aiApplicantReply);
????????});
????????//?打印結(jié)果
????????printResults(company,?questionAnswerMap);
????}
????private?static?void?printResults(String?company,?Map<String,?String>?questionAnswerMap)?{
????????System.out.println("******?"?+?company?+?"?******");
????????questionAnswerMap.forEach((question,?answer)?->?{
????????????System.out.println("============================");
????????????System.out.println(question);
????????????System.out.println(answer);
????????});
????}
(4)主體函數(shù)完成了,接下來(lái)我們來(lái)測(cè)試一下!也順便看看你能不能答出來(lái)吧!
字節(jié)
阿里
騰訊
美團(tuán)
最后
怎么樣?
通過(guò)我前面測(cè)試的情況,大家肯定也是能明顯感覺(jué)到 GLM-4-Plus 在語(yǔ)言理解、長(zhǎng)文本處理、邏輯推理能力還是非常強(qiáng)大的。
咱們的算法和面試題方面的問(wèn)題統(tǒng)統(tǒng)都能被 GLM-4-Plus 模型輕松解決,妥妥就是我們學(xué)習(xí)編程和面試的好幫手。
而且GLM-4-Plus 模型提供的SDK,也可以很簡(jiǎn)單就上手了,簡(jiǎn)單幾行代碼就能直接調(diào)用 ? GLM-4-Plus 模型接口,極大的縮減了開發(fā)周期。
隨著大模型的普及,未來(lái)肯定也會(huì)出現(xiàn)更多有意思的AI應(yīng)用,如果你正在做AI相關(guān)的應(yīng)用,那么接入國(guó)內(nèi)第一梯隊(duì)的GLM-4-Plus 模型是不錯(cuò)的選擇,不僅能力強(qiáng),而且上手快,更關(guān)鍵價(jià)格對(duì)開發(fā)者太友好了。
智譜團(tuán)隊(duì)也給開發(fā)者們發(fā)了個(gè)大福利:新用戶注冊(cè)后即可獲贈(zèng) 1 億額度 Tokens 資源包!
即使用完這個(gè)免費(fèi)的額度 GLM-4-Plus 定價(jià)也很實(shí)在,一千 Token 僅需0.005元,相比前代旗艦 GLM-4-0520 便宜了 50%,這力度太強(qiáng)了,難道又要卷起一波,國(guó)內(nèi)大模型價(jià)格戰(zhàn)?
大家可以直接訪問(wèn)智譜開放平臺(tái) bigmodel.cn 注冊(cè)領(lǐng)取,也可以點(diǎn)擊下方「閱讀原文」快速跳轉(zhuǎn)