☰
PaddleFormers 中 ERNIE 3.0 Zeus 文心大模型接入指南:安装、文本生成 API 与在线服务部署
2026/9/25 9:21:59 网站建设 项目流程
  • 人工智能
  • 大模型
  • 微调
  • 模型推理服务

【免费下载链接】PaddleFormers

PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleFormers
点击查看免费下载

ERNIE 3.0 Zeus 是 ERNIE 3.0 系列模型的升级版本,本仓库通过 PaddleHub 将其封装为可直接调用的文心大模型 API 模块。本文将完整讲解该模块的安装方式、命令行预测、Python 代码调用、七大预置任务 API 的参数细节,以及基于 PaddleHub Serving 的在线服务与 Gradio 交互部署,帮助你在 PaddleFormers 生态中快速落地中文文本生成能力。

一、模块概览与模型背景

1.1 模块基本信息

模型名称ernie_zeus
类别文本-文本生成
网络-
数据集-
是否支持 Fine-tuning否
模型大小-
最新更新日期2022-08-16
数据指标-

从模块声明看,该模型在 module.py 中被定义为type='nlp/text_generation'、version='1.2.0'的 PaddleHub 模块,其核心实现并非本地推理,而是通过 HTTP 请求调用文心大模型的云端 API,因此文档明确标注“不支持 Fine-tuning”。

1.2 应用效果展示

文档给出了两个典型的中文生成效果示例:

  • 作文创作:输入作文标题「诚以养德,信以修身」,模型生成了一篇以《曾国藩家书》为引、围绕“真诚与诚信”展开的完整议论文段落,展示了长文本连贯生成能力。
  • 文案创作:输入产品描述「芍药香氛的沐浴乳」,模型输出了一段包含“天然草本精华”“泡沫细腻绵密”“适合干性、中性或敏感性肌肤”等卖点的商品文案,展示了营销文案撰写能力。

1.3 模型介绍

ERNIE 3.0 Zeus 是 ERNIE 3.0 系列模型的最新升级。其除了对无标注数据和知识图谱的学习之外,还通过持续学习对百余种不同形式的任务数据学习,实现了任务知识增强,显著提升了模型的零样本/小样本学习能力。

这一“任务知识增强”的设计理念直接体现在模块的 API 设计上:custom_generation提供了task_prompt参数,内置 PARAGRAPH、Summarization、MT、Dialogue、zuowen、adtext、couplet 等二十余种任务模板,让同一个模型底座可以适配不同类型的生成任务。

二、环境依赖与安装

2.1 环境依赖

使用本模块前需要满足以下环境要求:

  • paddlepaddle >= 2.0.0
  • paddlehub >= 2.2.0

其中 PaddleHub 的安装方式可参考 安装文档:要求 Python >= 3.6.2,支持 Windows/Mac/Linux 操作系统,先安装 PaddlePaddle 框架(pip install paddlepaddle -U或 GPU 版pip install paddlepaddle-gpu -U),再执行pip install paddlehub==2.1.0。安装后可通过paddlehub.server_check()检查与远端 PaddleHub-Server 的连接状态。

此外,从 requirements.txt 可以看出,本模块实际运行只需requests一个第三方依赖,因为推理全部在云端完成,本地不需要加载模型权重。

2.2 安装模块

在满足上述依赖后,执行:

$ hub install ernie_zeus

如安装时遇到问题,可参考各平台的零基础安装指南:Windows 安装、Linux 安装、MacOS 安装。

2.3 使用申请(可选)

本模型通过云端 API 提供服务,调用前需要申请 API Key 和 Secret Key。请前往文心旸谷社区申请使用本模型所需的 API key 和 Secret Key。

申请到凭证后有两种传递方式:

  1. 在调用时显式传入ak/sk参数;
  2. 设置WENXIN_AK和WENXIN_SK环境变量(推荐)。

从 module.py 的get_access_token实现可以看到,模块会优先使用显式传入的ak/sk,否则从环境变量读取;两者都缺失时会抛出运行时错误并提示去文心官网申请。拿到凭证后,模块通过https://wenxin.baidu.com/younger/portal/api/oauth/token换取 access_token,供后续所有生成请求使用。

