利用 langchain 和 LLM 来给 PDF 做总结

在网上看到一个PDF, 讲的是 Gstreamer 的的动态管道的构建, 一瞥而过, 没时间细看, 先写个小程序通过 langchain 和 LLM 给它做个快速总结

代码如下

复制代码
from langchain.document_loaders import UnstructuredPDFLoader
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 加载 PDF 文件
pdf_loader = UnstructuredPDFLoader("path_to_your_pdf_file.pdf")
documents = pdf_loader.load()

# 获取 PDF 的纯文本内容
pdf_text = ' '.join([doc.page_content for doc in documents])

# 创建 LLM 对象 (使用 OpenAI GPT)
llm = OpenAI(temperature=0.7, openai_api_key="your_openai_api_key")

# 定义总结的 Prompt
prompt_template = """
请总结以下内容:
{pdf_text}
总结:
"""

prompt = PromptTemplate(
    input_variables=["pdf_text"],
    template=prompt_template,
)

# 创建 LLMChain
chain = LLMChain(llm=llm, prompt=prompt)

# 使用 LLM 生成总结
summary = chain.run(pdf_text)
print("PDF 总结:\n", summary)

代码输出如下

复制代码
PDF summary:
 总结内容:

1. **演讲者信息**:
   - 演讲者:José Antonio Santos Cadenas
   - 职位:软件工程师
   - 教育背景:Telematic Systems 硕士
   - 工作经历:Kurento Media Server (KMS) 管理员
   - 联系方式:santoscadenas@gmail.com

2. **GStreamer 静态管道**:
   - 使用 `gst-launch` 命令创建复杂的媒体管道,例如将视频文件转码。
   - 示例:`gst-launch-1.0 filesrc location=sample.mp4 ! qtdemux ! avdec_h264 ! queue ! vp8enc ! webmmux ! filesink location=sample.webm`

3. **GStreamer 动态元素**:
   - GStreamer 提供了一些动态元素(如 `autovideosrc`, `autovideosink`, `decodebin`, `playbin`),简化了动态管道的创建。
   - 示例:`gst-launch-1.0 filesrc location=sample.mp4 ! decodebin ! vp8enc ! webmmux ! filesink location=sample.webm`

4. **动态管道不依赖于媒体**:
   - 动态管道可以根据媒体流而不是外部条件创建。
   - 例如:根据用户操作添加或替换元素。

5. **创建动态管道的要求**:
   - 需要深入理解 GStreamer 的工作原理,包括媒体如何在 pads 之间流动、协商如何进行、流线程如何工作以及 probes 如何工作。

6. **在播放时添加和移除元素**:
   - 错误方式:直接调用 `gst_pad_unlink`,可能导致死锁或竞争条件。
   - 正确方式:使用 probe 等待 pad 空闲,确保在断开连接时不会影响媒体流。

7. **在 tee 后添加元素**:
   - tee 会处理断开的 pads,但建议在 idle 或 block 回调中处理元素连接,以避免状态更改或协商期间的问题。

8. **注意协商**:
   - 在 tee 后连接元素时,需要注意协商可能会影响其他分支,建议使用 `capsfilter` 或转换器来简化协商。

9. **移除元素**:
   - 有时需要允许元素处理所有队列中的缓冲区(例如录制时),断开连接后需要发送 EOS 并等待管道末端处理。

10. **实时管道建议**:
    - 在实时管道中,元素应配置为尽可能快地工作,并添加队列以分离不同线程中的处理。

11. **总结建议**:
    - 动态管道不容易,理解要尝试的操作及其对管道其他部分的影响。
    - 断开连接前阻塞 pads,连接前同步新元素的状态,始终先连接 sink 元素以避免媒体泄漏。

