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()
相关推荐
科技苑1 小时前
Python简单网络爬虫教程
爬虫·python
Patrick在香港4 小时前
Claude Prompt 香港场景:公文里「今日」落在 6 个日历日上,「翌日」锚错了 5 天
python·自然语言处理·正则表达式·claude·数据清洗
YsyaaabB4 小时前
Python 数值分析
python
阿洛学长4 小时前
计算机二级 Python 基本操作题(15 分)真题笔记(0101 ~ 1903 全套)
python·pycharm
君顾14 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
weixin199701080165 小时前
[特殊字符]️《二手ERP对接电商平台的总体方案:统一数据模型 + 事件驱动 + 灰度上线6原则》(附Python源码)
大数据·python
香菜TTT5 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
aramae5 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
滚雪球~5 小时前
量化交易 防止Windows电脑自动更新并重启
python·量化
jimy16 小时前
readelf 查看“派生类”的vtable符号
开发语言·c++