三、模型 API 预测

3.1 命令行预测

安装完成后,可以通过hub run命令直接进行预测。以作文创作为例:

# 作文创作 # 请设置 '--ak' 和 '--sk' 参数 # 或者设置 'WENXIN_AK' 和 'WENXIN_SK' 环境变量 # 更多细节参考下方 API 说明 $ hub run ernie_zeus \ --task composition_generation \ --text '诚以养德,信以修身'

参数说明

  • --task(str):指定任务名称,与 API 名称保持一致(即下文中各生成方法的函数名)。
  • --text(str):根据不同的任务输入所需的文本。
  • 其他参数请参考后续 API 章节。

结合 module.py 中@runnable修饰的cmd方法可以看到,命令行还支持--min_dec_len、--seq_len、--topp、--penalty_score、--stop_token、--task_prompt、--penalty_text、--choice_text、--is_unidirectional、--min_dec_penalty_text、--logits_bias、--mask_type、--ak、--sk等全部参数。其中--ak与--sk同时非空时,会重新获取 access_token 覆盖初始化时的凭证。若--task指定的不是custom_generation,命令行会自动剥离仅自定义接口专用的高级参数(如stop_token、task_prompt等),只保留通用生成参数,避免调用出错。

3.2 预测代码示例

在 Python 中使用 PaddleHub 加载模块并调用:

import paddlehub as hub # 请设置 'ak' 和 'sk' 参数 # 或者设置 'WENXIN_AK' 和 'WENXIN_SK' 环境变量 # 更多细节参考下方 API 说明 model = hub.Module(name='ernie_zeus') # 作文创作 result = model.composition_generation( text='诚以养德,信以修身' ) print(result)

模块的单元测试 test.py 中覆盖了全部九个 API 方法,均断言返回值为字符串类型,例如composition_generation('诚以养德,信以修身')、copywriting_generation('芍药香氛的沐浴乳')、text_cloze('她有着一双[MASK]的眼眸。')等,可作为各任务调用方式的直接参考。

3.3 API 详解

构造函数
def __init__( ak: Optional[str] = None, sk: Optional[str] = None ) -> None

初始化 API。

参数

  • ak(Optional[str]):文心 API Key,默认为 None,即从环境变量WENXIN_AK中获取;
  • sk(Optional[str]):文心 API Secret Key,默认为 None,即从环境变量WENXIN_SK中获取。
自定义文本生成 API(custom_generation)

这是所有任务的底层接口,其余预置任务本质上都是对该接口的封装。

def custom_generation( text: str, min_dec_len: int = 1, seq_len: int = 128, topp: float = 1.0, penalty_score: float = 1.0, stop_token: str = '', task_prompt: str = '', penalty_text: str = '', choice_text: str = '', is_unidirectional: bool = False, min_dec_penalty_text: str = '', logits_bias: int = -10000, mask_type: str = 'word' ) -> str

