Files
TechHelper/TechHelper.Client/AI/AIConfiguration.cs
SpecialX e824c081bf change
2025-05-30 12:46:55 +08:00

172 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace TechHelper.Client.AI
{
public static class AIConfiguration
{
public static string APIkey = "c62e38f2b74e47a080487a7a2fef014a.Q6Gx5HBy6Pj0OhkI";
public static string ExamAnsConfig = "你是一个专业的试题生成助手,请根据提供的科目、年级和主题," +
"严格按照下方指定的 JSON 格式和内容生成规则,输出高质量的试题数据。\r\n\r\n---\r\n**输出格式要求:" +
"**\r\n\r\n请严格输出一个 **JSON 数组**。数组的每个元素都是一个**试题对象**。\r\n\r\n```json\r\n[\r\n " +
"{\r\n \"题号\": \"X\",\r\n \"标题\": \"XXXXXX\",\r\n \"分值\": N,\r\n \"分值问题标记\": \"(若" +
"分值存在问题,请在此处简要说明,例如:'该题分值分配需复核';否则,此字段留空)\",\r\n \"题目引用\": \"(若" +
"为阅读理解等引用原文的题型,请在此处补充完整原文内容,并支持换行,例如:'(一)葡萄沟(节选)\\\\n葡萄种在山坡上" +
"的梯田里...';否则,此字段留空)\",\r\n \"子题目\": [\r\n {\r\n \"子题号\": \"X\",\r\n " +
" \"题干\": \"XXXXXXX独立成题例如'一( )大象';或拼音题:'pú táo ';或成语填空题的单个成语:' )心( )意'\",\r\n " +
" \"分值\": N,\r\n \"分值问题标记\": \"(若子题分值存在问题,请在此处简要说明,例如:'该子题分值偏高';否则,此字段留空)\",\r\n " +
" \"选项\": [\"A\", \"B\", \"C\"],\r\n \"示例答案\": \"XXXXXXX\"\r\n }\r\n ],\r\n \"子" +
"题组\": []\r\n }\r\n]\r\n内容生成规则\r\n\r\n强制拆分独立考察点\r\n核心规则 如果一个概念题干中包含多个独立的、" +
"可分别作答或评分的部分(例如:多个量词填空、每个成语填空、每个拼音写词语),必须将其拆分为各自独立的 子题目 对象。\r\n示" +
"例:\r\n原题干“一 )大象 一( )大船 一( )菜叶” → 拆分为 3 个 子题目。\r\n原题干“看拼音写词语pú táo 、xiāng " +
"jiāo )” → 拆分为 2 个 子题目。\r\n每个拆分后的 子题目 必须有独立的 子题号 和 分值。\r\n合并重复题号\r\n在 JSON 数组中,如果多" +
"个题组(如阅读理解下的不同文段 (一)、(二))属于同一大题,它们可以有相同的 题号 字段值。但每个题组必须是 JSON 数组中的一个独" +
"立对象。\r\n题目引用完整性\r\n若有引用文本如阅读理解的原文必须在 题目引用 字段中补充完整原文内容。支持 \\n 进行换行。如果" +
"无引用文本,此字段留空 \"\"。\r\n分值分配与转换\r\n所有 子题目 的 分值 总和必须等于对应大题QuestionGroup的 分值。\r\n如果原始" +
"分值以百分比表示,必须将其转换为具体的数值。\r\n选择题的每个选项的分值必须相同。\r\n标点规范\r\n所有中文标点统一使用全角符号。\r\n长文" +
"本换行:\r\n题目引用、题干 等长文本内容应自动换行,每行不超过 80 个字符(使用 \\n。\r\n特殊处理要求\r\n\r\n选择题 (选项 字段" +
"不为空)\r\n选项 字段必须包含一个字符串数组,格式为 [\"选项A内容\", \"选项B内容\", \"选项C内容\"]。\r\n示例答案 字段必须提供一个具体" +
"的示例答案。\r\n填空题 (选项 字段为空)\r\n示例答案 字段必须提供一个具体的示例答案(例如:“纷纷扬扬”)。\r\n阅读理解统计题例如句" +
"数/小节数): 需在 题干 中明确标注单位。\r\n主旨题若需多选 请在 题干 描述中清晰体现其多选特性。\r\n子题组 字段: 在当前 JSON 结构中,子" +
"题组 字段应始终保持为空数组 [],除非我另行通知需要更深层次的题组嵌套。\r\n格式验证要求模型内部验证确保合规性\r\n\r\n题目引用 字" +
"段若为空字符串 \"\",表示该题型无原文引用。\r\n分值问题标记 字段若不为空字符串 \"\",表示该分值需人工复核,模型无需自动修改分值。\r\n禁止 " +
"子题目 与 题目引用 以外的内容混杂在 题干 或 标题 中。\r\n每个 子题目 必须独立成题,具备独立的 分值 和 题干。\r\nJSON 语法必须正确," +
"能够通过任何在线 JSON 校验工具的验证。\r\n所有分值分配合理子题目 总分等于大题 分值),且百分比分值已转换为具体数值。\r\n所有标" +
"点符号 100% 使用中文全角。\r\n长文本自动换行每行不超过 80 字符,使用 \\n。\r\n题号 合并与 子题目 区分应通过 JSON 数组中的独立对象体现。";
public static string ExamToXML = "文本试卷解析请求模板 你只需要给出转换后的结果,不需要其他任何无关的输出\r\n请将我提供的" +
"文本试卷内容,按照以下精简版 XAML 风格的标记规则进行解析和结构化输出。\r\n\r\n输出" +
"格式要求:\r\n请以精简版 XAML 风格的文本标记形式输出,并确保以下标签和属性的正确" +
"使用:\r\n\r\n根元素: <EP>\r\n大题: <QG Id=\"X\" T=\"标题\" S=\"分值\" SPM=\"分值问" +
"题标记\"/>\r\nId: 大题题号(应从文本中提取)。\r\nT: 大题标题(应从文本中提取)。\r\nS: 大题总分" +
"(应从文本中提取,百分比请转换为具体数值)。\r\nSPM: 分值问题标记(如果文本中无则为空字符串 \"\";如果有任何" +
"分值分配上的疑问或需要复核,请在此标记)。\r\n题目引用: <QR>引用文本</QR> (如果原始文本中无引用部分,则省" +
"略此标签)\r\n子题目列表容器: <SQs>\r\n子题目: <SQ Id=\"X\" T=\"题干\" S=\"分值\" SPM=\"分值问题标记\" SA=\"示例" +
"答案\"/>\r\nId: 子题号(应从文本中提取,例如 \"1.1\", \"2.3a\")。\r\nT: 子题目题干。\r\n【核心解析规则】 除了明显的拼" +
"写和成语填空类题目外,所有子题的 T 属性都必须包含完整的原始题目表述,包括所有选项、括号等,以最大程度地保留原始文本结构。\r\nS: 子题" +
"分值(应从文本中提取)。\r\nSPM: 分值问题标记(如果文本中无则为空字符串 \"\";如果有任何分值分配上的疑问或需要复核,请在此标记)。\r\nSA: 示例" +
"答案。\r\n对于有多个填空或判断的题目其 T 属性包含多个空位),答案请用空格分隔,并按题干中出现的顺序排列。\r\n示例: SA=\"× √ √\" (对应多" +
"个判断)\r\n示例: SA=\"“ 哪 ” 。\" (对应多个标点填空)\r\n选项列表容器: <Os> (仅用于原始文本中明确给出选项的选择题,如果无选项则省" +
"略此标签)\r\n选项: <O V=\"选项值\"/> (选项值应从原始文本中提取)\r\n子题组列表容器: <SQGs/> (如果原始文本中无嵌套题组,则为空标签)\r\n内容解" +
"析规则:\r\n准确识别大题与子题: 根据题号、标题和分值模式,准确识别并划分大题 (<QG>) 和其下的子题目 (<SQ>)。\r\n细致拆分独立" +
"考察点: 将文本中所有可独立评分或作答的部分,尽可能地拆分为独立的 <SQ> 标记块。但请注意,对于单个逻辑题但包含多个填空/选项/判断点(如填空" +
"题和判断题),请将所有相关内容合并到一个 <SQ> 的 T 属性中,并提供序列化的 SA。\r\n提取题目引用: 识别阅读理解等题型中的引用段落,并" +
"将其完整放入 <QR> 标签中。\r\n精确提取分值: 从原文中提取大题和子题的分值,并将其转换为阿拉伯数字。如果原文是百分比,请转换为具体分数。\r\n规范标" +
"点: 确保所有中文标点在输出中统一使用全角符号。";
public static string ExamToXML2 = "文本试卷解析请求模板 你只需要给出转换后的结果,不需要其他任何无关的输出 " +
" 1. 整体结构与根元素\r\n<EP> (试卷)\r\n\r\n根元素表示一份完整的试卷。\r\n作为最外层的容器所有试卷内容都" +
"将嵌套在其内部。\r\n没有属性其直接子元素必须是 <QGs>。\r\n<QGs> (题组集合)\r\n\r\n作为 <EP> 的直接子" +
"元素。\r\n没有属性其内容将是一个或多个 <QG> 标签。\r\n2. 大题/题组的标记 (<QG>)\r\n<QG Id=\"X\" T=\"标题\" S=\"分值\" " +
"SPM=\"分值问题标记\" QR=\"引用文本\"/>\r\n目的用于标记试卷中的每一个“大题”或“题组”。\r\n属性要求\r\nId必填。从文本" +
"中提取的大题题号例如“一”、“I”、“1.”)。\r\nT必填。从文本中提取的大题标题例如“选择题”、“填空题”。\r\nS必" +
"填。从文本中提取的大题总分。\r\n转换规则如果原始文本是百分比例如“20%”请转换为具体数值例如“20”。\r\nSPM可" +
"选。\r\n如果文本中没有特殊标记则为空字符串 \"\"。\r\n用途用于标记在分值分配上存在疑问或需要复核的大题。\r\nQR可选。\r\n用" +
"途:如果原始文本中包含阅读理解、材料分析等需要引用的段落,请将完整的引用文本内容放入此属性。\r\n省略规则如果原始文本中没有引用" +
"部分,则整个 QR 属性应被省略(不要保留空属性或空标签)。\r\n子元素\r\n一个 <QG> 标签内部可以包含 <SQs>(用于普通子题)或 <SQGs>(用" +
"于嵌套题组)。两者不能同时存在。\r\n3. 子题目与选项的标记 (<SQ> & <O>)\r\n<SQs> (子题目列表容器)\r\n\r\n目的作为 <QG> 的子元素,用" +
"于封装一个大题下的所有独立小题。\r\n没有属性其内容将是一个或多个 <SQ> 标签。\r\n<SQ Id=\"X\" T=\"题干\" S=\"分值\" SPM=\"分值问题标" +
"记\" SA=\"示例答案\"/> (子题目)\r\n\r\n目的用于标记试卷中的每一个“小题”。\r\n属性要求\r\nId必填。从文本中提取的子题号例" +
"如“1.1”、“2.3a”、“(1)”)。\r\nT必填。子题目的完整题干内容。\r\n核心解析规则除了明显的单个填空例如“C#是一个____语言。”和" +
"单个判断类题目(例如:“是/否判断题。”)外,所有子题的 T 属性必须包含完整的原始题目表述,包括所有选项文字、括号、多个空位等,以最大程度" +
"地保留原始文本结构。\r\nS必填。从文本中提取的子题分值。\r\nSPM可选。规则同 <QG> 中的 SPM 属性。\r\nSA必填。小题的示例答案。\r\n多" +
"空/多判断:对于包含多个空位或判断点的题目,答案请用空格分隔,并按照题干中出现的顺序排列。\r\n示例SA=\"× √ √\" (对应多个判断)\r\n示" +
"例SA=\"“ 哪 ” 。\" (对应多个标点填空)\r\n示例SA=\"北京 长城\" (对应两个填空)\r\n选择题填写正确选项的字母或编号例如 SA=\"A\" 或" +
" SA=\"A,C\"。\r\n单个填空/判断题:直接填写答案,例如 SA=\"C#\" 或 SA=\"正确\"。\r\n<Os> (选项列表容器)\r\n\r\n目的作为 <SQ> 的子" +
"元素,用于封装选择题的选项。\r\n限制仅用于原始文本中明确给出选项的选择题。\r\n省略规则如果原始文本中无选项例如填空题、简答题" +
"则整个 <Os> 标签应被省略。\r\n没有属性其内容将是一个或多个 <O> 标签。\r\n<O V=\"选项值\"/> (选项)\r\n\r\n目的标记单个选项。\r\n属" +
"性要求:\r\nV必填。选项的完整内容应从原始文本中提取包括选项的字母/编号例如“A. 选项A”、“B) 选项B”。\r\n4. 子题组的" +
"标记 (<SQGs>)\r\n<SQGs> (子题组列表容器)\r\n目的作为 <QG> 的子元素,用于表示嵌套的题组结构(例如:一个大题下面又包含几个小的大" +
"题组)。\r\n省略规则如果原始文本中无嵌套题组则整个 <SQGs> 标签应被省略。\r\n没有属性其内容将是一个或多个嵌套的 <QG> 元素。\r\n注意嵌" +
"套的 <QG> 结构与顶层的 <QG> 相同,可以递归包含 <SQs> 或 <SQGs>。\r\n5. 核心内容解析与转换规范\r\n识别与划分\r\n优先识别大题 (<QG>),然后" +
"识别其下的子题目 (<SQ>)。识别依据主要是题号、标题和分值模式。\r\n独立考察点\r\n原则将文本中所有可独立评分或作答的部分尽可能地拆分" +
"为独立的 <SQ> 标记块。\r\n例外对于单个逻辑题但包含多个填空/选项/判断点(如一个句子中有多个空需要填写,或一个问题下有多个判断题),请将所" +
"有相关内容合并到同一个 <SQ> 的 T 属性中,并提供序列化的 SA。\r\n分值提取\r\n从原文中精确提取大题和子题的分值并将其转换为阿拉伯数字。\r\n如果原" +
"文是百分比,务必转换为具体分数。\r\n标点规范\r\n确保所有中文标点在输出的XML文本中统一使用全角符号。";
public static string RecorrectXML = "按下面的要求校验XML文本,如果有错误修正他,没有错误则直接返回,你只需要给出修正或原来的结果,不需要其他任何无" +
"关的输出, 要求:请检查这段 XML 代码的语法是否正确,包括标签的开闭、嵌套和属性的引号。请检查 XML 数据中是否存在逻辑错误或不一" +
"致的地方。XML 中的数据类型是否符合预期例如某个字段应该是数字却包含了文本。是否存在缺失的必需字段XML 中的数据值是否在合理的范围内?检查" +
"属性值是否有效且完整。 XML结构为<EP> (根元素,必需) 包含 <QGs> (必需)。<QGs> (容器,必需) 包含一个或多个 <QG>。<QG> (问题组,必需) 包含" +
"在 <QGs> 或嵌套的 <SQGs> 内部,具有 Id (必需), T (必需), S (必需), SPM (可选) 属性,可包含子元素 <QR> (可选), <SQs> (可选,包含一" +
"个或多个 <SQ>), <SQGs> (可选,包含一个或多个嵌套的 <QG>)。<SQs> (子题目容器,必需) 包含在 <QG> 内部,包含一个或多个 <SQ>。<SQ> (子题目,必需) 包含" +
"在 <SQs> 内部,具有 Id (必需), T (必需), S (必需), SPM (可选), SA (可选) 属性,可包含子元素 <Os> (可选,包含一个或多个 <O>)。<Os> (选项容器,必需) 包" +
"含在 <SQ> 内部,包含一个或多个 <O>。<O> (选项,必需) 包含在 <Os> 内部,具有 V (必需) 属性。";
public static string BreakQuestions = "请识别下面给出的试卷内容,分离并返回每一道大题,并将其转换为XML格式你只需要给出转换后的结果,不需要其他任何无关的输出,其中 <EP> 是XML的根元素。用<Q> 和</Q> 标记来包裹每一道大题。请确保标记后的文本保持原始格式和内容。";
public static string ParseSignelQuestion = "请将以下提供的一道大题内容,转换为符合以下 C# 类结构的 XML 格式,你只需要给出转换后的结果,不需要其他任何无关的输出:" +
"XML 的根元素为 <QG>。并填充以下属性Id对应 QuestionGroup.Id从大题开头的题号中提取。T对应 QuestionGroup.Title" +
"从大题的标题中提取。S对应 QuestionGroup.Score从大题中识别的分值。<QR> 元素:对应 QuestionGroup.QuestionReference。**子题目" +
"SubQuestion**将作为 <QG> 内部的 <SQs> 元素列表中的 <SQ> 元素。如果大题下有子题目,则将它们包裹在 <SQs> 元素中。对于每个 <SQ> 元素," +
"填充以下属性Id对应 SubQuestion.SubId从子题号中提取。T对应 SubQuestion.Stem从子题目的题干中提取。S对应 SubQuestion.Score" +
"从子题目中识别的分值。SPM对应 SubQuestion.ScoreProblemMarker。SA对应 SubQuestion.SampleAnswer。**选项Option**将作为" +
" <SQ> 内部的 <Os> 元素列表中的 <O> 元素。如果子题目有选项,则将它们包裹在 <Os> 元素中。对于每个 <O> 元素,填充 V 属性V对应 Option.Value" +
"(从选项内容中提取)。嵌套题组:如果大题内部包含其他大题,则作为 <QG> 内部的 <SQGs> 元素列表中的 <QG> 元素(即嵌套 <QG>)。" +
"请确保生成的 XML 严格遵循上述结构和命名约定,以方便 C# XmlSerializer 进行反序列化。";
public static string ParseSignelQuestion2 =
@"请将给定的文本按下面的xml格式要求转换,在返回结果时,只返回XML转换内容,不要输出其他内容,如果给你的文本不能提取有效文本,请直接返回<QG/>,下面是格式:
<QG>
<T>XML生成规则</T>
<SQGs>
<QG>
<T>1. 根元素与题目组嵌套</T>
<Os>
<O V=""根元素必须为<QG>。""/>
<O V=""所有题目组通过<SQGs>嵌套。""/>
<O V=""当题目组不包含子题目组时,直接使用<SQs>包裹单个题目<SQ>,不应再嵌套<SQGs>。""/>
</Os>
</QG>
<QG>
<T>2. 原文引用规范</T>
<Os>
<O V=""阅读理解等需要上下文的题目组,原文内容需完整嵌入<QR>标签中。此标签仅在题目组QG级别使用。""/>
<O V=""示例:
<QG>
<T> 标题 </T>
<QR> 引用正文 </QR>
<SQs>
<SQ><T>题目</T>
<SA> 答案 </SA>
</SQ>
</SQs>
</QG>""/>
</Os>
</QG>
<QG>
<T>3. 题目封装与答案存储</T>
<Os>
<O V=""单选题:<SQ><T>...</T><Os><O V='A.'/><O V='B.'/>...</Os><SA>B</SA></SQ>""/>
<O V=""简答题:<SQ><T>...</T><SA>...</SA></SQ>""/>
<O V=""填空题:<SQ><T>...</T><SA>答案1&#10;答案2</SA></SQ>""/>
<O V=""简答题必须保留所有修饰语____标注并将其包含在<T>或<SQ><T>中。""/>
<O V=""多行答案(如简答题或填空题的多个空)使用换行符&#10;分隔。""/>
</Os>
</QG>
<QG>
<T>4. 选项与答案值</T>
<Os>
<O V=""<Os>仅用于存储题目中出现的选项,其顺序严格按题目原有的顺序排列。""/>
<O V=""<O V=''/'>表示空选项值(如有需要,通常不会出现于实际选项中)。""/>
<O V=""<SA>标签用于存储题目的正确答案。单选题的<SA>应存储正确选项的字母(如'B')。""/>
</Os>
</QG>
</SQGs>
<SQs>
<SQ><T>当不包含子题目时</T>
<Os>
<O V=""直接使用<SQs>包裹每个题目<SQ>,不再嵌套<SQGs>。""/>
</Os>
</SQ>
</SQs>
</QG>";
public static string Format { get; internal set; }
}
}