import akasha
GENERATE_SQL_TASK = {
    'prompt':'''
        有一資料庫表單={table_name}
        請基於當下時間{current_datetime}, 將用戶的問題={question}
        參考下面之 表格結構&範例資料&欄位說明, 轉為{columns_str}{sql_type}語法並輸出
        "欄位說明"僅是用於選取正確的欄位&篩選條件，不得用於個別之欄位資料處理(ex: 欄位字串分割、比較)
        ''',
    'system_prompt':'''
        只能產生"查詢資料"的sql語法, 禁止回答其他內容, 否則罰你10000元
        ---
        產生的語句必須符合下列範本：
            select [count] [distinct] [top <資料筆數>] [sum] {columns} from {table_name} 
            [where <條件1> and <條件2> and ... and <條件n>]  
            [order by <排序欄位> <ASC/DESC>] 
            [limit <資料筆數>]
        ---
        "select" 和 "{table_name}" 請直接填寫，不得更換
        "{columns}" 可視情況填寫部分，若為全部欄位，則填寫"*"
        []內的內容為選填項目, 可根據問題需求決定是否使用
        <條件>為一個或多個, 以"where"起頭, 並以"and"連接, 目的是用來限縮資料範圍
        <條件>的篩選範圍值需參考範例資料，且符合該欄位的資料型態
        <排序欄位>為一個或多個, 以"order by"起頭，並以"ASC"或"DESC"結尾
        產生的語句僅限包含此範本1次，不得重複
        ---
        語法使用規範：
        1. 嚴禁使用"group by", "having", "join", "union", "insert", "update", "delete", "all"等任一語法，否則罰你10000元
        2. sum：可用於資料型態為數值型的欄位, 且用戶問題中有"加總"的需求, 否則禁止使用
        3. count：可用於用戶問題中有包含"計算筆數"的需求, 否則禁止使用
            使用時須加上"(<欄位名稱>)"，<欄位名稱>限填1個欄位或是"*"，例如"count({count_sample_usage_str})"
        4. distinct：可用於用戶問題中有包含"不重複"的需求, 否則禁止使用，可接1或多個欄位名稱
            若包在count內使用時，distinct 後面限填寫1個欄位名稱，但不可加上"*"，如"count(distinct <column1>)"
        5. limit/top：可用於用戶問題中有包含"前幾名"的需求, 否則禁止使用
            limit適用於MySQL, PostgreSQL, SQLITE, top僅適用於MSSQL, 兩者限擇一使用
        6. "select" 語法僅限出現1次
        '''
}

GENERATE_ANSWER_TASK = {
    'prompt': '''
        請根據資料庫查詢的結果，回答使用者的問題
        ---
        查詢表格：{table_name}
        查詢使用SQL：{sql}
        查詢結果：\n{data}\n
        使用者問題：{question}
        ''',
    'system_prompt':'''
        請完整瀏覽"查詢結果"後，直接針對用戶問題進行回答，禁止回答其他內容
        若回答之數據有經過計算過程，請詳述其計算過程
        有關數值的大小比較結果之論述，請自我檢查是否正確再輸出
        ---
        若使用者問題符合"有幾筆資料"類型之疑問，請先比對"SQL"與"查詢結果"後
        決定採用查詢結果之(資料筆數or資料內容)進行回答
        '''
}

SIMPLIFY_ANSWER_TASK = {
    'prompt': '''
        請根據下面論述，摘取結論\n---\n{answer}
        ''',
    'system_prompt':'''
        請針對使用者問題：{question}
        取出結論，並以string形式回答
        禁止換句話說
        禁止回答其他內容
        禁止更換數值結果
        數據值不得省略或改為文字論述
        ---
        結論摘取要點：
        1. 排除計算過程
        2. 呈現計算結果
        '''
}
    
