参考地址:https://github.com/datawhalechina/llm-universe/tree/main/docs/C2
本课主要是调用LLM-API接口,并学习提示工程,在LLM这里你可以认为输入就是prompt,输出就是completion,高质量的prompt会产出跟精准的completion。
这里以调用智谱清言的api为例子:
接口参考:智谱AI开放平台
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="xxxxxxxxxxxxxxxx")
def gen_glm_params(prompt):
message = [{"role": "user", "content": prompt}]
return message
def get_completion(prompt, model="glm-4", temperature=0.9):
messages = gen_glm_params(prompt)
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=temperature
)
if len(response.choices) > 0:
print(f"获得的回答: {response.choices[0].message.content}")
print("++++++++++++++++++++++++++++++++++++++++++++++++")
print(f"本次共消耗tokens数: {response.usage.total_tokens}")
else:
print("------------------------------------------------")
print("出现错误!!!")
if __name__ == "__main__":
#########################普通输入#############################################
normal_prompt = "你如何称呼自己?"
##########################要求结构化输出#######################################
json_prompt = f"""
请生成包括姓名、想别和英文名的三个虚构的、非真实存在的数据,\
并以 JSON 格式提供,其中包含以下键:name、sexual、en_name。
"""
###########################提供少量提示########################################
fewshot_prompt = f"""
你的任务是以一致的风格回答问题(注意:文言文和白话的区别)。
<中一>: 你做什么那?
<中二>: 红尘滚滚来。
<中一>: 要到哪里去?
<中二>: 条条大路通罗马。
<中一>: 晚上吃什么?
"""
###########################检索是否满足条件######################################
text_1 = f"""
如何开车那?。首先,确认目的地。\
拿出车钥匙,启动汽车。\
一旦发动机启动,观察四周并进入公路行驶\
到达目的地,关闭发动机,拔下车钥匙。\
就这样,您可以惬意安全的到达目的地。
"""
requirement_prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:
第一步 - ...
第二步 - …
…
第N步 - …
如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
{text_1}
"""
############################指定完成任务的步骤###################################
text_2 = f""""
在一艘远洋的邮轮上,罗丝跨过了栏杆悲伤的站在船舷最前方。\
这时杰克静悄悄的走到她的身后低声说到,你一定会后悔这么做,\
罗丝有点歇斯底里的转头喊到,你根本不知道我经历了什么,\
杰克淡淡的说到,不管你经历过什么,生活没有辜负你,你会有更好的选择,\
接下来杰克伸出了他的右手,慢慢走向罗丝,\
罗丝迟疑了一下,下意识的想抓住杰克的手。\
这时突然巨轮晃动了一下,罗丝大喊着不,眼看马上掉下船去,\
电光火石之间,杰克跑向前,抓住了罗丝,紧紧的将其抱在怀中,\
他未曾注意到,在怀里的罗丝脸色绯红,深深的将头埋入到杰克的怀中。\
"""
step_prompt = f"""
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个名称。
4-根据文本推断出人物之间的关系。
5-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。
6-不需要有重复的输出内容,仅输出要求的格式内容。
请使用以下格式:
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名称列表>
推断:<人物关系>
输出 JSON 格式:<带有 English_summary 和 num_names 的 JSON 格式>
Text: <{text_2}>
"""
##############################指导模型在获取结论前自己找出解决方法,26个包子,40.7元###################
guide_prompt = f"""
请判断小红的计算方案是否正确,请通过如下步骤解决这个问题:
步骤:
首先,自己解决问题。
然后将您的计算方案与小红的计算方案进行比较,对比计算得到的总数与小红计算的总费用是否一致,
并评估小红的解决方案是否正确。
在自己完成问题之前,请勿决定小红的就计算方案是否正确。
使用以下格式:
问题:问题文本
小红的计算方案:小红的计算方案文本
实际计算方案和步骤:实际计算方案和步骤文本
实际计算包子的总数:实际计算的包子个数
实际计算的总费用:实际计算的包子费用
小红计算的包子总数和实际计算的包子总数用是否相同:是或否
小红计算的总费用和实际计算的总费用是否相同:是或否
小红的计算的结果:正确或不正确
问题:
小红正在包子城市旅游,需要帮助计算她买过包子所有费用。
- 开封灌汤包,单价0.8元,买4个赠一个
- 广东叉烧包,单价2元,一笼4个,买俩笼赠2个
- 天津狗不理包子,不单买,一笼5元,一笼3个
- 上海生煎包,单价2.5元,一份4个,一份8元
小红买了4个灌汤包,俩笼叉烧包和单买三个叉烧包,狗不理包子1笼,生煎包一份加单买一个
一共买了多少个包子,共消费多少钱?
小红的计算方案:
包子个数:
灌汤包4+1=5个,叉烧包2x4+2+3=13个,狗不理包子1x3=3个,生煎包1x4+1=5,所以总数是5+13+3+5,一共是26个。
费用:
1. 灌汤包费用:5x0.8=4
2. 叉烧包费用:2x11=22
3. 狗不理包子费用:1x5=5
4. 生煎包费用:1x8+2.5=10.5
总费用:4+22+5+10.5=41.5元
实际解决方案和步骤:
"""
#############################这里输入prompt,查看结果###########################################
get_completion(guide_prompt)
感受不一样prompt的魅力吧,调试过程共使用约2w的tokens。