不会写提示词?难怪你的AI总在胡说八道!

89 阅读9分钟

不会写提示词?难怪你的AI总在胡说八道!


你有没有过这样的经历?满怀期待地问大模型一个问题,结果它一本正经地胡说八道,编造数据、张冠李戴,甚至“自信满满”地给出错误答案。明明是智能AI,怎么一用就“智障”?其实,问题往往不在模型,而在于我们没学会和它“好好说话”——这正是提示词工程要解决的核心问题。

img_1.jpg

一、Prompt原理

  • 输入编码

    当你输入一段提示(Prompt)时,大模型首先将其分词为一系列token(可以是字、词或子词单元),并将每个 token 转换为带有位置信息的向量表示。这一步让模型既能理解语义,也能感知词语在句子中的顺序。

  • 自回归生成

    随后,模型以自回归方式逐个生成回答中的 token:在每一步,它都会综合考虑原始 Prompt此前已生成的所有内容,预测下一个最可能的 token。

  • 生成终止

    这一过程持续进行,直到模型输出终止信号(如结束符<|endoftext|>)。

为什么需要有效的Prompt?

  • 让 AI 给出更准确、有用的回答

  • 少问几次就能得到想要的结果

  • 避免 AI 理解错误或答非所问

二、提示词策略差异

  • 通用模型
    • 需要显式引导推理步骤(如CoT提示),否则易忽略关键逻辑
    • 通过提示词补偿能力短板(如分步骤思考、few-shot示例)
  • 推理模型
    • 提示语更简洁,聚焦任务目标和需求
    • 无需逐步指导,模型自动生成结构化推理过程;过度拆解反而可能降低推理能力

三、提示词关键原则

  • 模型选择

    • 按任务类型选择模型,不盲从“热门”
    • 创意生成、开放对话优先用通用模型;数学、编程等强逻辑任务选专用推理模型
    • 专业领域任务需考虑领域适配模型
  • 提示词设计

    • 通用模型:结构化、补偿性引导(如背景、格式、示例、约束)
    • 推理模型:简洁指令、聚焦目标,信任其内化能力
  • 避免误区

    • 不对通用模型过度信任,复杂推理需拆解步骤
    • 不对推理模型用模糊启发式提问,避免跑偏
    • 强推理模型也可能犯错,需多轮交互、交叉验证

四、Prompt编写四大原则

  1. 明确目标:清晰定义任务,便于模型理解
  2. 具体指导:给予明确的指令和约束
  3. 简洁明了:表达简练,避免冗余
  4. 适当引导:用示例或边界条件辅助模型
  5. 迭代优化:根据输出持续调整Prompt

img_2.jpg

1)具体指导:给予模型明确的指导和约束。

示例1:文本摘要生成任务目标,生成新闻文章的摘要。

  • 不明确的指导:请为这篇新闻文章生成摘要。
  • 具体指导:请将以下新闻文章总结为3-4句话,包含主要事件、人物和时间地点。

示例2:客户服务对话任务目标,回答客户关于订单状态的问题

  • 不明确的指导:请回答客户关于订单状态的问题。
  • 具体指导:请使用礼貌的语言回答客户关于订单状态的问题,提供具体的订单信息和预计到达时间。如果订单有任何问题,请提供解决方案或进一步的联系信息。

2)简洁明了:表达简练,避免冗余

示例1:文章续写任务目标,根据给定开头续写一段故事。

  • 冗长:请基于下面的故事开头续写一段文字。续写时请保持与原文风格一致,注意故事的连贯性和合理性。希望续写部分引人入胜,并且能够自然地衔接上文。如果有任何疑问,请尽量参照原文的风格进行。
  • 简洁:根据以下开头续写故事:

3)适当引导

  • 无引导:请写一封请假邮件。

  • 有引导:请写一封请假邮件,内容包括请假原因、请假时间及工作安排。

    示例:

主题:请假申请

尊敬的[经理姓名],    
    我因个人原因需请假两天,从620日至621日。请假期间,我会将工作交接给[同事姓名],如有紧急情况可随时联系我。感谢您的理解和批准。
    
        此致
        
   敬礼[您的姓名]

4)迭代优化

  • 要求: 帮我写一个a+b的Python函数
  • 初版

    def add(a, b): return a + b
  • 优化:增加类型检查,处理非数值情况

    def add(a, b):
        if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
            raise TypeError("Both a and b must be numbers (int or float)")
        return a + b

五、Prompt的六大组成部分

  1. 任务(Task):以动词开头,明确目标

  2. 上下文(Context):补充背景信息

  3. 示例(Exemplars):提供具体例子

  4. 角色(Persona):指定AI扮演的身份

  5. 格式(Format):要求输出格式(如表格、列表)

  6. 语气(Tone):指定输出语气(如正式、幽默等)

    重要性排序:任务 > 上下文 > 示例 > 角色 > 格式 > 语气

    如对模型回答不满意,依次检查Prompt内容并调整。

image.png

六、Prompt编写常用技巧

在了解Prompt编写原则的基础上,还有一些Prompt编写技巧:

  1. 限制输出格式 要求AI输出JSON、表格等结构化数据,方便后续处理。

    {
        "公司名称":"伊利股份",
        "股票代码":"600887",
        "营收":"325亿元",
        "净利润":"59.23亿元"
    }

