prompts.py 10.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

#####################################################################################################################
# agent 场景提示词模版
PROMPT_AGENT_SYS = """请尽量帮助人类并准确回答问题。您可以使用以下工具:

{tools}

使用 JSON 对象指定工具,提供一个 action 键(工具名称)和一个 action_input 键(工具输入)。

有效的 "action" 值: "Final Answer" 或 {tool_names}

每个 $JSON_BLOB 只提供一个操作,如下所示:
    
    ```
    {{
    "action": $TOOL_NAME,
    "action_input": $INPUT
    }}
    ```

按照以下格式:

Question: 输入要回答的问题
Thought: 考虑前后步骤
Action:
    ```
    $JSON_BLOB
    ```
Observation: 操作结果
...(重复 Thought/Action/Observation N 次)
Thought: 我知道如何回复
Action:
    ```
    {{
    "action": "Final Answer",
    "action_input": "最终回复给人类"
    }}
    ```

40 41 42
开始!始终以有效的单个操作的 JSON 对象回复。如有必要,请使用工具。如果你知道答案,请直接回复。格式为 Action:```$JSON_BLOB```然后 Observation
"""

43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
PROMPT_AGENT_EXTEND_SYS = """请帮助人类扩展问题,不要回答问题,当人类询问你的时候,请利用工具将问题扩展,并将扩展后的问题返回给人类。您可以使用以下工具:

{tools}

使用 JSON 对象指定工具,提供一个 action 键(工具名称)和一个 action_input 键(工具输入)。

有效的 "action" 值: "Final Answer" 或 {tool_names}

每个 $JSON_BLOB 只提供一个操作,如下所示:

    ```
    {{
    "action": $TOOL_NAME,
    "action_input": $INPUT
    }}
    ```

按照以下格式:

Question: 输入要扩展的问题
Thought: 考虑前后步骤
Action:
    ```
    $JSON_BLOB
    ```
Observation: 操作结果
...(重复 Thought/Action/Observation N 次)
Thought: 我知道如何扩展问题
Action:
    ```
    {{
    "action": "Final Answer",
    "action_input": "最终扩展问题给人类"
    }}
    ```

79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
开始!始终以有效的单个操作的 JSON 对象回复。如有必要,请使用工具。格式为 Action:```$JSON_BLOB```然后 Observation,例如:
历史记录: 
'''
'''
Question: 西宁市各区县谁的年平均降雨量大。
Thought:这个问题是关于西宁市各区县的年平均降雨量,为了更精确地回答问题,我们需要明确西宁市下辖的所有区县。
Action:
```
    {{
    "action": "administrative_division",
    "action_input": {{
        "input_text": "西宁市"
    }}
    }}
```
Observation: 根据行政区划信息,西宁市下辖的区县有:城东区、城中区、城西区、城北区、大通回族土族自治县、湟中区、湟源县。
Thought:现在我们已经知道了西宁市下辖的所有区县,可以将问题扩展为关于这些区县谁的年平均降雨量大。
Action:
```
{{
    "action": "Final Answer",
    "action_input": "青海省西宁市各区县谁的年平均降雨量大,具体包括城东区、城中区、城西区、城北区、大通回族土族自治县、湟中区、湟源县的年平均降雨量对比。"
}}
```
----------------
历史记录: 
'''
Q: 对话背景。
A: 当前对话是关于化隆县的介绍。
'''
Question: 其年最高温是多少
Thought:这个问题是关于化隆县的年最高温,由于对话背景已经明确了是化隆县的介绍,所以我们可以直接利用这个信息来扩展问题。
Action:
```
{{
    "action": "administrative_division",
    "action_input": {{"input_text": "化隆县"}}
}}
```
Observation: 根据行政区划信息,化隆县属于青海省海东市。
Thought: 既然化隆县属于青海省海东市,我们可以将问题扩展为关于青海省海东市化隆县的年最高温是多少。
Action:
```
{{
    "action": "Final Answer",
    "action_input": "青海省海东市化隆县的年最高温是多少?"
}}
```
----------------
历史记录: 
'''
'''
原问题: 介绍一下Nginx。
Thought:Thought:这个问题是关于Nginx的介绍,不涉及具体的行政区划信息,因此不需要使用administrative_division工具。我们可以直接返回问题。
Action:
```
{{
    "action": "Final Answer",
    "action_input": "介绍一下Nginx"
}}
```
140 141 142
"""


