admin管理员组

文章数量:1130349

  • 提示词工程(大模型是没有记忆的,他的记忆都是我们一次性给的,即将之前的回复以及问题再一次传给大模型)
    • 为了更好地与大模型沟通;就是探讨如何设计最佳的提示词
    • 有种说法 prompt 是 AGI(Artificial General Intelligence;通用人工智能)时代的编程语言(个人感觉言过其实)
  • 对话流程:
    • 把输入的自然语言对话,转换成结构化的表示;是NLU(Natural Language Understanding:自然语言理解)
    • 从结构化的表示,生成策略是 DST(Dialogue State Tracking:对话状态跟踪)到Policy
    • 把策略转换成自然语言输出是 NLG(Natural Language Generate:自然语言生成)
  • 一些特殊情况
    • 提示词中加入: NO COMMENTS. NO ACKNOWLEDGEMENTS 有事说事,别bb
    • 提示词加入:Let's think step by step 让我们逐步思考;会把问题分解成多个步骤,然后逐步解决,使输出结果更加准确(会形成思维链 Chain-of-Thought)
  • Prompt 中组成:
    • 指令(Instruction):想要模型执行特定的的任务
    • 上下文(Context):包含一些额外信息
    • 输入数据(Input Data):用户输入内容或问题
    • 输出指示器(Output Indicator):指定的输出类型或格式
from openai import OpenAI

client = OpenAI(
    base_url='http:/127.0.0.1:11434/v1/',
    api_key='ollama',  # required but ignored
)


