# Win11本地AI翻译服务部署方案
## 1. 系统配置确认
- 系统: Windows 11
- IP地址: 10.237.186.51
- GPU: NVIDIA RTX 3060 (12GB显存)
- 模型路径: D:\Qwen1.5\models\qwen\Qwen1.5-7B-Chat
## 2. 目录结构设计
D:\Qwen1.5 建议的目录结构:
```
Qwen1.5/
├── models/
│ └── qwen/
│ └── Qwen1.5-7B-Chat/ (已有模型文件)
├── app/
│ ├── static/ (静态文件)
│ ├── templates/ (HTML模板)
│ ├── config.py (配置文件)
│ ├── main.py (主程序)
│ ├── translator.py (翻译核心)
│ └── file_processor.py (文件处理)
├── requirements.txt (依赖文件)
└── README.md (说明文档)
```
## 3. 核心代码实现
### config.py
```python
import os
class Config:
MODEL_PATH = "D:/Qwen1.5/models/qwen/Qwen1.5-7B-Chat"
HOST = "10.237.186.51"
PORT = 5000
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'docx', 'pptx', 'xlsx'}
MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 16MB
TEMP_FOLDER = "D:/Qwen1.5/temp"
```
### translator.py
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from config import Config
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
class Translator:
def __init__(self):
self.tokenizer = AutoTokenizer.from_pretrained(Config.MODEL_PATH)
self.model = AutoModelForCausalLM.from_pretrained(
Config.MODEL_PATH,
torch_dtype="auto",
device_map="auto"
)
def translate(self, text, source_lang, target_lang):
prompt = f"将以下{source_lang}文本翻译成{target_lang}:\n{text}"
inputs = self.tokenizer(prompt, return_tensors="pt").to(device)
outputs = self.model.generate(**inputs, max_new_tokens=512)
return self.tokenizer.decode(outputs[0], skip_special_tokens=True)
```
### file_processor.py
```python
import os
from config import Config
from translator import Translator
import docx
import PyPDF2
from pptx import Presentation
from openpyxl import load_workbook
translator = Translator()
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in Config.ALLOWED_EXTENSIONS
def process_file(filepath, source_lang, target_lang):
ext = os.path.splitext(filepath)[1].lower()
if ext == '.txt':
return process_txt(filepath, source_lang, target_lang)
elif ext == '.docx':
return process_docx(filepath, source_lang, target_lang)
elif ext == '.pdf':
return process_pdf(filepath, source_lang, target_lang)
elif ext == '.pptx':
return process_pptx(filepath, source_lang, target_lang)
elif ext == '.xlsx':
return process_xlsx(filepath, source_lang, target_lang)
else:
raise ValueError("Unsupported file type")
def process_txt(filepath, source_lang, target_lang):
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
translated = translator.translate(content, source_lang, target_lang)
return translated.encode('utf-8')
def process_docx(filepath, source_lang, target_lang):
doc = docx.Document(filepath)
for para in doc.paragraphs:
if para.text.strip():
para.text = translator.translate(para.text, source_lang, target_lang)
output_path = os.path.join(Config.TEMP_FOLDER, "translated.docx")
doc.save(output_path)
return output_path
# 其他文件处理函数类似,限于篇幅省略...
```
### main.py
```python
from flask import Flask, render_template, request, send_file, redirect, url_for
from file_processor import allowed_file, process_file
from config import Config
import os
app = Flask(__name__)
app.config.from_object(Config)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
if 'file' not in request.files:
return redirect(request.url)
file = request.files['file']
if file.filename == '':
return redirect(request.url)
if file and allowed_file(file.filename):
source_lang = request.form.get('source_lang', '中文')
target_lang = request.form.get('target_lang', '英文')
temp_path = os.path.join(Config.TEMP_FOLDER, file.filename)
file.save(temp_path)
try:
result = process_file(temp_path, source_lang, target_lang)
if isinstance(result, str): # 处理后的文件路径
return send_file(result, as_attachment=True)
else: # 直接返回的字节内容
return send_file(
result,
as_attachment=True,
download_name=f"translated_{file.filename}"
)
finally:
if os.path.exists(temp_path):
os.remove(temp_path)
return render_template('index.html')
if __name__ == '__main__':
os.makedirs(Config.TEMP_FOLDER, exist_ok=True)
app.run(host=Config.HOST, port=Config.PORT)
```
### templates/index.html
```html
<!DOCTYPE html>
<html>
<head>
<title>AI翻译服务</title>
</head>
<body>
<h1>文件翻译服务</h1>
<form method="post" enctype="multipart/form-data">
<div>
<label>源语言:</label>
<select name="source_lang">
<option value="中文">中文</option>
<option value="英文">英文</option>
<option value="日文">日文</option>
<option value="法文">法文</option>
</select>
</div>
<div>
<label>目标语言:</label>
<select name="target_lang">
<option value="英文">英文</option>
<option value="中文">中文</option>
<option value="日文">日文</option>
<option value="法文">法文</option>
</select>
</div>
<div>
<input type="file" name="file" required>
</div>
<button type="submit">翻译文件</button>
</form>
</body>
</html>
```
### requirements.txt
```
flask>=2.0.0
transformers>=4.30.0
torch>=1.10.0
python-docx>=0.8.10
PyPDF2>=2.0.0
python-pptx>=0.6.18
openpyxl>=3.0.0
```
## 4. 部署步骤
1. 创建上述目录结构
2. 将代码文件放入对应位置
3. 安装依赖: `pip install -r requirements.txt`
4. 运行服务: `python main.py`
5. 内网其他电脑可通过 `http://10.237.186.51:5000` 访问
## 5. 注意事项
1. 确保NVIDIA驱动和CUDA已正确安装
2. 首次运行会下载模型相关文件,请耐心等待
3. 大文件翻译可能需要较长时间
4. 确保防火墙允许5000端口的访问