当前位置: 首页 > news >正文

第10讲、Odoo 18框架设计原理全解析

前言

Odoo是一套开源的企业资源规划(ERP)系统,以其模块化、可扩展性和全面的业务应用套件而闻名。Odoo 18作为其最新版本,在架构设计、前端技术和后端实现上都有显著的创新和优化。本文将从前端的OWL组件化、模块化,到后端的ORM封装,全面解读Odoo 18的框架设计原理及实现,并与Django、Flask等主流Python Web框架进行对比分析,帮助开发者深入理解Odoo 18的技术架构和设计思想。

一、Odoo 18整体架构设计

1.1 多层架构设计

Odoo 18采用经典的多层架构设计,将表现层、业务逻辑层和数据存储层清晰分离。这种架构设计使得系统各部分职责明确,便于维护和扩展。

在这里插入图片描述

图1:Odoo 18框架多层架构设计

如上图所示,Odoo 18的多层架构主要包括:

  • 表现层(Presentation Layer):负责用户界面展示,主要由前端OWL框架和XML模板组成,实现了组件化的用户界面
  • 业务逻辑层(Business Logic Layer):处理核心业务逻辑,由Python模型和控制器实现,通过模块系统组织功能
  • 数据访问层:通过ORM框架与数据库交互,抽象数据操作,提供统一的数据访问接口
  • 数据存储层(Data Storage Layer):使用PostgreSQL数据库存储业务数据,确保数据持久化和一致性

前端和后端通过专门的通信机制进行数据交换,确保用户操作能够触发相应的业务逻辑并反映在界面上。这种分层设计使得Odoo 18能够灵活应对不同业务场景的需求,同时保持系统的可维护性和可扩展性。

1.2 模块化设计理念

Odoo 18的核心设计理念是模块化,整个系统由众多功能模块组成,每个模块负责特定的业务功能。模块化设计带来以下优势:

  • 按需安装:企业可以根据实际需求选择安装所需模块
  • 功能扩展:开发者可以通过创建新模块扩展系统功能
  • 定制灵活:现有模块可以通过继承和覆盖进行定制
  • 版本管理:模块可以独立升级和维护

Odoo 18的标准模块包括销售、采购、库存、制造、会计、人力资源等,覆盖企业运营的各个方面。此外,还有大量来自社区和第三方的扩展模块,进一步丰富了Odoo的功能生态。

1.3 MVC架构实现

Odoo 18遵循MVC(Model-View-Controller)架构模式,但有其特定的实现方式:

  • 模型(Model):Python类定义,继承自models.Model,负责业务数据结构和逻辑
  • 视图(View):XML定义的用户界面,包括表单视图、列表视图、看板视图等
  • 控制器(Controller):Python类,继承自http.Controller,处理HTTP请求和响应

这种MVC实现使得业务逻辑与界面展示分离,便于开发者理解和维护代码。同时,Odoo 18对MVC模式进行了扩展,增加了工作流、报表等组件,使系统更加完整和强大。

1.4 服务架构

Odoo 18采用多进程服务架构,主要包括:

  • Web服务器:处理HTTP请求,提供Web界面
  • 工作进程:执行后台任务和计划任务
  • 聊天服务器:处理实时通信
  • 打印服务器:处理报表生成和打印

这种服务架构设计使得Odoo 18能够高效处理并发请求,同时保持系统的稳定性和可靠性。

二、前端OWL组件化与模块化实现原理

2.1 OWL框架概述

OWL(Odoo Web Library)是Odoo 18采用的前端组件框架,受Vue和React启发,专为Odoo定制开发。OWL框架具有以下特点:

  • 声明式组件系统:使用类似React的组件化思想
  • 虚拟DOM:高效更新DOM,提升渲染性能
  • 响应式状态管理:通过useState钩子管理组件状态
  • 生命周期钩子:提供组件各阶段的生命周期方法
  • 事件处理系统:简化用户交互处理

OWL框架的引入使得Odoo 18前端开发更加现代化和高效,组件化开发提高了代码复用性和可维护性。

2.2 OWL组件化实现

OWL组件由三部分组成:JavaScript逻辑、XML模板和可选的SCSS样式。以下是一个典型OWL组件的实现示例:

JavaScript部分:

