困擾了一天的flask結(jié)合智譜ai langchain流式輸出json問題終于解決了

本次對接的大模型是智譜,首先想到去智譜開放平臺找找有沒有和langchain結(jié)合的文檔:


結(jié)果還真有,就省去了谷歌的時間,但是智譜的文檔只提供了非流式的示例代碼,想著先拷過來跑一下再說,結(jié)果就是非流式是正常輸出的,流式就遇到問題了,不管我咋配置,好像只能在控制臺輸出流失內(nèi)容,遂去谷歌“l(fā)angchain 流式輸出”:


前面三篇文章都看了,第一篇內(nèi)容:


好像和智譜官方的文檔寫法不一樣,遂放棄使用該方式,接著又看了第二篇文章:


他這里說是要在初始化llm的時候加一個callbacks參數(shù),并且自定義callbacks,最終的代碼大致如下:


但他這里沒有寫全,起初我也沒看懂為啥這么寫,遂看了下其他人的寫法:


原來在初始化llm的時候就需要注入自己的callbacks,然后我也試了這樣寫,確實能在on_llm_new_token中拿到每次流式的內(nèi)容,但是不能yield出來,我就有點搞不明白,然后又看了一些更復雜的代碼,我發(fā)現(xiàn)我看不懂:


還有走異步機制的:


我都有點迷惑了,到底啥代碼才適合我呢?然后我就一直在嘗試callbacks,搞到晚上11點,此時我心態(tài)有點崩了,遂蓋上筆記本,不搞了先,然后我就和項目負責人說了langchain的流式搞不定,還是用原生的寫法了,不用langchain。

然后第二天我還是打算再會一會這個langchain的流式輸出,我就不信了。

先在群里請教了一下,然后給我發(fā)了一段很長的代碼,額,這啥。

遂想到昨天谷歌搜索時的第二個網(wǎng)站的內(nèi)容,抱著試試的心態(tài),ctrl c、ctrl v,它就流起來了,它真的流起來:

def get_llm_lc(self, app, r: ChatCompletionRequestStruct):

? """? 獲取ai響應langchain版

? """return ChatOpenAI(

? ? temperature=0.5,

? ? openai_api_key=Config.ZHIPUAI_API_KEY,

? ? openai_api_base=Config.ZHIPUAI_OPENAI_API_URL,

? ? model=Config.ZHIPUAI_MODEL,

? ? streaming=r.streaming,

? ? callbacks=[StreamingStdOutCallbackHandler()],

? )


def get_prompt_lc(self):

? return ChatPromptTemplate.from_messages(

? ? [

? ? # ("system", "你是一個專業(yè)的AI助手。"),? ? ("human","{question}")

? ? ]

? )


llm = self.get_llm_lc(app, r)

prompt = self.get_prompt_lc()

llm_chain = prompt | llm

ret = llm_chain.stream({"question": r.question})for_tokenin ret:

? token = _token.content

? finish_reason =''if'finish_reason'in _token.response_metadata:

? finish_reason = _token.response_metadata['finish_reason']

? reply = ChatCompletionResponseStruct()

? reply.text = token

? reply.finish_reason = finish_reason

? yieldjson.dumps(reply.to_dict(), ensure_ascii=False) +'\n'


總算舒了一口氣,流式響應需求算是完成了,接下來是rag的,到目前位置我還不知道rag是啥,咋實現(xiàn)的。

這篇文章就到這里啦!如果你對文章內(nèi)容有疑問或想要深入討論,歡迎在評論區(qū)留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊并分享給其他同學,讓更多人受益。

想要了解更多相關(guān)知識,可以查看我以往的文章,其中有許多精彩內(nèi)容。記得關(guān)注我,獲取及時更新,我們可以一起學習、討論技術(shù),共同進步。

感謝你的閱讀與支持,期待在未來的文章中與你再次相遇!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容