81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""候选免费模型基准测试:大纲任务耗时 + JSON 有效性。"""
|
|
import io
|
|
import json
|
|
import sys
|
|
import time
|
|
import urllib.request
|
|
|
|
sys.path.insert(0, r"D:\00.张华丹\VS专用\04.PPT自动生成\ppt-agent")
|
|
|
|
BASE = "http://127.0.0.1:4096"
|
|
SAMPLE = """# 项目背景
|
|
为提升知识周转效率启动平台建设,前期调研两个月
|
|
# 本期成果
|
|
部署完成基础服务,导入文档120份
|
|
混合检索准确率较基线提升明显
|
|
完成三个部门试点接入
|
|
# 下一步
|
|
扩大试点范围,建立运营机制
|
|
"""
|
|
|
|
PROMPT = """请把下面的内容规划成一份 PPT 的页面大纲。
|
|
要求:
|
|
1. 页面总数 6~9 页(含封面、目录、结尾)
|
|
2. 输出语言:中文
|
|
3. 页面类型只能用:cover / toc / section / content / two_column / end
|
|
4. 第一页 cover,最后一页 end
|
|
5. content 页的 content 数组为要点(每条一句话,4~6 条)
|
|
6. 每页写 notes:2~3 句口语化演讲备注
|
|
7. 标题要有信息量
|
|
输出格式:{"slides": [{"type": "...", "title": "...", "content": ["..."], "notes": "..."}]}
|
|
|
|
【用户标题】知识平台周报
|
|
【用户内容】
|
|
""" + SAMPLE
|
|
|
|
|
|
def post(path, payload, timeout):
|
|
req = urllib.request.Request(
|
|
BASE + path, data=json.dumps(payload).encode("utf-8"), method="POST",
|
|
headers={"Content-Type": "application/json"})
|
|
with urllib.request.urlopen(req, timeout=timeout) as r:
|
|
return json.loads(r.read() or b"{}")
|
|
|
|
|
|
def run_model(model_id):
|
|
t0 = time.time()
|
|
try:
|
|
sess = post("/session", {"title": "bench"}, 30)
|
|
sid = sess["id"]
|
|
provider, _, model = model_id.partition("/")
|
|
result = post(f"/session/{sid}/message", {
|
|
"model": {"providerID": provider, "modelID": model},
|
|
"parts": [{"type": "text", "text": PROMPT}],
|
|
}, 300)
|
|
dt = time.time() - t0
|
|
text = "\n".join(p.get("text", "") for p in result.get("parts", [])
|
|
if p.get("type") == "text")
|
|
s, e = text.find("{"), text.rfind("}")
|
|
ok = False
|
|
n = 0
|
|
if 0 <= s < e:
|
|
try:
|
|
data = json.loads(text[s:e + 1])
|
|
slides = data.get("slides", [])
|
|
n = len(slides)
|
|
ok = 4 <= n <= 12 and all("title" in x for x in slides)
|
|
except json.JSONDecodeError:
|
|
pass
|
|
print(f"{model_id:45s} {dt:6.1f}s pages={n:2d} valid={ok}")
|
|
return dt, ok
|
|
except Exception as exc: # noqa: BLE001
|
|
print(f"{model_id:45s} FAIL {str(exc)[:60]}")
|
|
return 999, False
|
|
|
|
|
|
for m in sys.argv[1:] or ["opencode/nemotron-3.5-lightning-free",
|
|
"opencode/mimo-v2.5-free",
|
|
"opencode/hy3-free"]:
|
|
run_model(m)
|