12. **联系方式和资源**:
    - 演讲者邮箱:santoscadenas@gmail.com
    - Kurento 相关链接:[Kurento](http://www.kurento.org), [GitHub](http://www.github.com/kurento), [Twitter](https://twitter.com/kurentoms)
    - 其他相关组织:[NUBOMEDIA](http://www.nubomedia.eu), [FI-WARE](http://www.fi-ware.org), [EU](http://ec.europa.eu)

代码解释

这段代码的作用是从 PDF 文件中提取文本内容,并使用 OpenAI 的 GPT 模型对其进行总结。以下是各部分的解释:

1. 导入必要的库

复制代码
from langchain.document_loaders import UnstructuredPDFLoader
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
  • UnstructuredPDFLoader: 用于加载和解析 PDF 文件,将其转换为文本格式。
  • OpenAI: 用于与 OpenAI 的 GPT 模型进行交互,生成自然语言的输出。
  • LLMChain: 用于将模型与输入的提示(prompt)结合起来,创建一个完整的流程链。
  • PromptTemplate: 用于定义向 GPT 提供的提示模板。

2. 加载 PDF 文件

复制代码
pdf_loader = UnstructuredPDFLoader("path_to_your_pdf_file.pdf")
documents = pdf_loader.load()
  • UnstructuredPDFLoader: 用来加载 PDF 文件。它会解析 PDF 并将其转换成文档对象列表,每个文档对象包含了对应的页面内容。
  • documents : 加载后的 PDF 文件内容存储在 documents 列表中,每个文档对象对应一页 PDF 文本。

3. 提取 PDF 文本

复制代码
pdf_text = ' '.join([doc.page_content for doc in documents])
  • pdf_text: 从文档对象中提取纯文本内容,将每一页的内容拼接在一起,生成完整的 PDF 文本。

4. 创建 OpenAI LLM 对象

复制代码
llm = OpenAI(temperature=0.7, openai_api_key="your_openai_api_key")
  • OpenAI : 实例化 GPT 模型,temperature=0.7 设置了生成文本的随机性,较高的值会导致模型生成更多样化的输出。需要使用 OpenAI 的 API 密钥来访问 GPT 服务。

5. 定义 Prompt 模板

复制代码
prompt_template = """
请总结以下内容:
{pdf_text}
总结:
"""
  • prompt_template : 定义了一个自然语言提示模板,包含一个占位符 {pdf_text},用于替换成提取的 PDF 文本。该模板告诉 GPT 模型对 PDF 内容进行总结。

    prompt = PromptTemplate(
    input_variables=["pdf_text"],
    template=prompt_template,
    )

  • PromptTemplate : 创建一个具体的提示模板,指定 pdf_text 作为输入变量。

6. 创建 LLMChain

复制代码
chain = LLMChain(llm=llm, prompt=prompt)
  • LLMChain: 将 GPT 模型和定义好的提示模板连接起来,形成一个可执行的链,链条会根据提示和模型生成输出。

7. 生成总结

复制代码
summary = chain.run(pdf_text)
print("PDF 总结:\n", summary)
  • chain.run(pdf_text): 执行链,将提取的 PDF 文本传递给 LLM,GPT 模型根据提供的 prompt 对 PDF 文本进行总结。
  • print("PDF 总结:\n", summary): 打印生成的总结。

总结

该代码从 PDF 文件中提取纯文本内容,使用 OpenAI GPT 模型对其进行总结。你可以通过修改 prompt 或调整模型的参数来生成不同风格的总结。

你可以将此代码应用于任何 PDF 文件,得到简明的总结内容。


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

相关推荐
阿幸软件杂货间2 小时前
最新PDF版本!Acrobat Pro DC 2025,解压即用版
pdf·adobe acrobat·acrobat
星空的资源小屋4 小时前
网易UU远程,免费电脑远程控制软件
人工智能·python·pdf·电脑
YUELEI1184 小时前
langchain 缓存 Caching
缓存·langchain
会飞的小菠菜7 小时前
如何一次性将多个PPT幻灯片批量转换成PDF文档
pdf·powerpoint·ppt·批量·格式转换
somethingGoWay10 小时前
wpf .netcore 导出pdf文件
pdf·wpf·.netcore
小白电脑技术18 小时前
PDF教程|如何把想要的网页保存下来?
pdf·电脑
我没想到原来他们都是一堆坏人21 小时前
通过Gen AI SDK调用gemini 2.5 pro,单独上传pdf文件 | ai agent 开发笔记 2025.9.2 Day 2
ai·google·pdf·sdk·gemini
AI视觉网奇1 天前
麒麟系统 doc转pdf
linux·运维·pdf
CodeCraft Studio1 天前
国产化PDF处理控件Spire.PDF教程:如何在 Java 中通过模板生成 PDF
java·python·pdf·spire.pdf·java创建pdf·从html创建pdf
知其然亦知其所以然1 天前
三分钟接入!SpringAI 玩转 Perplexity 聊天模型实战
后端·spring·langchain