LLM 大模型框架 LangChain 可觀測(cè)性最佳實(shí)踐

LLM(Large Language Model)大模型的可觀測(cè)性是指對(duì)模型內(nèi)部運(yùn)行過(guò)程的理解和監(jiān)控能力掰派。由于LLM大模型通常具有龐大的參數(shù)量和復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),因此對(duì)其內(nèi)部狀態(tài)和運(yùn)行過(guò)程的理解和監(jiān)控是一個(gè)重要的問(wèn)題湾蔓。

什么是 LangChain?

LangChain 是一個(gè)開(kāi)源的應(yīng)用開(kāi)發(fā)框架徊哑,旨在將大型語(yǔ)言模型(LLM)與開(kāi)發(fā)者現(xiàn)有的知識(shí)和系統(tǒng)相結(jié)合硼啤,以提供更智能化的服務(wù)艰猬。具體來(lái)說(shuō)横堡,LangChain 可以幫助開(kāi)發(fā)者f輕松地管理與 LLM 的交互,將多個(gè)組件鏈接在一起冠桃,并集成額外的資源命贴,例如 API 和數(shù)據(jù)庫(kù)。

此外食听,LangChain 還提供了多種工具胸蛛、組件和接口,以簡(jiǎn)化創(chuàng)建由 LLM 提供支持的應(yīng)用程序的過(guò)程樱报。例如葬项,它提供了模型輸入/輸出管理工具,用于管理 LLM 及其輸入和格式化輸出迹蛤;Prompt 模板支持自定義 Prompt 工程的快速實(shí)現(xiàn)以及和 LLMs 的對(duì)接民珍;Utils 組件提供了大模型常見(jiàn)的植入能力的封裝,如搜索引擎笤受、Python 編譯器穷缤、Bash 編譯器、數(shù)據(jù)庫(kù)等箩兽;Chains 組件則提供了大模型針對(duì)一系列任務(wù)的順序執(zhí)行邏輯鏈。

因此章喉,LangChain 的應(yīng)用場(chǎng)景非常廣泛汗贫,可以應(yīng)用于自然語(yǔ)言處理身坐、聊天機(jī)器人、智能客服落包、文本生成等多個(gè)領(lǐng)域部蛇。同時(shí),由于其開(kāi)源的特性咐蝇,LangChain 也可以被廣大開(kāi)發(fā)者用于定制開(kāi)發(fā)自己的 LLM 應(yīng)用涯鲁,從而推動(dòng)人工智能技術(shù)的不斷發(fā)展和創(chuàng)新。

LangChain 可觀測(cè)性體系


LangChain 本身并沒(méi)有提供可觀測(cè)性能力有序,但可以通過(guò)集成其他工具來(lái)實(shí)現(xiàn)對(duì) LangChain 應(yīng)用的可觀測(cè)性抹腿,以此來(lái)提高大模型的可解釋性和可控性。

- 日志:收集旭寿、存儲(chǔ)和分析 LangChain 應(yīng)用的日志數(shù)據(jù)警绩。通過(guò)日志數(shù)據(jù),可以監(jiān)控應(yīng)用程序的運(yùn)行狀態(tài)盅称、錯(cuò)誤日志肩祥、用戶行為等信息。

- 指標(biāo):使用監(jiān)控工具收集 LangChain 應(yīng)用的性能指標(biāo)缩膝,如響應(yīng)時(shí)間混狠、吞吐量、錯(cuò)誤率等疾层。這些指標(biāo)可以幫助你了解應(yīng)用程序的性能瓶頸和潛在問(wèn)題将饺,并及時(shí)進(jìn)行優(yōu)化和調(diào)整。

- 組件依賴(lài):監(jiān)控 LangChain 應(yīng)用所依賴(lài)的服務(wù)或組件云芦,如數(shù)據(jù)庫(kù)俯逾、API接口等。確保這些依賴(lài)服務(wù)的可用性和性能穩(wěn)定舅逸,以避免因依賴(lài)問(wèn)題導(dǎo)致的應(yīng)用故障桌肴。

