一、环境配置
- 配置使用
zhipuai
API 的环境。 - 安装
zhipuai
库,并设置 API_KEY。 - 封装
zhipuai
接口的函数,参数为 Prompt,返回对应结果。
from zhipuai import ZhipuAI
zhipu_client = ZhipuAI(api_key="")
# 一个封装 OpenAI 接口的函数,参数为 Prompt,返回对应结果
def get_completion(prompt, model="gpt-3.5-turbo"):'''prompt: 对应的提示词model: 调用的模型,默认为 gpt-3.5-turbo(ChatGPT),有内测资格的用户可以选择 gpt-4'''response = zhipu_client.chat.completions.create(model="glm-3-turbo",messages=[{"role": "user", "content": prompt},],
)# 调用 OpenAI 的 ChatCompletion 接口return response.choices[0].message.content
二、任务——从产品说明书生成一份营销产品描述
# 示例:产品说明书
fact_sheet_chair = """
概述美丽的中世纪风格办公家具系列的一部分,包括文件柜、办公桌、书柜、会议桌等。多种外壳颜色和底座涂层可选。可选塑料前后靠背装饰(SWC-100)或10种面料和6种皮革的全面装饰(SWC-110)。底座涂层选项为:不锈钢、哑光黑色、光泽白色或铬。椅子可带或不带扶手。适用于家庭或商业场所。符合合同使用资格。结构五个轮子的塑料涂层铝底座。气动椅子调节,方便升降。尺寸宽度53厘米|20.87英寸深度51厘米|20.08英寸高度80厘米|31.50英寸座椅高度44厘米|17.32英寸座椅深度41厘米|16.14英寸选项软地板或硬地板滚轮选项。两种座椅泡沫密度可选:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)。无扶手或8个位置PU扶手。材料
外壳底座滑动件改性尼龙PA6/PA66涂层的铸铝。外壳厚度:10毫米。座椅HD36泡沫原产国意大利
"""
# Prompt :基于说明书创建营销描述
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的营销描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。技术说明: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
2.1 问题一:生成文本太长
- 初始 Prompt 生成的文本过长,需要限制生成文本的长度。
- 优化 Prompt,要求生成描述不多于 50 词。
# 优化后的 Prompt,要求生成描述不多于 50 词
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。使用最多50个词。技术规格:```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
# 由于中文需要分词,此处直接计算整体长度
len(response)
2.2 问题二:抓错文本细节
- 生成的文本未抓住目标受众(家具零售商)关心的技术细节和材料。
- 优化 Prompt,要求描述具有技术性质,侧重于产品的材料构造。
# 优化后的 Prompt,说明面向对象,应具有什么性质且侧重于什么方面
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。使用最多50个单词。技术规格: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
# 更进一步
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。在描述末尾,包括技术规格中每个7个字符的产品ID。使用最多50个单词。技术规格: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)
2.3 问题三:添加表格描述
- 进一步要求提取产品尺寸信息并组织成表格,指定表格的列、表名和格式。
- 将所有内容格式化为 HTML,以便在网站中使用。
# 要求它抽取信息并组织成表格,并指定表格的列、表名和格式
prompt = f"""
您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。在描述末尾,包括技术规格中每个7个字符的产品ID。在描述之后,包括一个表格,提供产品的尺寸。表格应该有两列。第一列包括尺寸的名称。第二列只包括英寸的测量值。给表格命名为“产品尺寸”。将所有内容格式化为可用于网站的HTML格式。将描述放在<div>元素中。技术规格:```{fact_sheet_chair}```
"""response = get_completion(prompt)
print(response)
# 表格是以 HTML 格式呈现的,加载出来
from IPython.display import display, HTMLdisplay(HTML(response))
迭代优化过程
- 开发基于 LLM 的应用程序时,很难一次就得到适合最终应用的 Prompt。
- 通过迭代过程不断改进 Prompt,直至找到适合任务的版本。
- 首先尝试编写 Prompt,然后运行并查看结果,根据需要进行迭代优化。
- 关键在于掌握有效的开发 Prompt 的过程,而不是寻求“完美”的 Prompt。
实践建议
- 使用 Jupyter Notebook 动手实践本章给出的示例,并尝试不同的变化,查看结果。
- 对于更复杂的应用程序,可以对多个样本进行 Prompt 的迭代开发,并在样本集上进行评估。
- 在更成熟的应用程序中,可以观察多个 Prompt 在多个样本集上的表现,测试平均或最差性能。