大模型应用实战技巧:大模型说‘抱歉,我无法完成您的要求‘怎么办 - 你真的了解你给大模型的Prompt吗

简介: 大模型应用实战技巧:大模型说‘抱歉,我无法完成您的要求‘怎么办 - 你真的了解你给大模型的Prompt吗

0. 背景

不知道大家在使用 OpenAI API 的过程中有没有遇到过类似的问题:同一个Prompt,在ChatGPT界面中使用,返回的结果非常好,但是将Prompt放到API中调用,经常会返回“抱歉,我无法满足您的要求”,或一些不符合预期的结果。

如下面的例子:

使用ChatGPT界面,返回了预期的结果。

而使用 OpenAI API,返回的却是:“抱歉,我无法完成您的要求”

1. 问题原因及解决办法

1.1 原因1

通过API方式的调用,Prompt实际上是一个字符串,这与直接使用界面不同,你不知道ChatGPT界面背后是怎么处理这个字符串的。

1.1.1 原因解析

来看看API方式调用时,代码中Prompt的样子:

Prompt模板代码:

prompt = f"""
            你需要根据给定的任务思考出一系列Tasks,以此来保证能够一步一步地实现该任务的目标。任务为: {self.objective}.
            """
        prompt += """
        Return one task per line in your response. The result must be a numbered list in the format:
        #. First task
        #. Second task
        The number of each entry must be followed by a period. If your list is empty, write "There are no tasks to add at this time."
        Unless your list is empty, do not include any headers before your numbered list or follow your numbered list with any other output. 
        OUTPUT IN CHINESE
        """

它产生的实际Prompt字符串:

'\n            你需要根据给定的任务思考出一系列Tasks,以此来保证能够一步一步地实现该任务的目标。任务为: 历史上的今天发生了什么?.\n            \n        Return one task per line in your response. The result must be a numbered list in the format:\n\n        #. First task\n        #. Second task\n\n        The number of each entry must be followed by a period. If your list is empty, write "There are no tasks to add at this time."\n        Unless your list is empty, do not include any headers before your numbered list or follow your numbered list with any other output. \n        OUTPUT IN CHINESE\n        '

可以看到,产生的Prompt中带入了大量的空格、换行符等特殊字符。以我的测试来看,这些是导致大模型无法正确输出内容的直接原因。

1.1.2 解决方案

在给大模型输入Prompt前,对这个字符串进行处理,去除里面的大量空格,换行符可以保留。

处理代码:

prompt = prompt.replace('  ', '')  

注意,replace函数的第一个参数' '中是两个空格,如果是一个空格,会将英文单词之前的空格也删掉,导致如下的情况:

正确处理后的Prompt应该类似:

这样应该就能让大模型正确返回结果,不再是“抱歉”:

1.2 原因2

除了以上Prompt中可能存在大量干扰性的空格之外,还有个可能的原因是你使用的框架中可能隐藏了隐式的Prompt。

以我使用的MetaGPT为例,它在询问大模型时,除了我这个Prompt,其实还有自己隐式的Prompt,如下图,它每次调用大模型API时,会自动加一个system的Prompt,如果这个Prompt对你的问题有干扰,那也会大模型无法给出正确答案,所以这个system prompt的设置,也需要格外注意。

相关文章
|
1月前
|
UED
【千帆大模型4】——Prompt优化——游戏对话语句优化
【千帆大模型4】——Prompt优化——游戏对话语句优化
67 1
|
1月前
【千帆大模型4】——Prompt优化——自定义角色【撰写大学生检讨书】
【千帆大模型4】——Prompt优化——自定义角色【撰写大学生检讨书】
52 0
|
1月前
|
机器学习/深度学习 人工智能 JSON
LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
|
1月前
|
自然语言处理 搜索推荐 知识图谱
【大模型】描述与 LLM 相关的个人项目或感兴趣的领域
【5月更文挑战第9天】【大模型】描述与 LLM 相关的个人项目或感兴趣的领域
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
让非算法同学也能了解 ChatGPT 等相关大模型
让非算法同学也能了解 ChatGPT 等相关大模型
让非算法同学也能了解 ChatGPT 等相关大模型
|
1月前
|
机器学习/深度学习 自然语言处理
【大模型】如何处理微调LLM来编写创意内容?
【5月更文挑战第7天】【大模型】如何处理微调LLM来编写创意内容?
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【LangChain系列】第五篇:大语言模型中的提示词,模型及输出简介及实践
【5月更文挑战第19天】LangChain是一个Python库,简化了与大型语言模型(LLM)如GPT-3.5-turbo的交互。通过ChatOpenAI类,开发者可以创建确定性输出的应用。提示词是指导LLM执行任务的关键,ChatPromptTemplate允许创建可重用的提示模板。输出解析器如StructuredOutputParser将模型的响应转化为结构化数据,便于应用处理。LangChain提供可重用性、一致性、可扩展性,并有一系列预建功能。它使得利用LLM构建复杂、直观的应用变得更加容易。
111 0
|
1月前
|
人工智能 安全 机器人
Prompt工程全攻略:15+Prompt框架一网打尽(BROKE、COAST、LangGPT)、学会提示词让大模型更高效
Prompt工程全攻略:15+Prompt框架一网打尽(BROKE、COAST、LangGPT)、学会提示词让大模型更高效
Prompt工程全攻略:15+Prompt框架一网打尽(BROKE、COAST、LangGPT)、学会提示词让大模型更高效
|
7月前
|
存储 Java API
【网安AIGC专题11.7】17ASAP如何更好地改进少样本提示:在LLMs的prompt中添加语义信息,来提高代码摘要生成+代码补全任务的性能。CodeSearchNet数据集(下)
【网安AIGC专题11.7】17ASAP如何更好地改进少样本提示:在LLMs的prompt中添加语义信息,来提高代码摘要生成+代码补全任务的性能。CodeSearchNet数据集(下)
87 0
|
1月前
|
自然语言处理 安全 网络安全
22LLMSecEval数据集及其在评估大模型代码安全中的应用:GPT3和Codex根据LLMSecEval的提示生成代码和代码补全,CodeQL进行安全评估【网安AIGC专题11.22】
22LLMSecEval数据集及其在评估大模型代码安全中的应用:GPT3和Codex根据LLMSecEval的提示生成代码和代码补全,CodeQL进行安全评估【网安AIGC专题11.22】
145 0