前言

魔音漫创 (Moyin Creator) 是一款备受关注的开源 AI 影视生产工具,它通过串联剧本解析、角色造型、分镜绘制及视频生成,实现了从“文字”到“短剧”的全流程自动化。

在实际生产中,开发者往往希望接入更具性价比或特定领域能力的 AI 模型(如 DeepSeek、本地 Ollama 部署的模型或公司内部的大模型)。本文将深入 moyin-creator 的源码架构,手把手教你如何通过扩展代码,接入一个自定义的 AI 大模型供应商。


1. 核心架构分析:AI 调用的“枢纽”

moyin-creator 中,大语言模型(LLM)主要负责剧本润色、分镜拆解以及提示词(Prompt)的优化。为了支持多供应商,项目采用了 适配器模式 (Adapter Pattern)

所有的 AI 调用请求都会经过一个统一的接口层,根据配置调度到不同的 Provider(供应商)实现类。要接入新供应商,我们主要关注以下三个核心目录:

  • src/main/services/ai/: 后端 AI 逻辑处理核心。

  • src/shared/types/: 定义供应商、模型及配置的类型声明。

  • src/renderer/components/Settings/: 前端配置界面,用于输入 API Key 和 Base URL。


2. 准备工作:定义供应商类型

首先,我们需要在类型定义中“登记”新的供应商。

src/shared/types/ai.ts(或类似命名的类型文件)中,找到 AIProvider 枚举,添加你的自定义供应商:

export enum AIProvider {
  OpenAI = 'openai',
  Anthropic = 'anthropic',
  MiniMax = 'minimax',
  // 添加自定义供应商
  CustomLLM = 'custom-llm', 
}

同时,定义该供应商支持的模型列表:

export const CUSTOM_MODELS = [
  'custom-model-v1',
  'custom-model-pro',
];

3. 核心实现:编写 Provider 适配器

这是最关键的一步。你需要在 src/main/services/ai/providers/ 目录下创建一个新的类(例如 custom.ts),并继承项目定义的基类。

大部分现代大模型 API 都兼容 OpenAI 格式。如果你的供应商也兼容,可以直接复用逻辑;如果不兼容,则需手动实现 chat 方法。

import { BaseAIProvider } from '../base';
import { ChatMessage, AIResponse } from '@/shared/types';

export class CustomLLMProvider extends BaseAIProvider {
  // 实现对话核心逻辑
  async chat(messages: ChatMessage[], options: any): Promise<AIResponse> {
    const { apiKey, baseUrl } = this.config;
    
    const response = await fetch(`${baseUrl}/v1/chat/completions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        model: options.model,
        messages,
        temperature: options.temperature || 0.7,
      }),
    });

    const data = await response.json();
    return {
      content: data.choices[0].message.content,
      usage: data.usage,
    };
  }
}

4. 注册与工厂化:让系统识别新供应商

找到 src/main/services/ai/factory.ts,在 AI 工厂类中将新编写的适配器注册进去:

import { CustomLLMProvider } from './providers/custom';

export class AIFactory {
  static createProvider(type: AIProvider, config: any) {
    switch (type) {
      case AIProvider.OpenAI:
        return new OpenAIProvider(config);
      case AIProvider.CustomLLM: // 注册新供应商
        return new CustomLLMProvider(config);
      default:
        throw new Error(`Unsupported AI Provider: ${type}`);
    }
  }
}

5. 前端适配:在设置中显示

为了让用户能在软件界面上配置 API Key,我们需要修改设置面板。

  1. 修改配置数据结构:在 src/shared/consts/settings.ts 中增加新供应商的默认配置项。

  2. 更新 UI 组件:在 src/renderer/views/Settings/AIConfig.tsx 中,添加一个表单项。

TypeScript

// 示例:增加一个 Tab 或 下拉选项
{provider === AIProvider.CustomLLM && (
  <div>
    <Input label="API Base URL" value={config.baseUrl} placeholder="https://api.your-llm.com" />
    <Input label="API Key" type="password" value={config.apiKey} />
  </div>
)}

6. 测试与调试

完成上述步骤后,你可以通过以下方式进行验证:

  1. 开发者模式运行:执行 npm run dev 启动项目。

  2. 配置 API:进入“设置 -> AI 配置”,选择你新增的供应商,输入参数并点击“保存”。

  3. 功能测试:尝试进入“剧本板块”,点击“自动生成剧本”。

  4. 日志查看:在控制台(Console)查看是否有网络请求发往你自定义的 Base URL。


结语

通过以上步骤,你已经成功为 moyin-creator 注入了新的“大脑”。魔音漫创的架构设计非常灵活,这种模块化的方式不仅适用于 LLM,也同样适用于接入自定义的图像生成(Stable Diffusion)或视频生成(Runway/Luma)接口。

💡 小贴士

  • 如果你的自定义模型响应较慢,建议在适配器中实现 流式传输 (Streaming) 接口,以提升用户体验。

  • 记得在提交代码前,检查 src/shared/types 中的类型兼容性,避免引起编译错误。

Logo

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

更多推荐