领导发来一份 50 页 PDF,说半小时后要重点。
同事丢来几份合同,希望你把关键条款摘出来。
桌面上放着一堆 PDF、Word、TXT,格式乱,内容也长。
这篇文章能帮你跑通什么
01 先把 Agent 想简单一点
用户,解析这份 PDFAI,判断任务,发现需要读取 PDFAI,调用 parse_pdf 工具工具,返回 PDF 文本AI,基于文本总结内容
Agent = 聊天 AI + 工具箱 + 选工具的能力。
02 先准备这些东西
pip install pypdf pdfplumber python-docx markitdown langchain langchain-openai03 文档助手需要哪些工具
PDF → pypdf / pdfplumberWord → python-docxTXT → 直接读取多格式 → markitdown 统一转 Markdown
04 第一步,让 AI 能读 PDF
from pypdf import PdfReaderreader = PdfReader(”你的文件.pdf”)print(f”共 {len(reader.pages)} 页”)print(reader.pages[0].extract_text())
import pdfplumberwith pdfplumber.open(”你的文件.pdf”) as pdf:text = pdf.pages[0].extract_text()tables = pdf.pages[0].extract_tables()
import redef clean(text):text = re.sub(r'\n{3,}', '\n\n', text)text = re.sub(r' {2,}', ' ', text)return text.strip()
05 第二步,让 AI 能读 Word
Document 文档├── Paragraph 段落│ └── Run 文字片段└── Table 表格└── Row 行 / Cell 单元格
from docx import Documentdoc = Document(”你的文档.docx”)for p in doc.paragraphs:if p.text.strip():print(f”[{p.style.name}] {p.text}”)
parts = []for p in doc.paragraphs:if not p.text.strip():continueif ”Heading” in (p.style.name or ””):parts.append(f”{p.text}”) else: parts.append(p.text)text = ”\n”.join(parts)
06 第三步,用 markitdown 做统一转换
from markitdown import MarkItDownmd = MarkItDown()text = md.convert(”报告.pdf”).text_contenttext = md.convert(”方案.docx”).text_contenttext = md.convert(”数据.xlsx”).text_content
不同格式文档 → Markdown → 分段 → 摘要 / 问答 / 提取字段07 第四步,把工具交给 AI
from langchain_core.tools import tool@tooldef parse_pdf(file_path: str) -> str:”””解析 PDF 文件,提取文本内容。适用场景,报告、合同、论文、规范文档等 PDF 文件。输入,PDF 文件路径。输出,PDF 的文本内容。”””解析逻辑 return result
def f1(path):”””处理文件”””
08 第五步,组装一个完整 Agent
from langchain_openai import ChatOpenAIfrom langchain.agents import create_tool_calling_agent, AgentExecutorfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.tools import toolfrom pypdf import PdfReaderfrom docx import Documentimport os@tooldef parse_pdf(file_path: str) -> str:”””解析 PDF 文件。用户提到 PDF、报告、合同、论文时使用。”””reader = PdfReader(file_path)text = ”\n\n”.join(f”[第 {i+1} 页]\n{p.extract_text()}”for i, p in enumerate(reader.pages)if p.extract_text())return f”PDF 解析成功,共 {len(reader.pages)} 页。\n\n{text[:3000]}”@tooldef parse_docx(file_path: str) -> str:”””解析 Word 文档。用户提到 Word、docx、方案、规范时使用。”””doc = Document(file_path)parts = []for p in doc.paragraphs:if not p.text.strip():continueif ”Heading” in (p.style.name or ””):parts.append(f”{p.text}”) else: parts.append(p.text) return ”DOCX 解析成功。\n\n” + ”\n”.join(parts[:3000])@tooldef parse_txt(file_path: str) -> str: ”””读取文本文件。用户提到 txt、md、log、纪要时使用。””” with open(file_path, encoding=”utf-8”) as f: text = f.read() return f”文本读取成功。\n\n{text[:3000]}”@tooldef list_files(directory: str = ”.”) -> str: ”””列出目录中的文件。用户想查看有哪些文件时使用。””” return ”\n”.join(sorted(os.listdir(directory)))TOOLS = [parse_pdf, parse_docx, parse_txt, list_files]llm = ChatOpenAI( model=”deepseek-chat”, base_url=”https://api.deepseek.com/v1”, api_key=”你的 API Key”, temperature=0,)prompt = ChatPromptTemplate.from_messages([ (”system”, ”””你是一个文档处理助手。根据用户输入和文件类型,自动选择合适的工具。如果文件路径明确,直接解析。如果路径不明确,先列出目录文件。”””), (”human”, ”{input}”), (”placeholder”, ”{agent_scratchpad}”),])agent = create_tool_calling_agent(llm, TOOLS, prompt)executor = AgentExecutor( agent=agent, tools=TOOLS, verbose=True, handle_parsing_errors=True, max_iterations=5,)result = executor.invoke({”input”: ”解析 test_docs/sample_report.pdf”})print(result[”output”])
你,解析 report.pdfAI,自动选择 parse_pdf 工具,返回文档内容和总结你,帮我看看 spec.docx 里有什么AI,自动选择 parse_docx 工具,提取段落和结构你,当前目录有哪些文件AI,自动选择 list_files 工具,列出文件列表
09 这只是第一阶段
阶段 1,工具使用让 AI 能读取 PDF、Word、TXT阶段 2,提示词链把解析、分段、摘要、提取字段串成流水线阶段 3,RAG 文档问答基于你的知识库回答问题,并给出引用来源阶段 4,并行化与路由同时处理多个文件,不同类型自动分发阶段 5,记忆与容错记住用户偏好,失败自动重试,关键节点人工确认阶段 6,多 Agent 协作检索、分析、写作、校对由不同 Agent 分工完成阶段 7,护栏与评估加入权限、安全、质量评测和企业级部署能力
它到底能调用哪些工具,这些工具靠不靠谱?
10 动手检查清单
11 几个容易踩坑的问题
写在最后
先把任务拆成工具,再让 AI 学会选择工具。
Agent学习
夜雨聆风