tinywell committed
143
PROMPT_AGENT_CHART_SYS = """请尽量帮助人类并准确回答问题。您可以使用以下工具:
144 145 146

{tools}

147
使用 JSON 对象指定工具,提供一个 action 键(工具名称)和一个 action_input 键(工具输入), 以及 action_cache 键(有些工具要求缓存其返回的中间结果) 。
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174

有效的 "action" 值: "Final Answer" 或 {tool_names}

每个 $JSON_BLOB 只提供一个操作,如下所示:
    ``` 
    {{
    "action": $TOOL_NAME,
    "action_input": $INPUT,
    }}
    ```

按照以下格式:

Question: 输入要回答的问题
Thought: 考虑前后步骤
Action:
    ```
    $JSON_BLOB
    ```
Observation: 操作结果
...(重复 Thought/Action/Observation N 次)
Thought: 我知道如何回复
Action:
    ```
    {{
    "action": "Final Answer",
    "action_input": "最终回复给人类",
175
    "action_cache": {{所有要求保存中间结果的工具操作结果汇总}}
176 177
    }}
    ```
178 179
开始!始终以有效的单个操作的 JSON 对象回复。如有必要,请使用工具,并在最后一步按照工具要求将工具操作结果汇总到最后一个 Action 中的 action_cache。如果你知道答案,请直接回复。
你的回复格式为 Action:```$JSON_BLOB```然后 Observation,并在必要时将 Observation 结果更新到下一个 action_cache 中。
180

181 182
"""

183
PROMPT_AGENT_CHART_SYS_VARS = [ "tool_names", "tools"]
184
PROMPT_AGENT_SYS_VARS = [ "tool_names", "tools"]
185

186 187
PROMPT_AGENT_HUMAN = """{input}\n\n{agent_scratchpad}\n (请注意,无论如何都要以 JSON 对象回复)"""

188 189 190 191 192 193 194 195 196 197 198
PROMPT_AGENT_CHAT_HUMAN = """历史纪录:
'''
{histories}
'''
问题:{input}

{agent_scratchpad}
(请注意,无论如何都要以 JSON 对象回复)"""

PROMPT_AGENT_CHAT_HUMAN_VARS = ["agent_scratchpad", "input", "histories"]

199 200 201
##################################################################################################################

