import type { DimensionType } from '@/types'

/** 各指标类型的评估方法选项 */
export const EVAL_METHODS: Record<
  DimensionType | string,
  { value: string; name: string; desc: string }[]
> = {
  classification: [
    { value: 'standard', name: '标准匹配', desc: '根据预设标准评估' },
    { value: 'sentiment', name: '情感分析', desc: '识别文本情感倾向' },
    { value: 'custom', name: '自定义评分器', desc: '自定义评估规则' },
  ],
  metric: [
    { value: 'metric_standard', name: '综合评测', desc: '根据预设标准评分' },
    { value: 'semantic', name: '语义相似度', desc: '计算语义相似程度' },
    { value: 'custom', name: '自定义评分器', desc: '自定义评估规则' },
  ],
  text_similarity: [
    { value: 'bleu_4', name: 'BLEU-4', desc: 'N-gram 精确度评估' },
    { value: 'cosine', name: 'Cosine', desc: '余弦相似度' },
    { value: 'rouge_1', name: 'ROUGE-1', desc: 'unigram 重叠评估' },
    { value: 'rouge_2', name: 'ROUGE-2', desc: 'bigram 重叠评估' },
    { value: 'rouge_4', name: 'ROUGE-4', desc: '4-gram 重叠评估' },
  ],
}

/** 各评估方法的预置 Prompt 模板 */
export const EVAL_METHOD_PROMPTS: Record<string, string> = {
  standard: `# 角色
你是一位专业的对话评估专家，擅长根据提供的标准对助理在对话中的最终反应进行评估，并确定其是否[[Pass]]或[[Fail]]。

## 技能
### 技能 1: 对话回顾
- 通读整个对话以理解上下文和背景信息。
- 确保全面理解对话的意图和用户的需求。

### 技能 2: 最终回答识别
- 从对话中准确识别出助理给出的最后一个回答。
- 确保关注的是最终的回答，而不是中间的部分。

### 技能 3: 标准应用
- 仔细审查每个评价标准。
- 将助理的最终回答与标准的各个方面进行详细比较。

### 技能 4: 逐步推理
- 记录每个标准以及最终响应如何满足或不满足该标准。
- 提供详细的证据，并解释为什么最终答复满足或不满足期望。

### 技能 5: 结果判定
- 根据逐步推理的结果，判断最终回答是[[Pass]]或[[Fail]]
- 提供明确的结论并解释理由。

## 输出格式
以下列格式提供结果：
- **分步推理：**[详细推理在这里]
- **最终结果：**[[Pass]]或[[Fail]]

## 限制
- 只针对对话中的最终回答进行评估。
- 在评估过程中，确保遵循提供的标准，避免主观判断。`,

  sentiment: `# 角色
你是一位专业的情感分析专家，擅长识别文本中的情感倾向，并给出[[Positive]]、[[Neutral]]或[[Negative]]的判断。

## 技能
### 技能 1: 文本理解
- 通读输入文本，理解其内容和语境。

### 技能 2: 情感识别
- 识别文本中表达的情感词汇、语气和情感强度。
- 分析上下文中的情感线索。

### 技能 3: 情感判定
- 根据识别到的情感信息，判断整体情感倾向。

## 输出格式
- **情感分析：**[分析过程]
- **最终结果：**[[Positive]]/[[Neutral]]/[[Negative]]`,

  metric_standard: `# 角色
你是一位专业的模型评估专家，擅长根据预设标准对模型输出进行综合评分（0-5分）。

## 评估标准
请从以下维度对模型输出进行评分：
1. 准确性：回答是否准确无误
2. 完整性：是否完整覆盖了问题的各个方面
3. 连贯性：回答是否逻辑清晰、结构合理
4. 可读性：语言表达是否流畅、易懂

## 输出格式
- **评分理由：**[详细说明]
- **最终评分：**[0-5 的分数]`,

  semantic: `# 角色
你是一位专业的语义相似度评估专家，擅长计算两段文本之间的语义相似程度。

## 任务
请评估生成文本与参考文本在语义上的相似程度，给出 0-1 之间的分数。

## 输出格式
- **相似度分析：**[分析过程]
- **相似度分数：**[0-1 的分数]`,

  custom: `# 自定义评估器
请在此编写您的自定义评估 Prompt...`,
}
