利用 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 国际许可协议进行许可。

相关推荐
FreeCode1 小时前
LangChain1.0智能体开发:流输出组件
人工智能·langchain·agent
cooldream20091 小时前
LangChain 构建智能多工具 Agent实践
langchain·agent·智能问答助手
FreeCode2 小时前
LangChain 1.0智能体开发:记忆组件
人工智能·langchain·agent
悟乙己2 小时前
使用 RAG、LangChain、FastAPI 和 Streamlit 构建 Text-to-SQL 聊天机器人
sql·langchain·fastapi
serve the people3 小时前
Prompt Serialization in LangChain
数据库·langchain·prompt
AI Echoes3 小时前
LangChain 使用语义路由选择不同的Prompt模板
人工智能·python·langchain·prompt·agent
serve the people8 小时前
Prompt Composition with LangChain’s PipelinePromptTemplate
java·langchain·prompt
钢蛋1 天前
LangChain v1.0 的 Agents:让 AI 真正"动起来"
langchain
hu55667981 天前
Adobe Acrobat DC PDF如何批量文本替换
adobe·pdf
稳稳C91 天前
02|Langgraph | 从入门到实战 | workflow与Agent
人工智能·langchain·agent·langgraph