这是一个基于 WPF 和 Prism 框架的完整代码示例。

这个示例包含了 Model(模型)ViewModel(视图模型)View(视图/XAML) 三部分。为了保持代码结构清晰,我使用了 CommunityToolkit.Mvvm(即 Microsoft.Toolkit.Mvvm)作为 Prism 推荐的轻量级 MVVM 辅助库,当然你也可以使用 Prism 自带的 BindableBase

1. 数据模型

首先,我们需要定义数据模型来承载界面上的参数。

// Models/TestParameters.cs
using CommunityToolkit.Mvvm.ComponentModel;

namespace MaxWell.Models
{
    // 模温机参数
    public class TempControlParams : ObservableObject
    {
        private double _temp = 65.0;
        private double _flowRate = 8.0;
        private int _drainTime = 10;

        public double Temp { get => _temp; set => SetProperty(ref _temp, value); }
        public double FlowRate { get => _flowRate; set => SetProperty(ref _flowRate, value); }
        public int DrainTime { get => _drainTime; set => SetProperty(ref _drainTime, value); }
    }

    // 流程测试参数
    public class ProcessTestParams : ObservableObject
    {
        public double PeakCurrentLimit { get; set; } = 750;
        public double UnbalanceLimit { get; set; } = 10;
        public double ModuleTempUpper { get; set; } = 100;
        public double CopperBarTempLimit { get; set; } = 100;
        public double Busbar1Current { get; set; } = 100;
        public double OutputJudge { get; set; } = 10;
        
        // 死区时间
        public double DeadTime { get; set; } = 4.0;
        public double UnbalanceCurrent { get; set; } = 20;
        public double ModuleTempLower { get; set; } = 0;
        public double OutputCurrentUpper { get; set; } = 500;
        public double Busbar2Current { get; set; } = 500;
        public double OutputJudgeCurrent { get; set; } = 20;
    }

    // 辅助参数
    public class AuxiliaryParams : ObservableObject
    {
        public double SampleInterval { get; set; } = 0.1;
        public string PackageType { get; set; } = "HybirdPACKDrive-003";
        public bool ScanOnLoad { get; set; } = true;
        public int工位Count { get; set; } = 2; // 工位载盘数
        public int SweepTime { get; set; } = 60;
        public bool ScanOnUnload { get; set; } = false;
    }

    // 栅极参数 (Gate Params)
    public class GateParams : ObservableObject
    {
        public double VgeOnH { get; set; } = 16;
        public double VgeOnL { get; set; } = 16;
        public double RgonH { get; set; } = 8.20;
        public double RgonL { get; set; } = 8.20;
        public double CgeH { get; set; } = 0.000;

        public double VgeOffH { get; set; } = -8;
        public double VgeOffL { get; set; } = -8;
        public double RgoffH { get; set; } = 6.80;
        public double RgoffL { get; set; } = 6.80;
        public double CgeL { get; set; } = 0.000;
    }

    // 测试流程步骤
    public class ProcessStep : ObservableObject
    {
        public string Name { get; set; } // 如:基波频率切换点
        public double Target { get; set; }
        public double AccDecTime { get; set; }
        public double HoldTime { get; set; }
        public int Loops { get; set; }
    }
}

2. ViewModel

这是核心逻辑部分,处理命令和属性绑定。

// ViewModels/BatchStartViewModel.cs
using MaxWell.Models;
using Prism.Commands;
using Prism.Mvvm;
using System.Collections.ObjectModel;
using System.Windows;

namespace MaxWell.ViewModels
{
    public class BatchStartViewModel : BindableBase
    {
        // 基础信息
        public string TesterId { get; set; } = "administrator";
        public string SavePath { get; set; } = @"D:\RecordData";
        public string LotId { get; set; }
        
        // 下拉框选项模拟
        public ObservableCollection<string> ConfigOptions { get; set; }
        private string _selectedConfig;
        public string SelectedConfig 
        { 
            get => _selectedConfig; 
            set => SetProperty(ref _selectedConfig, value); 
        }

        // 分组参数对象
        public TempControlParams TempParams { get; set; }
        public ProcessTestParams ProcessParams { get; set; }
        public AuxiliaryParams AuxParams { get; set; }
        public GateParams GateParams { get; set; }

        // 流程列表
        public ObservableCollection<ProcessStep> ProcessSteps { get; set; }