参数说明

  • text(str):模型的输入文本,为 prompt 形式的输入。文本长度 [1, 1000]。注:ERNIE 3.0-1.5B 模型取值范围 ≤ 512。
  • min_dec_len(int):输出结果的最小长度,避免因模型生成 END 或者遇到用户指定的 stop_token 而生成长度过短的情况,与 seq_len 结合使用来设置生成文本的长度范围 [1, seq_len]。
  • seq_len(int):输出结果的最大长度,因模型生成 END 或者遇到用户指定的 stop_token,实际返回结果可能会小于这个长度,与 min_dec_len 结合使用来控制生成文本的长度范围 [1, 1000]。(注:ERNIE 3.0-1.5B 模型取值范围 ≤ 512)
  • topp(float):影响输出文本的多样性,取值越大,生成文本的多样性越强。取值范围 [0.0, 1.0]。
  • penalty_score(float):通过对已生成的 token 增加惩罚,减少重复生成的现象。值越大表示惩罚越大。取值范围 [1.0, 2.0]。
  • stop_token(str):预测结果解析时使用的结束字符串,碰到对应字符串则直接截断并返回。可以通过设置该值,过滤掉 few-shot 等场景下模型重复的 cases。
  • task_prompt(str):指定预置的任务模板,效果更好。可选值包括:
    • PARAGRAPH:引导模型生成一段文章;SENT:引导模型生成一句话;ENTITY:引导模型生成词组;
    • Summarization:摘要;MT:翻译;Text2Annotation:抽取;Correction:纠错;
    • QA_MRC:阅读理解;Dialogue:对话;QA_Closed_book:闭卷问答;QA_Multi_Choice:多选问答;
    • QuestionGeneration:问题生成;Paraphrasing:复述;NLI:文本蕴含识别;SemanticMatching:匹配;
    • Text2SQL:文本描述转 SQL;TextClassification:文本分类;SentimentClassification:情感分析;
    • zuowen:写作文;adtext:写文案;couplet:对对联;novel:写小说;cloze:文本补全;Misc:其它任务。
  • penalty_text(str):模型会惩罚该字符串中的 token。通过设置该值,可以减少某些冗余与异常字符的生成。
  • choice_text(str):模型只能生成该字符串中的 token 的组合。通过设置该值,可以对某些抽取式任务进行定向调优。
  • is_unidirectional(bool):False 表示模型为双向生成,True 表示模型为单向生成。建议续写与 few-shot 等通用场景采用单向生成方式,而完型填空等任务相关场景建议采用双向生成方式。
  • min_dec_penalty_text(str):与最小生成长度搭配使用,可以在 min_dec_len 步前不让模型生成该字符串中的 tokens。
  • logits_bias(int):配合 penalty_text 使用,对给定的 penalty_text 中的 token 增加一个 logits_bias,可以通过设置该值屏蔽某些 token 生成的概率。
  • mask_type(str):设置该值可以控制模型生成粒度。可选参数为 word、sentence、paragraph。

返回

  • text(str):生成的文本。

从 module.py 可以看到,该接口将上述参数连同access_token通过requests.post发送至https://wenxin.baidu.com/moduleApi/portal/api/rest/1.0/ernie/3.0.28/zeus?from=paddlehub,并校验响应码code == 0后从results['data']['result']中取回生成文本。这意味着每次调用都依赖网络连通性与云端服务可用性。

完形填空 API(text_cloze)
def text_cloze( text: str, min_dec_len: int = 1, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.0 ) -> str
  • 完形填空 API。
  • text(str):文字段落,使用[MASK]标记待补全文字。
  • 其余参数含义与custom_generation中同名参数一致。
  • 返回:text(str):补全词语。

从源码实现看(module.py),该方法在底层将task_prompt固定为cloze,并采用is_unidirectional=False(双向生成),与“完型填空适合双向生成”的官方建议一致。

