// ReSharper disable InconsistentNaming
namespace Dpz.Core.Service.Network.Models;

/// <summary>
/// AI模型枚举,支持多个AI提供商的模型
/// </summary>
[Obsolete("use IOpenAiService")]
public enum AiModel
{
    #region ChatGPT Models
    /// <summary>GPT-5</summary>
    Gpt5,

    /// <summary>GPT-5-Mini</summary>
    Gpt5Mini,

    /// <summary>GPT-5-Nano</summary>
    Gpt5Nano,

    /// <summary>O1-Mini</summary>
    O1Mini,

    /// <summary>GPT-4.1</summary>
    Gpt41,

    /// <summary>GPT-4.1-Mini</summary>
    Gpt41Mini,

    /// <summary>GPT-4o-Mini (Default)</summary>
    Gpt4oMini,
    #endregion

    #region Claude Models
    /// <summary>claude-sonnet-4-5</summary>
    ClaudeSonnet4_5,

    /// <summary>Claude-Sonnet-4-20250514</summary>
    ClaudeSonnet420250514,

    /// <summary>Claude-3-7-Sonnet-Latest</summary>
    Claude37SonnetLatest,

    /// <summary>Claude-3-5-Sonnet-Latest</summary>
    Claude35SonnetLatest,
    #endregion

    #region Gemini Models
    /// <summary>Gemini-2.5-Pro</summary>
    Gemini25Pro,

    /// <summary>Gemini-2.5-Flash</summary>
    Gemini25Flash,
    #endregion

    #region DeepSeek Models
    /// <summary>DeepSeek-V3</summary>
    DeepSeekV3,

    /// <summary>DeepSeek-R1</summary>
    DeepSeekR1,

    /// <summary>DeepSeek-R1-Distill-Qwen-7B</summary>
    DeepSeekR1DistillQwen7B,

    /// <summary>DeepSeek-R1-Distill-Qwen-32B</summary>
    DeepSeekR1DistillQwen32B,
    #endregion

    #region 文心一言 Models
    /// <summary>ERNIE-3.5-8K</summary>
    Ernie35_8K,
    #endregion

    #region 通义千问 Models
    /// <summary>Qwen-Turbo</summary>
    QwenTurbo,

    /// <summary>Qwen-Plus</summary>
    QwenPlus,

    /// <summary>Qwen-Max</summary>
    QwenMax,
    #endregion

    #region 智谱AI Models
    /// <summary>GLM-3-Turbo</summary>
    Glm3Turbo,

    /// <summary>GLM-4</summary>
    Glm4,

    /// <summary>GLM-4V</summary>
    Glm4V,
    #endregion

    #region 豆包 Models
    /// <summary>Doubao-Pro-32K</summary>
    DoubaoP32K,

    /// <summary>Doubao-Lite-32K</summary>
    DoubaoLite32K,
    #endregion
}

/// <summary>
/// AI模型映射工具类,用于将枚举转换为API调用所需的字符串
/// </summary>
[Obsolete("use IOpenAiService")]
public static class AiModelMapper
{
    private static readonly Dictionary<AiModel, string> ModelMapping = new()
    {
        // ChatGPT Models
        { AiModel.Gpt5, "gpt-5" },
        { AiModel.Gpt5Mini, "gpt-5-mini" },
        { AiModel.Gpt5Nano, "gpt-5-nano" },
        { AiModel.O1Mini, "o1-mini" },
        { AiModel.Gpt41, "gpt-4.1" },
        { AiModel.Gpt41Mini, "gpt-4.1-mini" },
        { AiModel.Gpt4oMini, "gpt-4o-mini" },
        // Claude Models
        { AiModel.ClaudeSonnet4_5, "claude-sonnet-4-5" },
        { AiModel.ClaudeSonnet420250514, "claude-sonnet-4-20250514" },
        { AiModel.Claude37SonnetLatest, "claude-3-7-sonnet-latest" },
        { AiModel.Claude35SonnetLatest, "claude-3-5-sonnet-latest" },
        // Gemini Models
        { AiModel.Gemini25Pro, "gemini-2.5-pro" },
        { AiModel.Gemini25Flash, "gemini-2.5-flash" },
        // DeepSeek Models
        { AiModel.DeepSeekV3, "DeepSeek-V3" },
        { AiModel.DeepSeekR1, "DeepSeek-R1" },
        { AiModel.DeepSeekR1DistillQwen7B, "DeepSeek-R1-Distill-Qwen-7B" },
        { AiModel.DeepSeekR1DistillQwen32B, "DeepSeek-R1-Distill-Qwen-32B" },
        // 文心一言
        { AiModel.Ernie35_8K, "ERNIE-3.5-8K" },
        // 通义千问
        { AiModel.QwenTurbo, "qwen-turbo" },
        { AiModel.QwenPlus, "qwen-plus" },
        { AiModel.QwenMax, "qwen-max" },
        // 智谱AI
        { AiModel.Glm3Turbo, "glm-3-turbo" },
        { AiModel.Glm4, "glm-4" },
        { AiModel.Glm4V, "glm-4v" },
        // 豆包
        { AiModel.DoubaoP32K, "Doubao-pro-32k" },
        { AiModel.DoubaoLite32K, "Doubao-lite-32k" },
    };

