LLM 大模型框架 LangChain 可觀測性最佳實踐

LLM(Large Language Model)大模型的可觀測性是指對模型內部運行過程的理解和監控能力。由于LLM大模型通常具有龐大的參數量和復雜的網絡結構,因此對其內部狀態和運行過程的理解和監控是一個重要的問題。

什么是 LangChain?

LangChain 是一個開源的應用開發框架,旨在將大型語言模型(LLM)與開發者現有的知識和系統相結合,以提供更智能化的服務。具體來說,LangChain 可以幫助開發者f輕松地管理與 LLM 的交互,將多個組件鏈接在一起,并集成額外的資源,例如 API 和數據庫。

此外,LangChain 還提供了多種工具、組件和接口,以簡化創建由 LLM 提供支持的應用程序的過程。例如,它提供了模型輸入/輸出管理工具,用于管理 LLM 及其輸入和格式化輸出;Prompt 模板支持自定義 Prompt 工程的快速實現以及和 LLMs 的對接;Utils 組件提供了大模型常見的植入能力的封裝,如搜索引擎、Python 編譯器、Bash 編譯器、數據庫等;Chains 組件則提供了大模型針對一系列任務的順序執行邏輯鏈。

因此,LangChain 的應用場景非常廣泛,可以應用于自然語言處理、聊天機器人、智能客服、文本生成等多個領域。同時,由于其開源的特性,LangChain 也可以被廣大開發者用于定制開發自己的 LLM 應用,從而推動人工智能技術的不斷發展和創新。

LangChain 可觀測性體系


LangChain 本身并沒有提供可觀測性能力,但可以通過集成其他工具來實現對 LangChain 應用的可觀測性,以此來提高大模型的可解釋性和可控性。

- 日志:收集、存儲和分析 LangChain 應用的日志數據。通過日志數據,可以監控應用程序的運行狀態、錯誤日志、用戶行為等信息。

- 指標:使用監控工具收集 LangChain 應用的性能指標,如響應時間、吞吐量、錯誤率等。這些指標可以幫助你了解應用程序的性能瓶頸和潛在問題,并及時進行優化和調整。

- 組件依賴:監控 LangChain 應用所依賴的服務或組件,如數據庫、API接口等。確保這些依賴服務的可用性和性能穩定,以避免因依賴問題導致的應用故障。

- 自定義監控:根據具體需求,可以編寫自定義的監控腳本或插件,用于監控特定的業務邏輯或功能。例如,你可以編寫腳本監控某個特定任務的執行情況、API 接口的調用頻率等。

- 告警與通知:設置告警規則,當監控數據達到預設的閾值時,觸發告警并通知相關人員。這可以幫助你及時發現并處理潛在問題,確保應用程序的穩定運行。

需要注意的是,可觀測性方案的選擇和實施應根據具體的應用場景和需求進行定制。

LangChain 可觀測性接入方案

準備工作

#### 安裝 DataKit

token 在「觀測云控制臺」-「集成」-「Datakit」 上面獲取。

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


DataKit 采集器配置

- 開啟 DDTrace 采集器

DDTrace 采集器用于采集鏈路信息,進入到 DataKit 安裝目錄下,執行 `conf.d/ddtrace/`,復制 `ddtrace.conf.sample` 并重命名為 `ddtrace.conf` 。

- 開啟 StatsD 采集器

StatsD 采集器用于采集指標信息,默認端口為 `8125` 。

- 重啟 DataKit

systemctl restart datakit

準備 OpenAI API Key

在 Langchain 應用中使用 OpenAI 的模型,需要一個 API Key,點擊 https://platform.openai.com/account/api-keys 創建你的 API Key。

模擬 LLM 應用并接入觀測云

主要實現了一個基于 OpenAI 的 GPT-3.5 模型的聊天對話系統,并設置了一個函數來跟蹤 API 令牌的使用情況。

- 安裝 Python 依賴

pip install langchain

pip install openai

pip install ddtrace

- 創建 LLM

使用 Langchain 創建 LLM,模型選擇 `gpt-3.5` 。

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

- 創建 ConversationChain 對象

創建一個 `ConversationChain` 對象,傳入之前創建的 `llm` 對象,設置 verbose 為 `True`(表示輸出詳細的調試信息),并使用 `ConversationBufferMemory` 作為記憶儲存。

conversation = ConversationChain(

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

)

- 創建對話函數

定義一個函數 `track_tokens_usage` ,它接受一個對話鏈和一個查詢作為參數。

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

通過回調函數 `get_openai_callback` 創建一個回調對象 `cb` ,并通過對象 `cb` 可以獲取請求相關信息:請求數、消耗金額、令牌數量等。

- 調用

track_tokens_usage(conversation, "介紹一下觀測云可觀測性的產品及優勢")

由于執行完成后,進程會退出,添加以下代碼阻止退出,方便相關數據及時上報。

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

input()

- 執行腳本

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


LangChain 可觀測性實踐效果

- 指標


- 調用鏈


常見問題

Token 異常

如果沒有配置 Token,則會報錯:

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)

關于 Token,可以在代碼中定義:

import os

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

但不建議那么做,可以使用環境變量方式:

>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 集成文檔

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容