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()
相关推荐
dtq042416 分钟前
C语言-结构体详解
c语言·开发语言·学习
梅雅达编程笔记29 分钟前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
持力行29 分钟前
C++与Java变量声明、定义及内存分配的核心区别
java·开发语言·c++
Lei活在当下1 小时前
从 Token 到 RAG:我这一周搭起的大模型基础认知地图
人工智能·langchain·openai
zhz52141 小时前
GIS项目中空间参考转换与MBTiles偏移:问题成因、解法与避坑
python·vue·gis
jinyishu_2 小时前
C++ 继承全解:从基础到高级特性
开发语言·c++
KaMeidebaby2 小时前
卡梅德生物技术快报|如何制备单克隆抗体:小众禽类靶点单抗制备实操流程:双载体抗原交叉筛选完整工艺记录
人工智能·python·深度学习·算法·机器学习
乱写代码3 小时前
Pydantic学习--BaseModel
python
fu15935745683 小时前
【边缘计算实战】P1:从零搭建边云任务卸载仿真实验台(Python 可复现)
数据库·python·边缘计算
蜡台3 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy