资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

Prompt对象

功能介绍

千帆ModelBuilder Python SDK提供了Prompt类型,可以更便捷地操作平台上的Prompt。

注意事项

调用本文API,需使用安全认证AK/SK鉴权,调用流程及鉴权介绍详见SDK安装及使用流程

示例

文生文模型

此示例通过平台预置模板,生成并使用Prompt对象,调用大模型返回对话内容。

调用示例

from qianfan.common import Prompt
from qianfan.common.hub import hub

# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

# 获取平台上的 Prompt,name 为控制台上显示的名称
p = hub.load("prompt/区域美食推荐")
print(p.template) # => 作为游客,告诉我{region}必吃的10大美食
# 第二个参数_是 negative prompt,仅文生图场景使用,此处可忽略
prompt, _ = p.render(region="上海")

# 之后就可以将渲染后的结果送入模型进行推理
qianfan.Completion().do(prompt)

实现效果

QfResponse(
    code=200, 
    headers={
        ...
    }, 
    body={
        'id': 'as-4v1h587fyv', 
        'object': 'chat.completion', 
        'created': 1695021339, 
        'result': '你好,我是百度研发的知识增强大语言模型,中文名是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。', 
        'is_truncated': False, 
        'need_clear_history': False, 
        'usage': {
            'prompt_tokens': 7, 
            'completion_tokens': 67, 
            'total_tokens': 74
        }
    }, 
    )

文生图模型

调用示例

此示例通过平台预置模板,生成并使用Prompt对象,调用大模型返回图片内容。

# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk

os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"

os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

# 文生图的 Prompt 使用方法相同,具体类型可以从控制台查看

txt2img_prompt = hub.load("prompt/角色设计")

# 类型通过变量属性获取

from qianfan.consts import PromptSceneType

txt2img_prompt.scene_type == PromptSceneType.Text2Image # => True

prompt, negative_prompt = txt2img_prompt.render()

# 之后将 prompt 和 negative_prompt 送入模型进行推理

qianfan.Text2Image().do(

    prompt=prompt, 

    negative_prompt=negative_prompt

)

实现效果

QfResponse(code=200,
           headers={...},
           body={'created': 1111,
                 'data': [{'b64_image': 'xxxxx',
                           'image': 'xx',
                           'index': 1,
                           'object': 'image'}],
                 'id': 'as-xxx',
                 'object': 'image',
                 'usage': {'prompt_tokens': 28, 'total_tokens': 28}})

函数列表

  • 创建本地 Prompt
  • 从平台拉取 Prompt
  • 上传 Prompt
  • 更新 Prompt
  • 删除 Prompt
  • 保存&加载 Prompt
  • 优化 Prompt
  • 评估 Prompt

创建本地 Prompt

直接使用 template 参数构造本地 Prompt 对象。

请求示例

创建自定义的本地 Prompt对象

p = Prompt(
    template="本地 prompt {var1}",
)
# 或者具有更为复杂参数的 Prompt

# 文生图 Prompt 同样支持

from qianfan.consts import PromptSceneType
prompt = Prompt(
    name="txt2img",
    template="txt2img template ((v1))",
    scene_type=PromptSceneType.Text2Image, 
    negative_template="negative template ((v3))", # 负向 prompt
    identifier="(())", # prompt 中变量的标识符
)

请求参数

名称 类型 必填 说明
name string Prompt模版的名称
template string 模版内容,示例:请以{number}字数生成{province}省相关简介
scene_type PromptSceneType 场景类型,可选值如下:
· PromptSceneType.Text2Text:文生文,默认值
· PromptSceneType.Text2Image:文生图
negative_template string 反向prompt模版内容,表示不希望大模型生成的内容,说明:只有scene_type为PromptSceneType.Text2Image,即场景类型为文生图时,该字段有效
identifier string 变量识别符号,支持以下符号:
· 大括号{} (默认)
· 双大括号{{}}
· 中括号[]
· 双中括号[[]]
· 小括号()
· 双小括号(())

返回参数

名称 类型 说明
prompt object Prompt对象

从平台拉取 Prompt

借助于 SDK 的 hub ,可以直接从平台拉取已有的 Prompt。

