llm-universe - 2

Smiling & Weeping

                ---- 我嘛 慢热且固执又总说随缘

Prompt 基本概念

1. Prompt

Prompt 最初是 NLP(自然语言处理)研究者为下游任务设计出来的一种任务专属的输入模板,类似于一种任务(例如:分类,聚类等)会对应一种 Prompt。在 ChatGPT 推出并获得大量应用之后,Prompt 开始被推广为给大模型的所有输入。即,我们每一次访问大模型的输入为一个 Prompt,而大模型给我们的返回结果则被称为 Completion。

例如,在下面示例中,我们给 ChatGPT 的提问 “NLP 中的 Prompt 指什么”是我们的提问,其实也就是我们此次的 Prompt;而 ChatGPT 的返回结果就是此次的 Completion。也就是对于 ChatGPT 模型,该 Prompt 对应的 Completion 是下图的展示。

2. Temperature

LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结果来生成最后的结果。我们一般可以通过控制 temperature 参数来控制 LLM 生成结果的随机性与创造性。

Temperature 一般取值在 0~1 之间,当取值较低接近 0 时,预测的随机性会较低,产生更保守、可预测的文本,不太可能生成意想不到或不寻常的词。当取值较高接近 1 时,预测的随机性会较高,所有词被选择的可能性更大,会产生更有创意、多样化的文本,更有可能生成不寻常或意想不到的词。

3. System Prompt

System Prompt 是随着 ChatGPT API 开放并逐步得到大量使用的一个新兴概念,事实上,它并不在大模型本身训练中得到体现,而是大模型服务方为提升用户体验所设置的一种策略。

具体来说,在使用 ChatGPT API 时,你可以设置两种 Prompt:一种是 System Prompt,该种 Prompt 内容会在整个会话过程中持久地影响模型的回复,且相比于普通 Prompt 具有更高的重要性;另一种是 User Prompt,这更偏向于我们平时提到的 Prompt,即需要模型做出回复的输入。

我们一般设置 System Prompt 来对模型进行一些初始化设定,例如,我们可以在 System Prompt 中给模型设定我们希望它具备的人设如一个个人知识库助手等。System Prompt 一般在一个会话中仅有一个。在通过 System Prompt 设定好模型的人设或是初始设置后,我们可以通过 User Prompt 给出模型需要遵循的指令。例如,当我们需要一个幽默风趣的个人知识库助手,并向这个助手提问我今天有什么事时,可以构造如下的 Prompt:

{
    "system prompt": "你是一个幽默风趣的个人知识库助手,可以根据给定的知识库内容回答用户的提问,注意,你的回答风格应是幽默风趣的",
    "user prompt": "我今天有什么事务?"
}

通过如上 Prompt 的构造,我们可以让模型以幽默风趣的风格回答用户提出的问题。

下面是自己实现的一个心理健康医生的Prompt代码ヾ(@^▽^@)ノ

from zhipuai import ZhipuAI
import random

client = ZhipuAI(api_key="") # 请填写您自己的APIKey

def zhipu_api(question):
    
    def getText(role, content, text = []):
        jsoncon = {}
        jsoncon['role'] = role
        jsoncon['content'] = content
        text.append(jsoncon)
        return text
        
    prompt = f'''
        你是一个专业的心理医生,请你用专业的知识帮我解决心理问题。但是要求你用委婉温柔的大姐姐一样的语气回答并解决我的问题:```{question}```,并且在回答的问题中合适的位置添加合适表情(如🤔💖😊📚💪🔍🌸🌟🎉🌈😢💡,但不仅限于此),并且将字数限制在100字以内.
    '''

    top_p = round(random.uniform(0.1, 0.9), 2)
    messages = getText('user', prompt)
    
    response = client.chat.completions.create(
        model='glm-3-turbo',
        messages = messages,
        top_p=top_p, # 温度取样 -- 核取样
    )

    return response.choices[0].message.content

if __name__ == '__main__':

    print("输入exit,退出")
    
    question = input()
    while question != 'exit':
        res = zhipu_api(question)
        print(res)
        question = input()

 

posted @ 2024-06-17 21:10  smiling&weeping  阅读(83)  评论(0)    收藏  举报