/** @odoo-module **/
import { registry } from "@web/core/registry";
import { Component, useState } from "@odoo/owl";// 定义Counter组件
export class Counter extends Component {static template = "my_module.Counter";  // 组件对应的模板setup() {this.state = useState({ value: 0 });  // 初始化状态}// 增加计数方法increment() {this.state.value++;}
}// 注册组件到系统托盘菜单
const systrayItem = {Component: Counter,
};
registry.category("systray").add("counter_systray", systrayItem, { sequence: 0 });

XML模板部分:

<?xml version="1.0" encoding="UTF-8"?>
<template xml:space="preserve"><t t-name="my_module.Counter"><div><buttonclass="btn"style="background-color: white; color: black; border: 1px solid #ccc;"t-on-click="increment">Counter: <t t-esc="state.value" /></button></div></t>
</template>

这种组件化实现方式具有以下优势:

  • 关注点分离:逻辑与模板分离,便于维护
  • 状态管理:通过useState钩子实现响应式状态
  • 事件绑定:使用t-on-*指令简化事件处理
  • 模板渲染:使用t-esc等指令处理数据绑定

2.3 OWL核心组件与钩子

Odoo 18的OWL框架提供了丰富的内置组件和钩子函数,包括:

核心组件:
  • ActionSwiper:通过水平滑动触发动作
  • CheckBox:复选框组件
  • ColorList:颜色选择组件
  • Dropdown:下拉菜单组件
  • Dialog:对话框组件
  • Pager:分页组件
核心钩子:
  • useState:管理组件状态
  • useRef:引用DOM元素
  • useEffect:处理副作用
  • useEnv:访问环境变量
  • useService:使用服务

这些组件和钩子大大简化了前端开发工作,提高了开发效率。

2.4 前端模块化机制

Odoo 18前端采用模块化设计,主要通过以下机制实现:

  • 资产管道:管理JavaScript、CSS和XML资源
  • 模块注册表:通过registry系统注册和管理组件
  • 依赖管理:使用@odoo-module注解和import语句管理依赖
  • 懒加载:按需加载模块,提高性能

前端模块化设计使得Odoo 18能够高效管理大量前端资源,同时保持良好的性能和用户体验。

三、后端ORM封装机制与模块化思想

3.1 ORM架构设计

Odoo 18的ORM(对象关系映射)是其后端架构的核心,提供了对数据库操作的高级抽象。ORM架构主要包括:

  • 模型定义:通过Python类定义数据模型
  • 字段系统:提供丰富的字段类型
  • CRUD操作:封装创建、读取、更新、删除操作
  • 查询构建器:构建复杂查询
  • 关系映射:处理模型间关系
  • 事务管理:确保数据一致性

Odoo 18的ORM设计使得开发者无需直接编写SQL语句,通过Python API即可完成复杂的数据库操作。

3.2 模型定义与属性

Odoo 18模型通过Python类定义,继承自models.Model。模型类通过特定属性配置其行为:

from odoo import models, fields, apiclass CustomPartner(models.Model):_name = 'custom.partner'  # 模型技术名称_description = '自定义合作伙伴'  # 模型描述_inherit = 'res.partner'  # 继承现有模型_order = 'name asc'  # 默认排序_log_access = True  # 记录访问日志_table = 'custom_partner'  # 数据库表名# 字段定义name = fields.Char(string='名称', required=True)active = fields.Boolean(default=True)partner_type = fields.Selection([('customer', '客户'),('supplier', '供应商')], string='合作伙伴类型')

Odoo 18模型支持多种属性,用于控制模型行为:

  • _auto:控制是否自动创建数据库表
  • _log_access:控制是否记录访问日志
  • _table:指定数据库表名
  • _sequence:定义用于生成唯一ID的SQL序列
  • _sql_constraints:定义SQL约束
  • _register:控制模型是否在注册表中可见
  • _abstract:标记为抽象模型
  • _transient:标记为临时模型
  • _name:定义模型技术名称
  • _inherit:指定继承的模型
  • _description:提供人类可读的模型描述
  • _inherits:实现委托继承
  • _rec_name:指定用于记录标签的字段
  • _order:指定默认排序
  • _parent_name:指定层次结构中的父字段
  • _parent_store:计算层次结构的parent_path字段
  • _date_name:定义日历视图中使用的日期字段
  • _fold_name:指定看板视图中用于折叠分组的字段

这些属性使得Odoo 18模型高度可配置,能够适应各种业务需求。

3.3 字段系统与关系映射

