
Superlinked Schema定义指南如何用IdField与类型注解做类型安全的数据建模【免费下载链接】sieOpen-source inference server and production cluster for all the models your agent needs.项目地址: https://gitcode.com/GitHub_Trending/su/sie在 Superlinked一个面向 Agent 的开源推理服务与向量检索生产框架中Schema 定义是整条数据链路的地基。本文带你快速掌握两大核心技巧用IdField声明实体的唯一标识用 Python 类型注解如str、float、Optional[float]描述每个字段的类型——框架会据此自动生成类型安全的字段对象并在编译期与运行期双重校验让数据建模像写普通 Python 类一样简单。Schema 是什么嵌入空间里的数据蓝图Superlinked 中的 Schema 就是嵌入空间里的实体。你定义的每一个 Schema 类都会翻译成一个可搜索、可过滤、可向量化的数据结构字段即向量输入每个类型注解字段都可以被TextSimilaritySpace、NumberSpace等空间引用直接参与向量计算实体即检索单元数据按 Schema 结构落库后成为可被相似度查询命中的实体类型即约束注解决定了字段的合法类型与空值行为数据入库前自动完成校验与转换继承Schema基类即可开始建模无需任何数据库建表语句。基类实现见 schema.py官方说明见 schema.mdx。IdField 核心作用给每个实体一个唯一身份证每个 Schema 都必须声明一个 ID 字段框架会把它识别为IdField定义于 id_field.py它具有三条铁律只能是字符串IdField内部固定为str类型且不可为空只做等值比较ID 支持/!精确查找不参与大小比较或语义匹配自动注册声明后通过schema.id或字段名即可访问用于查询、去重与关联from superlinked import Schema class ProductSchema(Schema): id: str # ← 自动成为 IdField实体的唯一标识 name: str price: float in_stock: boolIdField的识别与挂载逻辑位于 id_schema_object.py其中id属性保证无论字段叫id还是user_id都能统一访问。类型注解如何映射到字段类型一张表看懂Superlinked 通过SchemaFactory读取类上的所有注解并编译成字段描述符见 schema_factory.py。普通注解 → 必填字段Optional[X]或X | None→ 可空字段。映射关系如下你的注解生成的字段类型典型用途strString文本语义空间、精确过滤floatFloat数值空间、范围比较intInteger计数、等级、可比较boolBoolean硬过滤提供is_/is_not_写法datetimeTimestamp时间衰减空间Recencylist[str]StringList多值标签、包含匹配Optional[X]对应类型nullableTrue允许缺失的数据列所有字段类型都继承自SchemaField并声明了各自支持的比较操作详见 schema_object.py。⚠️ 一个常见坑Union 注解只允许一种类型 None。如果写str | float | None框架会抛出InvalidStateExceptionAn attribute of a schema can only have one optional or mandatory type-annotation这正是类型安全的体现——歧义在定义时就被拦截。更多案例可参考官方文档 optional-schema-fields 与示例 optional_schema_fields.ipynb。类型安全的双重保障运行时校验 静态检查Schema 类在实例化时会被SchemaDecorator装饰见 schema_decorator.py完成三件事校验 ID 字段存在没有可识别的IdField注解直接报错生成字段描述符列表每个注解变成一个带name / type_ / nullable的 SchemaFieldDescriptor过滤非 Schema 字段只有内置字段类型才能成为向量输入避免脏数据混入在静态侧项目自带 mypy 插件 schema_field_plugin.py当你访问Optional字段时mypy 会把SchemaField | None自动收敛为SchemaField让 IDE 的类型提示和补全在可空字段上也能正常工作——这是很多手写框架做不到的细节。建模完成之后数据如何进入向量库定义好 Schema 并实例化后product_schema ProductSchema()它就同时是入库契约和查询入口数据源如InMemorySource按字段描述符校验每一条记录每个字段按声明类型完成解析转换例如Timestamp会把datetime自动转成 unix 时间戳见 schema_object.py 的 as_type 实现最终写入向量数据库的表结构中实体与字段一一对应Schema 实体在向量数据库表中的存储示意配合 basic_building_blocks.ipynb 可以完整跑通定义 Schema → 建空间 → 入库 → 查询的最小闭环。实操清单5 分钟自查你的 Schema 定义✅ID 唯一且为字符串——id: str或任意名字但注解必须是str类型类 ✅每个字段都有注解—— 无注解的类属性不会成为 Schema 字段 ✅可空字段显式写Optional[X]—— 其余一律视为必填 ✅避免多类型 Union——str | None可以str | float | None会报错 ✅命名贴近业务—— 字段名会出现在查询 API 与向量库表中好名字 好可维护性小结Superlinked 的 Schema 定义把数据建模压缩成了最熟悉的 Python 类语法IdField管唯一性类型注解管合法性装饰器与 mypy 插件管可靠性。掌握 id_field.py、schema_factory.py 和 schema_decorator.py 这三个文件你就掌握了类型安全数据建模的全部底层逻辑——剩下的交给向量空间去发挥吧。【免费下载链接】sieOpen-source inference server and production cluster for all the models your agent needs.项目地址: https://gitcode.com/GitHub_Trending/su/sie创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考