翻译 Agent
🎯 学习目标
- 完成 PDF → 段落 → 分块翻译 → 导出 Markdown 全链路
- 维护全局术语表保证译名一致
- 用 LangChain LCEL 串联 Loader 与 LLM
引言
本课从零搭建文档翻译助手,是企业最常见的 LLM 落地形态之一。按步骤做,2 小时内可跑通 MVP。
章节正文
第 1 步:第 1 步:项目初始化
bash
mkdir translate-assistant && cd translate-assistant
python -m venv .venv && source .venv/bin/activate
pip install langchain langchain-openai pypdf gradio python-docx目录结构:
translate-assistant/
├── app.py # Gradio 入口
├── chain.py # LangChain 翻译链
├── glossary.json # 术语表
└── uploads/ # 临时 PDF第 2 步:第 2 步:PDF 加载与分块
python
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
def load_pdf(path: str):
docs = PyPDFLoader(path).load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
return splitter.split_documents(docs)overlap 避免句子在 chunk 边界被截断。metadata 保留 page 便于对照原文。
第 3 步:第 3 步:术语表注入 Prompt
python
import json
from langchain_core.prompts import ChatPromptTemplate
with open("glossary.json") as f:
glossary = json.load(f) # {"Transformer": "Transformer", "Embedding": "嵌入"}
prompt = ChatPromptTemplate.from_messages([
("system", """你是专业译员。英译中。
术语表(必须遵守):{glossary}
保留 Markdown 标题层级。只输出译文。"""),
("human", "{text}"),
])
translate_chain = prompt | llm | StrOutputParser()第 4 步:第 4 步:批量翻译与导出
python
def translate_document(chunks):
results = []
for i, doc in enumerate(chunks):
zh = translate_chain.invoke({"text": doc.page_content, "glossary": glossary})
results.append(f"<!-- page {doc.metadata.get('page', i)} -->\n{zh}")
return "\n\n".join(results)长 PDF 用 batch 或异步限流;记录每 chunk 耗时日志(7.3)。
第 5 步:第 5 步:Gradio UI
python
import gradio as gr
def on_upload(file, target_lang):
chunks = load_pdf(file.name)
md = translate_document(chunks)
return md, md # preview + download text
gr.Interface(
fn=on_upload,
inputs=[gr.File(file_types=[".pdf"]), gr.Dropdown(["中文", "英文"], value="中文")],
outputs=[gr.Markdown(), gr.File()],
title="智能翻译助手",
).launch()动手练习
- 翻译一份 10 页以内 PDF,检查术语一致性
- 增加「保留原文对照」双栏输出
- 为翻译链添加 stream 进度条
本节小结
翻译助手 = Loader + Splitter + 术语 Prompt + 分块 LLM + Gradio;注意 overlap 与 glossary。