        // 命令
        public DelegateCommand<string> SyncCommand { get; private set; }
        public DelegateCommand ExitCommand { get; private set; }
        public DelegateCommand ConfirmCommand { get; private set; }
        public DelegateCommand BrowsePathCommand { get; private set; }

        public BatchStartViewModel()
        {
            // 初始化数据
            TempParams = new TempControlParams();
            ProcessParams = new ProcessTestParams();
            AuxParams = new AuxiliaryParams();
            GateParams = new GateParams();

            // 初始化配置选项
            ConfigOptions = new ObservableCollection<string> { "MP_HD1 - 调试", "MP_HD2 - 量产", "MP_HD3 - 老化" };
            SelectedConfig = ConfigOptions[0];

            // 初始化流程步骤数据 (模拟截图中的数据)
            ProcessSteps = new ObservableCollection<ProcessStep>
            {
                new ProcessStep { Name = "基波频率切换点", Target = 250, AccDecTime = 1, HoldTime = 0, Loops = 1 },
                new ProcessStep { Name = "载波频率切换点", Target = 7000, AccDecTime = 1, HoldTime = 0, Loops = 0 },
                new ProcessStep { Name = "母线电压切换点", Target = 480, AccDecTime = 500, HoldTime = 50, Loops = 0 },
                new ProcessStep { Name = "AC测试切换点", Target = 0, AccDecTime = 1, HoldTime = 0, Loops = 1 },
                new ProcessStep { Name = "电流工况", Target = 0, AccDecTime = 1, HoldTime = 1, Loops = 1 },
                new ProcessStep { Name = "电流工况", Target = 10, AccDecTime = 0.1, HoldTime = 0.5, Loops = 1 },
                new ProcessStep { Name = "电流工况", Target = 0, AccDecTime = 0.1, HoldTime = 1, Loops = 0 },
                new ProcessStep { Name = "电流工况", Target = 450, AccDecTime = 0.1, HoldTime = 3, Loops = 0 },
                new ProcessStep { Name = "电流工况", Target = 0, AccDecTime = 0.1, HoldTime = 2, Loops = 0 },
                new ProcessStep { Name = "NC", Target = 0, AccDecTime = 0, HoldTime = 0, Loops = 1 },
            };

            // 初始化命令
            SyncCommand = new DelegateCommand<string>(OnSync);
            ExitCommand = new DelegateCommand(OnExit);
            ConfirmCommand = new DelegateCommand(OnConfirm);
            BrowsePathCommand = new DelegateCommand(() => {
                MessageBox.Show("这里调用FolderBrowserDialog选择路径");
            });
        }

        private void OnSync(string param)
        {
            // param 将传入 "A", "B", "C" 等
            MessageBox.Show($"正在同步通道: {param}");
            // TODO: 实际同步逻辑
        }

        private void OnExit()
        {
            // Prism 中通常通过 EventAggregator 或者 IRegionManager 关闭窗口
            // 这里简单模拟
            if (MessageBox.Show("确定退出吗?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                // Application.Current.Shutdown();
            }
        }

        private void OnConfirm()
        {
            MessageBox.Show("参数已确认保存!");
            // TODO: 保存逻辑
        }
    }
}

3. View (XAML)

这是 UI 界面代码。为了还原截图的样式,使用了 Grid 布局,GroupBox 进行分组,以及 DataGrid 显示流程列表。

<!-- Views/BatchStartView.xaml -->
<Window x:Class="MaxWell.Views.BatchStartView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://prismlibrary.com/"
        mc:Ignorable="d"
        Title="批次参数加载" Height="900" Width="1200"
        Background="#F0F0F0" 
        FontFamily="Microsoft YaHei">
    
    <Grid Margin="10">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/> <!-- 左侧主要参数 -->
            <ColumnDefinition Width="1*"/> <!-- 右侧按钮和流程 -->
        </Grid.ColumnDefinitions>

        <!-- 左侧主区域 -->
        <ScrollViewer Grid.Column="0" Margin="0,0,10,0" VerticalScrollBarVisibility="Auto">
            <StackPanel>
                <!-- 顶部基本信息 -->
                <Grid Margin="0,0,0,15">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="测试人员编号" VerticalAlignment="Center" FontWeight="Bold"/>
                    <TextBox Grid.Column="1" Text="{Binding TesterId}" Margin="5,0" IsEnabled="False" Background="#E0E0E0"/>

