ChatGPT-Next-Web自定义模型配置:灵活控制AI模型列表

在使用ChatGPT-Next-Web构建智能对话系统时,用户常常需要根据实际需求管理可用的AI模型列表。本文将详细介绍如何通过配置文件和代码设置来自定义模型列表,包括启用/禁用模型、添加自定义模型以及设置默认模型等功能。

模型配置基础

ChatGPT-Next-Web的模型配置系统主要通过app/config/client.ts文件实现客户端配置管理。该文件提供了getClientConfig()函数,用于获取构建和运行时配置,为模型管理提供基础环境。

export function getClientConfig() {
  if (typeof document !== "undefined") {
    // 客户端环境下从meta标签获取配置
    return JSON.parse(queryMeta("config") || "{}") as BuildConfig;
  }

  if (typeof process !== "undefined") {
    // 服务端环境下获取构建配置
    return getBuildConfig();
  }
}

模型列表的核心处理逻辑位于app/utils/model.ts文件中,该文件提供了一系列函数用于收集、排序和筛选模型。其中collectModels()函数负责整合默认模型和自定义模型配置,生成最终可用的模型列表。

默认模型与自定义模型

默认模型定义

系统默认模型定义在app/constant.ts文件的DEFAULT_MODELS常量中,包含了主流AI模型的基本信息。以下是OpenAI模型的客户端实现示例(app/client/platforms/openai.ts):

export class ChatGPTApi implements LLMApi {
  async models(): Promise<LLMModel[]> {
    if (this.disableListModels) {
      return DEFAULT_MODELS.slice();
    }
    // 从API获取模型列表的逻辑
    // ...
  }
}

自定义模型配置

通过修改customModels参数可以灵活控制模型的可用性。app/utils/model.ts中的collectModelTable()函数处理自定义模型配置字符串,支持以下操作:

  • 启用模型:+modelName@provider
  • 禁用模型:-modelName@provider
  • 添加自定义模型:modelName@provider=displayName
// 示例:启用gpt-4,禁用gpt-3.5-turbo,添加自定义模型
const customModels = "+gpt-4@openai,-gpt-3.5-turbo@openai,my-model@custom=My Custom Model";
const models = collectModels(DEFAULT_MODELS, customModels);

模型管理核心功能

模型收集与排序

collectModels()函数是模型管理的核心,它将默认模型与自定义配置合并,并进行排序:

export function collectModels(
  models: readonly LLMModel[],
  customModels: string,
) {
  const modelTable = collectModelTable(models, customModels);
  let allModels = Object.values(modelTable);
  allModels = sortModelTable(allModels);
  return allModels;
}

排序逻辑由sortModelTable()实现,优先按提供商排序,再按模型顺序排序:

const sortModelTable = (models: ReturnType<typeof collectModels>) =>
  models.sort((a, b) => {
    if (a.provider && b.provider) {
      let cmp = a.provider.sorted - b.provider.sorted;
      return cmp === 0 ? a.sorted - b.sorted : cmp;
    } else {
      return a.sorted - b.sorted;
    }
  });

模型可用性控制

isModelAvailableInServer()函数用于检查模型在服务端的可用性状态:

export function isModelAvailableInServer(
  customModels: string,
  modelName: string,
  providerName: string,
) {
  const fullName = `${modelName}@${providerName}`;
  const modelTable = collectModelTable(DEFAULT_MODELS, customModels);
  return modelTable[fullName]?.available === false;
}

实际应用示例

配置自定义模型

在配置文件中添加自定义模型的示例:

// 在环境变量或配置文件中设置
CUSTOM_MODELS="gpt-4@OpenAI,gpt-3.5-turbo@OpenAI,my-custom-model@CustomProvider"

启用/禁用模型

通过前缀+(启用)和-(禁用)来控制模型状态:

// 禁用gpt-3.5-turbo,启用gpt-4
CUSTOM_MODELS="-gpt-3.5-turbo@OpenAI,+gpt-4@OpenAI"

设置默认模型

app/store/config.ts中设置默认模型:

export const useAppConfig = create<AppConfigStore>()(
  persist(
    (set, get) => ({
      // ...其他配置
      modelConfig: {
        model: "gpt-4", // 默认模型
        // ...其他模型配置
      },
    }),
    {
      name: "app-config",
    },
  ),
);

高级配置:模型提供商扩展

ChatGPT-Next-Web支持多种模型提供商,每种提供商的实现位于app/client/platforms/目录下。例如,OpenAI的实现位于app/client/platforms/openai.ts,包含了模型调用、请求处理等逻辑。

要添加新的模型提供商,可以参考现有实现创建新的平台文件,并在模型配置中注册。

总结

通过本文介绍的方法,您可以灵活地管理ChatGPT-Next-Web中的AI模型列表,满足不同场景下的需求。主要配置文件和代码位置如下:

掌握这些配置技巧,可以让您的智能对话系统更加灵活和高效,充分发挥不同AI模型的优势。

官方文档:docs/user-manual-cn.md 配置示例:docs/faq-cn.md

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