yumoqing a9cac99c52 fix(platform): DashScope同步生成模板生成器(2026-09-08 qwen-image-plus真图验证后根治)
数据手工修通后回填生成器,让后续DashScope同步模型自动配对不用手改:
- _dashscope_envelope:SDK kwargs形态({model,messages,size...})→原生HTTP信封
  ({model,input:{messages},parameters:{...}}),平铺体提交必400 InvalidParameter
  (实测"messages parameter invalid");代码级确定性归一不靠提取LLM自觉
- _gen_templates对dashscope_sync/async协议先过信封归一
- _resp_tpl_for协议感知:dashscope_sync产物路径output.choices[0].message.content[0]
  .{image|video|audio}(实测形态),文档response示例给output.*路径则优先;同步命名
  空间无task_id/status只引用output/usage/request(StrictUndefined防崩)
- 信封归一纯函数单测4例PASS
2026-09-08 13:44:14 +08:00

pipeline-platform

产线平台内部 agent 模块(宿主不装则零接触)。

内容

  • 能力包 pipeline_platform/platform_ability.pypipeline_id=platform_general
    • platform_llm_status — 模型治理状态(供应商/账号余额/模型定价)
    • fetch_model_doc — 抓取模型 API 文档SSRF 防护:仅公网域名)
    • extract_llm_api_spec — LLM 通读文档提取配置规格(端点/协议/定价)
    • apply_llm_config — 写入配置(幂等:供应商按名复用、模型按 (vendor, vendor_model_id) 只更新定价)
    • platform_modules — 平台模块清单
    • db_query — 只读数据库查询2026-09-07SELECT 白名单 + {k} 强制参数化(禁裸 % aiomysql 会误当格式占位符)+ tables 参数直查列定义sqlor 返回列名转小写,用 AS 别名)
      • 行数 200/字符 8000 显式截断 + SELECT 后 COMMIT 防 MDL 锁 + ns 剔除 'page' 键 sqlor.sqlExe 见 page 键走分页路径返回变形)。根治 agent 拿 run_command 手搓连库 脚本撞沙箱四重摩擦(/tmp tmpfs 不持久、平台目录只读、输出双截断、框架 API 试错)
  • 前端入口 wwwroot/agent_platform/index.ui:主菜单「平台内部助手」(仅管理员可见)
  • 模型治理页弹窗入口2026-09-07pipeline-llm wwwroot/index.ui 的模型注册卡片弹窗内 「🤖 自动配置」「 上线检查」按钮分别弹出 auto_config_popup.dspy / online_check_popup.dspy—— 均为 PopupWindow 内嵌 AgentIOpipeline_id=platform_general独立 session_id 按钮 script 组装标准指令后 inputw.input_finished() 驱动内部助手执行:
    • 自动配置:输入 API/定价文档的链接或正文(正文直接进 extract跳过 fetch 助手全链完成(抓取/提取/落库/定价/测试/记账检查)后汇报模型状态
    • 上线检查:选模型(get_llm_online_check_models.dspyvalue=模型名)→ 助手按 test_model_call → check_model_accountingcreated 等 60~120s 复查)→ platform_llm_status 的测试过程处理,最后明确告知通过/不通过
    • 对应 PLATFORM_PROMPT 新增「输入形态判定第0步」与「上线检查工作流」两节
  • 技能随 pipeline-core skills_library/pipelines/platform_general/ 分发(平台架构地图 + 模型自动配置工作流)

权限

所有工具仅 owner.superuser / owner.admin 可用,代码层硬门禁(每个 handler 入口校验 RBAC 角色),不依赖 prompt。菜单入口同样 Jinja {% if is_admin %} 门控。

定价真实性规则

  • 定价只允许来自文档原文,文档没写一律 null禁止编造
  • 单位统一「元/千tokens」元/百万 ÷1000
  • 非 openai_compat 协议的模板存档但运行时不可调,如实告知

模板生成规则(补充)

  • 数值强转2026-09-06 真实调用实抓后加固):文档示例值为 int/float 的参数, request_template 渲染表达式加 |int/|float 强转——表单/agent 传参常为字符串 数字(如 duration="5"),直接 tojson 出带引号字符串会被 API 拒 InvalidParameter。bool 是 int 子类,先行排除不加强转(保 UI 真值语义)。 强转改变模板内容 → 形态指纹漂移 → apply 自动弃旧建新,属预期行为。

宿主集成(已接入)

  • pipeline-app/build.shclone/pip install/wwwroot 软链列表已含本模块
  • pipeline-app/app/pipeline_app.pyload_pipeline_platform()(在 load_pipeline_service 之后)
Description
No description provided
Readme 25 KiB