开始学习 AI大模型的应用。肯定要找个应用场景来做一做,看看怎么把AI大模型应用于传统软件里。
今天就跟大家分享一个 AI大模型翻译管理系统-带前台翻译工具。
使用 翻译大模型实现的 网站翻译软件
先给大家截图一下 系统的样子
前台:
后台管理系统
应用场景
该翻译管理系统主要用于提供高效的文字翻译服务,适用于跨语言沟通、国际化网站开发以及多语言内容管理等场景。企业、开发者和个人用户可以利用该系统实现网站、应用、文档等内容的即时翻译,打破语言障碍,提升工作效率。
使用的技术:
系统采用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左右。
大模型的翻译的结果仅作参考,不保证翻译结果的准确性。
本项目使用多种语言开发
项目结构如下
代码内容过多:
简单的分享一部分代码
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}"
前端代码 这里就不分享了。