功能说明
- PyQt6 图形界面,支持配置阿里百炼 API Key、模型名称、请求参数
- 内置论文专用系统提示词(开题/综述/正文/降重/润色/摘要/参考文献)
完整代码
import sysimport jsonimport osimport requestsfrom PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QTextEdit, QPushButton, QGroupBox, QSpinBox, QDoubleSpinBox, QComboBox, QFileDialog, QMessageBox)from PyQt6.QtCore import Qt, QThread, pyqtSignal# 配置文件路径CONFIG_FILE = "bailian_paper_config.json"# 阿里百炼基础地址BAILIAN_BASE_URL = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"# 论文专用超级系统提示词(核心配置)PAPER_SYSTEM_PROMPT = """你是专业学术论文写作助手,精通本科/硕士/博士毕业论文、期刊小论文、综述、开题报告、实验分析撰写,严格遵守以下写作规范:# 一、行文规范1. 语言正式学术化,杜绝口语、网络词汇,句式严谨客观,第三人称叙述2. 逻辑分层清晰,使用一级、二级标题分层,段落简短,每段只表达一个核心观点3. 专业术语统一,领域专有名词前后表述保持一致4. 区分综述、实验论文、理论论文、开题报告、摘要、结论、参考文献写作风格# 二、分场景写作规则## 1. 开题报告包含:研究背景、国内外研究现状、研究意义、研究内容、技术路线、创新点、进度安排、参考文献国内外现状分国内、国外两段梳理,客观总结现有研究不足,引出本文研究价值## 2. 文献综述分类梳理国内外相关文献,对比不同学者观点,总结研究缺口,不单纯罗列文献,要有评述结尾总结当前领域存在的问题,点明本文研究切入点## 3. 论文正文(理论/实验)理论部分:原理推导完整,公式规范,逻辑推导无跳跃实验部分:实验环境、数据集、评价指标、对比实验、结果分析、误差分析完整图表描述规范:如图1所示、由表2数据可得等标准学术表述## 4. 润色降重改写原文句式,替换同义学术词汇,调整语序,保留全部核心观点与数据,降低重复率不改变原意、不删减关键实验数据、不丢失专业结论## 5. 摘要/关键词摘要:200-300字,背景+方法+实验+结论+创新点,无图表引用关键词3-5个,贴合论文核心研究方向## 6. 结论与展望结论总结全文所有工作与成果,客观说明研究局限;展望提出未来可拓展研究方向# 三、硬性约束1. 禁止生成抄袭性文本,输出原创逻辑框架2. 涉及数据若无给定,合理模拟行业通用实验数据并标注“模拟实验数据仅供参考”3. 参考文献采用GB/T 7714标准格式4. 回答不夹带废话,直接输出标准学术文本,如需解释单独标注说明5. 用户提供专业领域(计算机/机械/医学/经管等)后,严格贴合对应学科专业术语6. 输出格式支持Markdown分级标题,方便直接复制到Word、WPS"""# 阿里百炼API请求线程(防止界面卡死)classBailianRequestThread(QThread): result_signal = pyqtSignal(str) error_signal = pyqtSignal(str)def__init__(self, api_key, model, sys_prompt, user_prompt, temp, top_p): super().__init__() self.api_key = api_key self.model = model self.sys_prompt = sys_prompt self.user_prompt = user_prompt self.temp = temp self.top_p = top_pdefrun(self): headers = {"Authorization": f"Bearer {self.api_key}","Content-Type": "application/json" } body = {"model": self.model,"input": {"messages": [ {"role": "system", "content": self.sys_prompt}, {"role": "user", "content": self.user_prompt} ] },"parameters": {"result_format": "text","temperature": self.temp,"top_p": self.top_p } }try: resp = requests.post(BAILIAN_BASE_URL, headers=headers, json=body, timeout=120) resp_data = resp.json()if resp.status_code == 200: output_text = resp_data["output"]["text"] self.result_signal.emit(output_text)else: err_msg = f"接口错误:{resp_data.get('message', '未知错误')}" self.error_signal.emit(err_msg)except Exception as e: self.error_signal.emit(f"请求异常:{str(e)}")# 主窗口GUIclassPaperAssistantWindow(QMainWindow):def__init__(self): super().__init__() self.setWindowTitle("阿里百炼-论文写作助手配置工具") self.resize(1000, 720) self.config = self.load_config() self.init_ui()# 加载本地配置defload_config(self):if os.path.exists(CONFIG_FILE):with open(CONFIG_FILE, "r", encoding="utf-8") as f:return json.load(f)return {"api_key": "","model_name": "qwen-turbo","temperature": 0.7,"top_p": 0.8,"sys_prompt": PAPER_SYSTEM_PROMPT }# 保存配置defsave_config(self): data = {"api_key": self.key_edit.text().strip(),"model_name": self.model_combo.currentText(),"temperature": self.temp_spin.value(),"top_p": self.top_p_spin.value(),"sys_prompt": self.prompt_edit.toPlainText() }with open(CONFIG_FILE, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) QMessageBox.information(self, "保存成功", "阿里百炼配置已本地保存!")# 初始化界面definit_ui(self): central = QWidget() self.setCentralWidget(central) main_layout = QVBoxLayout(central) main_layout.setSpacing(8)# ========== 1. 阿里百炼SK配置区域 ========== group_config = QGroupBox("阿里百炼 API 密钥与模型配置") layout_config = QVBoxLayout(group_config) row_sk = QHBoxLayout() row_sk.addWidget(QLabel("API Key(SK):")) self.key_edit = QLineEdit(self.config["api_key"]) self.key_edit.setEchoMode(QLineEdit.EchoMode.Password) row_sk.addWidget(self.key_edit) layout_config.addLayout(row_sk) row_model = QHBoxLayout() row_model.addWidget(QLabel("大模型名称:")) self.model_combo = QComboBox()# 阿里百炼主流论文可用模型 model_list = ["qwen-turbo", "qwen-plus", "qwen-max", "qwen-max-longcontext", "qwen2-72b-instruct"] self.model_combo.addItems(model_list) self.model_combo.setCurrentText(self.config["model_name"]) row_model.addWidget(self.model_combo) row_model.addWidget(QLabel("Temperature:")) self.temp_spin = QDoubleSpinBox() self.temp_spin.setRange(0, 1) self.temp_spin.setSingleStep(0.05) self.temp_spin.setValue(self.config["temperature"]) row_model.addWidget(self.temp_spin) row_model.addWidget(QLabel("Top_P:")) self.top_p_spin = QDoubleSpinBox() self.top_p_spin.setRange(0, 1) self.top_p_spin.setSingleStep(0.05) self.top_p_spin.setValue(self.config["top_p"]) row_model.addWidget(self.top_p_spin) layout_config.addLayout(row_model) btn_layout = QHBoxLayout() btn_save = QPushButton("保存当前配置") btn_save.clicked.connect(self.save_config) btn_reset_prompt = QPushButton("重置默认论文提示词") btn_reset_prompt.clicked.connect(self.reset_default_prompt) btn_layout.addWidget(btn_save) btn_layout.addWidget(btn_reset_prompt) layout_config.addLayout(btn_layout) main_layout.addWidget(group_config)# ========== 2. 系统提示词编辑区 ========== group_prompt = QGroupBox("论文专用系统提示词(可自定义修改)") layout_prompt = QVBoxLayout(group_prompt) self.prompt_edit = QTextEdit() self.prompt_edit.setPlainText(self.config["sys_prompt"]) layout_prompt.addWidget(self.prompt_edit) main_layout.addWidget(group_prompt)# ========== 3. 用户输入论文需求 ========== group_input = QGroupBox("论文需求输入区(你的写作要求)") layout_input = QVBoxLayout(group_input) self.user_input = QTextEdit() self.user_input.setPlaceholderText("示例:计算机专业硕士开题报告,研究方向大模型微调,3000字,包含国内外研究现状、创新点、技术路线") layout_input.addWidget(self.user_input) main_layout.addWidget(group_input)# ========== 4. 操作按钮 ========== btn_row = QHBoxLayout() self.btn_run = QPushButton("调用阿里百炼生成论文内容") self.btn_run.clicked.connect(self.run_bailian_api) btn_clear = QPushButton("清空输入输出") btn_clear.clicked.connect(self.clear_all) btn_copy = QPushButton("复制生成结果") btn_copy.clicked.connect(self.copy_result) btn_row.addWidget(self.btn_run) btn_row.addWidget(btn_clear) btn_row.addWidget(btn_copy) main_layout.addLayout(btn_row)# ========== 5. 输出结果区 ========== group_out = QGroupBox("论文生成结果输出") layout_out = QVBoxLayout(group_out) self.result_out = QTextEdit() self.result_out.setReadOnly(True) layout_out.addWidget(self.result_out) main_layout.addWidget(group_out)# 恢复默认论文提示词defreset_default_prompt(self): self.prompt_edit.setPlainText(PAPER_SYSTEM_PROMPT) QMessageBox.information(self, "重置完成", "已恢复内置论文专用提示词模板")# 清空所有文本defclear_all(self): self.user_input.clear() self.result_out.clear()# 复制结果defcopy_result(self): text = self.result_out.toPlainText()if text: clipboard = QApplication.clipboard() clipboard.setText(text) QMessageBox.information(self, "复制成功", "论文内容已复制到剪贴板")# 发起API请求defrun_bailian_api(self): sk = self.key_edit.text().strip() user_text = self.user_input.toPlainText().strip() sys_text = self.prompt_edit.toPlainText().strip()ifnot sk: QMessageBox.warning(self, "提示", "请先填写阿里百炼API Key(SK)!")returnifnot user_text: QMessageBox.warning(self, "提示", "请输入你的论文写作需求!")returnifnot sys_text: QMessageBox.warning(self, "提示", "系统提示词不能为空!")return self.btn_run.setEnabled(False) self.result_out.append("===== 正在请求阿里百炼大模型,请等待 =====") self.thread = BailianRequestThread( api_key=sk, model=self.model_combo.currentText(), sys_prompt=sys_text, user_prompt=user_text, temp=self.temp_spin.value(), top_p=self.top_p_spin.value() ) self.thread.result_signal.connect(self.on_api_success) self.thread.error_signal.connect(self.on_api_error) self.thread.finished.connect(lambda: self.btn_run.setEnabled(True)) self.thread.start()# 请求成功回调defon_api_success(self, text): self.result_out.append("\n===== 生成完成 =====\n") self.result_out.append(text)# 请求失败回调defon_api_error(self, err): self.result_out.append(f"\n===== 请求失败 =====\n{err}")if __name__ == "__main__": app = QApplication(sys.argv) win = PaperAssistantWindow() win.show() sys.exit(app.exec())
一、环境安装依赖
pip install PyQt6 requests
二、阿里百炼SK获取步骤
- 打开阿里百炼控制台:https://dashscope.console.aliyun.com/
- 左侧「API-KEY管理」→ 创建API-KEY,复制SK密钥
- 密钥填入软件「API Key(SK)」输入框,保存配置
三、界面模块详解
1. SK配置面板
- Temperature:0~1,越小文本越严谨重复低(论文推荐0.6-0.7);越大创意更强
- 保存配置:写入本地
bailian_paper_config.json,重启自动加载
2. 核心系统提示词(可自定义修改)
内置超长专业论文专属Prompt,覆盖开题、综述、正文、降重、摘要、参考文献全场景,严格限制学术写作规范。 支持一键重置为默认模板,可自行扩展对应学科(计算机/经管/机械/医学)专属规则。
3. 用户输入区
填写你的论文需求示例:
软件工程本科毕业论文,5000字,基于大模型的智能论文校对系统,包含绪论、需求分析、系统设计、实现、测试、总结,参考文献5篇
4. 功能按钮
四、配置文件说明
运行后自动生成bailian_paper_config.json,存储:
五、使用流程
- 选择模型(论文推荐 qwen-plus / qwen-max)
六、扩展优化建议
- 内置分场景快捷提示词模板(开题/降重/摘要/综述一键切换)