作文创作 API(composition_generation)
def composition_generation( text: str, min_dec_len: int = 128, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str
  • 作文创作 API。
  • text(str):作文题目。
  • 其余参数含义同上。
  • 返回:text(str):作文内容。

实现上(module.py)会先构造 prompt 格式"作文题目:{} 正文:".format(text),并将task_prompt设为zuowen,min_dec_len默认抬升到 128,保证生成的作文具备足够篇幅。

自由问答 API(answer_generation)
def answer_generation( text: str, min_dec_len: int = 2, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str
  • 自由问答 API。
  • text(str):问题内容。
  • 其余参数含义同上。
  • 返回:text(str):问题答案。

实现上会构造"问题:{} 回答:".format(text)的 prompt,使用task_prompt='qa'、penalty_text='[gEND]',并采用单向生成。

对联续写 API(couplet_continuation)
def couplet_continuation( text: str, min_dec_len: int = 2, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.0 ) -> str
  • 对联续写 API。
  • text(str):对联上联。
  • 其余参数含义同上。
  • 返回:text(str):对联下联。

实现上构造"上联:{} 下联:".format(text)的 prompt,使用task_prompt='couplet',mask_type='word'。

文案创作 API(copywriting_generation)
def copywriting_generation( text: str, min_dec_len: int = 32, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str
  • 文案创作 API。
  • text(str):产品描述。
  • 其余参数含义同上。
  • 返回:text(str):产品文案。

实现上构造"标题:{} 文案:".format(text)的 prompt,使用task_prompt='adtext',min_dec_len默认 32 以保证文案的基本长度。

小说续写 API(novel_continuation)
def novel_continuation( text: str, min_dec_len: int = 2, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str
  • 小说续写 API。
  • text(str):小说上文。
  • 其余参数含义同上。
  • 返回:text(str):小说下文。

实现上构造"上文:{} 下文:".format(text)的 prompt,使用task_prompt='gPARAGRAPH'并采用单向生成,与“续写场景建议单向生成”的建议一致。

文本摘要 API(text_summarization)
def text_summarization( text: str, min_dec_len: int = 4, seq_len: int = 512, topp: float = 0.0, penalty_score: float = 1.0 ) -> str
  • 文本摘要 API。
  • text(str):文本段落。
  • 其余参数含义同上。
  • 返回:text(str):段落摘要。

该任务在实现上构造"文章:{} 摘要:".format(text)的 prompt,使用task_prompt='Summarization'。注意其topp默认值为0.0,即默认采用接近确定性的生成方式,保证摘要结果稳定、忠实于原文。

四、服务部署

PaddleHub Serving 可以部署一个在线文本生成服务,将上述 API 以 HTTP 接口的形式对外开放。

第一步:启动 PaddleHub Serving

运行启动命令:

$ hub serving start -m ernie_zeus

这样就完成了一个文本生成在线服务 API 的部署,默认端口号为 8866。结合 serving.py 的实现可以看到,hub serving start支持-m/--modules指定模块、-p/--port指定端口(默认 8866)、--use_multiprocess多进程模式(Windows 不支持)以及--config/-c配置文件方式启动;端口被占用时会报错提示更换端口,停止服务可用hub serving stop -p 端口号。

第二步:发送预测请求

配置好服务端后,以下代码即可实现发送预测请求并获取预测结果:

import requests import json # 发送HTTP请求 # 参数参考自定义文本生成接口 data = {'text': '巨大的白色城堡'} headers = {"Content-type": "application/json"} url = "http://127.0.0.1:8866/predict/ernie_zeus" r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 获取返回结果 print(r.json()["results"])

Gradio App 支持

从 PaddleHub 2.3.1 开始,支持在浏览器中访问链接http://127.0.0.1:8866/gradio/ernie_zeus查看并交互使用 ernie_zeus 的 Gradio App。

该能力由模块内的create_gradio_app方法(module.py)提供,界面内置了任务下拉框(text_summarization、copywriting_generation、novel_continuation、answer_generation、couplet_continuation、composition_generation、text_cloze 七种任务)以及 min_dec_len、seq_len、topp、penalty_score 四个滑杆控件,并预置了多个示例输入,无需编写任何前端代码即可体验各任务的生成效果。其路由实现位于 app_compat.py:访问/gradio/<module_name>时,服务端动态创建 Gradio App 并将/gradio/<module_name>/<path>下的所有资源代理到 Gradio 服务器。

五、更新历史

  • 1.0.0:初始发布。
  • 1.1.0:移除默认 AK 和 SK(即要求用户显式提供文心 API 凭证)。
  • 1.2.0:添加 Serving 和 Gradio App 支持。

如需安装指定历史版本,可使用:

$ hub install ernie_zeus == 1.2.0

六、小结

ERNIE 3.0 Zeus 模块以“云端 API + PaddleHub 封装”的方式,让开发者无需管理模型权重和 GPU 资源即可获得中文文本生成能力。本文覆盖了从凭证申请、环境安装、命令行与 Python 调用,到七类预置任务 API 的完整参数语义,以及 PaddleHub Serving 在线部署和 Gradio 可视化交互的完整链路。实际使用中,建议根据任务类型选择合适的task_prompt与is_unidirectional组合,并通过min_dec_len/seq_len控制输出长度、topp/penalty_score调节多样性与去重效果,以获得理想的生成结果。

  • 人工智能
  • 大模型
  • 微调
  • 模型推理服务

【免费下载链接】PaddleFormers

PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleFormers
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询