From 77c75a21241f883ed6626b1d168cd4d5de3fba56 Mon Sep 17 00:00:00 2001 From: chengxl Date: Thu, 24 Jul 2025 17:09:47 +0800 Subject: [PATCH] =?UTF-8?q?AI=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/common/OpenAi.php | 112 +++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 48 deletions(-) diff --git a/application/common/OpenAi.php b/application/common/OpenAi.php index 1096d8f..7d8e2bd 100644 --- a/application/common/OpenAi.php +++ b/application/common/OpenAi.php @@ -90,6 +90,30 @@ class OpenAi "summary" => "针对文章结论生成一个简单总结,内容不要和文章概述重复,字数150以内", ] ]; + //AI审稿提示词 + protected $aReviewQuestion = [ + + 'system_message' => '您是一位资深的医学期刊学术评审专家,请负责严谨、客观地评估学术文章。请根据提供的医学论文信息,按照以下严格格式生成结构化[JSON结构]输出[中文]:', + 'default' => [ + "journal_scope" => "结合标题和摘要以及期刊范围来判断文章是否符合目标期刊?", + "attribute" => "内容是否有科学前沿性和创新性?参照维度[研究内容的原创性:论文中的研究内容是否与已有的研究重复?是否在同样的领域提出了类似的结论,但在方法或结果上有所创新?如果有,作者是否清楚地解释了如何与之前的研究不同,或者如何在原有基础上进行扩展或改进?如果是综述文章,汇总并综合最新的研究成果,尤其是近几年内的重要发现,展示领域内最新的进展成果。作者可以识别出未被充分讨论的问题或提出新的研究问题,而不是简单文献堆砌。文章中的图表创新能否将信息的清晰呈现,方便读者理解复杂研究问题。论文方法创新性评估要点:是否采用了新的实验模型或创新的实验设计,能有效解决当前研究中的难点或空白?是否有合理的对照组和多组实验设计,确保研究结果的可靠性?是否使用了当前前沿的技术(如高通量测序、CRISPR基因编辑等),提高了实验精度或数据分析能力?是否结合了跨学科的方法(如生物信息学、人工智能等)?是否应用了多种验证手段或统计方法,确保结果的可信度?是否通过细胞实验、动物模型等多重验证,确保实验结果的可靠性?结论与数据的创新性:研究结论是否提出了新观点或新见解?是否提供了新的实验数据或观察结果,能够突破当前的研究局限?例如,发现了新的生物标志物,或对已知生物通路的作用机制提供了全新的解释]", + "contradiction" => "内容是否前后矛盾或存在逻辑不一致的问题?", + "unreasonable" => "内容是否有明显的不合理之处?", + "ethics" => "内容是否存在伦理号缺失或明显伦理问题?", + "academic" => "内容是否存在学术不端问题如:抄袭\数据作假\图片伪造等?", + "conclusion" => "根据内容判断文章结论的科学性和可靠性?", + "fund_number" => "内容是否有无基金号?请详细说明", + "hotspot" => "内容有哪些符合目标期刊当下的热点话题", + "submit_direction" =>"根据内容总结文章送审方向", + "references_num" =>"根据内容统计文章参考文献的数量", + "references_past_three" =>"统计内容里近3年的参考文献的数量及所占比例", + "references_past_five" =>"统计内容里近5年的参考文献的数量及所占比例", + "references_ratio_JCR1" =>"根据2024JCR最新分区分析文章内容里的文献判断属于JCR1还是JCR2,统计属于JCR 1区的数量及比例", + "references_ratio_JCR2" =>"根据2024JCR最新分区评估文章内容里的文献判断属于JCR1还是JCR2,统计属于JCR 2区的数量及比例", + "registration_assessment" =>"内容是否存在临床注册号和知情同意书?解释说明", + "cite_rate" => "结合内容分析发表后被引用的概率" + ] + ]; //定义redis连接 private $oQueueRedis; public function __construct() @@ -190,59 +214,51 @@ class OpenAi } /** - * 构建AI审稿-处理提示词【非重要的一次请求回答】 + * 构建AI审稿-处理提示词 */ - public function buildReviewPromptUnimportant($aSearch = []) + public function buildReviewPrompt($aSearch = []) { if(empty($aSearch)){ return []; } - $sSysMessagePrompt = ' - 你是一位资深的学术评审专家,负责严谨、客观地评估学术文章。请根据提供的信息,对以下问题进行专业评审 - ```json - { - "ethics": "根据文章内容分析是否存在伦理号缺失或明显伦理问题?", - "academic": "根据文章内容分析是否存在学术不端问题【抄袭、数据作假、图片伪造等】?", - "conclusion": "根据文章内容判断文章结论科学性和可靠性?", - "fund_number":"根据文章内容分析有无基金号?请详细说明", - "hotspot":"根据文章内容分析有哪些符合目标期刊当下的热点话题", - "submit_direction":"根据文章内容总结文章送审方向", - "references_num":"根据文章内容统计文章参考文献的数量", - "references_past_three":"统计文章内容里近3年的参考文献的数量及所占比例", - "references_past_five":"统计文章内容里近5年的参考文献的数量及所占比例", - "references_ratio_JCR1":"根据2024JCR最新分区分析文章内容里的文献判断属于JCR1还是JCR2,统计属于JCR 1区的数量及比例", - "references_ratio_JCR2":"根据2024JCR最新分区评估文章内容里的文献判断属于JCR1还是JCR2,统计属于JCR 2区的数量及比例", - "registration_assessment":"根据文章内容分析是否存在临床注册号和知情同意书?解释说明", - "cite_rate" => "根据文章内容分析文章发表后被引用的概率" - }请针对每个问题提供客观、专业的评估,并给出简要的理由。请返回中文解释!返回格式必须严格遵循以下 JSON 结构:{ - "ethics": { - "assessment": "是/否", - "explanation": "请针对文章伦理号及伦理进行分析及说明" - }, - "academic": { - "assessment": "是/否", - "explanation": "请进行相似度分析并指出具体可疑部分" - }, - "conclusion": { - "assessment": "是/否", - "explanation": "是否基于充分证据得出" - }, - "fund_number": "", - "hotspot": "", - "submit_direction": "", - "references_num":"", - "references_past_three": "", - "references_past_five": "", - "references_ratio_JCR1": "", - "references_ratio_JCR2": "", - "registration_assessment":"", - "cite_rate" => "" - }'; - $sUserPrompt = '文章内容{content};目标期刊{journal_name}'; - $sUserPrompt = str_replace(array_keys($aSearch), array_values($aSearch), $sUserPrompt); - return [ - ['role' => 'system', 'content' => $sSysMessagePrompt], ['role' => 'user', 'content' => $sUserPrompt] - ]; + + //获取问题 + $aQuestion = $this->aReviewQuestion; + $aQuestionLists = empty($aQuestion['default']) ? [] : $aQuestion['default']; + if(empty($aQuestionLists)){ + return []; + } + //系统角色 + $sSysMessagePrompt = empty($aQuestion['system_message']) ? '' : $aQuestion['system_message']; + if(empty($sSysMessagePrompt)){ + return []; + } + + //问题处理 + $aMessage = []; + foreach($aQuestion as $key => $value){ + //修改当前内容 + $sInfo = json_encode([$key => $value],JSON_UNESCAPED_UNICODE); + $sSysMessagePromptInfo = $sSysMessagePrompt.$sInfo; + if($key == "title_chinese"){ + $sUserPrompt = '{#title_chinese#}'; + $sUserPrompt = str_replace(array_keys($aSearch), array_values($aSearch), $sUserPrompt); + } + if($key == "content"){ + $sUserPrompt = '{#content#}'; + $sUserPrompt = str_replace(array_keys($aSearch), array_values($aSearch), $sUserPrompt); + } + if(!in_array($key,["title_chinese","content"])){ + $sUserPrompt = '标题:{#title_chinese#} 摘要: {#abstract#} 内容: {#content#}'; + $sUserPrompt = str_replace(array_keys($aSearch), array_values($aSearch), $sUserPrompt); + } + + $aMessage[] = [ + ['role' => 'system', 'content' => $sSysMessagePromptInfo], + ['role' => 'user', 'content' => $sUserPrompt] + ]; + } + return $aMessage; } /**