本笔记演示如何使用 Slack chat loader。该类可将导出的 Slack 对话映射为 LangChain 聊天消息。 步骤共三步:
  1. 按照 Slack 官方指南 导出所需的对话线程。
  2. 使用指向 JSON 文件或 JSON 目录的路径创建 SlackChatLoader
  3. 调用 loader.load()(或 loader.lazy_load())执行转换。可选地使用 merge_chat_runs 合并同一发送者的连续消息,并/或使用 map_ai_messages 将指定发送者的消息转换为 “AIMessage”。

1. 创建消息导出

目前(2023/08/23),该加载器最适合处理 Slack 导出的 zip 目录(例如私信对话)。请按照最新的 Slack 指南获取导出文件。 LangChain 仓库中提供了一个示例:
import requests

permalink = "https://raw.githubusercontent.com/langchain-ai/langchain/342087bdfa3ac31d622385d0f2d09cf5e06c8db3/libs/langchain/tests/integration_tests/examples/slack_export.zip"
response = requests.get(permalink)
with open("slack_dump.zip", "wb") as f:
    f.write(response.content)

2. Create the Chat Loader

为加载器提供 zip 目录路径。可选地指定需要映射为 AI 消息的用户 ID,并配置是否合并消息段。
from langchain_community.chat_loaders.slack import SlackChatLoader
loader = SlackChatLoader(
    path="slack_dump.zip",
)

3. Load messages

load()(或 lazy_load)将返回 “ChatSession” 列表,每个会话包含对应的消息。
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 "U0500003428" to AI messages
messages: List[ChatSession] = list(
    map_ai_messages(merged_messages, sender="U0500003428")
)

下一步

随后可根据需要使用这些消息,例如用于微调、few-shot 示例选择,或直接预测下一条消息。
from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

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

I hope you're doing well. I wanted to reach out and ask if you'd be available to meet up for coffee sometime next week. I'd love to catch up and hear about what's been going on in your life. Let me know if you're interested and we can find a time that works for both of us.

Looking forward to hearing from you!

Best, [Your Name]

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.