                    <TextBlock Grid.Row="1" Text="数据保存路径" VerticalAlignment="Center" FontWeight="Bold" Margin="0,10,0,0"/>
                    <Grid Grid.Row="1" Grid.Column="1" Margin="5,10,0,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBox Text="{Binding SavePath}" Margin="0,0,5,0"/>
                        <Button Grid.Column="1" Content="..." Width="30" Command="{Binding BrowsePathCommand}"/>
                    </Grid>

                    <TextBlock Grid.Row="2" Text="LOT ID" VerticalAlignment="Center" FontWeight="Bold" Margin="0,10,0,0"/>
                    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding LotId}" Margin="5,10,0,0"/>

                    <TextBlock Grid.Row="3" Text="配置选择" VerticalAlignment="Center" FontWeight="Bold" Margin="0,10,0,0"/>
                    <ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding ConfigOptions}" 
                              SelectedItem="{Binding SelectedConfig}" Margin="5,10,0,0" Height="25"/>
                </Grid>

                <!-- 1. 模温机参数 -->
                <GroupBox Header="模温机参数" FontWeight="Bold" Padding="10" Margin="0,0,0,10">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                            <TextBlock Text="模温机温度" Width="80"/>
                            <TextBox Text="{Binding TempParams.Temp}" Width="60"/>
                            <TextBlock Text="°C" VerticalAlignment="Center" Margin="5,0,0,0"/>
                        </StackPanel>
                        <StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
                            <TextBlock Text="模温机流速" Width="80"/>
                            <TextBox Text="{Binding TempParams.FlowRate}" Width="60"/>
                            <TextBlock Text="L/min" VerticalAlignment="Center" Margin="5,0,0,0"/>
                        </StackPanel>
                        <StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
                            <TextBlock Text="水冷板排水时间" Width="100"/>
                            <TextBox Text="{Binding TempParams.DrainTime}" Width="60"/>
                            <TextBlock Text="s" VerticalAlignment="Center" Margin="5,0,0,0"/>
                        </StackPanel>
                    </Grid>
                </GroupBox>

                <!-- 2. 流程测试参数 -->
                <GroupBox Header="流程测试参数" FontWeight="Bold" Padding="10" Margin="0,0,0,10">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>

                        <!-- 第一行 -->
                        <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0,5">
                            <TextBlock Text="相峰值过流点" Width="90"/>
                            <TextBox Text="{Binding ProcessParams.PeakCurrentLimit}" Width="60"/>
                            <TextBlock Text="A" VerticalAlignment="Center"/>
                        </StackPanel>
                        <StackPanel Grid.Column="1" Orientation="Horizontal" Margin="0,5">
                            <TextBlock Text="三相不平衡度" Width="90"/>
                            <TextBox Text="{Binding ProcessParams.UnbalanceLimit}" Width="60"/>
                            <TextBlock Text="%" VerticalAlignment="Center"/>
                        </StackPanel>
                        <StackPanel Grid.Column="2" Orientation="Horizontal" Margin="0,5">
                            <TextBlock Text="模块温度上限" Width="90"/>
                            <TextBox Text="{Binding ProcessParams.ModuleTempUpper}" Width="60"/>
                            <TextBlock Text="°C" VerticalAlignment="Center"/>
                        </StackPanel>

                        <!-- 第二行 -->
                        <StackPanel Grid.Column="0" Grid.Row="1" Orientation="Horizontal" Margin="0,5">
                            <TextBlock Text="死区时间" Width="90"/>
                            <TextBox Text="{Binding ProcessParams.DeadTime}" Width="60"/>
                            <TextBlock Text="μs" VerticalAlignment="Center"/>
                        </StackPanel>
                        <StackPanel Grid.Column="1" Grid.Row="1" Orientation="Horizontal" Margin="0,5">
                            <TextBlock Text="三相不平衡度" Width="90"/>
                            <TextBox Text="{Binding ProcessParams.UnbalanceCurrent}" Width="60"/>
                            <TextBlock Text="A" VerticalAlignment="Center"/>
                        </StackPanel>
                         <StackPanel Grid.Column="2" Grid.Row="1" Orientation="Horizontal" Margin="0,5">
                            <TextBlock Text="模块温度下限" Width="90"/>
                            <TextBox Text="{Binding ProcessParams.ModuleTempLower}" Width="60"/>
                            <TextBlock Text="°C" VerticalAlignment="Center"/>
                        </StackPanel>
                    </Grid>
                </GroupBox>

                <!-- 3. 辅助参数 -->
                <GroupBox Header="辅助参数" FontWeight="Bold" Padding="10" Margin="0,0,0,10">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>

                        <TextBlock Text="数据采集间隔" VerticalAlignment="Center"/>
                        <StackPanel Grid.Column="1" Orientation="Horizontal" Margin="5,0">
                            <TextBox Text="{Binding AuxParams.SampleInterval}" Width="60"/>
                            <TextBlock Text="s" VerticalAlignment="Center" Margin="5,0"/>
                        </StackPanel>

                        <TextBlock Grid.Row="1" Text="封装类型" VerticalAlignment="Center" Margin="0,5"/>
                        <ComboBox Grid.Row="1" Grid.Column="1" Text="{Binding AuxParams.PackageType}" Margin="5,5" IsEditable="True"/>

                        <TextBlock Grid.Column="2" Text="上料自动扫码" VerticalAlignment="Center"/>
                        <StackPanel Grid.Column="3" Orientation="Horizontal" Margin="5,0">
                            <TextBlock Text="ON" Foreground="Green" FontWeight="Bold" Margin="0,0,5,0"/>
                            <ToggleButton IsChecked="{Binding AuxParams.ScanOnLoad}" Width="50" Height="20"/>
                        </StackPanel>

                        <TextBlock Grid.Row="1" Grid.Column="2" Text="下料自动扫码" VerticalAlignment="Center" Margin="0,5"/>
                        <StackPanel Grid.Row="1" Grid.Column="3" Orientation="Horizontal" Margin="5,5">
                            <TextBlock Text="OFF" Foreground="Gray" FontWeight="Bold" Margin="0,0,5,0"/>
                            <ToggleButton IsChecked="{Binding AuxParams.ScanOnUnload}" Width="50" Height="20"/>
                        </StackPanel>
                    </Grid>
                </GroupBox>

                <!-- 4. 栅极参数 -->
                <GroupBox Header="栅极参数" FontWeight="Bold" Padding="10" Margin="0,0,0,10">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        
                        <!-- 这里只展示了部分,实际可复制更多 -->
                        <StackPanel Grid.Column="0" Margin="0,2">
                            <TextBlock Text="V_Geon_H" FontWeight="Bold"/>
                            <TextBox Text="{Binding GateParams.VgeOnH}"/>
                        </StackPanel>
                        <StackPanel Grid.Column="1" Margin="0,2">
                            <TextBlock Text="V_Geon_L" FontWeight="Bold"/>
                            <TextBox Text="{Binding GateParams.VgeOnL}"/>
                        </StackPanel>
                        <StackPanel Grid.Column="2" Margin="0,2">
                            <TextBlock Text="R_gon_H" FontWeight="Bold"/>
                            <TextBox Text="{Binding GateParams.RgonH}"/>
                        </StackPanel>
                         <StackPanel Grid.Column="0" Grid.Row="1" Margin="0,2">
                            <TextBlock Text="V_Geoff_H" FontWeight="Bold"/>
                            <TextBox Text="{Binding GateParams.VgeOffH}"/>
                        </StackPanel>
                         <StackPanel Grid.Column="1" Grid.Row="1" Margin="0,2">
                            <TextBlock Text="V_Geoff_L" FontWeight="Bold"/>
                            <TextBox Text="{Binding GateParams.VgeOffL}"/>
                        </StackPanel>
                         <StackPanel Grid.Column="2" Grid.Row="1" Margin="0,2">
                            <TextBlock Text="R_goff_H" FontWeight="Bold"/>
                            <TextBox Text="{Binding GateParams.RgoffH}"/>
                        </StackPanel>
                    </Grid>
                </GroupBox>
            </StackPanel>
        </ScrollViewer>

        <!-- 右侧区域 -->
        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/> <!-- 按钮区 -->
                <RowDefinition Height="*"/>    <!-- 流程设置 -->
                <RowDefinition Height="2*"/>   <!-- 图表预览 -->
            </Grid.RowDefinitions>

            <!-- 顶部按钮 -->
            <StackPanel Grid.Row="0" Orientation="Vertical" Spacing="5">
                <UniformGrid Columns="1">
                    <Button Content="A 同步" Background="#4A6FA5" Foreground="White" FontWeight="Bold" Height="40" 
                            Command="{Binding SyncCommand}" CommandParameter="A"/>
                    <Button Content="B 同步" Background="#4A6FA5" Foreground="White" FontWeight="Bold" Height="40" 
                            Command="{Binding SyncCommand}" CommandParameter="B"/>
                    <Button Content="C 同步" Background="#4A6FA5" Foreground="White" FontWeight="Bold" Height="40"
                            Command="{Binding SyncCommand}" CommandParameter="C"/>
                    <Button Content="退出" Background="#888" Foreground="White" FontWeight="Bold" Height="40" 
                            Command="{Binding ExitCommand}"/>
                </UniformGrid>
                
                <UniformGrid Columns="1" Margin="0,10,0,0">
                     <Button Content="D 同步" Background="#4A6FA5" Foreground="White" FontWeight="Bold" Height="40"/>
                     <Button Content="E 同步" Background="#5C9EFF" Foreground="White" FontWeight="Bold" Height="40"/>
                     <Button Content="F 同步" Background="#4A6FA5" Foreground="White" FontWeight="Bold" Height="40"/>
                     <Button Content="确定" Background="#5C9EFF" Foreground="White" FontWeight="Bold" Height="40" 
                             Command="{Binding ConfirmCommand}"/>
                </UniformGrid>
            </StackPanel>

            <!-- 测试流程设置 (DataGrid) -->
            <GroupBox Grid.Row="1" Header="测试流程设置" FontWeight="Bold" Margin="0,10,0,10" Padding="5">
                <DataGrid ItemsSource="{Binding ProcessSteps}" AutoGenerateColumns="False" 
                          CanUserAddRows="False" HeadersVisibility="Column" GridLinesVisibility="Horizontal">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="工步设置" Binding="{Binding Name}" Width="*"/>
                        <DataGridTextColumn Header="目标参数" Binding="{Binding Target}" Width="*"/>
                        <DataGridTextColumn Header="加减速时间(s)" Binding="{Binding AccDecTime}" Width="*"/>
                        <DataGridTextColumn Header="保持时间(s)" Binding="{Binding HoldTime}" Width="*"/>
                        <DataGridTextColumn Header="循环次数" Binding="{Binding Loops}" Width="*"/>
                    </DataGrid.Columns>
                </DataGrid>
            </GroupBox>

            <!-- 图表预览 (模拟) -->
            <GroupBox Grid.Row="2" Header="测试电流预览" FontWeight="Bold" Padding="5">
                <!-- 这里通常放置图表控件,如 LiveCharts 或 OxyPlot -->
                <!-- 这里用一个 Border 模拟图表外观 -->
                <Border Background="#333" CornerRadius="5">
                    <Grid>
                        <TextBlock Text="电流(A)" Foreground="White" VerticalAlignment="Top" Margin="10"/>
                        <TextBlock Text="时间(s)" Foreground="White" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="10"/>
                        
                        <!-- 简单的线条模拟波形 -->
                        <Path Data="M0,100 L100,100 L100,20 L200,20 L200,100 L300,100" 
                              Stroke="LightBlue" StrokeThickness="2" Stretch="Fill" Margin="20"/>
                    </Grid>
                </Border>
            </GroupBox>
        </Grid>
    </Grid>
