用华为云 FunctionGraph + DeepSeek 搭建一个轻量级 AI 文章摘要服务

举报
yd_246800664 发表于 2026/11/07 12:10:23 2026/11/07
【摘要】 本文介绍如何基于华为云函数工作流 FunctionGraph 与 DeepSeek 大模型,快速搭建一个"丢进一篇文章链接,自动返回摘要"的轻量 HTTP 服务。全程无需管理服务器,按调用量计费,适合个人开发者和小团队。 一、为什么选这个方案做内容类产品时经常遇到一个需求:用户没时间读长文,希望系统自动生成摘要。这类需求的典型特点是调用频率不稳定——平时没什么流量,偶尔爆发一下。如果为此专门...

本文介绍如何基于华为云函数工作流 FunctionGraph 与 DeepSeek 大模型,快速搭建一个"丢进一篇文章链接,自动返回摘要"的轻量 HTTP 服务。全程无需管理服务器,按调用量计费,适合个人开发者和小团队。

一、为什么选这个方案

做内容类产品时经常遇到一个需求:用户没时间读长文,希望系统自动生成摘要。这类需求的典型特点是调用频率不稳定——平时没什么流量,偶尔爆发一下。如果为此专门买一台 ECS 跑常驻服务,大部分时间都在空转浪费钱。

Serverless 架构正好契合这种场景:

  • 按需执行:有请求才运行,没有请求不花钱;
  • 免运维:不用管操作系统、安全补丁、进程守护;
  • 弹性伸缩:突发流量时自动扩容,不会被压垮。

华为云的函数工作流(FunctionGraph)支持触发器模式,其中 HTTP 触发器可以直接暴露一个 URL 给外部调用,配合 DeepSeek 这类高性价比的大模型 API,几行代码就能做出一个可用的 AI 服务。

整体架构非常简单:

用户请求 → FunctionGraph (HTTP 触发器) → 调用 DeepSeek API → 返回摘要 JSON

二、准备工作

开始之前需要准备三样东西:

  1. 华为云账号,并开通 FunctionGraph 服务(有免费额度,本示例的调用量基本可以白嫖);
  2. DeepSeek API Key:到 DeepSeek 开放平台创建一个 API Key,充值少量金额即可;
  3. Python 3.9+ 基础:本文代码用 Python 编写,依赖极少。

三、编写函数代码

FunctionGraph 的 Python 函数入口是一个 handler 函数。下面是完整代码,核心逻辑分三步:解析请求 → 抓取网页正文 → 调用大模型生成摘要。

# -*- coding: utf-8 -*-
import json
import re
import urllib.request

DEEPSEEK_API_KEY = "sk-xxxxxxxx"  # 建议放到环境变量中,不要硬编码

def fetch_html(url: str) -> str:
    """抓取目标网页的 HTML"""
    req = urllib.request.Request(url, headers={
        "User-Agent": "Mozilla/5.0 (compatible; SummaryBot/1.0)"
    })
    with urllib.request.urlopen(req, timeout=15) as resp:
        return resp.read().decode("utf-8", errors="ignore")

def extract_text(html: str) -> str:
    """粗暴地去掉标签,提取正文纯文本(简单场景够用)"""
    html = re.sub(r"<script[\s\S]*?</script>|<style[\s\S]*?</style>", "", html)
    text = re.sub(r"<[^>]+>", " ", html)
    text = re.sub(r"\s+", " ", text).strip()
    # 大模型上下文有限,这里截取前 6000 字符
    return text[:6000]

def summarize(text: str) -> str:
    """调用 DeepSeek 生成摘要"""
    payload = json.dumps({
        "model": "deepseek-chat",
        "messages": [
            {"role": "system",
             "content": "你是一个专业的编辑,请把用户给出的文章内容总结成一段不超过 150 字的中文摘要,并提炼 3 个关键词。"},
            {"role": "user", "content": text}
        ]
    }).encode("utf-8")

    req = urllib.request.Request(
        "https://api.deepseek.com/chat/completions",
        data=payload,
        headers={
            "Content-Type": "application/json",
            "Authorization": f"Bearer {DEEPSEEK_API_KEY}",
        },
    )
    with urllib.request.urlopen(req, timeout=60) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return data["choices"][0]["message"]["content"]

