66 lines
4.4 KiB
Markdown
Raw Permalink 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.

# pipeline-platform
产线平台内部 agent 模块(宿主不装则零接触)。
## 内容
- **能力包** `pipeline_platform/platform_ability.py`pipeline_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.dspy`value=模型名)→ 助手按
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 %}` 门控。
## 端点/路径职责约定2026-09-12 端点可互换重构,配套 pipeline-llm 3ea03be
- **端点 = 纯连接点**(主机根+region+timeout不带 protocol 标签、不参与协议过滤,
对所有模型可互换;账号 endpoint_ids 空 = 选用全部端点。
- **请求形态完全由模型适配模板 profile.path 承载**path 是从主机根起的完整相对路径
(含版本段,如 /compatible-mode/v1/chat/completions运行时 url = 端点主机根 + path
模型禁把端点写进 path。
- extract 提取提示词base_url 只提主机根禁路径段chat_path 必须含版本段。
- apply 落库:端点经 normalize_endpoints 归一主机根 + 同(主机根,region)去重 + timeout 取 max
path 经 _norm_relative_path 归一(全 URL 剥 scheme+host保留版本段
裸域拦截与协议补绑自检已删。
## 定价真实性规则
- 定价只允许来自文档原文,文档没写一律 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.sh`clone/pip install/wwwroot 软链列表已含本模块
- `pipeline-app/app/pipeline_app.py``load_pipeline_platform()`(在 load_pipeline_service 之后)