""" OCS 题库配置生成器 根据本中间件的接口自动生成 OCS 脚本所需的题库配置 JSON, 直接复制粘贴到 OCS 脚本的"题库配置"中即可使用。 图片题说明: OCS 5.0 起新增「图片题优化」:若题库配置(POST)里引用了 ${images} / ${suggestion_title} / ${suggestion_options}, OCS 会先把题目/选项里的图片在浏览器中转成 base64 数组, 和 [图片N] 标记文本一起发给题库。本中间件生成的新配置已包含这三个字段, 粘贴后 OCS 的"当前题库配置暂不支持图片、公式"警告就会消失。 """ import json import argparse def generate_config( server_url: str = "http://127.0.0.1:8777", name: str = "AI 智能搜题", api_key: str = "", ) -> list[dict]: """ 生成 OCS AnswererWrapper 题库配置 Args: server_url: 中间件服务器地址 name: 题库名称(显示在 OCS 界面中) api_key: 服务端 API Key(如果 config.yaml 中配置了则需要填写) """ base_url = server_url.rstrip("/") search_url = f"{base_url}/api/search" data_fields: dict = { "title": "${title}", "type": "${type}", "options": "${options}", # ── OCS 5.0 图片题优化字段(三个都要有,否则 OCS 会提示"暂不支持图片、公式")── # images: base64 图片数组,顺序对应 suggestion_title/suggestion_options 里的 [图片N] "images": {"handler": "return (env)=> env.images || []"}, # 把题目/选项里的图片链接替换成 [图片N] 标记后的文本 "suggestion_title": "${suggestion_title}", "suggestion_options": "${suggestion_options}", } if api_key: data_fields["api_key"] = api_key config = [ { "url": search_url, "name": name, "method": "post", "contentType": "json", "data": data_fields, "handler": "return (res)=> res.code === 1 ? [res.question, res.answer] : (res.msg ? [res.msg, undefined] : undefined)", } ] return config def print_usage() -> None: print(" 使用方法:") print(" 1. 打开 OCS 脚本设置面板(⚙️ 全局设置 → 题库配置)") print(" 2. 把上方 JSON 整个粘贴进「题库配置」并保存") print(" 3. 打开 OCS 的「高级设置」,确认「图片题优化」已勾选(默认开启)") print(" 4. 进入作业/考试页面开始自动答题;图片题会以 base64 直传本中间件") print() print(" 说明:") print(" - OCS 5.0+ 会用「图片题优化」直接上传 base64 图片,无需中间件下载图床;") print(" - OCS 4.x 等旧版本没有这些字段,也能用(中间件会退化为自己下载图片链接);") print(" - 务必使用本次生成的完整配置重新粘贴,旧配置不含图片字段,OCS 会提示不支持。") def main(): parser = argparse.ArgumentParser(description="OCS 题库配置生成器") parser.add_argument( "--url", default="http://127.0.0.1:8777", help="中间件服务器地址 (默认: http://127.0.0.1:8777)", ) parser.add_argument( "--name", default="AI 智能搜题", help="题库名称 (默认: AI 智能搜题)", ) parser.add_argument( "--api-key", default="", help="服务端 API Key(如果服务端配置了则需要)", ) parser.add_argument( "--output", default="", help="输出到文件(留空则打印到控制台)", ) args = parser.parse_args() config = generate_config( server_url=args.url, name=args.name, api_key=args.api_key, ) json_str = json.dumps(config, ensure_ascii=False, indent=2) print("=" * 60) print(" OCS 题库配置 (复制以下内容粘贴到 OCS 脚本中)") print("=" * 60) print() print(json_str) print() print("=" * 60) print_usage() print("=" * 60) if args.output: with open(args.output, "w", encoding="utf-8") as f: f.write(json_str) print(f"\n配置已保存到: {args.output}") if __name__ == "__main__": main()