Kubernetes Dashboard开发环境搭建与贡献指南
本文详细介绍了Kubernetes Dashboard项目的开发环境配置、本地集群搭建、代码规范以及完整的贡献流程。涵盖了从Docker、Go、Node.js等开发工具版本管理,到多模块调试技巧,再到Go与Angular的编码最佳实践,最后详细说明了从PR提交到版本发布的全流程。为开发者提供了全面的技术指导和最佳实践参考。
开发环境要求:Docker、Go、Node.js版本管理
Kubernetes Dashboard是一个多语言、多模块的复杂项目,采用Go和Angular技术栈构建。为了确保开发环境的稳定性和一致性,项目对各个组件的版本有明确要求。本节将详细介绍开发Kubernetes Dashboard所需的环境配置和版本管理策略。
核心开发工具版本要求
Kubernetes Dashboard项目对开发工具版本有严格的要求,具体版本信息如下表所示:
| 工具 | 最低版本 | 推荐版本 | 配置文件位置 |
|---|---|---|---|
| Docker | 20.10+ | 最新稳定版 | 无明确配置 |
| Go | 1.23.0 | 1.23.0 | modules/go.work |
| Node.js | 18.14.0 | 18.14.0+ | modules/web/package.json |
| Yarn | 3.3.0 | 3.3.0 | modules/web/.yarnrc.yml |
Docker环境配置
Docker是Kubernetes Dashboard开发的核心依赖,用于构建和运行多容器开发环境。项目使用Docker Compose来管理开发环境中的多个服务组件。
Docker版本要求:
- 最低版本:Docker 20.10+
- 推荐使用最新稳定版本
- 需要启用BuildKit功能以获得更好的构建性能
Docker Compose配置: 项目提供了两个主要的Docker Compose配置文件:
hack/docker/dev.compose.yml- 开发环境配置hack/docker/docker.compose.yaml- 生产环境配置
开发环境包含以下服务:
- Kong Gateway (3.8版本) - API网关
- Auth模块 - 认证服务
- API模块 - API服务
- Web Go模块 - Web后端
- Web Angular模块 - Web前端
- Metrics Scraper - 指标抓取服务
Go语言环境管理
Kubernetes Dashboard使用Go 1.23.0版本,通过Go Modules进行依赖管理。项目采用Go Workspace模式管理多个模块。
Go版本配置:
// modules/go.work
go 1.23.0
use (
./api
./auth
./common/certificates
./common/client
// ... 其他模块
)
环境设置建议:
# 使用gvm或类似工具管理Go版本
gvm install go1.23.0
gvm use go1.23.0
# 设置GOPATH和GOROOT
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
Go模块依赖管理:
项目使用标准的Go Modules进行依赖管理,每个子模块都有自己的go.mod文件:
# 更新所有模块的依赖
cd modules && go work sync
# 检查特定模块的依赖
cd modules/api && go mod tidy
Node.js版本管理
前端部分使用Node.js 18.14.0或更高版本,通过Yarn 3.3.0进行包管理。
Node.js版本控制:
// modules/web/package.json
{
"engines": {
"node": ">=18.14.0"
},
"engineStrict": true
}
推荐使用nvm管理Node.js版本:
# 安装指定版本的Node.js
nvm install 18.14.0
nvm use 18.14.0
# 验证Node.js版本
node --version # 应该输出 v18.14.0 或更高
npm --version # 配套的npm版本
Yarn包管理器配置
项目使用Yarn 3.3.0进行JavaScript依赖管理,采用Plug'n'Play (PnP)模式。
Yarn配置:
# modules/web/.yarnrc.yml
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-3.3.0.cjs
Yarn工作流程:
# 安装项目依赖
cd modules/web && yarn install
# 添加新依赖
yarn add package-name
# 开发模式启动
yarn start # 等同于 make serve
多版本环境管理策略
为了确保开发环境的一致性,推荐使用版本管理工具:
使用direnv管理环境变量:
# .envrc 文件示例
export GO_VERSION=1.23.0
export NODE_VERSION=18.14.0
export YARN_VERSION=3.3.0
# 自动切换工具版本
use nodejs $NODE_VERSION
use golang $GO_VERSION
环境验证脚本:
#!/bin/bash
# scripts/check-environment.sh
echo "检查开发环境版本..."
echo "Go版本: $(go version)"
echo "Node.js版本: $(node --version)"
echo "Yarn版本: $(yarn --version)"
echo "Docker版本: $(docker --version)"
echo "Docker Compose版本: $(docker compose version)"
容器化开发环境优势
Kubernetes Dashboard采用容器化的开发环境,具有以下优势:
graph TD
A[开发环境] --> B[Docker容器]
B --> C[环境隔离]
B --> D[依赖一致性]
B --> E[快速重建]
C --> F[避免本地污染]
D --> G[版本控制精确]
E --> H[快速 onboarding]
F --> I[稳定开发]
G --> J[可重复构建]
H --> K[团队协作]
常见环境问题解决
版本冲突处理: 当遇到版本不匹配时,可以采取以下措施:
- Go版本问题:使用
go version检查,确保为1.23.0 - Node.js版本问题:使用
nvm use 18.14.0切换 - Yarn版本问题:项目已锁定Yarn 3.3.0,无需手动安装
依赖安装问题:
# 清理并重新安装依赖
cd modules/web && rm -rf node_modules && yarn install --force
# 重置Go模块缓存
cd modules && go clean -modcache && go work sync
通过严格遵循上述版本要求和管理策略,可以确保Kubernetes Dashboard开发环境的稳定性和一致性,为高效的开发工作奠定坚实基础。
本地开发集群搭建与模块调试技巧
Kubernetes Dashboard采用多模块架构设计,本地开发环境搭建需要精心配置各个组件之间的协作关系。本文将深入介绍如何快速搭建本地开发集群,并提供实用的模块调试技巧,帮助开发者高效进行Dashboard的开发和测试工作。
开发环境架构概览
本地开发环境采用Docker Compose进行容器编排,包含以下核心组件:
flowchart TD
A[开发者机器] --> B[Kong Gateway<br/>端口9000:8000]
B --> C[Auth模块<br/>认证服务]
B --> D[API模块<br/>K8s API扩展]
B --> E[Web Go模块<br/>后端服务]
B --> F[Web Angular模块<br/>前端开发服务器<br/>端口8080:8080]
B --> G[Metrics Scraper<br/>指标采集]
H[Kind集群] --> I[Kubernetes API]
C & D & E & G --> I
本地Kind集群搭建
Kubernetes Dashboard使用Kind(Kubernetes in Docker)创建本地开发集群,确保开发环境与生产环境的一致性。
集群配置详解
项目提供了完整的Kind集群配置脚本,位于 hack/scripts/start-cluster.sh:
#!/usr/bin/env bash
# 导入配置
ROOT_DIR="$(cd $(dirname "${BASH_SOURCE}")/../.. && pwd -P)"
. "${ROOT_DIR}/hack/scripts/conf.sh"
function start-kind {
${KIND_BIN} create cluster \
--name="k8s-cluster-ci" \
--image="kindest/node:${K8S_VERSION}" \
--config="${ROOT_DIR}/hack/scripts/kind-config"
ensure-kubeconfig
echo "Kubernetes集群已准备就绪"
}
关键配置参数:
- KIND_VERSION: v0.19.0
- K8S_VERSION: v1.30.2
- 集群名称: k8s-cluster-ci
- 网络配置: 使用外部kind网络
快速启动集群
使用Makefile提供的便捷命令:
# 启动完整的开发环境(包含集群创建和模块部署)
make serve
# 仅创建Kind集群
make kind-up
# 删除集群
make kind-down
# 查看集群状态
kubectl cluster-info --context kind-k8s-cluster-ci
多模块调试技巧
1. 实时热重载配置
各个Go模块使用Air工具实现实时热重载,开发时修改代码会自动重新编译:
# modules/auth/.air.toml 示例配置
root = "."
tmp_dir = "tmp"
[build]
cmd = "go build -o ./tmp/main ."
bin = "tmp/main"
include_ext = ["go", "tpl", "tmpl", "html"]
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
调试技巧:
- 修改代码后保存,观察容器日志输出变化
- 使用
docker logs dashboard-auth -f实时查看日志 - 设置
--v=4参数启用详细日志级别
2. 前端开发服务器调试
Angular开发服务器独立运行在8080端口,支持热模块替换:
# 进入web模块目录
cd modules/web
# 安装依赖
yarn install
# 启动开发服务器
yarn start
# 或者使用Docker方式
docker-compose -f ../../hack/docker/dev.compose.yml up web-angular
调试功能:
- 实时重载: 修改TypeScript/HTML/CSS文件自动刷新
- 源映射: 浏览器中可直接调试TypeScript源码
- API代理: 开发服务器代理API请求到后端服务
3. 网关配置与API调试
Kong网关作为API入口,配置位于 hack/gateway/dev.kong.yml:
services:
- name: dashboard-web
url: http://dashboard-web-go:8080
routes:
- name: web-route
paths: ["/"]
- name: dashboard-api
url: http://dashboard-api:8080
routes:
- name: api-route
paths: ["/api"]
API调试方法:
# 测试API端点
curl -X GET http://localhost:9000/api/v1/login
# 查看网关日志
docker logs kong-gateway -f
# 检查服务健康状态
curl -X GET http://localhost:9000/healthz
4. 模块间通信调试
各模块通过环境变量和网络进行通信:
| 模块 | 服务名称 | 内部端口 | 功能描述 |
|---|---|---|---|
| Auth | dashboard-auth | 8080 | 认证服务 |
| API | dashboard-api | 8080 | API扩展服务 |
| Web Go | dashboard-web-go | 8080 | 后端Web服务 |
| Web Angular | dashboard-web-angular | 8080 | 前端开发服务器 |
| Metrics Scraper | metrics-scraper | 8080 | 指标采集服务 |
网络调试命令:
# 检查容器网络连通性
docker exec dashboard-api ping dashboard-auth
# 查看容器IP地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dashboard-auth
# 测试服务发现
nslookup dashboard-auth
5. 性能监控与优化
开发环境性能监控配置:
# 查看容器资源使用情况
docker stats
# 监控Go模块GC情况
curl -X GET http://localhost:9000/debug/pprof/heap
# Angular性能分析
yarn build --stats-json
常见问题排查
集群启动失败
# 检查Docker服务状态
systemctl status docker
# 清理旧的Kind集群
kind delete cluster --name k8s-cluster-ci
# 检查端口冲突
netstat -tulpn | grep :9000
模块编译错误
# 清理缓存重新编译
make clean
make serve
# 检查Go模块依赖
cd modules/api && go mod tidy
# 检查Node.js依赖
cd modules/web && yarn install --frozen-lockfile
网络连接问题
# 检查Docker网络
docker network ls
docker network inspect kind
# 验证服务发现
docker exec dashboard-api nslookup dashboard-auth
高级调试技巧
1. 远程调试配置
对于Go模块,可以启用DLV远程调试:
# 在dev.Dockerfile中添加调试配置
RUN go install github.com/go-delve/delve/cmd/dlv@latest
CMD ["dlv", "debug", "--headless", "--listen=:40000", "--api-version=2", "--accept-multiclient"]
2. 数据库模式调试
虽然开发环境使用无数据库模式的Kong,但可以启用调试日志:
# hack/gateway/dev.kong.yml 环境变量
environment:
- "KONG_LOG_LEVEL=debug"
- "KONG_PROXY_ACCESS_LOG=/dev/stdout"
- "KONG_ADMIN_ACCESS_LOG=/dev/stdout"
3. 自定义开发配置
创建本地覆盖配置:
# docker-compose.override.yml
version: '3.8'
services:
web-angular:
environment:
- NG_CLI_ANALYTICS=false
- NG_BUILD_OPTIMIZER=false
ports:
- "4200:8080"
通过掌握这些本地开发集群搭建和模块调试技巧,开发者可以快速构建稳定的Kubernetes Dashboard开发环境,提高开发效率和代码质量。建议定期清理缓存和更新依赖,以保持开发环境的最佳状态。
代码规范:Go与Angular的最佳实践
Kubernetes Dashboard作为一个大型开源项目,采用了Go语言作为后端服务,Angular作为前端框架,其代码规范体现了企业级应用开发的最佳实践。本文将深入分析项目的代码组织结构、编码规范、测试策略和工具链配置。
Go语言编码规范
项目结构与模块化
Kubernetes Dashboard采用多模块架构,每个功能模块都有独立的Go模块定义:
graph TB
A[Kubernetes Dashboard] --> B[API Module]
A --> C[Auth Module]
A --> D[Web Module]
A --> E[Metrics Scraper]
A --> F[Common Libraries]
B --> B1[pkg/]
B --> B2[schema/]
C --> C1[api/]
C --> C2[pkg/]
D --> D1[pkg/]
D --> D2[main.go]
F --> F1[certificates/]
F --> F2[errors/]
F --> F3[types/]
F --> F4[csrf/]
每个模块都使用独立的go.mod文件进行依赖管理,确保模块间的清晰边界和版本控制。
错误处理模式
项目采用统一的错误处理机制,在modules/common/errors模块中定义了标准的错误类型和处理函数:
// 错误定义示例
type APIError struct {
Code int `json:"code"`
Message string `json:"message"`
Details string `json:"details,omitempty"`
}
// 错误处理中间件
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next()
if len(c.Errors) > 0 {
c.JSON(http.StatusInternalServerError, APIError{
Code: http.StatusInternalServerError,
Message: "Internal server error",
Details: c.Errors.String(),
})
}
}
}
接口设计与依赖注入
项目大量使用接口来定义组件间的契约,支持依赖注入和测试:
// 资源访问接口定义
type ResourceGetter interface {
Get(ctx context.Context, namespace, name string) (runtime.Object, error)
List(ctx context.Context, namespace string, opts metav1.ListOptions) (runtime.Object, error)
}
// 具体实现
type podGetter struct {
client kubernetes.Interface
}
func (g *podGetter) Get(ctx context.Context, namespace, name string) (runtime.Object, error) {
return g.client.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{})
}
Angular前端规范
项目结构与架构
前端采用Angular模块化架构,遵循功能模块划分原则:
flowchart LR
A[App Module] --> B[Core Module]
A --> C[Shared Module]
A --> D[Feature Modules]
B --> B1[Services]
B --> B2[Interceptors]
B --> B3[Guards]
C --> C1[Components]
C --> C2[Directives]
C --> C3[Pipes]
D --> D1[Workloads Module]
D --> D2[Services Module]
D --> D3[Config Module]
组件设计模式
项目采用智能组件与展示组件分离的模式:
// 智能组件 - 处理业务逻辑
@Component({
selector: 'kd-pod-list',
templateUrl: './template.html',
})
export class PodListComponent implements OnInit {
pods: Pod[] = [];
isLoading = true;
constructor(private podService: PodService) {}
ngOnInit() {
this.loadPods();
}
private loadPods() {
this.podService.list().subscribe(pods => {
this.pods = pods;
this.isLoading = false;
});
}
}
// 展示组件 - 只负责UI渲染
@Component({
selector: 'kd-pod-card',
templateUrl: './pod-card.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class PodCardComponent {
@Input() pod: Pod;
@Output() selected = new EventEmitter<Pod>();
}
服务与状态管理
采用RxJS进行状态管理和异步操作:
@Injectable({ providedIn: 'root' })
export class PodService {
private podsSubject = new BehaviorSubject<Pod[]>([]);
pods$ = this.podsSubject.asObservable();
constructor(private http: HttpClient) {}
list(): Observable<Pod[]> {
return this.http.get<Pod[]>('/api/v1/pods').pipe(
tap(pods => this.podsSubject.next(pods)),
catchError(error => {
console.error('Failed to load pods', error);
return throwError(() => error);
})
);
}
}
代码质量工具链
静态代码分析
项目配置了完整的代码质量工具链:
| 工具 | 用途 | 配置文件 |
|---|---|---|
| golangci-lint | Go代码静态分析 | .golangci.yml |
| ESLint | TypeScript代码检查 | .eslintrc.js |
| Stylelint | CSS/SCSS样式检查 | .stylelintrc |
| Prettier | 代码格式化 | .prettierrc |
测试策略
采用分层测试策略确保代码质量:
pie title 测试类型分布
"单元测试" : 60
"集成测试" : 25
"端到端测试" : 15
单元测试示例:
func TestPodGetter_Get(t *testing.T) {
// 创建mock客户端
mockClient := &mockKubernetesInterface{}
getter := &podGetter{client: mockClient}
// 设置期望行为
mockClient.On("CoreV1").Return(&mockCoreV1Interface{})
// 执行测试
pod, err := getter.Get(context.Background(), "default", "test-pod")
// 验证结果
assert.NoError(t, err)
assert.Equal(t, "test-pod", pod.Name)
}
// Angular组件测试
describe('PodListComponent', () => {
let component: PodListComponent;
let fixture: ComponentFixture<PodListComponent>;
let podService: jasmine.SpyObj<PodService>;
beforeEach(async () => {
podService = jasmine.createSpyObj('PodService', ['list']);
await TestBed.configureTestingModule({
declarations: [PodListComponent],
providers: [{ provide: PodService, useValue: podService }]
}).compileComponents();
fixture = TestBed.createComponent(PodListComponent);
component = fixture.componentInstance;
});
it('应该加载pod列表', () => {
const mockPods = [{ name: 'pod-1' }, { name: 'pod-2' }];
podService.list.and.returnValue(of(mockPods));
fixture.detectChanges();
expect(component.pods).toEqual(mockPods);
expect(component.isLoading).toBeFalse();
});
});
提交前检查与自动化
项目配置了Git钩子和CI/CD流水线确保代码质量:
# GitHub Actions配置示例
name: Code Quality
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Go
uses: actions/setup-go@v4
- name: Run golangci-lint
run: make lint-go
- name: Run ESLint
run: make lint-ts
- name: Run tests
run: make test
最佳实践总结
通过分析Kubernetes Dashboard的代码规范,我们可以总结出以下最佳实践:
- 模块化设计:清晰的模块边界和职责分离
- 统一的错误处理:标准化的错误响应格式
- 接口驱动开发:基于接口的组件设计和测试
- 响应式编程:RxJS在前端的广泛应用
- 自动化质量保障:完整的工具链和CI/CD集成
- 类型安全:充分利用TypeScript和Go的强类型特性
这些实践确保了项目的可维护性、可测试性和可扩展性,为大型企业级应用开发提供了优秀的参考范例。
贡献流程:从PR提交到版本发布全流程
Kubernetes Dashboard作为Kubernetes生态系统的核心可视化工具,拥有严谨而高效的贡献流程。本文将详细介绍从PR提交到最终版本发布的全过程,帮助贡献者更好地理解和参与项目开发。
PR提交前的准备工作
在提交PR之前,需要完成以下准备工作:
- 签署CLA协议:所有贡献者必须签署Kubernetes Contributor License Agreement (CLA)
- 环境配置:确保开发环境符合项目要求
- 代码规范:遵循项目的编码标准和约定
# 检查开发环境配置
make check-environment
# 运行代码质量检查
make lint
# 执行单元测试
make test
PR创建与提交流程
1. Issue创建与讨论
首先在GitHub仓库创建Issue,详细描述问题或功能需求,与维护团队讨论实现方案。
2. 代码实现与本地测试
基于讨论结果进行代码实现,并在本地完成全面测试:
# 启动开发环境
make serve
# 运行端到端测试
make e2e-test
# 构建生产版本验证
make run
3. PR提交规范
提交PR时需要遵循以下规范:
- 标题格式:
[模块名] 简要描述修改内容 - 描述详细:包含问题描述、解决方案、测试结果
- 关联Issue:使用
Fixes #123格式关联相关Issue
代码审查流程
PR提交后进入严格的代码审查流程:
flowchart TD
A[PR提交] --> B{自动化检查}
B --> C[代码质量检查]
B --> D[单元测试]
B --> E[集成测试]
C --> F{所有检查通过?}
D --> F
E --> F
F -->|是| G[人工代码审查]
F -->|否| H[返回修改]
G --> I{审查通过?}
I -->|是| J[合并到主分支]
I -->|否| H
审查标准
- 代码质量:符合Go和Angular的编码规范
- 测试覆盖:新增代码必须有相应的测试用例
- 文档更新:相关文档需要同步更新
- 向后兼容:确保修改不会破坏现有功能
自动化检查体系
项目拥有完善的自动化检查体系:
| 检查类型 | 工具 | 执行命令 | 检查内容 |
|---|---|---|---|
| 代码质量 | golangci-lint | make lint-go |
Go代码规范检查 |
| 前端代码 | eslint/stylelint | make lint-web |
JavaScript/TypeScript规范 |
| 单元测试 | go test/jest | make test |
功能正确性验证 |
| 集成测试 | cypress | make e2e-test |
端到端功能验证 |
| 构建验证 | docker build | make image |
生产构建验证 |
版本发布流程
当PR合并后,项目进入版本发布阶段:
1. 模块版本发布
每个独立模块都有自己的版本号,遵循semver规范:
sequenceDiagram
participant M as 模块维护者
participant C as CI/CD系统
participant R as 发布流水线
M->>C: 触发模块构建
C->>R: 执行自动化测试
R->>C: 测试结果反馈
C->>M: 构建成功通知
M->>C: 创建Git标签
C->>R: 发布到容器仓库
2. Helm Chart发布
模块发布完成后,更新Helm Chart依赖并发布新版本:
# values.yaml 版本更新示例
api:
image:
repository: kubernetes-dashboard/api
tag: v2.7.0
auth:
image:
repository: kubernetes-dashboard/auth
tag: v2.5.0
web:
image:
repository: kubernetes-dashboard/web
tag: v2.9.0
3. 发布验证
发布前需要进行全面的验证测试:
# 使用新版本Chart进行部署验证
make helm
# 验证生产环境功能
make production-test
# 性能基准测试
make benchmark
质量保证措施
为确保发布质量,项目采用多重质量保证措施:
- 代码审查:至少需要2名维护者批准
- 自动化测试:完整的测试覆盖率要求
- 手动验证:关键功能需要手动验证
- 性能测试:确保新版本性能达标
- 安全扫描:定期进行安全漏洞扫描
持续集成与部署
项目采用先进的CI/CD流水线:
flowchart LR
A[代码提交] --> B[自动化测试]
B --> C[构建镜像]
C --> D[安全扫描]
D --> E[部署到测试环境]
E --> F[验收测试]
F --> G[生产发布]
G --> H[监控验证]
整个贡献流程体现了Kubernetes社区对代码质量和项目稳定性的高度重视。通过严格的审查流程和完善的自动化体系,确保每个贡献都能为项目带来真正的价值,同时维护项目的高标准和可靠性。
Kubernetes Dashboard作为Kubernetes生态系统的核心可视化组件,拥有严谨的开发规范和高效的贡献流程。本文系统性地介绍了开发环境要求、本地集群搭建、代码规范标准以及完整的PR提交到版本发布流程。通过遵循这些规范和流程,开发者可以有效地参与项目贡献,确保代码质量和项目稳定性。项目采用的容器化开发环境、模块化架构设计、自动化测试体系以及严格的代码审查机制,为大型开源项目的开发维护提供了优秀实践范例。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00