- 新增 AIExecutor 类用于调用 OpenAI API 并解析结构化指令 - 在 Settings 中增加 OpenAI 相关配置项(API Key、模型、超时等) - 扩展 ActionContext 以支持注入 AI 服务实例 - 实现 AIAction 类处理自然语言提示并执行 AI 规划的浏览器操作 - 支持通过 max_step 参数限制 AI 操作步数(默认5,最大20) - 支持 include_html 和 include_variables 控制上下文内容传递 - 支持运行时覆盖模型和温度参数 - 增加详细的错误处理与日志记录机制- 更新 README 文档说明 AIAction 使用方法与配置选项 - 更新 XSD schema 支持 ai 类型动作定义- 在 FlowRunner 中完善步骤记录逻辑,支持 AI 执行结果输出 - 添加 plan_ai_action.md 设计文档描述实现细节与规划
198 lines
7.1 KiB
XML
198 lines
7.1 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||
elementFormDefault="qualified"
|
||
attributeFormDefault="unqualified">
|
||
|
||
<xs:annotation>
|
||
<xs:documentation>
|
||
xspider XML 模板 Schema,用于在编辑器中提示必填项、枚举值与作用域规则。
|
||
适用于描述站点配置、流程、动作与抽取字段。
|
||
</xs:documentation>
|
||
</xs:annotation>
|
||
|
||
<!-- 基础类型 -->
|
||
<xs:simpleType name="BooleanFlag">
|
||
<xs:annotation>
|
||
<xs:documentation>
|
||
支持 true/false, 1/0, yes/no, on/off。
|
||
</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:restriction base="xs:string">
|
||
<xs:enumeration value="true"/>
|
||
<xs:enumeration value="false"/>
|
||
<xs:enumeration value="1"/>
|
||
<xs:enumeration value="0"/>
|
||
<xs:enumeration value="yes"/>
|
||
<xs:enumeration value="no"/>
|
||
<xs:enumeration value="on"/>
|
||
<xs:enumeration value="off"/>
|
||
</xs:restriction>
|
||
</xs:simpleType>
|
||
|
||
<xs:simpleType name="SelectorMode">
|
||
<xs:restriction base="xs:string">
|
||
<xs:enumeration value="css"/>
|
||
<xs:enumeration value="xpath"/>
|
||
</xs:restriction>
|
||
</xs:simpleType>
|
||
|
||
<xs:simpleType name="UniqueKeysMode">
|
||
<xs:restriction base="xs:string">
|
||
<xs:enumeration value="all"/>
|
||
<xs:enumeration value="custom"/>
|
||
<xs:enumeration value="null"/>
|
||
</xs:restriction>
|
||
</xs:simpleType>
|
||
|
||
<xs:simpleType name="NonNegativeInt">
|
||
<xs:restriction base="xs:nonNegativeInteger"/>
|
||
</xs:simpleType>
|
||
|
||
<!-- Header -->
|
||
<xs:complexType name="HeaderType">
|
||
<xs:annotation>
|
||
<xs:documentation>HTTP 请求头设置</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||
<xs:attribute name="value" type="xs:string" use="optional"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Config -->
|
||
<xs:complexType name="ConfigType">
|
||
<xs:sequence>
|
||
<xs:element name="header" type="HeaderType" minOccurs="0" maxOccurs="unbounded"/>
|
||
</xs:sequence>
|
||
<xs:attribute name="enable_proxy" type="BooleanFlag" default="false"/>
|
||
<xs:attribute name="rotate_ua" type="BooleanFlag" default="false"/>
|
||
<xs:attribute name="retry" type="xs:nonNegativeInteger" default="3"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Action -->
|
||
<xs:complexType name="ActionType" mixed="true">
|
||
<xs:annotation>
|
||
<xs:documentation>
|
||
动作执行配置。内置类型包含:goto、click、type、wait_dom_show、
|
||
wait_dom_gone、wait_dom_hide、wait_time、run_js、set_header、set_attr、
|
||
set_var、captcha、ai。可按需扩展自定义类型。
|
||
</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:sequence/>
|
||
<xs:attribute name="type" type="xs:string" use="required"/>
|
||
<xs:attribute name="selector" type="xs:string"/>
|
||
<xs:attribute name="mode" type="SelectorMode" default="xpath"/>
|
||
<xs:attribute name="timeout_ms" type="NonNegativeInt"/>
|
||
<xs:attribute name="after_wait" type="NonNegativeInt" default="0"/>
|
||
<xs:anyAttribute processContents="lax"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Field -->
|
||
<xs:complexType name="FieldType">
|
||
<xs:annotation>
|
||
<xs:documentation>字段抽取规则,selector 可为 CSS 或 XPath。</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||
<xs:attribute name="selector" type="xs:string" use="required"/>
|
||
<xs:attribute name="mode" type="SelectorMode" default="css"/>
|
||
<xs:attribute name="value_type" type="xs:string"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Download -->
|
||
<xs:complexType name="DownloadType">
|
||
<xs:annotation>
|
||
<xs:documentation>下载附件配置,将所有属性传入下载器。</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:sequence/>
|
||
<xs:anyAttribute processContents="lax"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Extract -->
|
||
<xs:complexType name="ExtractType">
|
||
<xs:annotation>
|
||
<xs:documentation>
|
||
表格/列表抽取配置。record_css 或 record_xpath 至少填写一个。
|
||
</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:sequence>
|
||
<xs:element name="field" type="FieldType" minOccurs="0" maxOccurs="unbounded"/>
|
||
<xs:element name="download" type="DownloadType" minOccurs="0"/>
|
||
</xs:sequence>
|
||
<xs:attribute name="record_css" type="xs:string"/>
|
||
<xs:attribute name="record_xpath" type="xs:string"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Excel Extract -->
|
||
<xs:complexType name="ExcelExtractType">
|
||
<xs:annotation>
|
||
<xs:documentation>Excel 文件抽取配置,file_pattern 与 pattern 二选一。</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:sequence/>
|
||
<xs:attribute name="file_pattern" type="xs:string"/>
|
||
<xs:attribute name="pattern" type="xs:string"/>
|
||
<xs:attribute name="directory" type="xs:string"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Pagination -->
|
||
<xs:complexType name="PaginateType">
|
||
<xs:annotation>
|
||
<xs:documentation>分页配置,可指定 XPath 或 CSS 选择器。</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:sequence/>
|
||
<xs:attribute name="selector" type="xs:string"/>
|
||
<xs:attribute name="css" type="xs:string"/>
|
||
<xs:attribute name="mode" type="SelectorMode" default="xpath"/>
|
||
<xs:attribute name="max_pages" type="xs:nonNegativeInteger"/>
|
||
</xs:complexType>
|
||
|
||
<!-- Flow -->
|
||
<xs:complexType name="FlowType">
|
||
<xs:annotation>
|
||
<xs:documentation>
|
||
业务流程。建议至少配置 extract 或 excel_extract。
|
||
</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:sequence>
|
||
<xs:element name="action" type="ActionType" minOccurs="0" maxOccurs="unbounded"/>
|
||
<xs:element name="extract" type="ExtractType" minOccurs="0"/>
|
||
<xs:element name="excel_extract" type="ExcelExtractType" minOccurs="0"/>
|
||
<xs:element name="paginate" type="PaginateType" minOccurs="0"/>
|
||
</xs:sequence>
|
||
<xs:attribute name="id" type="xs:string"/>
|
||
<xs:attribute name="entry" type="xs:string"/>
|
||
<xs:attribute name="url" type="xs:string"/>
|
||
<xs:attribute name="data_type" type="xs:string"/>
|
||
<xs:attribute name="unique_keys" type="UniqueKeysMode" default="all"/>
|
||
<xs:attribute name="columns" type="xs:string"/>
|
||
<xs:anyAttribute processContents="lax"/>
|
||
</xs:complexType>
|
||
|
||
<xs:complexType name="FlowsType">
|
||
<xs:sequence>
|
||
<xs:element name="flow" type="FlowType" minOccurs="1" maxOccurs="unbounded"/>
|
||
</xs:sequence>
|
||
</xs:complexType>
|
||
|
||
<xs:complexType name="LoginType">
|
||
<xs:annotation>
|
||
<xs:documentation>登录流程,结构与 FlowType 相同但允许缺少抽取步骤。</xs:documentation>
|
||
</xs:annotation>
|
||
<xs:complexContent>
|
||
<xs:extension base="FlowType"/>
|
||
</xs:complexContent>
|
||
</xs:complexType>
|
||
|
||
<!-- Root -->
|
||
<xs:complexType name="SiteType">
|
||
<xs:sequence>
|
||
<xs:element name="config" type="ConfigType" minOccurs="0"/>
|
||
<xs:element name="login" type="LoginType" minOccurs="0"/>
|
||
<xs:element name="flows" type="FlowsType" minOccurs="0"/>
|
||
</xs:sequence>
|
||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||
<xs:attribute name="base" type="xs:string"/>
|
||
<xs:anyAttribute processContents="lax"/>
|
||
</xs:complexType>
|
||
|
||
<xs:element name="site" type="SiteType"/>
|
||
|
||
</xs:schema>
|