現在文件夾中有很多docx英文文檔,想用AI大模型批量翻譯成中文,可以用硅基流動SiliconCloud來實現,不花一分錢,效果還很好。
翻譯可以選擇Qwen/Qwen2.5-7B-Instruct,上下文長度32K,可以處理的中文漢字數量大約在2.5萬到4萬之間,大約3.2萬個英文單詞或短語。
安裝 Python 3.7.1 或更高版本并設置虛擬環境后,即可安裝 OpenAI Python 庫。從終端/命令行運行:pip install --upgrade openai
注意:模型有限速,RPM=1K TPM=50K
在deepseek中輸入提示詞:
你現在是一個Python編程專家,要調用siliconflow平臺的Qwen2.5-7B-Instruct模型來翻譯文檔,具體步驟如下:
打開文件夾:F:\AI英語學習\openai
讀取里面所有的docx文檔,里面是英文;
用Qwen2.5-7B-Instruct模型將docx文檔翻譯成中文;
翻譯完后保存為一個新的docx文檔,文件名在原docx文件名后面加上“_中文翻譯版”
siliconflow平臺的基礎URL: https://api.siliconflow.cn/v1
API密鑰為:XXX
模型為:Qwen/Qwen2.5-7B-Instruct,上下文長度32K;
提示詞為:將下面的英文內容翻譯成中文
代碼示例:
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.siliconflow.cn/v1")
response = client.chat.completions.create(
model='alibaba/Qwen1.5-110B-Chat',
messages=[
{'role': 'user', 'content': "拋磚引玉是什么意思呀"}
],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content, end='')
注意:模型有限速,RPM=1K TPM=50K
如果 .docx 文檔的內容超過模型的上下文長度(32K 字符),模型將無法處理整個文檔。為了解決這個問題,我們可以將文檔分塊處理,確保每個塊的長度不超過模型的上下文長度限制。
每一步都要輸出信息到屏幕上
Deepseek生成的Python代碼:
import os
from openai import OpenAI
from docx import Document
# 設置API密鑰和基礎URL
api_key = "XXX"
base_url = "https://api.siliconflow.cn/v1"
# 初始化OpenAI客戶端
client = OpenAI(api_key=api_key, base_url=base_url)
# 定義文件夾路徑
folder_path = r"F:\AI英語學習\openai"
# 定義模型的上下文長度限制
MAX_CONTEXT_LENGTH = 32000 # 32K characters
# 遍歷文件夾中的所有docx文件
for filename in os.listdir(folder_path):
if filename.endswith(".docx"):
# 讀取文檔
doc_path = os.path.join(folder_path, filename)
print(f"正在讀取文檔: {doc_path}")
doc = Document(doc_path)
# 提取文檔中的所有段落
paragraphs = [p.text for p in doc.paragraphs]
# 將段落內容拼接成一個字符串
content = "\n".join(paragraphs)
# 分塊處理
chunks = []
current_chunk = ""
current_length = 0
for paragraph in paragraphs:
if current_length + len(paragraph) + 1 > MAX_CONTEXT_LENGTH:
chunks.append(current_chunk.strip())
current_chunk = paragraph
current_length = len(paragraph)
else:
if current_chunk:
current_chunk += "\n" + paragraph
else:
current_chunk = paragraph
current_length += len(paragraph) + 1
if current_chunk:
chunks.append(current_chunk.strip())
# 翻譯每個塊
translated_chunks = []
for i, chunk in enumerate(chunks):
print(f"正在翻譯文檔: {filename} 的第 {i+1}/{len(chunks)} 塊")
response = client.chat.completions.create(
model='Qwen/Qwen2.5-7B-Instruct',
messages=[
{'role': 'user', 'content': f"將下面的英文內容翻譯成中文\n{chunk}"}
],
stream=False
)
translated_chunks.append(response.choices[0].message.content)
# 拼接翻譯后的內容
translated_content = "\n".join(translated_chunks)
# 創建新的文檔并寫入翻譯后的內容
new_doc = Document()
for line in translated_content.split("\n"):
new_doc.add_paragraph(line)
# 保存翻譯后的文檔
new_filename = filename.replace(".docx", "_中文版.docx")
new_doc_path = os.path.join(folder_path, new_filename)
new_doc.save(new_doc_path)
print(f"翻譯完成,保存為: {new_doc_path}")
print("所有文檔翻譯完成!")
代碼解釋
分塊處理: 我們將文檔內容分成多個塊,每個塊的長度不超過 32K 字符。我們通過遍歷文檔的每個段落,將段落內容逐步添加到當前塊中,直到當前塊的長度接近 32K 字符,然后將當前塊保存為一個塊,并開始一個新的塊。
翻譯每個塊: 對每個塊分別進行翻譯,并將翻譯后的內容保存到一個列表中。
拼接翻譯后的內容: 將所有翻譯后的塊拼接成一個完整的字符串,并寫入新的 .docx 文檔。
程序運行成功:
硅基流動SiliconCloud上現在有很多很好的免費大模型,真正實現大模型自由。
https://cloud.siliconflow.cn/i/Do9fPK0j