</Window>

代码说明

  1. 布局结构 (Grid)

    • 主窗口分为左右两列。左侧占据大部分宽度,用于显示密集的参数输入框;右侧用于操作按钮和流程监控。
    • 左侧使用了 ScrollViewer 包裹 StackPanel,确保当屏幕较小时,用户可以滚动查看所有参数。
    • 右侧使用了 UniformGrid 来整齐排列“同步”按钮,使其宽度一致。
  2. 数据绑定 (Binding)

    • 所有的 TextBox.Text 都绑定了 ViewModel 中的属性(例如 {Binding TempParams.Temp})。
    • 按钮的点击事件通过 ICommand 绑定(例如 Command="{Binding SyncCommand}"),符合 MVVM 模式,避免了在代码后置文件(.xaml.cs)中写逻辑。
  3. 样式 (Style)

    • 为了接近截图的工业风格,按钮使用了深蓝灰色背景 (#4A6FA5) 和白色文字。
    • GroupBox 用于对参数进行逻辑分组(如“模温机参数”、“辅助参数”)。
  4. 依赖注入

    • 在实际的 Prism 应用程序中,你需要确保在 App.xaml.cs 或模块初始化中注册了 BatchStartViewBatchStartViewModel 的映射关系。

这段代码提供了一个完整的框架,你可以直接将其复制到你的 Prism 项目中,并根据实际需求调整具体的业务逻辑(如保存文件、硬件通信等)。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