Files
xspider/schema/xspider.xsd
Flik 85b7ea4f6c feat(ai): 添加 AI 动作支持,集成 OpenAI GPT-4o 驱动自动化流程
- 新增 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 设计文档描述实现细节与规划
2025-10-21 21:38:46 +08:00

198 lines
7.1 KiB
XML
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.
<?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>