OCSxAI/generate_ocs_config.py

128 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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()