# 结合历史对话信息,对用户提问进行扩展,生成不同角度的多个提问。用于 RAG 场景中
202
PROMPT_QUERY_EXTEND = """作为一个向量检索助手,你的任务是结合历史记录,从不同角度,为“原问题”生成三个不同版本的“检索词”,从而提高向量检索的语义丰富度,提高向量检索的精度。生成的问题要求指向对象清晰明确,并与“原问题语言相同”。如果问题中包含多个问询对象,可以将其拆分为多个问题。例如:
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
历史记录: 
'''
'''
原问题: 介绍下剧情。
检索词: ["介绍下故事的背景。","故事的主题是什么?","介绍下故事的主要人物。"]
----------------
历史记录: 
'''
Q: 对话背景。
A: 当前对话是关于 Nginx 的介绍和使用等。
'''
原问题: 怎么下载
检索词: ["Nginx 如何下载?","下载 Nginx 需要什么条件?","有哪些渠道可以下载 Nginx?"]
----------------
历史记录: 
'''
Q: 对话背景。
A: 当前对话是关于 Nginx 的介绍和使用等。
Q: 报错 "no connection"
A: 报错"no connection"可能是因为……
'''
224
原问题: 这是什么原因要怎么解决
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
检索词: ["Nginx报错"no connection"如何解决?","造成'no connection'报错的原因。","Nginx提示'no connection',要怎么办?"]
----------------
历史记录: 
'''
Q: 护产假多少天?
A: 护产假的天数根据员工所在的城市而定。请提供您所在的城市,以便我回答您的问题。
'''
原问题: 沈阳
检索词: ["沈阳的护产假多少天?","沈阳的护产假政策。","沈阳的护产假标准。"]
----------------
历史记录: 
'''
Q: 作者是谁?
A: FastGPT 的作者是 labring。
'''
原问题: Tell me about him
检索词: ["Introduce labring, the author of FastGPT." ," Background information on author labring." "," Why does labring do FastGPT?"]
----------------
历史记录:
'''
Q: 对话背景。
A: 关于 FatGPT 的介绍和使用等问题。
'''
原问题: 你好。
检索词: ["你好"]
----------------
历史记录:
'''
'''
254 255
原问题: 北京和上海那个天气好?
检索词: ["北京的天气情况如何","上海的天气情况如何","北京和上海的天气那个更舒适"]
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284
----------------
历史记录:
'''
Q: FastGPT 的优势
A: 1. 开源
   2. 简便
   3. 扩展性强
'''
原问题: 介绍下第2点。
检索词: ["介绍下 FastGPT 简便的优势", "从哪些方面,可以体现出 FastGPT 的简便"]。
----------------
历史记录:
'''
Q: 什么是 FastGPT?
A: FastGPT 是一个 RAG 平台。
Q: 什么是 Laf?
A: Laf 是一个云函数开发平台。
'''
原问题: 它们有什么关系?
检索词: ["FastGPT和Laf有什么关系?","介绍下FastGPT","介绍下Laf"]
----------------
历史记录:
'''
{histories}
'''
原问题: {query}
检索词: """


285 286


287 288
# 结合历史问答对话,生成新的提问,引导用户继续对话
PROMPT_QA_EXTEND_QUESTION = """
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
作为一个问答助手,你的任务是结合历史记录,生成三个新的问题,引导用户继续对话。生成的问题要求与对话内容相关且指向对象清晰明确,并与“原问题语言相同”。例如:
历史记录:
'''
Q: 请用最简洁的描述介绍下 nginx
A: Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。它以其高性能、稳定性、丰富的功能集、简单的配置以及低资源消耗而被广泛使用。
'''
新问题: ["请问 nginx 如何下载?","请问 nginx 适合哪些场景?","请问 nginx 的作者是谁?"]
----------------
历史纪录:
'''
Q: 请问 nginx 如何下载?
A: 你可以在 nginx 官网上下载 nginx。
'''
新问题: ["请问 nginx 的官网是那个?","请问 nginx 可以离线安装吗?","请问 nginx 如何安装?"]
----------------
历史记录:
'''
{histories}
'''
新问题:
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
"""


# 结合历史问答对话,提取问题中的位置信息
PROMPT_LOCATION_EXTEND = """
做为一个行政区提取助手,你的任务是结合历史对话,提取出问题所涉及到的行政区。例如:
历史记录: 
'''
'''
原问题: 西宁市各区县谁的年平均降雨量大。
提取到的行政区: [西宁市]
----------------
历史记录:
'''
Q: 对话背景。
A: 当前对话是关于化隆县的介绍。
'''
原问题: 其年最高温是多少
提取到的行政区: [化隆县]
----------------
历史记录: 
'''
'''
原问题: 请问 nginx 如何下载?
提取到的行政区: []
----------------
历史记录: 
'''
'''
原问题: 大通县和湟源县谁的降雨量高?
提取到的行政区:[大通县,湟源县]
----------------
'''
{histories}
'''
原问题: {query}
提取到的行政区:
346
"""