128 lines
4.2 KiB
Python
128 lines
4.2 KiB
Python
"""
|
||
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()
|