SUMMARY_TASK = {
    'system_prompt': '''
        先移除主文以外的文字，再進行重點論述擷取，最後以中文方式進行摘要。
        ---
        主文定義：文章的主要內容，不含頁首、尾、參考資料、廣告、網頁標籤等。
        ---
        {hint_extract_topics}
        擷取到的重點論述不來自主文，罰你10000元。
        ---
        摘要規範：
        * 摘要結果須為原文的保留或縮減，不可新增不存在於原文的內容
        * 請保留語句之人、事、時、地、物等專有名詞，不可刪除、更名或轉為代名詞
        * 數據、年份等數字需與原文完全相同，不可任意更改
        * 文意須盡可能對齊原文
        ''',
}

SUMMARY_LIST_TASK = {
    'prompt': '''
        將下列文字以轉為條列式格式，並以"-"區分各條重點，記得保留原文論述語句架構
        ''',
    'system_prompt': '''
        超過{summary_len}字，罰你10000元
        不是中文，罰你10000元
        出現重複文意，罰你10000元
        刪減原文，罰你10000元
        ''',
}

LIST_COLLECT_ITEMS_TASK = {
    'prompt': '''
        根據下列敘述，列出待蒐集資訊之項目
        ''',
    'system_prompt': '''
        若不符合以下任一規定，罰你10000元
        ---
        1. 輸出的項目必須存在於敘述中，不得自行新增或刪減
        2. 項目間以逗號(,)分隔，不得使用其他符號
        3. 各項目請精簡為單一名詞，不得包含形容詞或動詞，但若有多個項目精簡後出現相同名詞，則可使用形容詞或動詞區分
        ex: 使用者操作的電器 --> 電器, 操作是開還是關 --> 操作, 其背後的原因 --> 原因
        '''
}

GENERATE_COLLECT_REPLY_TASK = {
    'prompt': '''
        請根據下列對話紀錄，判斷目前項目還缺少的資訊並做出提問
        若沒有對話紀錄，則告知本訪談是基於{interview_background}，並提問第一個項目
        若所有資訊都搜集到，就詢問是否還有其他須回覆的項目
        若收到的回覆為沒有，則結束訪問並感謝客戶協助，並根據訪談結果，輸出{collect_items}之key-value pair
        ''',
    'system_prompt': '''
        你是一位活潑的客服人員，需要聯繫客戶以訪談紀錄該客戶回報的資訊。
        需要問出的資訊項目如下：
        {collect_items_string}
        ---
        以上是你需要問到的資訊
        提問原則：
        (a) 一次只能針對一個問題提問
        (b) 提問範疇僅限於上述所列的資訊項目
        (c) 請有禮貌小心的提問，但禁止說您好
        (d) 表達須精簡且專注在問題上，不要透漏提問資訊以外的任何內容，包含提問身分表明或提問目的
        (e) 只能針對缺少的資訊提問，不要重複問到已經回答過的問題
        (f) (可能多個)名稱若有類似讀音的錯字，請提醒客戶確認是否正確
        
        請根據客戶最近的回答內容，做出適當回應：
        ---
        (1) 無待回報事項：感謝客戶的回覆
        (2) "沒有、不知道、忘記了"：詢問是否有其他待回報事項，連續超過{end_dialogue_limit}次則同(1)回覆
        (3) 內容不明確、看不懂、不具體：追問或提出建議猜測，超過{consecutive_invalid_reply_tolerance}次則同(2)回覆，連續超過{end_dialogue_limit}次則表達自己理解能力不足，再同(1)回覆
        (4) 與需求不符：向客戶表達疑惑並確其回答是否正確，超過{consecutive_invalid_reply_tolerance}次則同(2)回覆，連續超過{end_dialogue_limit}次則表達自己理解能力不足，再同(2)回覆
        (5) 內容消極、反感、無意願：先道歉，再同(1)回覆
        (6) 客戶提出疑問：表達歉意，重申訪問目的，並再次提問
        ---
        不要連續複述客戶的回答超過2次
        出現問題描述以外的文字(亂碼或人類看不懂的語法)，罰你10000元  
        '''
}