LangChain作业二---多语言翻译Prompt

多语言翻译 Prompt

目标:实现一个支持多语言互译 + Few-shot 示例增强 + 流式输出的翻译工具。
步骤:
一、依赖配置
  1. 安装必要库

    1. LangChain

    2. LangChain-core

    3. python-dotenv

  2. 配置环境变量

    在 .env 文件中写入:

    1. DASHSCOPE_API_KEY

    2. DASHSCOPE_BASE_URL

  3. 使用 load_dotenv() 读取配置

二、初始化聊天模型
  1. 使用 init_chat_model 创建模型实例

  2. 传入参数:

    1. model_name(如 qwen-plus)

    2. model_provider(模型来源)

    3. api_key(密钥)

    4. base_url(接口地址)

    5. temperature(控制随机性)

三、设计语言支持体系
  1. 使用字典统一管理:

    复制代码

    SUPPORTED_LANGUAGES = { "zh": "中文", "en": "英文", "ja": "日语", "ko": "韩语", "fr": "法语", "de": "德语" }

  2. 做参数校验

    在翻译前判断:

    避免非法输入。

    1. 是否支持源语言

    2. 是否支持目标语言

四、构建 Few-shot 示例机制
  1. 示例结构设计

    复制代码

    EXAMPLES = { ("en", "zh"): [ {"source": "...", "target": "..."} ] }

  2. 动态获取示例

    复制代码

    def _get_examples(self, source_lang, target_lang): return self.EXAMPLES.get((source_lang, target_lang), [])

五、设计 Prompt 模板
  1. 使用 ChatPromptTemplate 统一管理提示词结构。

  2. System Prompt 设计:明确模型角色 + 翻译规则

  3. 拼接 Few-shot 示例

    复制代码

    messages = [ ("system", "..."), ("human", 示例1输入), ("ai", 示例1输出), ... ("human", "{text}") ]

  4. 生成 Prompt

六、实现普通翻译功能
  1. 接收用户输入

  2. 构建 Prompt

  3. 调用模型

  4. 返回翻译结果

七、实现流式翻译
  1. 使用 stream 接口

  2. 逐块输出

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()
相关推荐
SunnyDays101128 分钟前
如何在 Java 中实现 OFD 与 PDF 格式互转
java·开发语言
HappyAcmen29 分钟前
2.PDF长文档完整读取
python·pdf·rag
装不满的克莱因瓶29 分钟前
掌握感知器的学习原理
人工智能·python·神经网络·算法·ai·卷积神经网络
py小王子33 分钟前
Nature 期刊图复现|Python 实现双轴高维直方图与重叠分布图
python·nature·期刊图复现
小熊Coding38 分钟前
从零打造一款回合制 RPG 游戏:基于 Pygame 的《塔影守卫》全解析
python·游戏·计算机专业·pygame·rpg·2d游戏
keykey6.39 分钟前
用 PyTorch 训练图像分类器:完整实战
开发语言·人工智能·深度学习·机器学习
雪度娃娃40 分钟前
转向现代C++——保证const成员函数的线程安全性
开发语言·c++
原来是猿1 小时前
深入理解 C++ unordered_map 与 unordered_set
开发语言·c++
满天星83035771 小时前
【Qt】信号和槽 (一)(概述和基本使用)
开发语言·c++·qt