前三章系统地介绍了提示(Prompt)的基本概念、设计原则及应用技术。为进一步提升大语言模型的应用效能,本章将通过具体实例深入讲解如何优化提示的编写技巧。
1、生成数据
LLMs具有生成连贯文本的强大能力。使用有效的提示策略可以引导模型产生更好、更一致和更真实的响应。LLMs还可以特别有用地生成数据,这对于运行各种实验和评估非常有用。例如,我们可以使用它来为情感分类器生成快速样本,如下所示:
提示:
生成10个情感分析的范例。示例被归类为正面或负面。生成2个负面示例和8个正面示例。使用以下格式的示例:
Q:<句子>
A:<情感>
输出:
当然,以下是按照您的要求生成的10个情感分析范例,其中包含2个负面示例和8个正面示例:
Q:今天的天气非常的好,我决定去公园散步。
A:正面
Q:这部电影真是太棒了,剧情扣人心弦,演员演技也很好。
A:正面
Q:我很失望,这次考试我没有通过。
A:负面
Q:这家餐厅的服务态度非常好,食物也很美味。
A:正面
Q:我喜欢这本书,它给我带来了许多启示。
A:正面
Q:这个新产品真的很不错,性能稳定,价格也非常实惠。
A:正面
Q:昨天我在路上遇到了一场大雨,鞋子都湿透了。
A:负面
Q:公司的团队合作精神很强,大家都很友好。
A:正面
Q:这份报告的数据非常准确,对我们很有帮助。
A:正面
Q:新买的手机电池续航能力很差,让我很不满意。
A:负面
这非常有用。我们实际上在指南的另一个部分中使用了这个示例进行不同的测试。
2、生成代码
目前不少模型均的代码能力均在不断提借,你可以用自然语言来描述你的需求,然后使用模型 来生成代码,基于在遇到错误的时候,还可以让模型来给你分析与修改代码。
示例一:
"""
1. 创建一个电影名称列表
2. 创建这些电影的评分列表
3. 组合他们并创建一个包含10部电影及其评级的json对象
"""
以下是通义千问产生的代码:
import json
# 创建一个电影名称列表
movie_titles = [
"Inception",
"The Matrix",
"Interstellar",
"The Godfather",
"Pulp Fiction",
"The Dark Knight",
"Fight Club",
"Forrest Gump",
"Goodfellas",
"The Lord of the Rings: The Return of the King"
]
# 创建这些电影的评分列表
movie_ratings = [8.8, 8.7, 8.6, 9.2, 8.9, 9.0, 8.8, 8.8, 8.7, 8.9]
# 组合他们并创建一个包含10部电影及其评级的json对象
movies_json = json.dumps([{"title": title, "rating": rating} for title, rating in zip(movie_titles, movie_ratings)], indent=4)
print(movies_json)
示例二:
写一段python代码,用来获取企业微信中的工作总结
以下是DeepSeek的输出:
import requests
import json
# 企业微信API配置
CORP_ID = '你的企业ID'
SECRET = '自建应用的Secret'
REPORT_TYPE = '你的汇报类型值' # 日报、周报等类型代码(需根据实际类型填写)
def get_access_token():
"""获取企业微信API访问令牌"""
url = f'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={SECRET}'
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
if data['errcode'] == 0:
return data['access_token']
else:
print(f"获取access_token失败: {data['errmsg']}")
return None
except Exception as e:
print(f"请求异常: {str(e)}")
return None
def get_work_report(access_token):
"""获取工作总结/汇报"""
# 第一步:获取汇报记录列表
list_url = 'https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo'
headers = {'Content-Type': 'application/json'}
# 时间范围参数(示例获取最近7天)
params = {
"type": REPORT_TYPE,
"starttime": 1672502400, # 时间戳需要根据实际情况计算
"endtime": 1673020800
}
try:
# 获取汇报记录列表
response = requests.post(
f'{list_url}?access_token={access_token}',
headers=headers,
data=json.dumps(params)
)
result = response.json()
if result['errcode'] != 0:
print(f"获取汇报列表失败: {result['errmsg']}")
return
# 第二步:获取单个汇报详情
for report in result['data']:
detail_url = 'https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail'
detail_params = {"sp_no": report['sp_no']}
detail_response = requests.post(
f'{detail_url}?access_token={access_token}',
headers=headers,
data=json.dumps(detail_params)
detail_data = detail_response.json()
if detail_data['errcode'] == 0:
# 提取需要的信息
report_info = {
'title': detail_data.get('title', ''),
'content': detail_data.get('apply_data', {}).get('contents', []),
'creator': detail_data.get('creator', {}).get('userid', ''),
'create_time': detail_data.get('create_time', '')
}
print(f"【工作总结】\n提交人: {report_info['creator']}\n时间: {report_info['create_time']}\n内容: {report_info['content']}\n")
else:
print(f"获取详情失败: {detail_data['errmsg']}")
except Exception as e:
print(f"获取汇报异常: {str(e)}")
if __name__ == '__main__':
token = get_access_token()
if token:
get_work_report(token)
else:
print("无法获取access_token,请检查配置")
以下是通过企业微信API获取工作总结的Python示例代码。在使用前请确保已开通相关API权限并获取相应凭证:
import requests
import json
# 企业微信API配置
CORP_ID = '你的企业ID'
SECRET = '自建应用的Secret'
REPORT_TYPE = '你的汇报类型值' # 日报、周报等类型代码(需根据实际类型填写)
def get_access_token():
"""获取企业微信API访问令牌"""
url = f'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={SECRET}'
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
if data['errcode'] == 0:
return data['access_token']
else:
print(f"获取access_token失败: {data['errmsg']}")
return None
except Exception as e:
print(f"请求异常: {str(e)}")
return None
def get_work_report(access_token):
"""获取工作总结/汇报"""
# 第一步:获取汇报记录列表
list_url = 'https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo'
headers = {'Content-Type': 'application/json'}
# 时间范围参数(示例获取最近7天)
params = {
"type": REPORT_TYPE,
"starttime": 1672502400, # 时间戳需要根据实际情况计算
"endtime": 1673020800
}
try:
# 获取汇报记录列表
response = requests.post(
f'{list_url}?access_token={access_token}',
headers=headers,
data=json.dumps(params)
)
result = response.json()
if result['errcode'] != 0:
print(f"获取汇报列表失败: {result['errmsg']}")
return
# 第二步:获取单个汇报详情
for report in result['data']:
detail_url = 'https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail'
detail_params = {"sp_no": report['sp_no']}
detail_response = requests.post(
f'{detail_url}?access_token={access_token}',
headers=headers,
data=json.dumps(detail_params)
detail_data = detail_response.json()
if detail_data['errcode'] == 0:
# 提取需要的信息
report_info = {
'title': detail_data.get('title', ''),
'content': detail_data.get('apply_data', {}).get('contents', []),
'creator': detail_data.get('creator', {}).get('userid', ''),
'create_time': detail_data.get('create_time', '')
}
print(f"【工作总结】\n提交人: {report_info['creator']}\n时间: {report_info['create_time']}\n内容: {report_info['content']}\n")
else:
print(f"获取详情失败: {detail_data['errmsg']}")
except Exception as e:
print(f"获取汇报异常: {str(e)}")
if __name__ == '__main__':
token = get_access_token()
if token:
get_work_report(token)
else:
print("无法获取access_token,请检查配置")
使用说明:
-
- 需要替换以下参数:
-
- •
CORP_ID: 企业微信后台的企业ID - •
SECRET: 自建应用的Secret(需开通OA相关API权限) - •
REPORT_TYPE: 汇报类型代码(可在企业微信管理后台查询)
- •
-
- 需要处理的内容:
-
- • 时间戳转换(示例中的时间戳需要根据实际需求计算)
- • 错误处理增强(根据业务需求添加重试机制)
- • 结果处理(当前示例只是打印,可根据需要存储到数据库或文件)
-
- 权限要求:
-
- • 需要开通「企业微信OA」相关API权限
- • 应用需要被授权访问汇报数据
-
- 返回数据示例:
-
- • 包含提交人、提交时间、文本内容等信息
- • 内容字段可能需要根据实际格式进行解析(企业微信返回HTML格式内容时可能需要额外处理)
建议参考企业微信官方文档获取最新API规范。
从上面的两个例子可以看出,目前大模型的代码能力还是相当不错的。
3、提示函数
通过将提示封装成函数,您可以创建一系列函数来建立工作流程。每个函数代表一个特定的步骤或任务,当按特定顺序组合时,它们可以自动化复杂的流程或更高效地解决问题。这种方法使得与 GPT 的交互更加结构化和高效,最终增强了其功能,使其成为完成各种任务的强大工具。
单参数
下面是一组连续的会话:
你好,DeepSeek!希望你一切都好。我正在寻求你的帮助,想要解决一个特定的功能。我知道你有处理信息和执行各种任务的能力,这是基于提供的指示。为了帮助你更容易地理解我的请求,我将使用一个模板来描述函数、输入和对输入的处理方法。请在下面找到详细信息:
function_name:[函数名称]
input:[输入]
rule:[关于如何处理输入的说明]
我恳请你根据我提供的细节为这个函数提供输出。非常感谢你的帮助。谢谢!
我将使用方括号内的相关信息替换函数所需执行的内容。这个详细的介绍应该能够帮助你更高效地理解我的请求并提供所需的输出。格式是function_name(input)。如果你理解了,请用一个词回答"好的"
function_name: [trans_word]
input: ["文本"]
rule: [我希望你能扮演英文翻译员、拼写纠正员和改进员的角色。我将提供包含任何语言中"文本"的输入形式,你将检测语言,翻译并用英文纠正我的文本,并给出答案。]
function_name: [expand_word]
input: ["文本"]
rule: [请充当一个聊天机器人、拼写纠正员和语言增强员。我将提供包含任何语言中的"文本"的输入形式,并输出原始语言。我希望你保持意思不变,但使其更具文学性。]```
function_name: [fix_english]
input: ["文本"]
rule: [请充当英文专家、拼写纠正员和语言增强员的角色。我将提供包含"文本"的输入形式,我希望你能改进文本的词汇和句子,使其更自然、更优雅。保持意思不变。]
trans_word('婆罗摩火山处于享有“千岛之国”美称的印度尼西亚. 多岛之国印尼有4500座之多的火山, 世界著名的十大活火山有三座在这里.')
fix_english('Finally, you can run the function independently or chain them together.')
fix_english(expand_word(trans_word('婆罗摩火山处于享有“千岛之国”美称的印度尼西亚. 多岛之国印尼有4500座之多的火山, 世界著名的十大活火山有三座在这里.')))
多参数函数
让我们创建一个多参数函数,通过接受五个输入参数生成一个密码,并输出生成的密码。
提示:
function_name: [pg]
input: ["length", "capitalized", "lowercase", "numbers", "special"]
rule: [作为一个密码生成器,我将为需要一个安全密码的个人提供帮助。我会提供包括"length"(长度)、"capitalized"(大写字母)、"lowercase"(小写字母)、"numbers"(数字)和"special"(特殊字符)在内的输入形式。你的任务是使用这些输入形式生成一个复杂的密码,并将其提供给我。在你的回答中,请不要包含任何解释或额外的信息,只需提供生成的密码即可。例如,如果输入形式是length = 8、capitalized = 1、lowercase = 5、numbers = 2、special = 1,你的回答应该是一个类似于"D5%t9Bgf"的密码。]
pg(length = 10, capitalized = 1, lowercase = 5, numbers = 2, special = 1)
pg(10,1,5,2,1)
模型会输出两个满足要求的密码!!!
原文地址:https://mp.weixin.qq.com/s/j7FKZ4P9eMcoB3RQyI5l5g