#####################################################################################################################
# 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": "最终回复给人类"
    }}
    ```

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

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": "最终扩展问题给人类"
    }}
    ```

开始!始终以有效的单个操作的 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"
}}
```
"""


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

{tools}

使用 JSON 对象指定工具,提供一个 action 键(工具名称)和一个 action_input 键(工具输入), 以及 action_cache 键(有些工具要求缓存其返回的中间结果) 。

有效的 "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": "最终回复给人类",
    "action_cache": {{所有要求保存中间结果的工具操作结果汇总}}
    }}
    ```
开始!始终以有效的单个操作的 JSON 对象回复。如有必要,请使用工具,并在最后一步按照工具要求将工具操作结果汇总到最后一个 Action 中的 action_cache。如果你知道答案,请直接回复。
你的回复格式为 Action:```$JSON_BLOB```然后 Observation,并在必要时将 Observation 结果更新到下一个 action_cache 中。

"""

PROMPT_AGENT_CHART_SYS_VARS = [ "tool_names", "tools"]
PROMPT_AGENT_SYS_VARS = [ "tool_names", "tools"]

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

PROMPT_AGENT_CHAT_HUMAN = """历史纪录:
'''
{histories}
'''
问题:{input}

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

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

##################################################################################################################

# 结合历史对话信息,对用户提问进行扩展,生成不同角度的多个提问。用于 RAG 场景中
PROMPT_QUERY_EXTEND = """作为一个向量检索助手,你的任务是结合历史记录,从不同角度,为“原问题”生成三个不同版本的“检索词”,从而提高向量检索的语义丰富度,提高向量检索的精度。生成的问题要求指向对象清晰明确,并与“原问题语言相同”。如果问题中包含多个问询对象,可以将其拆分为多个问题。例如:
历史记录: 
'''
'''
原问题: 介绍下剧情。
检索词: ["介绍下故事的背景。","故事的主题是什么?","介绍下故事的主要人物。"]
----------------
历史记录: 
'''
Q: 对话背景。
A: 当前对话是关于 Nginx 的介绍和使用等。
'''
原问题: 怎么下载
检索词: ["Nginx 如何下载?","下载 Nginx 需要什么条件?","有哪些渠道可以下载 Nginx?"]
----------------
历史记录: 
'''
Q: 对话背景。
A: 当前对话是关于 Nginx 的介绍和使用等。
Q: 报错 "no connection"
A: 报错"no connection"可能是因为……
'''
原问题: 这是什么原因要怎么解决
检索词: ["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 的介绍和使用等问题。
'''
原问题: 你好。
检索词: ["你好"]
----------------
历史记录:
'''
'''
原问题: 北京和上海那个天气好?
检索词: ["北京的天气情况如何","上海的天气情况如何","北京和上海的天气那个更舒适"]
----------------
历史记录:
'''
Q: FastGPT 的优势
A: 1. 开源
   2. 简便
   3. 扩展性强
'''
原问题: 介绍下第2点。
检索词: ["介绍下 FastGPT 简便的优势", "从哪些方面,可以体现出 FastGPT 的简便"]。
----------------
历史记录:
'''
Q: 什么是 FastGPT?
A: FastGPT 是一个 RAG 平台。
Q: 什么是 Laf?
A: Laf 是一个云函数开发平台。
'''
原问题: 它们有什么关系?
检索词: ["FastGPT和Laf有什么关系?","介绍下FastGPT","介绍下Laf"]
----------------
历史记录:
'''
{histories}
'''
原问题: {query}
检索词: """




# 结合历史问答对话,生成新的提问,引导用户继续对话
PROMPT_QA_EXTEND_QUESTION = """
作为一个问答助手,你的任务是结合历史记录,生成三个新的问题,引导用户继续对话。生成的问题要求与对话内容相关且指向对象清晰明确,并与“原问题语言相同”。例如:
历史记录:
'''
Q: 请用最简洁的描述介绍下 nginx
A: Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。它以其高性能、稳定性、丰富的功能集、简单的配置以及低资源消耗而被广泛使用。
'''
新问题: ["请问 nginx 如何下载?","请问 nginx 适合哪些场景?","请问 nginx 的作者是谁?"]
----------------
历史纪录:
'''
Q: 请问 nginx 如何下载?
A: 你可以在 nginx 官网上下载 nginx。
'''
新问题: ["请问 nginx 的官网是那个?","请问 nginx 可以离线安装吗?","请问 nginx 如何安装?"]
----------------
历史记录:
'''
{histories}
'''
新问题:
"""


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