From da865015f855589e6d3bdbe3f033d8a8607ded8b Mon Sep 17 00:00:00 2001 From: chengxl Date: Wed, 2 Jul 2025 15:04:25 +0800 Subject: [PATCH] =?UTF-8?q?AI=E5=AE=A1=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/common/OpenAi.php | 145 +++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 3 deletions(-) diff --git a/application/common/OpenAi.php b/application/common/OpenAi.php index c6ce614..ea02552 100644 --- a/application/common/OpenAi.php +++ b/application/common/OpenAi.php @@ -13,6 +13,12 @@ class OpenAi protected $sError; protected $timeout = 60; + //JAVA接口 + protected $sJavaUrl = "http://ts.tmrjournals.com/"; + //官网文件地址 + protected $sFileUrl = "https://submission.tmrjournals.com/public/"; + //官网接口地址 + protected $sTmrUrl = "http://journalapi.tmrjournals.com/public/index.php";//"http://zmzm.journal.dev.com/";//; /** * CURL 发送请求到 OpenAI * @param $messages 内容 @@ -175,7 +181,7 @@ class OpenAi }请针对每个问题提供客观、专业的评估,并给出简要的理由。请返回中文解释!返回格式必须严格遵循以下 JSON 结构:{ "journal_scope": { - "assessment": "是/否/部分符合", + "assessment": "符合/不符合/部分符合", "explanation": "请详细说明理由并指出具体相符或不相符的内容" }, "attribute": { @@ -183,7 +189,7 @@ class OpenAi "explanation": "请具体指出创新点并评估其在该领域的贡献" }, "contradiction": { - "assessment": "是/否", + "assessment": "矛盾/不矛盾", "explanation": "请引用具体段落说明矛盾之处" }, "unreasonable": { @@ -213,7 +219,7 @@ class OpenAi "cite_rate":"", "overall_evaluation": "", }'; - $sUserPrompt = '关键词: {keywords}摘要: {abstrart} 内容: {content} 目标期刊:{journal_name}'; + $sUserPrompt = '内容: {content} 目标期刊:{journal_name} 目标期刊内容:{scope}'; $sUserPrompt = str_replace(array_keys($aSearch), array_values($aSearch), $sUserPrompt); return [ ['role' => 'system', 'content' => $sSysMessagePrompt], ['role' => 'user', 'content' => $sUserPrompt] @@ -264,4 +270,137 @@ class OpenAi return ['status' => 1,'msg' => 'success','data' => $aData]; } + + /** + * 构建AI审稿-处理提示词 + */ + public function buildArticlePrompt($aSearch = []) + { + if(empty($aSearch)){ + return []; + } + $sSysMessagePrompt = ' + 你是一位资深的学术评审专家,负责严谨、客观地评估学术文章。请根据提供的文章内容,对以下问题进行专业评审 + ```json + { + "journal_scope": "文章是否符合目标期刊的范围?", + "attribute": "文章是否具有科学前沿性和创新性?", + "contradiction": "文章内容是否前后矛盾或存在逻辑不一致的问题?", + "unreasonable": "文章是否有明显的不合理之处?", + "ethics": "文章是否存在伦理号缺失或明显伦理问题?", + "academic": "是否存在学术不端问题【抄袭、数据作假、图片伪造等】?", + "conclusion": "结论的科学性和可靠性如何?", + "fund_number":"文章有无基金号?请详细说明", + "hotspot":"文章热点", + "submit_direction":"送审方向", + "references_past_three":"根据文章内容统计近三年参考文献的比例?", + "references_past_five":"根据文章内容统计近五年参考文献的比例", + "references_ratio_JCR1":"根据文章内容统计参考文献JCR 1区的比例", + "references_ratio_JCR2":"根据文章内容统计参考文献JCR 2区的比例", + "registration_assessment":"根据文章内容对临床注册号和知情同意书进行评估", + "cite_rate":"结合以上数据结果分析,文章发表后被引用的概率", + "tmr_compare":"与TMR文章近两年文章相比,水平如何?", + "tmr_cite_compare":"如果发表在TMR期刊,你认为两年内被引用的概率?", + "overall_evaluation":"发表建议" + + + }请针对每个问题提供客观、专业的评估,并给出简要的理由。请返回中文解释!返回格式必须严格遵循以下 JSON 结构:{ + "journal_scope": { + "assessment": "符合/不符合/部分符合", + "explanation": "请详细说明理由并指出具体相符或不相符的内容" + }, + "attribute": { + "assessment": "高/中/低", + "explanation": "请具体指出创新点并评估其在该领域的贡献" + }, + "contradiction": { + "assessment": "矛盾/不矛盾", + "explanation": "请引用具体段落说明矛盾之处" + }, + "unreasonable": { + "assessment": "是/否", + "explanation": "包括实验设计、数据分析、结论推导等方面的问题" + }, + "ethics": { + "assessment": "是/否/不适用", + "explanation": "详细解释" + }, + "academic": { + "assessment": "是/否/无法确定", + "explanation": "请进行相似度分析并指出具体可疑部分" + }, + "conclusion": { + "assessment": "强/中/弱", + "explanation": "是否基于充分证据得出" + }, + "fund_number": "", + "hotspot": "", + "submit_direction": "", + "references_past_three": "", + "references_past_five": "", + "references_ratio_JCR1": "", + "references_ratio_JCR2": "", + "registration_assessment":"", + "cite_rate":"", + "tmr_compare": { + "assessment": "A超过TMRB与TMR持平C期是低于TMR", + "explanation": "请详细说明理由" + }, + "tmr_cite_compare": { + "assessment": "A>=6次B3-5次C<3次", + "explanation": "请详细说明理由" + } + "overall_evaluation": "" + }'; + $sUserPrompt = '内容: {content} 目标期刊:{journal_name} 目标期刊内容:{scope}'; + $sUserPrompt = str_replace(array_keys($aSearch), array_values($aSearch), $sUserPrompt); + return [ + ['role' => 'system', 'content' => $sSysMessagePrompt], ['role' => 'user', 'content' => $sUserPrompt] + ]; + } + + /** + * 获取文件内容 + */ + + public function getFileContent($aParam = []){ + + //判断文章ID + $iArticleId = empty($aParam['article_id']) ? [] : $aParam['article_id']; + if(empty($iArticleId)){ + return json_encode(['status' => 2,'msg' => 'Please select an article']); + } + + //获取文件内容 + $aWhere = ['article_id' => $iArticleId,'type_name' => 'manuscirpt']; + $aFile = Db::name('article_file')->field('file_url')->where($aWhere)->order('ctime desc')->limit(1)->find(); + if(empty($aFile['file_url'])){ + return json_encode(['status' => 2,'msg' => 'No Manuscript']); + } + + //接口获取上传文件 + $sUrl = $this->sJavaUrl."api/typeset/readDocx"; + $aParam['fileRoute'] = $this->sFileUrl.$aFile['file_url']; + $aResult = object_to_array(json_decode(myPost($sUrl,$aParam))); + return json_encode($aResult); + } + + /** + * 获取期刊内容 + */ + + public function getJournalPaperArt($aParam = []){ + + //判断文章ID + $sIssn = empty($aParam['issn']) ? [] : $aParam['issn']; + if(empty($sIssn)){ + return json_encode(['status' => 2,'msg' => 'Please select an article']); + } + $sTitle = empty($aParam['title']) ? 'Journal Information' : $aParam['title']; + //接口获取期刊内容 + $sUrl = $this->sTmrUrl."api/Supplementary/getJournalPaperArt"; + $aParam = ['issn' => $sIssn,'title' => $sTitle]; + $aResult = object_to_array(json_decode(myPost($sUrl,$aParam),true)); + return json_encode($aResult); + } }