Odoo 18提供了丰富的字段类型,用于定义模型的数据结构:

基本字段类型:
  • Char:字符串字段
  • Text:文本字段
  • Integer:整数字段
  • Float:浮点数字段
  • Boolean:布尔字段
  • Date:日期字段
  • Datetime:日期时间字段
  • Binary:二进制数据字段
  • Selection:选择字段
  • Html:HTML内容字段
关系字段类型:
  • Many2one:多对一关系
  • One2many:一对多关系
  • Many2many:多对多关系
  • Reference:动态引用关系

字段定义支持多种参数,用于控制字段行为:

partner_id = fields.Many2one('res.partner',  # 关联模型string='合作伙伴',  # 字段标签required=True,  # 必填ondelete='cascade',  # 删除行为index=True,  # 创建索引domain=[('is_company', '=', True)],  # 域过滤context={'default_is_company': True},  # 上下文help='选择相关的合作伙伴'  # 帮助提示
)

关系字段使得Odoo 18能够建立复杂的数据关系,实现业务实体间的关联。

3.4 ORM方法与API

Odoo 18 ORM提供了丰富的方法和API,用于操作数据:

记录集操作:
  • create():创建记录
  • write():更新记录
  • unlink():删除记录
  • read():读取记录
  • search():搜索记录
  • browse():浏览记录
环境与上下文:
  • env:环境对象,提供对模型、用户、上下文的访问
  • with_context():创建带有修改上下文的环境
  • with_user():创建带有不同用户的环境
  • sudo():以超级用户权限执行操作
计算字段与依赖:
  • @api.depends:定义计算字段依赖
  • @api.onchange:定义字段变更行为
  • @api.constrains:定义字段约束

示例代码:

from odoo import models, fields, api
from odoo.exceptions import ValidationErrorclass SaleOrder(models.Model):_name = 'sale.order'_description = '销售订单'order_line_ids = fields.One2many('sale.order.line', 'order_id', string='订单行')amount_total = fields.Float(string='总金额', compute='_compute_amount', store=True)state = fields.Selection([('draft', '草稿'),('confirmed', '已确认'),('done', '已完成')], string='状态', default='draft')@api.depends('order_line_ids.price_subtotal')def _compute_amount(self):for order in self:order.amount_total = sum(line.price_subtotal for line in order.order_line_ids)@api.constrains('amount_total')def _check_amount_total(self):for order in self:if order.amount_total <= 0:raise ValidationError('总金额必须大于零')@api.onchange('partner_id')def _onchange_partner_id(self):if self.partner_id:self.pricelist_id = self.partner_id.property_product_pricelistdef confirm_order(self):self.write({'state': 'confirmed'})return True

这些API和方法使得Odoo 18开发者能够高效实现复杂的业务逻辑。

3.5 后端模块化实现

Odoo 18后端模块化主要通过以下机制实现:

  • 模块目录结构:标准化的目录结构组织代码
  • 模块清单:通过__manifest__.py定义模块元数据和依赖
  • 数据文件:使用XML或CSV文件定义初始数据
  • 安全配置:通过安全文件定义访问权限
  • 视图定义:使用XML定义用户界面
  • 控制器:处理HTTP请求和响应

典型的Odoo 18模块目录结构:

my_module/
├── __init__.py
├── __manifest__.py
├── controllers/
│   ├── __init__.py
│   └── main.py
├── models/
│   ├── __init__.py
│   ├── model1.py
│   └── model2.py
├── views/
│   ├── templates.xml
│   └── views.xml
├── security/
│   ├── ir.model.access.csv
│   └── security.xml
├── data/
│   └── initial_data.xml
├── static/
│   ├── src/
│   │   ├── js/
│   │   ├── xml/
│   │   └── scss/
│   └── description/
└── wizard/├── __init__.py└── wizard_model.py

模块清单示例:

{'name': '自定义模块','version': '1.0','category': 'Sales','summary': '自定义销售功能','description': """这个模块扩展了销售功能,添加了自定义字段和报表。""",'author': '开发者','website': 'https://www.example.com','depends': ['sale', 'stock'],'data': ['security/security.xml','security/ir.model.access.csv','views/views.xml','views/templates.xml','data/initial_data.xml',],'qweb': ['static/src/xml/custom_widget.xml',],'assets': {'web.assets_backend': ['my_module/static/src/js/custom_widget.js','my_module/static/src/scss/custom_style.scss',],},'installable': True,'application': False,'auto_install': False,'license': 'LGPL-3',
}

