跳到主要內容
Open In ColabOpen on GitHub

Telegram

這個筆記本展示如何使用 Telegram 聊天載入器。這個類別幫助將匯出的 Telegram 對話映射到 LangChain 聊天訊息。

這個過程有三個步驟

  1. 透過從 Telegram 應用程式複製聊天內容並貼到您本地電腦上的檔案中,匯出聊天 .txt 檔案
  2. 使用指向 json 檔案或 JSON 檔案目錄的檔案路徑,建立 TelegramChatLoader
  3. 呼叫 loader.load() (或 loader.lazy_load()) 執行轉換。可選地使用 merge_chat_runs 來合併來自同一發送者的連續訊息,和/或 map_ai_messages 將來自指定發送者的訊息轉換為 "AIMessage" 類別。

1. 建立訊息轉儲

目前 (2023/08/23) 此載入器最適合以從 Telegram Desktop App 匯出聊天記錄所產生的 json 檔案格式。

重要提示:有些 Telegram 的「輕量」版本,例如 "Telegram for MacOS",缺少匯出功能。請確保您使用正確的應用程式來匯出檔案。

進行匯出:

  1. 下載並開啟 Telegram Desktop
  2. 選擇一個對話
  3. 導航到對話設定(目前是右上角的三個點)
  4. 點擊「匯出聊天記錄」
  5. 取消選擇照片和其他媒體。選擇「機器可讀 JSON」格式進行匯出。

範例在下方

%%writefile telegram_conversation.json
{
"name": "Jiminy",
"type": "personal_chat",
"id": 5965280513,
"messages": [
{
"id": 1,
"type": "message",
"date": "2023-08-23T13:11:23",
"date_unixtime": "1692821483",
"from": "Jiminy Cricket",
"from_id": "user123450513",
"text": "You better trust your conscience",
"text_entities": [
{
"type": "plain",
"text": "You better trust your conscience"
}
]
},
{
"id": 2,
"type": "message",
"date": "2023-08-23T13:13:20",
"date_unixtime": "1692821600",
"from": "Batman & Robin",
"from_id": "user6565661032",
"text": "What did you just say?",
"text_entities": [
{
"type": "plain",
"text": "What did you just say?"
}
]
}
]
}
Overwriting telegram_conversation.json

2. 建立聊天載入器

只需要檔案路徑。您可以選擇性地指定映射到 AI 訊息的使用者名稱,以及配置是否合併訊息串。

from langchain_community.chat_loaders.telegram import TelegramChatLoader
API 參考文件:TelegramChatLoader
loader = TelegramChatLoader(
path="./telegram_conversation.json",
)

3. 載入訊息

`load()` (或 `lazy_load`) 方法返回一個 "ChatSessions" 列表,目前僅包含每個載入對話的訊息列表。

from typing import List

from langchain_community.chat_loaders.utils import (
map_ai_messages,
merge_chat_runs,
)
from langchain_core.chat_sessions import ChatSession

raw_messages = loader.lazy_load()
# Merge consecutive messages from the same sender into a single message
merged_messages = merge_chat_runs(raw_messages)
# Convert messages from "Jiminy Cricket" to AI messages
messages: List[ChatSession] = list(
map_ai_messages(merged_messages, sender="Jiminy Cricket")
)

後續步驟

然後您可以按照您認為合適的方式使用這些訊息,例如微調模型、少樣本範例選擇,或直接為下一條訊息進行預測

from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

for chunk in llm.stream(messages[0]["messages"]):
print(chunk.content, end="", flush=True)
API 參考文件:ChatOpenAI
I said, "You better trust your conscience."

這個頁面有幫助嗎?