请求示例

from qianfan.common.hub import hub
# 获取平台上的 Prompt,name 为控制台上显示的名称
p = hub.load("prompt/区域美食推荐")

请求参数

名称 类型 必填 说明
string Prompt模版的名称

上传 Prompt

对于本地 Prompt 来说,借助 hub 对象可以直接将其上传至平台,上传之后可以用 id 字段获取 Prompt 的 id。

p = Prompt(
    template="本地 prompt {var1}",
)
# 对于平台上的 prompt 来说,name 是必须的,因此上传前必须先设置
p.name = "cookbook_prompt"
hub.push(p)
p.id # => 188

请求参数

名称 类型 必填 说明
object Prompt对象

更新 Prompt

对于平台上的 Prompt,借助 hub 对象可以直接对其进行修改。

请求示例

p.set_template("新的 Prompt {new_var}")

hub.push(p) # 更新至平台

print(p.variables) # => ['new_var']

print(p.render(new_var="hello")) # => 新的 Prompt hello

请求参数

名称 类型 必填 说明
object Prompt对象

删除 Prompt

调用delete方法可以删除 Prompt,如果是本地 Prompt 或者预置 Prompt,那么该函数将没有作用,删除后 Prompt 仍可以本地使用。

请求示例

p=hub.load("prompt/cookbook_prompt")

p.delete()

保存&加载 Prompt

SDK 提供了save_to_file方法,以文件形式将 Prompt 保存至本地。保存后,后续重新使用保存的Prompt,可以通过from_file方法从文件里读取 Prompt。

请求示例

p = Prompt(template="这是一个用于{usage}的 Prompt")

p.save_to_file("test_prompt.tpl")

p = Prompt.from_file("test_prompt.tpl")

prompt, _ = p.render(usage="测试")

print(prompt) # => 这是一个用于测试的 Prompt

返回参数

名称 类型 说明
prompt object Prompt对象

优化 Prompt

为了提升模型推理的准确率,可以通过optimize方法对 Prompt 进行优化,返回一个优化后的Prompt,可以提升大模型的表现效果。

请求示例

prompt = Prompt(template="帮我写一份{job}年终总结")

optimized_prompt = prompt.optimize(
    optimize_quality=True,
    simplify_prompt=True,
    iteration_round=1,
    enable_cot=True,
    service_name='ERNIE-4.0-8k',
)
for attr, value in vars(optimized_prompt).items():
    if isinstance(value, (str, int, float, bool)):
        print(f"{attr}: {value}")

返回示例

template: 请写一份今年年末的总结报告,包括以下几个部分:

1. 工作内容和职责:描述我今年在{job}方面的工作内容和职责,以及相关的任务和项目。

2. 成就和经验:总结我今年在{job}方面取得的成就和经验,包括完成的项目、解决的问题以及得到的反馈和认可。

3. 挑战和问题:讨论我今年在{job}方面面临的挑战和问题,并提出我采取的解决方案和未来的改进方向。

4. 学习和成长:描述我今年在{job}方面获得的学习和成长机会,包括参加的培训、掌握的技能和知识,以及如何应用这些知识和技能来改进我的工作。

请提供具体的细节和例子支持我的描述、讨论、挑战和问题、学习和成长等方面。同时,确保报告的结构清晰合理,包括适当的标题和小标题,以帮助读者更好地理解和阅读。让我们一步一步来思考

identifier: {}

type: PromptType.User

scene_type: PromptSceneType.Text2Text

framework_type: PromptFrameworkType.NotUse

_mode: local

请求参数

名称 类型 必填 描述
optimize_quality bool 优化 prompt 质量。 默认为True
simplify_prompt bool 简化 prompt,可以省去“的”、“吧”等含义不强的文本实体,精炼语料内容并降低推理成本。 默认为False
iteration_round [ 1 | 2 ] int 优化迭代轮数,默认为 1
enable_cot bool 开启思维链,将指引模型拆解Prompt内容,逐步进行推理。建议仅在数学计算、逻辑推理等场景下开启使用。
service_name string 优化时使用的服务名称,包括预置服务和自定义服务。示例:ERNIE-Bot,可以通过以下方式获取该字段值:在千帆ModelBuilder控制台-Prompt优化-在线优化页面,在请选择服务下拉框中查看支持的模型服务列表。

