用 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 的工具,它可以帮助你快速生成思维导图,提升工作效率。
工具原理:三步完成
这个工具的工作流程非常简单,主要分为三个步骤:
- 抓取网页内容 - 输入一个 URL,工具会自动抓取网页内容。
- 智能总结 - 利用大语言模型(如 GPT)对内容进行提炼。
- 生成思维导图 - 将总结内容转换为 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"
实用场景
这个工具在很多场景下都能派上用场:
- 学习新技术 - 快速提取技术文档的核心内容。
- 会议准备 - 整理会议材料,生成思维导图用于演示。
- 内容创作 - 从参考资料中提取关键点,帮助构思文章结构。
- 研究整理 - 将研究论文或报告转化为直观的思维导图。
AI 改变了我们学习和工作的方式
我刚刚有了这个思路, 在 AI 的帮助下, 半个小时就搞定了这个小工具, 后面考虑集成到我的个人网站上, 新时代最重要的不是编程技巧, 而是想法和创新, 加油吧!
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。