def handler(event, context):
    try:
        body = json.loads(event["body"] or "{}")
        url = body.get("url", "")
        if not url.startswith("http"):
            return {"statusCode": 400,
                    "body": json.dumps({"error": "缺少合法的 url 参数"})}

        text = extract_text(fetch_html(url))
        summary = summarize(text)
        return {
            "statusCode": 200,
            "headers": {"Content-Type": "application/json"},
            "body": json.dumps({"summary": summary}, ensure_ascii=False),
        }
    except Exception as e:
        return {"statusCode": 500,
                "body": json.dumps({"error": str(e)})}

几点说明:

  • 依赖为零:全部使用 Python 标准库,不需要上传依赖包,直接在线编辑器里粘贴就能跑;
  • 正文截取:网页正文提取这里用了最简单的正则方案,生产环境建议接入 readability 类的正文抽取库,或者直接从结构化数据源拿文章内容;
  • 密钥安全:DEEPSEEK_API_KEY 应该配置在 FunctionGraph 的环境变量里,而不是写死在代码中。

四、部署步骤

  1. 登录华为云控制台,进入 FunctionGraph 控制台,点击「创建函数」;
  2. 选择「事件函数」,运行时选 Python 3.9(或更高版本);
  3. 在代码编辑区粘贴上面的代码,入口设置为 index.handler;
  4. 在「配置」→「环境变量」中添加 DEEPSEEK_API_KEY,代码里改为 os.environ.get("DEEPSEEK_API_KEY") 读取;
  5. 内存选 512MB、超时设 90 秒(大模型响应需要一些时间);
  6. 保存后在「触发器」中添加 HTTP 触发器,认证方式选「无需认证」(测试阶段)或 APIG 签名认证(生产推荐),记下生成的 URL。

部署完成后用 curl 验证一下:

curl -X POST https://xxxx.apigw.xxx.huaweicloud.com/xxx \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-blog.com/some-article"}'

返回结果类似:

{
  "summary": "本文介绍了基于华为云 FunctionGraph 搭建 AI 摘要服务的完整流程…… 关键词:Serverless、大模型、摘要生成"
}

五、几个实用的优化方向

跑通之后,可以按需迭代:

  1. 流式返回:如果摘要较长,可以让 DeepSeek 开启 stream 模式,FunctionGraph 结合 WebSocket 触发器实现打字机效果;
  2. 缓存结果:对同一 URL 的摘要结果做缓存(比如存到云数据库 GeminiDB 或 OBS),避免重复调用大模型浪费 Token;
  3. 异步化:长文章处理时间可能超过 HTTP 同步等待上限,可以改用「消息队列 + 异步函数」模式,处理完再回调通知;
  4. 安全加固:公网开放的 HTTP 触发器建议加鉴权(如 APIG 签名或简单 Token 校验),并配置限流,防止被恶意刷量产生费用。

六、成本估算

以每天调用 1000 次、每次输入输出合计约 3000 Token 计算:

  • FunctionGraph 费用:基本在免费额度内;
  • DeepSeek 费用:按当前定价约每天几毛钱。

相比一台每月几十元还常年空转的 ECS,成本几乎可以忽略,而且不用担心流量高峰。

七、总结

本文用一个不到百行代码的例子,演示了如何在华为云上用 Serverless + 大模型 API 快速构建一个实用的小服务。这个模式的可复制性很强:把「摘要」换成「翻译」「润色」「内容审核」,就是另一个服务了。建议大家动手试一试,欢迎在评论区交流踩坑经验。


作者注:文中示例代码为演示用途,生产环境请务必做好密钥管理与安全防护。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。