def get_completion(prompt, model="qwen2.5"):
    message = [{'role': 'user', 'content': prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=message,
        temperature=0  # 模型输出的随机性,0-2,越大越随机
    )
    return response.choices[0].message.content


# 任务描述
instruction = """
你的任务是识别用户对手机流量套餐产品的选择条件。
每种流量套餐产品包含三个属性:名称(name),月费价格(price),月流量(data)。
根据用户输入,识别用户在上述三种属性上的倾向。
"""

# 输出格式
output_format = """
以 JSON 格式输出。
1. name 字段的取值为string类型,取值必须为以下之一:经济套餐、畅游套餐、无限套餐、校园套餐 或 null
2. price的字段取值为一个结构体或null,包含两个字段:
    (1) operator,string类型,取值范围:'<='(小于等于),'>='(大于等于),'=='(等于)
    (2) value,int类型
3. data字段的取值为取值为一个结构体 或 null,包含两个字段:
    (1) operator, string类型,取值范围:'<='(小于等于),'>='(大于等于),'=='(等于)
    (2) value,int类型或者string类型,string类型只能是'无上限'
4. 用户的意图可以包含按price或data排序,以sort字段表示,取值为一个结构体
    (1) 结构体中以"ordering"="descend"表示按降序排序,以"value"字段存储待排序的字段
    (2) 结构体中以"ordering"="ascend"表示按升序排序,以"value"字段存储待排序的字段
只输出中只包含用户提及得字段,不要猜测任何用户未直接提及的字段,不输出值为null的字段

"""

examples = """
最便宜的套餐:{"sort":{"ordering"="ascend","value"="price"}}
有没有不限流量的:{"data":{"operator":"==","value"="无上限"}}
流量大的:{"sort":{"ordering"="descend","value"="data"}}
100G以上流量的套餐最便宜的是哪个:{"sort":{"ordering"="ascend","value"="price"}, {"data":{"operator":">=","value"="100"}}}
月费不超过200的:{"price":{"operator":"<=","value":200}}
就要月费180那个套餐:{"price":{"operator":"==","value":180}}
经济套餐:{"name":"经济套餐"}
"""  # 很常用,效果特别好

# 用户输入
input_text = """
有没有便宜的套餐
"""

prompt = f"""
{instruction}

{output_format}

例如:
{examples}
用户输入:
{input_text}

NO COMMENTS. NO ACKNOWLEDGEMENTS  
"""
res = get_completion(prompt=prompt)
print(res)

  • 提示词工程(大模型是没有记忆的,他的记忆都是我们一次性给的,即将之前的回复以及问题再一次传给大模型)
    • 为了更好地与大模型沟通;就是探讨如何设计最佳的提示词
    • 有种说法 prompt 是 AGI(Artificial General Intelligence;通用人工智能)时代的编程语言(个人感觉言过其实)
  • 对话流程:
    • 把输入的自然语言对话,转换成结构化的表示;是NLU(Natural Language Understanding:自然语言理解)
    • 从结构化的表示,生成策略是 DST(Dialogue State Tracking:对话状态跟踪)到Policy
    • 把策略转换成自然语言输出是 NLG(Natural Language Generate:自然语言生成)
  • 一些特殊情况
    • 提示词中加入: NO COMMENTS. NO ACKNOWLEDGEMENTS 有事说事,别bb
    • 提示词加入:Let's think step by step 让我们逐步思考;会把问题分解成多个步骤,然后逐步解决,使输出结果更加准确(会形成思维链 Chain-of-Thought)
  • Prompt 中组成:
    • 指令(Instruction):想要模型执行特定的的任务
    • 上下文(Context):包含一些额外信息
    • 输入数据(Input Data):用户输入内容或问题
    • 输出指示器(Output Indicator):指定的输出类型或格式
from openai import OpenAI

client = OpenAI(
    base_url='http:/127.0.0.1:11434/v1/',
    api_key='ollama',  # required but ignored
)


def get_completion(prompt, model="qwen2.5"):
    message = [{'role': 'user', 'content': prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=message,
        temperature=0  # 模型输出的随机性,0-2,越大越随机
    )
    return response.choices[0].message.content


# 任务描述
instruction = """
你的任务是识别用户对手机流量套餐产品的选择条件。
每种流量套餐产品包含三个属性:名称(name),月费价格(price),月流量(data)。
根据用户输入,识别用户在上述三种属性上的倾向。
"""

# 输出格式
output_format = """
以 JSON 格式输出。
1. name 字段的取值为string类型,取值必须为以下之一:经济套餐、畅游套餐、无限套餐、校园套餐 或 null
2. price的字段取值为一个结构体或null,包含两个字段:
    (1) operator,string类型,取值范围:'<='(小于等于),'>='(大于等于),'=='(等于)
    (2) value,int类型
3. data字段的取值为取值为一个结构体 或 null,包含两个字段:
    (1) operator, string类型,取值范围:'<='(小于等于),'>='(大于等于),'=='(等于)
    (2) value,int类型或者string类型,string类型只能是'无上限'
4. 用户的意图可以包含按price或data排序,以sort字段表示,取值为一个结构体
    (1) 结构体中以"ordering"="descend"表示按降序排序,以"value"字段存储待排序的字段
    (2) 结构体中以"ordering"="ascend"表示按升序排序,以"value"字段存储待排序的字段
只输出中只包含用户提及得字段,不要猜测任何用户未直接提及的字段,不输出值为null的字段

"""

examples = """
最便宜的套餐:{"sort":{"ordering"="ascend","value"="price"}}
有没有不限流量的:{"data":{"operator":"==","value"="无上限"}}
流量大的:{"sort":{"ordering"="descend","value"="data"}}
100G以上流量的套餐最便宜的是哪个:{"sort":{"ordering"="ascend","value"="price"}, {"data":{"operator":">=","value"="100"}}}
月费不超过200的:{"price":{"operator":"<=","value":200}}
就要月费180那个套餐:{"price":{"operator":"==","value":180}}
经济套餐:{"name":"经济套餐"}
"""  # 很常用,效果特别好

# 用户输入
input_text = """
有没有便宜的套餐
"""

prompt = f"""
{instruction}

{output_format}

例如:
{examples}
用户输入:
{input_text}

NO COMMENTS. NO ACKNOWLEDGEMENTS  
"""
res = get_completion(prompt=prompt)
print(res)

本文标签: 提示工程promoteEngine