- 自定義監(jiān)控:根據(jù)具體需求,可以編寫(xiě)自定義的監(jiān)控腳本或插件琉历,用于監(jiān)控特定的業(yè)務(wù)邏輯或功能坠七。例如,你可以編寫(xiě)腳本監(jiān)控某個(gè)特定任務(wù)的執(zhí)行情況旗笔、API 接口的調(diào)用頻率等彪置。

- 告警與通知:設(shè)置告警規(guī)則,當(dāng)監(jiān)控?cái)?shù)據(jù)達(dá)到預(yù)設(shè)的閾值時(shí)蝇恶,觸發(fā)告警并通知相關(guān)人員拳魁。這可以幫助你及時(shí)發(fā)現(xiàn)并處理潛在問(wèn)題,確保應(yīng)用程序的穩(wěn)定運(yùn)行撮弧。

需要注意的是潘懊,可觀測(cè)性方案的選擇和實(shí)施應(yīng)根據(jù)具體的應(yīng)用場(chǎng)景和需求進(jìn)行定制姚糊。

LangChain 可觀測(cè)性接入方案

準(zhǔn)備工作

#### 安裝 DataKit

token 在「觀測(cè)云控制臺(tái)」-「集成」-「Datakit」 上面獲取。

DK_DATAWAY="https://openway.guance.com?token=tkn_xxxxxx" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"


DataKit 采集器配置

- 開(kāi)啟 DDTrace 采集器

DDTrace 采集器用于采集鏈路信息授舟,進(jìn)入到 DataKit 安裝目錄下救恨,執(zhí)行 `conf.d/ddtrace/`,復(fù)制 `ddtrace.conf.sample` 并重命名為 `ddtrace.conf` 释树。

- 開(kāi)啟 StatsD 采集器

StatsD 采集器用于采集指標(biāo)信息肠槽,默認(rèn)端口為 `8125` 。

- 重啟 DataKit

systemctl restart datakit

準(zhǔn)備 OpenAI API Key

在 Langchain 應(yīng)用中使用 OpenAI 的模型奢啥,需要一個(gè) API Key秸仙,點(diǎn)擊 https://platform.openai.com/account/api-keys 創(chuàng)建你的 API Key。

模擬 LLM 應(yīng)用并接入觀測(cè)云

主要實(shí)現(xiàn)了一個(gè)基于 OpenAI 的 GPT-3.5 模型的聊天對(duì)話系統(tǒng)扫尺,并設(shè)置了一個(gè)函數(shù)來(lái)跟蹤 API 令牌的使用情況筋栋。

- 安裝 Python 依賴(lài)

pip install langchain

pip install openai

pip install ddtrace

- 創(chuàng)建 LLM

使用 Langchain 創(chuàng)建 LLM,模型選擇 `gpt-3.5` 正驻。

llm = ChatOpenAI(model='gpt-3.5-turbo',temperature=0)

- 創(chuàng)建 ConversationChain 對(duì)象

創(chuàng)建一個(gè) `ConversationChain` 對(duì)象弊攘,傳入之前創(chuàng)建的 `llm` 對(duì)象,設(shè)置 verbose 為 `True`(表示輸出詳細(xì)的調(diào)試信息)姑曙,并使用 `ConversationBufferMemory` 作為記憶儲(chǔ)存襟交。

conversation = ConversationChain(

? ? llm=llm, verbose=True, memory=ConversationBufferMemory()

)

- 創(chuàng)建對(duì)話函數(shù)

定義一個(gè)函數(shù) `track_tokens_usage` ,它接受一個(gè)對(duì)話鏈和一個(gè)查詢作為參數(shù)伤靠。

def track_tokens_usage(chain, query):

? ? with get_openai_callback() as cb:

? ? ? ? result = chain.run(query)

? ? ? ? print(f"prompt token {cb.prompt_tokens}, res token {cb.completion_tokens}, total token {cb.total_tokens}")

