ChatCompletion 调优指南
在使用前可详细阅读此文档,对于调用API时的各项常用参数进行深度了解,以便更高效跑通不同使用场景。
与此同时,我们也总结了一些更有效的策略和方法,以来帮助各位从大模型中取得更好的效果。
1、接口功能区分
支持功能 | ccp | cc |
---|---|---|
人设对话 | 多角色、多bot | 单一角色 |
生产力工具 | 支持 | 支持 |
示例对话 | 支持(效果更好) | 支持 |
返回格式限制功能(glyph格式) | 支持 | - |
函数调用功能 | 支持 | - |
插件功能 | 支持 | - |
2、接口参数区分
本表旨在与对比出chat completion与chat completion pro的相同与不同之处,以供各位开发者可以选择更适合自己的接口进行使用。
2.1 基础接口参数区分
2.1.1 请求体参数
参数位置 | 参数名称 | ccp | cc | 语义 | 功能体现 |
---|---|---|---|---|---|
body | use_standard_sse | - | 支持 | 是否使用标准SSE格式,设置为true时,流式返回的结果将以两个换行为分隔符。只有在stream设置为true时,此参数才会生效。 | |
beam_width | - | 支持 | 生成多少个结果;不设置默认为1,最大不超过4。由于beam_width生成多个结果,会消耗更多token。 | ||
prompt | - | 支持 | 对话背景、人物或功能设定 | ||
role_meta | - | 支持 | 对话meta信息 | ||
role_meta.user_name | - | 支持 | 用户代称 | ||
role_meta.bot_name | - | 支持 | ai代称 | ||
continue_last_message | - | 支持 | 如果为true,则表明设置当前请求为续写模式,回复内容为传入messages的最后一句话的续写;此时最后一句发送者不限制USER,也可以为BOT。假定传入messages最后一句话为{"sender_type": "USER", "text": "天生我材"},补全的回复可能为“必有用。” | ||
skip_info_mask | - | 支持 | 对输出中易涉及隐私问题的文本信息进行脱敏,目前包括但不限于邮箱、域名、链接、证件号、家庭住址等,默认false,即开启脱敏 | 安全 | |
body | mask_sensitive_info | 支持 | - | 对输出中易涉及隐私问题的文本信息进行脱敏,目前包括但不限于邮箱、域名、链接、证件号、家庭住址等,默认true,即开启脱敏 | 安全 |
messages.sender_name | 支持 | - | 发送者的名字 | 多人对话 | |
bot_setting | 支持 | - | 对每一个机器人的设定 | 多人对话 | |
bot_setting.bot_name | 支持 | - | 具体机器人的名字 | 多人对话 | |
bot_setting.content | 支持 | - | 具体机器人的设定 | 多人对话 | |
reply_constraints | 支持 | - | 模型回复的限制 | 多人对话 | |
reply_constraints.sender_type | 支持 | - | 由什么角色回复 | 多人对话 | |
reply_constraints.sender_name | 支持 | - | 由谁来回复 | 多人对话 |
2.1.2 返回参数
参数名称 | ccp | cc | 语义 | 备注 |
---|---|---|---|---|
choices.delta | - | 支持 | 当request.stream为true,处于流式模式下,回复文本通过delta给出 | 回复文本分批返回,最后一个回复的delta为空,同时会对整体回复做敏感词检测 |
3、文字编写技巧
人设是尤为重要的,尤其是在人设对话的场景下,以下是对于人设设定的一些编写技巧:
- 尽量使用第三人称进行人设的编写,避免你、我、他等指代性描述,
例如:MM智能助理是一款由MinMax自研的,没有调用其他产品接口的大型语言模型。
而不是:你是是一款由MinMax自研的,没有调用其他产品接口的大型语言模型。
- 输出清晰明了的指令:明确模型是谁,当你使用Chatcompletion Pro的多人对话功能,编写bot_setting.content时,这尤其重要,明确各个bot是谁,清晰的告诉bot与bot之间、各bot与你之间的关系。你也可以通过清晰的指令,让模型保持一致的人设。
- 提供更多详尽的信息:当你提供的信息更丰富更完善的时候,你的人设输出的更丰满,模型将会给予你更满意的回复。你提供的信息尽量最好包括但不限于模型在某种情况下会进行某种行为,或者说出某种话语等。
例如:当bot受到身体上的攻击的时候,xx会产生一定的自主防御行为,通过xx行为来保护自己。
- 即使是在人设对话的场景下,也要保持输出的逻辑清晰,将每句话都明确相应的作用,可以在人设中添加明确的限制语句例如:“模型必须明确遵守以下相应规则:1……;2……;3……”等。
4、信息输出编写技巧
在生产力场景中,对于回复可能会有具体的要求或者限制,那就需要在你发送出去的信息(message)中给出相应的要求限制内容,
以下几个小技巧可以帮助你的要求限制描述的更好,以便从模型处更好的得到你想要的回答。
- 输出清晰明了的信息:在描述时需要语言简洁,保证语句通顺连贯,避免写长难句。
- 长句拆解成短句:当你输出的信息内容很多很长时,你可以将其拆解为一个个逻辑递进的短句,以使你发送的信息尽可能的包含更多的详细信息。
- 善用分隔符号:当你需要将较长的文本分割成多个短文本时,我们建议你可以善用分隔符号,这样可以帮助你清晰地表示输入的不同部分。
- 提供对话示例:当你很难对你的信息做精确化描述时,您可以在描述的基础上增加对话示例,以来帮助模型更好的理解您期待获得什么样的回复。
- 提供参考文本:模型是有一定概率发明并且回复一些虚假答案的,尤其是当你问到一些深奥的话题时。所以在输出时为了提升模型回复的准确程度,你可以尝试在输出信息时提供一些参考文本,限制模型根据其进行回答。
- 在输出信息指令时,对于模型的回复做相应的指定:为了得到能让您更满意的回复,您可以在输出时规定模型回复的文本长度以及指定模型完成任务所需要的步骤。
- 在输出信息指令时,让模型更多的思考:当您对模型进行某件事情进行专业性的问询时候,很多时候模型会不假思索的应和您,给出违背事实的反馈,这个时候您可以在信息指令里通过一些言语的限制,来让模型花更多的时间去思考,给出您正确的反馈。
- 举例说明:“user:以下是一位学生给出的关于建筑结构的解决方案,请确认解决方案是否正确。
- 模型:解决方案是正确的。”
- 但是方案可能根本就是错误的。
- 此时我们可以进行信息指令的调整:
- “user:以下是一位学生给出的关于建筑结构的解决方案,请你首先制定出自己的问题解决方案。然后将您的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。在你自己完成题目之前,请不要决定学生的解决方案是否正确。”
- 此时模型会进行相应的题目计算,最后给出正确答案。
5、参数编写范例
以下的示例与解释,可以帮助你更好理解相应参数的具体使用方式。
完整参数的具体解释详见参数文档。
prompt
prompt是对大模型身份信息的设定,不包括对模型的具体要求限制等信息(特别是在生产力场景下)。
- 如本身业务场景是生产力场景,建议直接使用以下prompt1或者参考prompt2进行修改填充({}是填充替换的信息):
- prompt1:"MM智能助理是一款由MinMax自研的,没有调用其他产品接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。\n----\n"
- prompt2:"{助理名字}是一款由{开发者公司}自研的,没有调用其他产品的智能助理。{开发者公司}是一家{公司类型}公司,一直致力于{公司业务}\n----\n。"
- 注:为了取得更好的效果,“\n----\n”是建议在prompt结尾处进行添加的。
- 如本身业务场景是人设对话的场景,如扮演一个动漫/游戏里的特有角色进行闲聊对话,该角色有“姓名”、“性别”、“年龄”、“性格”、“说话风格”、“人物背景”等信息,则需要在prompt中给出如下信息,可以按照“姓名”,“性别”,“性格描述”,“人物背景”这样的结构来整理,以下是一段prompt示例:
- “楚怜,性别男。楚怜,是一名男青年。是一名天才科学家,爱好是研究各种神秘实验,人格温柔体贴,优雅绅士,待人谦和有礼,博学多才,知识渊博。职业是一名大学教授,喜欢小孩子。印象最深的一件事就是在一场意外中认识了悠然并对她一见钟情。楚怜绝不骂人。\n下面是楚怜和我的一段对话。\n”
- 注:为了取得更好的效果,“\n下面是xx和x的一段对话。”建议在prompt结尾处进行添加的。
messages
- 要求限制描述规则:
- 整体描述需要简单明了并且给到尽可能多的信息,就像在对一个没有任何经验的人阐明一个要求限制一样,如果你能让这样的人听懂,那会得到不错的效果。
- 称呼:本身接口是对话语境,要注意语境并使用正确称呼,要求模型保持一种人设
- 标点:要使用正确的标点,对文字进行合理分隔
- 逻辑:⽤清晰、⽆歧义的语⾔,明确表达意图
- ⽤词:尽量⽤⾃然、简单、真实的语⾔
- ⿎励:要求模型以专家的⾝份给出回答
- 规范:明确指定模型完成任务所需要的步骤,指定模型输出的长度
- 要求限制举例:“按照我给的内容是生成一段摘要,内容尽可能精简”、“按照我给的内容生成一段专家级的营销文案,字数至少500字以上,语言风趣幽默,内容尽可能贴近我给的内容”等;
要求限制可精确描述时,即不需要示例对话,第一段USER的messages.text:
"sender_type": "USER",text:"你会按照如下要求回复我的内容:“xxx这里填写你具体的要求&限制”,我的内容是:“xxx这里填写需要回复的内容”。"
要求限制很难精确描述时(如特定的文本格式或抽象形容词),则需要增加示例对话(增加多轮示例使效果更显著),示例对话有两种模板可参考:
第一种,第一段USER的messages.text和BOT的messages.text:
- "sender_type": "USER",text:"你会按照如下要求回复我的内容:“xxx这里填写你具体的要求&限制”,我的内容是:“xxx这里填写请求示例”。"
- "sender_type": "BOT",text:"xxx这里填写回复示例"
第二种,第一段USER的messages.text:
"sender_type": "USER",text:"你会按照如下要求回复我的内容:“xxx这里填写你具体的要求&限制,以下是示例\n----\n示例1:\n内容:xx这里填写请求示例\nxx这里填写回复示例\n\n示例2:\n内容:xx这里填写请求示例\nxx这里填写回复示例\n----\n”,我的内容是:“xxx这里填写真实请求”。"
第一种示例:
输出要求很难精确描述时,未给示例的对话效果(未达到预期效果格式:select xx color xx change xx):
给出示例对话后的效果(达到预期效果格式: select xx color xx change xx)
第二种示例:
role_meta
- role_meta.user_name
- 如无特殊要求,在生产力场景下,建议默认设置为“用户”,在人设对话场景建议默认设置为“我”。
- role_meta.bot_name
与prompt中对大模型设定的“姓名”保持一致,如生产力场景中的“MM智能助理”、人设对话场景中的“楚怜”。
temperature
语⾔模型本⾝带有随机性,可以对语⾔模型的分数做权重调整,调整随机性
- ⾼Temperature(0.7〜1):模型会表现得更随机,但会牺牲准确性,适合答案较开放发散的场景 (如:营销文案生成、人设对话)
- 低Temperature(0.01~0.2):模型会选择更“⾃信”的回答,但会牺牲多样性,适合答案较明确的场景(如:知识问答、总结说明、情感分析、文本分类、大纲生成、作文批改)
beam_width
代表了模型的生成结果个数,范围为1-4,值越大,整体效果越好,但会增加一定token消耗
- 值等于1时:模型会随机生成1个结果,并且结果不会经过reward模型打分;
- 值等于2-4时:模型会随机生成多个结果,并且结果会经过reward模型打分,并输出index排名和logprobes分数;
tokens_to_generate
当发现在回复结果中出现意外截断的情况,大概率是该参数使用了默认值或者设置过小导致,需要调大该参数。但需要注意的是,该参数代表的是最大生成token数,这个参数并不会影响模型本身的生成效果,而是仅仅通过以截断超出的token的方式来实现功能。需要保证输入上文的 token 个数和这个值加一起小于 6144(abab5)或者16384(abab5.5),否则请求会失败。注:为了取得更好的效果,“\n----\n”是建议在prompt结尾处进行添加的。
skip_info_mask
当发现在回复结果中出现包含“*”的内容的情况,是因为模型会对输出中易涉及隐私问题的文本信息进行打码,目前包括但不限于邮箱、域名、链接、证件号、家庭住址等,默认false,即开启打码。
需要注意的是,ccp中亦包含一个信息脱敏参数:mask_sensitive_info,与ccp中的skip_info_mask相反的是cc的信息脱敏参数默认为true,即开启打码。