用 LangChain 为你写总结画思维导图

Posted on Wed 02 April 2025 in Journal

Abstract 用 LangChain 为你写总结画思维导图
Authors Walter Fan
 Category    learning note  
Status v1.0
Updated 2025-04-02
License CC-BY-NC-ND 4.0

用 LangChain 写总结并生成思维导图

在日常工作中,我们常常需要从大量的文档或网页中提取关键信息,并将其整理成思维导图。手动操作不仅耗时,还容易遗漏重要内容。 今天,我想分享一个基于 Python 和 LangChain 的工具,它可以帮助你快速生成思维导图,提升工作效率。

工具原理:三步完成

这个工具的工作流程非常简单,主要分为三个步骤:

  1. 抓取网页内容 - 输入一个 URL,工具会自动抓取网页内容。
  2. 智能总结 - 利用大语言模型(如 GPT)对内容进行提炼。
  3. 生成思维导图 - 将总结内容转换为 PlantUML 格式的思维导图,并可以选择生成图片。

整个过程自动化,你只需要输入网址,剩下的交给工具处理。

核心代码解析

1. MindmapGenerator 类

这个类是工具的核心,负责协调各个组件完成思维导图的生成。以下是它的初始化方法:

def __init__(self, output_file: str = "mindmap.puml", plantuml_server: str = "https://www.plantuml.com/plantuml"):
    """初始化思维导图生成器"""
    load_dotenv()  # 加载环境变量

    # 初始化配置
    self.output_file = output_file
    self.plantuml_server = plantuml_server.rstrip('/')

    # 从环境变量获取 API 配置
    api_key = os.getenv("LLM_API_KEY")
    base_url = os.getenv("LLM_BASE_URL")
    model_name = os.getenv("LLM_MODEL")

    # 初始化大语言模型
    self.llm = ChatOpenAI(
        temperature=0,
        openai_api_key=api_key,
        openai_api_base=base_url,
        model=model_name
    )

    # 初始化解析器和处理链
    self.parser = StrOutputParser()

    # 创建摘要处理链
    summary_prompt = PromptTemplate(...)
    self.summary_chain = summary_prompt | self.llm | self.parser

    # 创建思维导图处理链
    mindmap_prompt = PromptTemplate(...)
    self.mindmap_chain = mindmap_prompt | self.llm | self.parser

2. 一键生成思维导图

核心功能集中在 generate_from_url 方法中,它整合了所有步骤:

def generate_from_url(self, url: str, generate_image: bool = False,
                      image_format: Literal["png", "svg", "pdf"] = "png", 
                      image_output: Optional[str] = None):
    """从 URL 生成思维导图"""

    if not os.path.exists(self.output_file):
        # 如果输出文件不存在,执行完整的生成流程
        content = self.fetch_content(url)  # 抓取内容
        summary = self.generate_summary(content)  # 生成摘要
        mindmap = self.generate_mindmap(summary)  # 生成思维导图
        self.save_mindmap(mindmap)  # 保存思维导图
    else:
        # 如果文件已存在,直接读取
        with open(self.output_file, "r") as f:
            mindmap = f.read()

    # 如果需要生成图片
    if generate_image:
        image_path = self.generate_image(mindmap, image_output, image_format)
        return mindmap, image_path

    return mindmap

3. PlantUML 图像生成

工具使用 PlantUML 服务器将文本格式的思维导图转换为图像:

def generate_image(self, plantuml_text: str, output_file: Optional[str] = None,
                  format: Literal["png", "svg", "pdf"] = "png") -> str:
    """使用 PlantUML 服务器 API 从 PlantUML 文本生成图像"""

    # 编码 PlantUML 文本
    encoded = encode(plantuml_text)

    # 确定输出文件路径
    if output_file is None:
        base_path = Path(self.output_file).with_suffix(f'.{format}')
        output_file = str(base_path)

    # 构建 PlantUML 服务器 URL
    url = f"{self.plantuml_server}/{format}/{encoded}"

    # 从 PlantUML 服务器获取图像
    response = requests.get(url)
    response.raise_for_status()

    # 保存图像到文件
    with open(output_file, "wb") as f:
        f.write(response.content)

    return output_file

如何使用这个工具

使用这个工具非常简单,只需几行代码:

# 创建思维导图生成器
generator = MindmapGenerator()

# 从 URL 生成思维导图和 PNG 图像
mindmap, image_path = generator.generate_from_url(
    "https://en.wikipedia.org/wiki/Python_(programming_language)",
    generate_image=True,
    image_format="png"
)

print(f"思维导图图像已生成:{image_path}")

或者,你可以直接从命令行使用:

python make-mindmap.py https://en.wikipedia.org/wiki/Python_(programming_language) -i -f png

环境配置

在使用前,你需要设置几个环境变量(可以放在 .env 文件中):

LLM_API_KEY="sk-xxxx"
LLM_BASE_URL="https://api.deepseek.com"
LLM_MODEL="deepseek-chat"

实用场景

这个工具在很多场景下都能派上用场:

  1. 学习新技术 - 快速提取技术文档的核心内容。
  2. 会议准备 - 整理会议材料,生成思维导图用于演示。
  3. 内容创作 - 从参考资料中提取关键点,帮助构思文章结构。
  4. 研究整理 - 将研究论文或报告转化为直观的思维导图。

AI 改变了我们学习和工作的方式

我刚刚有了这个思路, 在 AI 的帮助下, 半个小时就搞定了这个小工具, 后面考虑集成到我的个人网站上, 新时代最重要的不是编程技巧, 而是想法和创新, 加油吧!


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。