    /// <summary>
    /// 将AiModel枚举转换为API调用所需的字符串
    /// </summary>
    /// <param name="model">AI模型枚举</param>
    /// <returns>模型字符串</returns>
    /// <exception cref="ArgumentException">不支持的模型类型</exception>
    public static string GetModelString(AiModel model)
    {
        if (ModelMapping.TryGetValue(model, out var modelString))
        {
            return modelString;
        }

        throw new ArgumentException($"不支持的模型类型: {model}", nameof(model));
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码解释

这是一个 C# 代码文件,定义了 AI 模型的枚举类型和映射工具类。以下是详细说明:

主要组成部分

1. AiModel 枚举

这是一个已废弃([Obsolete])的枚举类型,用于表示多个 AI 提供商的模型。

包含的 AI 提供商和模型:

  • ChatGPT 系列:GPT-5、GPT-5-Mini、GPT-5-Nano、O1-Mini、GPT-4.1、GPT-4.1-Mini、GPT-4o-Mini(默认)
  • Claude 系列:多个 Claude Sonnet 版本(4.5、4-20250514、3.7、3.5)
  • Gemini 系列:Gemini-2.5-Pro、Gemini-2.5-Flash
  • DeepSeek 系列:DeepSeek-V3、DeepSeek-R1 及其 Distill 版本
  • 文心一言:ERNIE-3.5-8K
  • 通义千问:Qwen-Turbo、Qwen-Plus、Qwen-Max
  • 智谱AI:GLM-3-Turbo、GLM-4、GLM-4V
  • 豆包:Doubao-Pro-32K、Doubao-Lite-32K

2. AiModelMapper 静态工具类

同样标记为已废弃,用于将枚举值映射到 API 调用所需的字符串。

核心功能:

  • ModelMapping 字典:存储枚举值到字符串的映射关系

    • 例如:AiModel.Gpt5"gpt-5"
    • 涵盖所有枚举定义的模型
  • GetModelString() 方法

    • 输入:AiModel 枚举值
    • 输出:对应的 API 模型字符串
    • 异常处理:如果传入不支持的模型,抛出 ArgumentException

设计特点

  1. Region 组织:使用 #region 将不同提供商的模型分组,提高可读性
  2. 废弃标记[Obsolete("use IOpenAiService")] 表示应使用 IOpenAiService 替代
  3. 禁用警告// ReSharper disable InconsistentNaming 允许不一致的命名风格(如枚举成员)
  4. 类型安全:使用枚举而非字符串,提供编译时类型检查

使用示例

// 获取模型字符串
string modelName = AiModelMapper.GetModelString(AiModel.Gpt4oMini);
// 返回: "gpt-4o-mini"

注意事项

  • 此代码已标记为废弃,建议迁移到 IOpenAiService 接口
  • 适用于需要统一管理多个 AI 提供商模型的场景
评论加载中...