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()
相关推荐
Maiko Star44 分钟前
*【HM-LC】Milvus向量库详解:Collection、索引、混合检索与LangChain实战
langchain·milvus
懂点Tech8 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate8 小时前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang8 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
川石课堂软件测试9 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
美狐美颜SDK开放平台9 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04249 小时前
C++小案例 - 日志实战
开发语言·c++
万化冥合9 小时前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
星夜离尘569 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
车软学堂9 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化