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()
相关推荐
金銀銅鐵13 小时前
[Python] 扩展欧几里得算法
python·数学·算法
Duckdblab13 小时前
DuckDB 性能调优终极指南:打造闪电般的分析体验
python
带派擂总14 小时前
Python全栈开发精华版最全合集(包含各种面试题) Day24_异常和错误
python
大模型真好玩15 小时前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent
金銀銅鐵17 小时前
n^5 和 n 的个位数是否总相等?
python·数学
aqi0020 小时前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵20 小时前
借助 Pygame 探索最大公约数的规律
python·数学·游戏
ServBay2 天前
9 个 Python 第三方库推荐,不用 AI 都好像多出一个团队
后端·python
用户8356290780512 天前
如何使用 Python 添加和管理 Excel 批注(完整示例)
后端·python