☰
如何给NodeToCode添加新的LLM提供商:从服务基类到响应解析器的完整开发指南
2026/10/28 14:29:27 网站建设 项目流程

【免费下载链接】NodeToCode

Translate Unreal Engine Blueprints to C++ in seconds. Not hours.

项目地址:https://gitcode.com/gh_mirrors/no/NodeToCode
点击查看免费下载

NodeToCode 是一款 Unreal Engine 插件,能够借助 LLM 在几秒内将 Blueprint 图表翻译成干净的 C++ 代码(而不需要数小时的手工转换)。本文带你完整走一遍给 NodeToCode 添加新 LLM 提供商的开发流程:从继承服务基类UN2CBaseLLMService,到实现专属的响应解析器,最后注册到 Provider Registry。

理解 NodeToCode 的 LLM 提供商架构

在动手之前,先弄清楚插件的 LLM 模块由哪 4 个核心部分组成(位于 Source/Public/LLM/ 目录):

组件文件职责
服务接口IN2CLLMService.h定义所有提供商必须遵守的契约:初始化、发送请求、获取配置与请求头
服务基类N2CBaseLLMService.h封装通用流程:创建 HTTP 处理器、响应解析器、系统提示词管理器,并统一发起请求
响应解析器N2CResponseParserBase.h把提供商返回的原始 JSON 解析成统一的翻译结构体
提供商注册表N2CLLMProviderRegistry.h单例工厂,维护"提供商类型 → 服务类"的映射

基类的巧妙之处在于:Initialize()会自动完成组件组装(见 N2CBaseLLMService.cpp),而SendRequest()会调用你实现的FormatRequestPayload()构造请求体,再交给 HTTP 层发送(见 N2CBaseLLMService.cpp)。也就是说,你只需要实现几个虚函数钩子,其余流程全部复用。

第一步:在枚举中登记新的提供商类型

提供商类型集中定义在 N2CLLMTypes.h 的EN2CLLMProvider枚举中,目前包含 OpenAI、Anthropic、Gemini、Ollama、DeepSeek、LMStudio 六种。

在你的枚举末尾添加新项,例如MyProvider UMETA(DisplayName = "MyProvider")。这个枚举同时被设置面板、注册表和日志系统引用,是接入的"入口开关"。

如果新提供商有多款模型可选,还需要在 N2CLLMModels.h 中仿照EN2COpenAIModel的模式添加模型枚举,并用UMETA(DisplayName, Value)标注展示名和 API 中实际使用的模型 ID。

第二步:实现提供商服务类

这是接入的核心。在Source/Public/LLM/Providers/和Source/Private/LLM/Providers/下新建一对头文件/源文件,参考 N2COpenAIService.h 的写法,让你的服务类继承UN2CBaseLLMService:

UCLASS() class NODETOCODE_API UN2CMyProviderService : public UN2CBaseLLMService { GENERATED_BODY() public: virtual EN2CLLMProvider GetProviderType() const override { return EN2CLLMProvider::MyProvider; } virtual FString GetDefaultEndpoint() const override { return TEXT("https://api.myprovider.com/v1/chat"); } };

需要覆盖的虚函数及其作用,可对照 N2CBaseLLMService.h 的钩子定义:

  • GetConfiguration():返回 API 端点、鉴权 Token 以及该提供商是否支持 system prompt,参考 N2COpenAIService.cpp;
  • GetProviderHeaders():填充请求头,例如Authorization: Bearer <API Key>,参考 N2COpenAIService.cpp;
  • FormatRequestPayload():把用户消息和系统提示词组装成该提供商的 JSON 请求体,推荐使用内置的UN2CLLMPayloadBuilder并配合UN2CSystemPromptManager处理不支持 system prompt 的模型(提示词自动合并),完整示例见 N2COpenAIService.cpp;
  • CreateResponseParser():NewObject创建你在第三步实现的解析器。

第三步:实现响应解析器

每个提供商返回的 JSON 结构都不同(OpenAI 是choices[0].message.content,Anthropic 则是content数组),所以每个提供商都有专属解析器,位于Source/Public/LLM/Providers/。

以 N2COpenAIResponseParser.h 为模板,继承UN2CResponseParserBase并重写ParseLLMResponse()。基类已经提供了大量可复用的工具方法,你的实现只需三步(参考 N2COpenAIResponseParser.cpp):

  1. 反序列化提供商原始 JSON,若含error字段则调用HandleCommonErrorResponse()记录错误;
  2. 用ExtractStandardMessageContent()按你提供商的字段路径提取出纯文本内容;
  3. 把内容交给Super::ParseLLMResponse()—— 基类会校验graphs结构并填充最终的FN2CTranslationResponse(见 N2CResponseParserBase.cpp)。

如果提供商还返回 token 用量(usage字段),顺手解析一下即可让界面显示费用统计。

第四步:注册到 Provider Registry 并接入设置

注册服务类:打开 N2CLLMModule.cpp 的InitializeProviderRegistry(),追加一行注册代码:

Registry->RegisterProvider(EN2CLLMProvider::MyProvider, UN2CMyProviderService::StaticClass());

模块初始化时会通过注册表创建服务实例并调用Initialize()(见 N2CLLMModule.cpp),之后ProcessN2CJson()会自动拿到你的解析器处理返回结果,无需任何额外接线。

接入插件设置:最后一步是让新提供商出现在插件设置面板中。打开 N2CSettings.h,仿照其他提供商添加:模型选择下拉项(EN2CMyProviderModel)、API Key 输入框,并在GetActiveApiKey()/GetActiveModel()的 switch 分支中补上你的提供商。至此,用户在 Unreal 编辑器的插件设置中即可选择新提供商、填入 API Key 并选用模型。

验证清单:快速检查新 LLM 提供商是否接入成功

编译后按以下顺序逐项验证:

  1. 设置面板:插件设置中能看到新提供商和模型下拉项,API Key 可正常保存;
  2. 日志输出:触发一次翻译,日志中应出现Registered provider class for provider type: MyProvider与Sending request to MyProvider using model: ...(均来自 N2CLLMModule.cpp 附近的日志点);
  3. 解析结果:确认ParseLLMResponse()成功返回graphs数组且编辑器窗口展示出代码、实现笔记等内容——解析失败时日志会提示Failed to parse LLM response;
  4. 落盘归档:检查Saved/NodeToCode/Translations下是否生成了本次翻译的 JSON 与代码文件(归档逻辑见 N2CLLMModule.cpp)。

总结

给 NodeToCode 添加 LLM 提供商本质上就是"枚举登记 → 继承基类实现 4 个虚函数 → 实现响应解析器 → 注册并接入设置"四步走。得益于UN2CBaseLLMService基类对 HTTP、提示词管理和错误处理的统一封装,新提供商的全部差异点都被收敛到了请求体构造和响应解析两处,这也是 N2COpenAIService.cpp 等现有提供商代码量如此之小的原因。照着 OpenAI 或 Ollama(本地免鉴权场景)任一现成实现对照修改,即可快速完成一个新提供商的接入。

【免费下载链接】NodeToCode

Translate Unreal Engine Blueprints to C++ in seconds. Not hours.

项目地址:https://gitcode.com/gh_mirrors/no/NodeToCode
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询