背景介绍:为什么选择 DeepSeek API 做文本摘要
红烁AI 培训,红烁 AI 中转站为您整理:文本摘要是自然语言处理中最高频的应用场景之一。从新闻客户端的一句话简介,到企业内部的文档智能压缩,再到客服系统的对话总结,摘要能力直接决定了信息处理效率。
过去,开发者要么依赖 TextRank 这类抽取式算法(效果生硬),要么调用 OpenAI 的 GPT 系列(成本高昂)。2024 年以来,DeepSeek 凭借接近 GPT-4 的中文理解能力和极具竞争力的定价,迅速成为国内开发者的首选替代方案。
DeepSeek API 兼容 OpenAI 接口规范,迁移成本几乎为零。更重要的是,它对中文语义的把握尤为出色,在处理中文长文摘要时表现往往优于同价位的竞品。本文将系统讲解如何用 DeepSeek API 做文本摘要,从零开始搭建一套可用于生产环境的摘要系统。
核心内容:环境准备与 API 接入
第一步:申请 DeepSeek API Key
访问 platform.deepseek.com,注册账号后进入控制台,点击「API Keys」创建一个新的密钥。新用户通常有免费额度可供测试,正式使用按 Token 计费,价格远低于同类产品。
拿到 Key 之后,建议存入环境变量而非硬编码在代码里:
export DEEPSEEK_API_KEY="your_api_key_here"
第二步:安装依赖
DeepSeek API 与 OpenAI SDK 完全兼容,直接复用即可,无需额外安装专属包:
pip install openai
第三步:基础摘要代码实现
下面是一个最小可运行的文本摘要示例,展示了如何用 DeepSeek API 做文本摘要的核心逻辑:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)
def summarize(text: str, max_words: int = 150) -> str:
"""
使用 DeepSeek API 对输入文本生成摘要。
Args:
text: 需要摘要的原始文本
max_words: 摘要的最大字数限制
Returns:
生成的摘要字符串
"""
prompt = f"""请对以下文本生成一段简洁的摘要,要求:
1. 字数控制在 {max_words} 字以内
2. 保留核心观点和关键信息
3. 语言流畅自然,避免照抄原文
4. 使用第三人称客观陈述
文本内容:
{text}
摘要:"""
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role": "system",
"content": "你是一位专业的文本摘要助手,擅长提炼文章核心内容。"
},
{
"role": "user",
"content": prompt
}
],
temperature=0.3, # 摘要任务建议低温度,保证输出稳定
max_tokens=512
)
return response.choices[0].message.content.strip()
# 使用示例
if __name__ == "__main__":
sample_text = """
人工智能技术的快速发展正在深刻改变各行各业的工作方式。
在医疗领域,AI 辅助诊断系统已经能够以超过专科医生的准确率
识别早期癌症影像;在教育领域,个性化学习平台根据学生的学习
节奏动态调整课程内容;在金融领域,智能风控模型将欺诈识别
响应时间从数小时压缩到毫秒级别。然而,技术进步也带来了
就业结构调整、数据隐私保护等新挑战,需要政策制定者、
企业和个人共同应对。
"""
result = summarize(sample_text, max_words=80)
print(result)
实际应用:进阶技巧与场景适配
Prompt 工程优化
摘要质量的上限由 Prompt 决定。针对不同场景,建议定制化 System Prompt:
- 新闻摘要:强调「5W1H」要素,要求输出一句话导语
- 学术论文:要求保留研究方法、核心结论和数据指标
- 会议纪要:突出决策事项、责任人和截止时间
- 用户评论:提炼情感倾向和高频痛点,适合批量处理
处理超长文本
当原文超过模型单次上下文限制时,可以采用「分段摘要再汇总」的 Map-Reduce 策略:
def summarize_long_text(text: str, chunk_size: int = 2000) -> str:
"""对超长文本进行分段摘要后再做二次汇总。"""
# 按段落切分,避免在句子中间截断
chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
# 第一轮:对每个分段生成摘要
chunk_summaries = [summarize(chunk, max_words=100) for chunk in chunks]
# 第二轮:对所有分段摘要做最终汇总
combined = "\n\n".join(chunk_summaries)
return summarize(combined, max_words=200)
流式输出提升用户体验
对于需要实时展示结果的前端场景,开启流式响应可以显著降低用户感知延迟:
def summarize_stream(text: str):
"""流式输出摘要,适合实时展示场景。"""
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": f"请摘要以下内容:\n{text}"}],
stream=True
)
for chunk in response:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
成本控制建议
- 对输入文本做预处理,去除 HTML 标签、多余空白和无意义符号,减少无效 Token 消耗
- 批量任务使用异步并发,结合
asyncio和httpx提升吞吐量 - 对相同文本的摘要结果做本地缓存(Redis 或内存字典),避免重复调用
- 根据文本长度动态调整
max_tokens,短文本不必设置过大的上限
常见问题 FAQ
Q1:调用 API 时报 401 错误怎么办?
通常是 API Key 无效或未正确传入。检查环境变量是否生效(echo $DEEPSEEK_API_KEY),确认 base_url 设置为 https://api.deepseek.com 而非 OpenAI 的默认地址。
Q2:摘要结果总是照抄原文,没有真正压缩?
降低 temperature 并不能解决这个问题,根本原因在于 Prompt 指令不够明确。在 Prompt 中加入「禁止直接复制原文句子」「必须用自己的语言重新表述」等约束,效果会明显改善。
Q3:如何评估摘要质量?
自动化评估可以使用 ROUGE 分数(衡量与参考摘要的重叠度),Python 中可通过 rouge-score 库快速计算。生产环境建议结合人工抽检,尤其关注关键信息是否遗漏。
Q4:DeepSeek 和 GPT-4 做摘要哪个更好?
中文文本摘要场景下,DeepSeek 的表现与 GPT-4o 相当,在部分中文长文测试中甚至略有优势,而价格仅为后者的十分之一左右。英文摘要场景 GPT-4 仍有一定优势,但差距在缩小。
Q5:能处理 PDF 或 Word 文档吗?
DeepSeek API 本身只接受纯文本输入。处理 PDF 可以用 pdfplumber 或 pymupdf 提取文字,Word 文档用 python-docx,提取后再传入 API 即可。
总结
用 DeepSeek API 做文本摘要的核心流程并不复杂:申请 Key、配置 OpenAI 兼容客户端、设计合适的 Prompt,几十行代码就能跑通一个基础版本。真正的工程价值在于后续的优化——针对业务场景定制 Prompt、用 Map-Reduce 处理长文本、通过流式输出改善交互体验、以及合理的缓存和并发策略控制成本。
DeepSeek 在中文理解和性价比上的双重优势,使其成为目前构建中文文本摘要系统的最优选择之一。随着模型持续迭代,其能力边界还在不断扩展,值得开发者持续关注和投入。
想了解更多AI工具和技巧?欢迎访问红烁AI 培训,红烁 AI 中转站,获取最新AI资讯和实用教程。