这种模块化设计使得Odoo 18能够灵活扩展和定制,同时保持系统的一致性和可维护性。

四、Odoo 18与Django、Flask的对比分析

4.1 设计哲学与整体架构对比

Odoo 18
  • 设计哲学:模块化、全功能的企业资源规划(ERP)框架
  • 架构模式:基于MVC架构
  • 核心特点:高度模块化,业务功能导向
  • 应用场景:企业资源规划、客户关系管理、集成业务流程
Django
  • 设计哲学:快速开发,遵循"不要重复自己"(DRY)原则
  • 架构模式:MTV(Model-Template-View)模式
  • 核心特点:"电池已包含"的理念,提供大量内置功能
  • 应用场景:内容管理系统、社交网络、电子商务平台
Flask
  • 设计哲学:极简主义和灵活性
  • 架构模式:微框架,不强制特定架构模式
  • 核心特点:轻量级,仅提供核心功能
  • 应用场景:API服务、微服务、简单Web应用

Odoo 18与Django、Flask的主要区别在于其业务导向的设计理念。Odoo 18是一个完整的企业应用平台,而不仅仅是一个Web框架。它提供了大量预构建的业务功能模块,而Django和Flask更专注于提供Web开发的基础设施。

4.2 前端技术对比

Odoo 18
  • 前端框架:OWL (Odoo Web Library),自定义组件框架
  • 组件系统:声明式组件系统,使用JavaScript逻辑和XML模板
  • 状态管理:使用useState钩子进行状态管理
  • 模板引擎:基于XML的模板系统
Django
  • 前端框架:无内置前端框架,通常与第三方框架集成
  • 组件系统:无内置组件系统
  • 模板引擎:Django模板语言(DTL)
  • 资源管理:通过staticfiles应用管理静态资源
Flask
  • 前端框架:无内置前端框架,完全自由选择
  • 组件系统:无内置组件系统
  • 模板引擎:使用Jinja2模板引擎
  • 资源管理:无内置资源管理

Odoo 18在前端技术上更加现代化,采用了类似React/Vue的组件化开发方式,而Django和Flask则更加灵活,允许开发者自由选择前端技术栈。

4.3 ORM与数据模型对比

Odoo 18
  • ORM系统:自定义ORM,紧密集成PostgreSQL
  • 模型定义:通过Python类定义,使用特定属性配置
  • 字段系统:丰富的字段类型,包括复杂的关系字段
  • 继承机制:支持多种继承方式(扩展继承、委托继承)
  • 数据库支持:主要支持PostgreSQL
  • 查询API:域表达式和搜索API
Django
  • ORM系统:内置强大的ORM
  • 模型定义:通过Python类定义,使用Meta内部类配置
  • 字段系统:多种字段类型,包括关系字段
  • 继承机制:支持三种继承方式(抽象基类、多表继承、代理模型)
  • 数据库支持:支持多种数据库(PostgreSQL、MySQL、SQLite等)
  • 查询API:QuerySet API,支持链式调用
Flask
  • ORM系统:无内置ORM,通常使用SQLAlchemy等第三方ORM
  • 模型定义:取决于所选ORM
  • 字段系统:取决于所选ORM
  • 继承机制:取决于所选ORM
  • 数据库支持:取决于所选ORM,通常支持多种数据库
  • 查询API:取决于所选ORM

Odoo 18的ORM更加专注于业务模型和关系,提供了丰富的业务相关功能,而Django的ORM更加通用和灵活,Flask则完全依赖第三方ORM解决方案。

4.4 模块化与扩展性对比

Odoo 18
  • 模块系统:高度模块化,每个功能都是独立模块
  • 模块结构:标准化目录结构
  • 依赖管理:通过manifest文件声明模块依赖
  • 扩展机制:强大的继承和覆盖机制
  • 应用商店:Odoo应用商店提供大量现成模块
Django
  • 应用系统:基于应用的模块化
  • 应用结构:标准化目录结构
  • 依赖管理:通过INSTALLED_APPS设置声明应用依赖
  • 扩展机制:中间件、信号系统、类继承
  • 插件生态:丰富的第三方包和插件