? ? ? ? print(f"successful requests {cb.successful_requests}, total cost {cb.total_cost}USD")

? ? ? ? print(result)

? ? return result

通過(guò)回調(diào)函數(shù) `get_openai_callback` 創(chuàng)建一個(gè)回調(diào)對(duì)象 `cb` 捣域,并通過(guò)對(duì)象 `cb` 可以獲取請(qǐng)求相關(guān)信息:請(qǐng)求數(shù)、消耗金額宴合、令牌數(shù)量等焕梅。

- 調(diào)用

track_tokens_usage(conversation, "介紹一下觀測(cè)云可觀測(cè)性的產(chǎn)品及優(yōu)勢(shì)")

由于執(zhí)行完成后,進(jìn)程會(huì)退出卦洽,添加以下代碼阻止退出贞言,方便相關(guān)數(shù)據(jù)及時(shí)上報(bào)。

print("腳本執(zhí)行完成阀蒂,按 Enter 鍵退出...")

input()

- 執(zhí)行腳本

DD_SERVICE="my-langchain" DD_ENV="dev" DD_AGENT_HOST="localhost" DD_AGENT_PORT="9529" ddtrace-run python3 langchain_demo.py


LangChain 可觀測(cè)性實(shí)踐效果

- 指標(biāo)


- 調(diào)用鏈


常見(jiàn)問(wèn)題

Token 異常

如果沒(méi)有配置 Token该窗,則會(huì)報(bào)錯(cuò):

pydantic.v1.error_wrappers.ValidationError: 1 validation error for ChatOpenAI

__root__

? Did not find openai_api_key, please add an environment variable `OPENAI_API_KEY` which contains it, or pass `openai_api_key` as a named parameter. (type=value_error)

關(guān)于 Token,可以在代碼中定義:

import os

os.environ["OPENAI_API_KEY"] = 'sk-...DcE2'

但不建議那么做蚤霞,可以使用環(huán)境變量方式:

>OPENAI_API_KEY="sk-...DcE2"

### 余額不足

openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}

### 代理

如需配置代理酗失,可以加入以下配置:

import os

os.environ["http_proxy"] = "http://localhost:7890"

os.environ["https_proxy"] = "http://localhost:7890"

### 其他第三方 API

如果需要更換第三方 API 地址,可以使用以下方式:

import os

os.environ["OPENAI_API_BASE"] = 'https://chatapi.a3e.top/v1'

## 參考資料

LangChain 集成文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昧绣,一起剝皮案震驚了整個(gè)濱河市规肴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖奏纪,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鉴嗤,死亡現(xiàn)場(chǎng)離奇詭異斩启,居然都是意外死亡序调,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)兔簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)发绢,“玉大人,你說(shuō)我怎么就攤上這事垄琐”呔疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵狸窘,是天一觀的道長(zhǎng)墩朦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)翻擒,這世上最難降的妖魔是什么氓涣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮陋气,結(jié)果婚禮上劳吠,老公的妹妹穿的比我還像新娘。我一直安慰自己巩趁,他們只是感情好痒玩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著议慰,像睡著了一般蠢古。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上别凹,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天草讶,我揣著相機(jī)與錄音,去河邊找鬼番川。 笑死到涂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颁督。 我是一名探鬼主播践啄,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沉御!你這毒婦竟也來(lái)了屿讽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伐谈,沒(méi)想到半個(gè)月后烂完,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诵棵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年抠蚣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片履澳。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘶窄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出距贷,到底是詐尸還是另有隱情柄冲,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布忠蝗,位于F島的核電站现横,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阁最。R本人自食惡果不足惜戒祠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闽撤。 院中可真熱鬧得哆,春花似錦、人聲如沸哟旗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闸餐。三九已至饱亮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舍沙,已是汗流浹背近上。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拂铡,地道東北人壹无。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像感帅,于是被迫代替她去往敵國(guó)和親斗锭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容