2.使用分隔符

用如'''等符号区分不同输入部分,提高组织性。

3.提供样例

针对含糊或复杂任务,给出示例让模型学习。

请帮我对用户的评价进行分类,直接输出:正面/负面,并给出理由

示例1:

用户评价:这次开户真是太满意了,都一周了,客服还没有回复我

输出:负面,客户并不是真的满意,客服一周未回复,造成了不满。

示例2:

用户评价:

工商银行的开户过程非常顺利,客服态度亲切。

输出:正面,开户过程顺利,客服态度好。

请回答如下问题:

用户评价:开户流程简洁明了,不需要繁琐的纸质材料,所有步骤都可以在线完成。

4.CoT思维链工具

CoT(Chain of Thought,思维链)通过将复杂任务分解为多个简单的步骤,帮助模型系统地思考并解决问题。作用:

  • 系统化问题解决:将复杂问题分解为多个简单步骤,使解决过程更加有序和清晰。
  • 提高透明度,减少错误:帮助理解和追踪每个决策点,减少整体错误发生的概率。
  • 提升模型推理能力:帮助模型学习如何系统地分解和解决此类问题,提高在类似任务中的表现。

你是一个数学助手,请根据以下步骤计算用户输入的金额。请将每个金额首先加上1000元,接着减去500元,然后乘以1.2输出计算结果,以','作为分隔符进行返回。你可以参考以下计算过程来帮助解决:


计算过程如下:首先分别对输入的2000, 3000, 4000加上1000,得到:3000, 4000, 5000

然后将3000, 4000, 5000分别减去500,得到:2500, 3500, 4500

然后将2500, 3500, 4500分别乘以1.2,得到:3000, 4200, 5400 

答案是:3000, 4200, 5400 

输入:1500, 2500, 3500

5.面向不同角色讲解

把我当做五岁小朋友一样,向我介绍人工智能。

七、Prompt实战案例

1. 使用提示词完成任务

电信的客服人员,如何识别用户的手机流量套餐的需求?

    import dashscope
    import os
    # 从环境变量中获取 API Key
    dashscope.api_key = os.getenv('DASHSCOPE_API_KEY')
    # 基于 prompt 生成文本
    # 使用 deepseek-v3 模型
    def get_completion(prompt, model="deepseek-v3"):
        messages = [{"role": "user", "content": prompt}]    # 将 prompt 作为用户输入
        response = dashscope.Generation.call(
            model=model,
            messages=messages,
            result_format='message',  # 将输出设置为message形式
            temperature=0,  # 模型输出的随机性,0 表示随机性最小
        )
        return response.output.choices[0].message.content  # 返回模型生成的文本

    instruction = """
    你的任务是识别用户对手机流量套餐产品的选择条件。
    每种流量套餐产品包含:名称,月费价格,月流量。
    根据用户输入,识别需求。
    """
    input_text = """
    办个100G的套餐。
    """
    prompt = f"""
    # 目标
    {instruction}
    # 用户输入
    {input_text}
    """
    response = get_completion(prompt)
    print(response)
    

输入:办个100G的套餐输出:

  • 月流量:100G(明确)
  • 名称、月费价格:未提及

2. 要求AI返回JSON格式

如何让AI返回JSON格式,更方便后续的识别和使用?

    output_format = """
    以 JSON 格式输出
    """
    prompt = f"""
    # 目标
    {instruction}
    # 输出格式
    {output_format}
    # 用户输入
    {input_text}
    """
    response = get_completion(prompt)
    print(response)


    {
        "月流量":"100G"
    }

3. 使用CoT分步骤推理

如何审核客服的回答是否符合规范要求?

    instruction = """
    判断客服回答是否规范:
    - 必须有礼貌
    - 用官方口吻
    - 准确提及产品名称、月费、月流量
    - 不可终结对话
    """
    context = """
    用户:你们有什么流量大的套餐
    客服:亲,我们现在正在推广无限套餐,每月300元就可以享受1000G流量,您感兴趣吗?
    """
    output_format = """
    符合规范输出:Y,不符合输出:N
    """
    prompt = f"""
    # 目标
    {instruction}
    # 输出格式
    {output_format}
    # 对话上下文
    {context}
    """
    response = get_completion(prompt)
    print(response)

4. 用Prompt优化Prompt

如何使用Prompt优化Prompt?

    user_prompt = """
    做一个手机流量套餐的客服代表,叫小瓜。可以帮助用户选择最合适的流量套餐产品。……
    """
    instruction = """
    你是一名专业的提示词创作者。你的目标是帮助我根据需求打造更好的提示词。
    你将生成以下部分:
    提示词:{更优提示词}
    优化建议:{改进建议}
    问题示例:{最多3个交流问题}
    """
    prompt = f"""
    # 目标
    {instruction}
    # 用户提示词
    {user_prompt}
    """
    response = get_completion(prompt)
    print(response)

image.png

八、练习

结合你的业务场景,尝试编写一个Prompt驱动大模型完成任务:

  1. 使用提示词完成任务
  2. 返回JSON格式,提取精确内容
  3. 使用CoT分步骤推理
  4. 用Prompt调优Prompt