Flask
  • 扩展系统:基于扩展的模块化
  • 蓝图系统:使用蓝图组织大型应用
  • 依赖管理:无内置依赖管理
  • 扩展机制:高度灵活,通过扩展和钩子函数实现
  • 插件生态:丰富的Flask扩展生态系统

Odoo 18的模块化更加业务导向,模块通常代表完整的业务功能,而Django的应用通常代表系统的一部分功能,Flask则通过扩展和蓝图实现更自由的模块化。

4.5 性能与可扩展性对比

Odoo 18
  • 性能特点:为企业级应用优化,但完整安装较重
  • 缓存系统:内置多级缓存机制
  • 并发处理:使用多进程工作模型
  • 扩展策略:可通过水平扩展和负载均衡提高性能
  • 适用规模:从小型企业到大型企业
Django
  • 性能特点:为大型应用设计,性能良好
  • 缓存系统:强大的缓存框架
  • 并发处理:支持多种并发模型
  • 扩展策略:良好的水平扩展能力
  • 适用规模:从中小型到大型Web应用
Flask
  • 性能特点:轻量级,基础性能优秀
  • 缓存系统:通过扩展实现
  • 并发处理:依赖WSGI服务器
  • 扩展策略:高度灵活,取决于具体实现
  • 适用规模:从小型应用到中型应用

在性能方面,Flask由于其轻量级特性,基础性能最好,但缺乏内置的性能优化机制;Django提供了良好的性能和可扩展性平衡;Odoo 18则针对企业应用场景进行了优化,但完整安装较为庞大。

4.6 开发效率与学习曲线对比

Odoo 18
  • 开发效率:对标准业务流程开发效率高,定制复杂功能需要深入了解框架
  • 学习曲线:较陡峭,需要理解特定的框架概念和约定
  • 文档质量:官方文档全面但部分内容深度不足
  • 社区支持:活跃的社区和商业支持
  • 调试工具:内置开发者模式和调试工具
Django
  • 开发效率:通过内置功能提高开发效率
  • 学习曲线:中等,框架概念清晰但全面掌握需要时间
  • 文档质量:优秀的官方文档和教程
  • 社区支持:庞大而活跃的社区
  • 调试工具:强大的调试工具和日志系统
Flask
  • 开发效率:简单应用开发迅速,复杂应用需要更多手动配置
  • 学习曲线:平缓,核心概念简单
  • 文档质量:简洁清晰的官方文档
  • 社区支持:活跃的社区
  • 调试工具:通过扩展提供调试功能

在开发效率方面,Odoo 18对于标准业务流程的开发效率最高,因为它提供了大量预构建的业务功能;Django通过内置功能提高了Web应用开发效率;Flask则在简单应用开发上效率最高,但复杂应用需要更多配置。

五、Odoo 18框架的最佳实践与应用场景

5.1 适用场景分析

Odoo 18框架特别适合以下应用场景:

  • 企业资源规划(ERP):Odoo 18提供了完整的ERP功能,包括销售、采购、库存、制造、会计等
  • 客户关系管理(CRM):内置的CRM模块支持客户管理、销售漏斗、机会跟踪等
  • 电子商务平台:Odoo 18的电子商务模块支持在线商店、产品管理、支付处理等
  • 项目管理系统:项目模块支持任务管理、时间跟踪、甘特图等
  • 定制业务应用:通过模块化开发,可以快速构建定制的业务应用

相比之下,Django更适合内容管理系统、社交网络和通用Web应用,Flask则适合微服务、API和简单Web应用。

5.2 开发最佳实践

在Odoo 18开发中,以下是一些最佳实践:

  • 模块化设计:将功能拆分为独立模块,便于维护和复用
  • 继承而非修改:通过继承扩展现有功能,避免直接修改核心代码
  • 遵循ORM规范:充分利用ORM功能,避免直接SQL操作
  • 安全性考虑:正确配置访问权限和记录规则
  • 性能优化:合理使用索引、缓存和计算字段
  • 前端组件化:使用OWL组件化开发前端,提高代码复用性
  • 测试驱动开发:编写单元测试和集成测试,确保代码质量

5.3 框架选择建议

在选择Odoo 18、Django或Flask时,可以考虑以下因素:

  • 项目需求:如果需要完整的企业应用功能,选择Odoo 18;如果需要通用Web应用,选择Django;如果需要轻量级API或微服务,选择Flask
  • 团队经验:考虑团队对各框架的熟悉程度
  • 开发周期:Odoo 18对标准业务流程开发速度快,Django对通用Web应用开发效率高,Flask对简单应用开发迅速
  • 可扩展性需求:考虑未来的扩展需求和系统规模
  • 集成需求:考虑与现有系统的集成需求

