AI大模型部署属于自己的翻译网站-AI大模型翻译管理系统源码-带前后台

119 阅读4分钟

开始学习 AI大模型的应用。肯定要找个应用场景来做一做,看看怎么把AI大模型应用于传统软件里。
今天就跟大家分享一个 AI大模型翻译管理系统-带前台翻译工具
使用 翻译大模型实现的 网站翻译软件
先给大家截图一下 系统的样子

前台:

image.png

后台管理系统

image.png

应用场景

该翻译管理系统主要用于提供高效的文字翻译服务,适用于跨语言沟通、国际化网站开发以及多语言内容管理等场景。企业、开发者和个人用户可以利用该系统实现网站、应用、文档等内容的即时翻译,打破语言障碍,提升工作效率。

使用的技术:

系统采用Java Spring Boot 2.7作为后端框架,

MySQL 8.0及以上版本作为数据库,

Vue3用于前端开发,

Node.js 16.20版本作为前端开发环境,

Python 3.12.3用于AI大模型的翻译服务。

支持的翻译语言

该系统默认集成了以下语言对的翻译模型:

中文-英文(zh-en) / 英文-中文(en-zh)

中文-德文(zh-de) / 德文-中文(de-zh)

中文-瑞典语(zh-sv) / 瑞典语-中文(sv-zh)

共计6种语言对,用户可以根据需要进行选择与扩展。

注:

因内置翻译大模型 文件大概有10G左右。

大模型的翻译的结果仅作参考,不保证翻译结果的准确性。

本项目使用多种语言开发

项目结构如下

image.png

代码内容过多:

简单的分享一部分代码

java:

package com.translate.base.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dtflys.forest.http.ForestResponse;
import com.translate.base.entities.TrAi;
import com.translate.base.entities.TranslationHis;
import com.translate.base.http.AiHttp;
import com.translate.base.mapper.TrAiMapper;
import com.translate.base.out.R;
import com.translate.base.request.BaseRequest;
import com.translate.base.request.TranslateRequest;
import com.translate.base.response.TranslateResponse;
import com.translate.base.service.inteface.ITrAiService;
import com.translate.base.service.inteface.ITranslationHisService;
import com.translate.base.webFilterIntercept.LoginUserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;

/**
 * <p>
 * AI模型表 服务实现类
 * </p>
 *
 * @author Json
 * @since 2025-02-15
 */
@Service
public class TrAiServiceImpl extends ServiceImpl<TrAiMapper, TrAi> implements ITrAiService {
    @Resource
    AiHttp myClient;

    @Autowired
    ITranslationHisService iTranslationHisService;
    
    @Override
    public R pageList(BaseRequest request) {
        Page<TrAi> page = new Page<>(request.getPage() == null ? 1 : request.getPage(), request.getPageSize() == null ? 10 : request.getPageSize());
        QueryWrapper<TrAi> queryWrapper = new QueryWrapper<>();
        if(!StringUtils.isEmpty(request.getSearch())){
            queryWrapper.lambda().like(TrAi::getAiName, request.getSearch());
        }
        page(page, queryWrapper.lambda().orderByDesc(TrAi::getId));
        return R.data(page);
    }

    @Override
    public R add(TrAi trAi) {
        if(StringUtils.isEmpty(trAi.getAiName())){
            return R.fail("翻译模型名称不能为空!");
        }
        if(StringUtils.isEmpty(trAi.getTrType())){
            return R.fail("翻译语言不能为空!");
        }
        trAi.setTrType(trAi.getTrType().trim()) ;
        save(trAi);
        return R.success();
    }

    @Override
    public R del(Integer id) {
        removeById(id);
        return R.success();
    }

    @Override
    public R translate(TranslateRequest translateRequest) {
        ForestResponse<TranslateResponse> translate = myClient.getTo(translateRequest);
        if(!translate.isSuccess()){
            return R.fail("大模型调用失败!");
        }
        TranslationHis translationHis=new TranslationHis();
        translationHis.setUserId(LoginUserInfo.getLoginUserId());
        translationHis.setUserName(LoginUserInfo.getLoginUserName());
        translationHis.setDesTxt(translateRequest.getKeyword());
        translationHis.setAiTxt(translate.getResult().getData().get("object").toString());
        translationHis.setAiType(translateRequest.getAiType());
        translationHis.setTrType(translateRequest.getType());
        iTranslationHisService.save(translationHis);
        return R.data(translate.getResult());
    }

    @Override
    public R getTrType() {
        return R.data(list(new QueryWrapper<TrAi>().lambda().eq(TrAi::getIsStatus,1)));
    }

    @Override
    public R edit(TrAi trAi) {
        if(StringUtils.isEmpty(trAi.getAiName())){
            return R.fail("翻译模型名称不能为空!");
        }
        if(StringUtils.isEmpty(trAi.getTrType())){
            return R.fail("翻译语言不能为空!");
        }
        trAi.setTrType(trAi.getTrType().trim()) ;
        updateById(trAi);
        return R.success();
    }
}

python:

from transformers import pipeline
# nlp 翻译工具类
# python 3.12
# pip install transformers
# 安装 conda install pytorch
# 安装 conda install -c conda-forge sentencepiece  常用的分词器库
# 安装 conda install -c conda-forge sacremoses
# 处理文本预处理的库,特别是在处理 Moses 分词器时。虽然它不是必须的,但它可以提高一些处理任务的性能
class TranslateNlp:
    def __init__(self):
        pass

    def getTo(self, keyword, type):
        try:
            model_path = ''
            if type == 'zh-en':
                model_path = './data/nlp/zh-en/snapshots/cf109095479db38d6df799875e34039d4938aaa6'  # 中英
            elif type == 'en-zh':
                model_path = r"./data/nlp/en-zh/snapshots/408d9bc410a388e1d9aef112a2daba955b945255" #英中
            elif type == 'zh-de':
                model_path = r"./data/nlp/zh-de/snapshots/799162f10e25405aaa5088ca013295596a4ca517" #中德
            elif type == 'de-zh':
                model_path = r"./data/nlp/de-zh/snapshots/cf77098253bb466b05d2beafd3a3c3dea92ed23b" #德中
            elif type == 'zh-sv':
                model_path = r"./data/nlp/zh-sv/snapshots/ea7d4af8ebec905bafa0049f5fa400acc1fa9ea9" #中 瑞典
            elif type == 'sv-zh':
                model_path = r"./data/nlp/sv-zh/snapshots/4de37db71437e942953ce01a301cc15e12e50c36" #瑞典 中
            if model_path == '':
                return '未找到翻译器'
            # 使用 pipeline 创建翻译管道
            pipe = pipeline("translation", model=model_path)
            # 使用管道进行翻译
            translated_text = pipe(keyword)
            # 输出翻译结果
            return translated_text
        except Exception as e:
            print(f"翻译过程中发生错误: {e}")
            return f"翻译过程中发生错误: {e}"

前端代码 这里就不分享了。

完整版👉www.wwwoop.com/home/Index/…