多语言翻译 Prompt
目标:实现一个支持多语言互译 + Few-shot 示例增强 + 流式输出的翻译工具。
步骤:
一、依赖配置
-
安装必要库
-
LangChain
-
LangChain-core
-
python-dotenv
-
-
配置环境变量
在 .env 文件中写入:
-
DASHSCOPE_API_KEY
-
DASHSCOPE_BASE_URL
-
-
使用 load_dotenv() 读取配置
二、初始化聊天模型
-
使用
init_chat_model创建模型实例 -
传入参数:
-
model_name(如 qwen-plus)
-
model_provider(模型来源)
-
api_key(密钥)
-
base_url(接口地址)
-
temperature(控制随机性)
-
三、设计语言支持体系
-
使用字典统一管理:
SUPPORTED_LANGUAGES = { "zh": "中文", "en": "英文", "ja": "日语", "ko": "韩语", "fr": "法语", "de": "德语" } -
做参数校验
在翻译前判断:
避免非法输入。
-
是否支持源语言
-
是否支持目标语言
-
四、构建 Few-shot 示例机制
-
示例结构设计
EXAMPLES = { ("en", "zh"): [ {"source": "...", "target": "..."} ] } -
动态获取示例
def _get_examples(self, source_lang, target_lang): return self.EXAMPLES.get((source_lang, target_lang), [])
五、设计 Prompt 模板
-
使用 ChatPromptTemplate 统一管理提示词结构。
-
System Prompt 设计:明确模型角色 + 翻译规则
-
拼接 Few-shot 示例
messages = [ ("system", "..."), ("human", 示例1输入), ("ai", 示例1输出), ... ("human", "{text}") ] -
生成 Prompt
六、实现普通翻译功能
-
接收用户输入
-
构建 Prompt
-
调用模型
-
返回翻译结果
七、实现流式翻译
-
使用 stream 接口
-
逐块输出
python
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate
import os
load_dotenv()
DASHSCOPE_API_KEY=os.getenv("DASHSCOPE_API_KEY")
DASHSCOPE_BASE_URL=os.getenv("DASHSCOPE_BASE_URL")
class MultilingualTranslator:
"""多语言翻译器"""
SUPPORTED_LANGUAGES = {
"zh": "中文",
"en": "英文",
"ja": "日语",
"ko": "韩语",
"fr": "法语",
"de": "德语"
}
# Few-shot 示例库
EXAMPLES = {
("en", "zh"): [
{"source": "Hello, how are you?", "target": "你好,你好吗?"},
{"source": "Thank you very much!", "target": "非常感谢!"}
],
("zh", "en"): [
{"source": "今天天气真好", "target": "The weather is really nice today"},
{"source": "我很高兴认识你", "target": "I'm glad to meet you"}
],
("en", "ja"): [
{"source": "Good morning", "target": "おはようございます"},
{"source": "Nice to meet you", "target": "はじめまして"}
]
}
def __init__(self, model_name: str = "qwen-max"):
self.model = init_chat_model(
model=model_name,
model_provider="openai",
api_key=DASHSCOPE_API_KEY,
base_url=DASHSCOPE_BASE_URL,
temperature=0.7
)
def _get_examples(self, source_lang: str, target_lang: str) -> list:
"""获取翻译示例"""
key = (source_lang, target_lang)
return self.EXAMPLES.get(key, [])
def _create_prompt(self, source_lang: str, target_lang: str) -> ChatPromptTemplate:
"""创建翻译 Prompt"""
source_name = self.SUPPORTED_LANGUAGES[source_lang]
target_name = self.SUPPORTED_LANGUAGES[target_lang]
system_message = f"""你是一位专业的翻译专家,精通多种语言。
任务:将{source_name}文本翻译成{target_name}
翻译原则:
1. 准确传达原文含义
2. 保持原文的语气和风格
3. 使用地道的目标语言表达
4. 对于专有名词,保留原文或添加注释
5. 如果原文有错误,先翻译再指出问题"""
messages = [("system", system_message)]
# 添加 Few-shot 示例
examples = self._get_examples(source_lang, target_lang)
for ex in examples:
messages.append(("human", ex["source"]))
messages.append(("ai", ex["target"]))
messages.append(("human", "{text}"))
return ChatPromptTemplate.from_messages(messages)
def translate(self, text: str, source_lang: str, target_lang: str) -> str:
"""执行翻译"""
if source_lang not in self.SUPPORTED_LANGUAGES:
raise ValueError(f"不支持的源语言: {source_lang}")
if target_lang not in self.SUPPORTED_LANGUAGES:
raise ValueError(f"不支持的目标语言: {target_lang}")
prompt = self._create_prompt(source_lang, target_lang)
messages = prompt.format_messages(text=text)
response = self.model.invoke(messages)
return response.content
def translate_stream(self, text: str, source_lang: str, target_lang: str):
"""流式翻译"""
prompt = self._create_prompt(source_lang, target_lang)
messages = prompt.format_messages(text=text)
for chunk in self.model.stream(messages):
yield chunk.content
# 使用示例
if __name__ == "__main__":
translator = MultilingualTranslator()
# 英译中
result = translator.translate(
"Artificial intelligence is transforming the world.",
source_lang="en",
target_lang="zh"
)
print(f"翻译结果: {result}")
# 流式翻译
print("\n流式翻译: ", end="")
for chunk in translator.translate_stream(
"机器学习是人工智能的一个重要分支。",
source_lang="zh",
target_lang="en"
):
print(chunk, end="", flush=True)
print()