六、总结与展望

6.1 Odoo 18框架的创新点

Odoo 18框架在以下方面展现了创新:

  • OWL前端框架:引入现代化的组件化开发方式
  • 模块化架构:高度模块化的设计,支持灵活扩展
  • 强大的ORM:专为业务应用优化的ORM系统
  • 全功能集成:提供从前端到后端的完整解决方案
  • 业务流程自动化:支持复杂业务流程的自动化

6.2 与Django、Flask的互补性

Odoo 18、Django和Flask并非完全竞争关系,它们在不同场景下可以互补:

  • Odoo 18:适合企业应用和业务流程管理
  • Django:适合内容管理和通用Web应用
  • Flask:适合微服务和API开发

在某些复杂系统中,甚至可以看到这些框架共存的情况,例如使用Flask开发API服务,Django开发内容管理系统,Odoo 18处理企业业务流程。

6.3 未来发展趋势

Odoo框架的未来发展趋势可能包括:

  • 更深入的AI集成:将人工智能能力融入业务流程
  • 更强大的移动支持:增强移动应用体验
  • 更灵活的云部署:简化云环境部署和管理
  • 更开放的集成接口:提供更多与第三方系统集成的能力
  • 更现代化的前端体验:继续改进OWL框架和用户界面

参考资料

  1. Cybrosys Technologies. (2025). An Overview of OWL Components in Odoo 18. https://www.cybrosys.com/blog/an-overview-of-owl-components-in-odoo-18
  2. Cybrosys Technologies. (2024). An Overview of Model Attributes in Odoo 18. https://www.cybrosys.com/blog/an-overview-of-model-attributes-in-odoo-18
  3. 1010Analytics. (2024). Comparing Flask, Django, and Odoo: An In-Depth Architectural Analysis for Choosing the Right Framework. https://medium.com/@data.scientist1010/comparing-flask-django-and-odoo-an-in-depth-architectural-analysis-for-choosing-the-right-3245c29db78d
  4. Odoo S.A. (2025). Odoo 18.0 documentation. https://www.odoo.com/documentation/18.0/
  5. SDLC Corp. (2024). An Overview of ORM Methods in Odoo 18. https://sdlccorp.com/post/an-overview-of-orm-methods-in-odoo-18/
  6. Timus Consulting. (2024). Comprehensive Guide to ORM Methods in Odoo 18. https://timusconsulting.com/comprehensive-guide-to-orm-methods-in-odoo-18/
  7. Zbeantech. (2025). Odoo OWL Framework. https://www.zbeanztech.com/blog/general-11/odoo-owl-framework-140

相关文章:

  • PyTorch中nn.Module详解
  • 西瓜书第九章——集成学习
  • 服务器如何配置防火墙管理端口访问?
  • GitHub 趋势日报 (2025年05月29日)
  • Java类和对象详解
  • 【代码训练营Day03】链表part1
  • 4.2.2 Spark SQL 默认数据源
  • 一文详谈Linux中的时间管理和定时器编程
  • 【计算机网络】传输层UDP协议
  • Hive的JOIN操作如何优化?
  • Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)
  • 软件测评中心如何确保软件品质?需求分析与测试计划很关键
  • Linux研学-环境搭建
  • .NET 查找 DLL 的路径顺序
  • Netty 实战篇:为 Netty RPC 框架引入调用链追踪,实现链路透明化
  • 基于原生JavaScript前端和 Flask 后端的Todo 应用
  • YOLOv8目标检测实战-(TensorRT原生API搭建网络和使用Parser搭建网络)
  • DeepSeek-R1-0528-Qwen3-8B 本地ollama离线运行使用和llamafactory lora微调
  • 在 ODROID-H3+ 上安装 Win11 系统
  • NHANES指标推荐:CQI
  • 商城类网站和o2o网站/second是什么意思
  • 自己做网站 有名/正规软件开发培训学校
  • 外贸网站建设价格/百度荤seo公司
  • 做网站如何链接邮箱/网络服务商怎么咨询
  • 电子商务网站建设运营/百度网络营销app
  • 动漫网站设计毕业论文/厨师培训学校