Electron Forge【实战】阿里百炼大模型 —— AI 聊天

获取 apiKey

登录并开通阿里云百炼
https://bailian.console.aliyun.com/#/home

新人有半年免费的使用福利,在模型详情中,可以查看剩余的免费额度
https://bailian.console.aliyun.com/?tab=model#/model-market/detail/qwen-turbo

在下方链接中创建 apiKey
https://bailian.console.aliyun.com/?tab=model#/api-key

安装 OpenAI SDK

TS 复制代码
npm install openai

src/providers/OpenAIProvider.ts

ts 复制代码
import OpenAI from 'openai'

interface ChatMessageProps {
  role: string;
  content: string;
}

interface UniversalChunkProps {
  is_end: boolean;
  result: string;
}

export class OpenAIProvider {
  private client: OpenAI;
  constructor(apiKey: string, baseURL: string) {
    this.client = new OpenAI({
      apiKey,
      baseURL
    })
  }
  async chat(messages: ChatMessageProps[], model: string) {
    const stream = await this.client.chat.completions.create({
      model,
      messages,
      stream: true
    })
    const self = this
    return {
      async *[Symbol.asyncIterator]() {
        for await (const chunk of stream) {
          yield self.transformResponse(chunk)
        }
      }
    }
  }
  protected transformResponse(chunk: OpenAI.Chat.Completions.ChatCompletionChunk): UniversalChunkProps {
    const choice = chunk.choices[0]
    return {
      is_end: choice.finish_reason === 'stop',
      result: choice.delta.content || ''
    }
  }
}

src/providers/createProvider.ts

ts 复制代码
import { QianfanProvider } from "./QianfanProvider";
import { OpenAIProvider } from './OpenAIProvider'

export function createProvider(providerName: string) {

  const providerConfigs = {
    aliyun: {
      apiKey: "换成第一步获取的apiKey",
      baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
    }
  };

  // 为了解决类型错误,先进行类型断言,确保可以通过 providerName 访问 providerConfigs
  const providerConfig = (providerConfigs as { [key: string]: any })[providerName];

  switch (providerName) {
    case "qianfan":
      if (!providerConfig.accessKey || !providerConfig.secretKey) {
        throw new Error(
          "缺少千帆API配置:请在设置中配置 accessKey 和 secretKey"
        );
      }
      return new QianfanProvider(
        providerConfig.accessKey,
        providerConfig.secretKey
      );
    case 'aliyun':
      if (!providerConfig.apiKey || !providerConfig.baseUrl) {
        throw new Error('缺少阿里云百炼API配置:请在设置中配置 apiKey 和 baseUrl')
      }
      return new OpenAIProvider(providerConfig.apiKey, providerConfig.baseUrl)
    default:
      throw new Error(`不支持的AI服务提供商: ${providerName}`);
  }
}

其他通用代码见
https://blog.csdn.net/weixin_41192489/article/details/147492144

效果预览


相关推荐
江米小枣tonylua1 天前
升级到 Prisma 7:“Rust 除锈” 带来的意外红利
electron
还好还好不是吗5 天前
MatrixMedia v0.10.x 更新:B站封面自定义 + 二开指南,开源项目的开发者体验再升级
electron·开源
习明然5 天前
我的本地化AI项目(三)
人工智能·python·electron·c#·avalonia
Hyyy6 天前
为什么 macOS 应用一换 Bundle ID,之前授予的权限就全失效了?
macos·electron
月走乂山8 天前
Anything Analyzer MCP 401 Unauthorized 故障排查
electron·故障排查·mcp·claude code·anything analyzer
熊猫钓鱼>_>8 天前
Electron:当 Web 技术统治桌面
大数据·前端·javascript·人工智能·架构·electron·agent
程序员老刘8 天前
Opencode从Tauri切回Electron,桌面端技术选型别被体积陷阱带偏了
electron·ai编程
大意的百合9 天前
Electron 应用如何上架微软商店:从 MSIX 打包到商店提交
javascript·microsoft·electron
专职10 天前
electron中拖动文件到桌面案例
前端·javascript·electron
SRET10 天前
Mineradio 沙盒隔离安装完全指南 | 一键安全运行 Electron 应用!!!
javascript·经验分享·安全·electron·aigc·音视频·ai编程