返回参数

名称 类型 说明
prompt object Prompt对象

评估 Prompt

SDK 提供了evaluate方法,可以评估不同 Prompt 在不同场景下的质量。

请求示例

old_prompt = Prompt(template="帮我写一份{job}年终总结")

new_prompt = old_prompt.optimize()

prompts= [old_prompt, new_prompt]   # 待评估的 prompt 列表
# 待评估的场景

scenes= [ 

    {
        "args": {"job": "程序员"},   # prompt 变量参数
        "expected": "代码"           # 期望得到的输出
    },

    {
        "args": {"job": "产品经理"},
        "expected": "用户量"
    }
]

# 用于评价的模型
model=Completion(model="ERNIE-3.5-8K")
results=Prompt.evaluate(prompts, scenes, model)

返回示例

Prompt.PromptEvaluateResult(

    prompt=Prompt(template="帮我写一份{job}的年终总结"),

    scene=[
        {
            'new_prompt': '帮我写一份程序员的年终总结', 
            'variables': {'job': '程序员'}, 
            'expected_target': '代码', 
            'response': '模型生成的结果', 
            'score': 0.6395874962204592
        }
    ], 
    summary='模型对prompt的评价'
)

请求参数

名称 类型 必填 描述
prompt_list list[Prompt] 待评估的Prompt对象列表
scenes list[dict] 场景列表,每个场景包含argsexpected两个字段,args是 Prompt 变量参数,expected是该 Prompt 期望的输出
model Completion Completion生成的模型对象

返回参数

名称 类型 描述
result_list list[PromptEvaluateResult] PromptEvaluateResult的对象列表

PromptEvaluateResult说明:

名称 类型 描述
prompt list[prompt] prompt的对象列表
scene list[scene] scene列表
summary string 对该 Prompt 表现的总结

scene说明:

名称 类型 描述
new_prompt string 变量填充后的新 prompt
variables list[string] 变量列表
summary string 期望的输出
response string 模型生成的输出
score float 对模型输出的打分

prompt说明:

名称 类型 说明
name string Prompt模板的名称
labels list[int] 或 list[string] 模板标签Id数组,说明:
· 单个模板最多可选20个标签
· 数组元素是标签id,数组所有元素类型必须一致,例如所有元素都是int,或所有元素都是string
· 通过调用获取标签列表接口,返回的labelId字段获取
id int 模板标识id
template string 模板内容,说明:
(1)如果不使用框架,示例:请以{number}字数生成{province}省相关简介
(2)如果使用模型框架该字段值需符合框架要求,详见本文模板框架说明
variables list[string] 模板变量,示例:"var1,var2",说明:变量标识符号里面的内容,不包含变量标识符,且以逗号隔开
identifier string 变量识别符号,支持以下符号:
· 大括号{}
· 双大括号{{}}
· 中括号[]
· 双中括号[[]]
· 小括号()
· 双小括号(())
scene_type enum 场景类型,可选值如下:
· PromptSceneType.Text2Text:文生文;如果scene字段值不传,默认为PromptSceneType.Text2Text
· PromptSceneType.Text2Image:文生图
framework_type enum 模板框架,说明:
(1)如果不使用模板框架,该字段值为PromptFrameworkType.NotUse
(2)如果使用模板框架,可选值如下:
· PromptFrameworkType.Basic:Basic Prompt Framework
· PromptFrameworkType.Fewshot:CRISPE Prompt Framework
· PromptFrameworkType.Fewshot:Few-shot Promt
如果使用模板框架,参数template需按照模板框架要求填写
negative_template string 反向prompt模板内容,表示不希望大模型生成的内容,说明:只有scene为Text2Image,即场景类型为文生图时,该字段有效
negative_variables list[string] 反向prompt模板的变量,说明:只有scene为PromptSceneType.Text2Image时,即场景类型为文生图时,该字段有效
type enum 模板类型
· 1:预置模板
· 2:用户创建模板
上一篇
模型训练Trainer使用说明
下一篇
在线服务压测指南