V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Limited Time Free
 App Store 限免应用列表
Promoted by K2
gopheryi
V2EX  ›  开源软件

写了个 MCP 翻译工具

  •  
  •   gopheryi · 67 天前 · 1016 次点击
    这是一个创建于 67 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码库

    使用 2 种方式实现:

    1. 使用谷歌 LLM gemini-2.0-flash 翻译
    translatePrompt = """
    # 角色
    
    你是一位资深且专业的翻译员,具备出色的中英文互译能力,能精准且流畅地完成各类文本的翻译工作。
    
    ## 技能
    
    ### 技能 1: 中译英
    
    1. 当用户给出中文文本时,迅速且高度准确地将其转换为地道的英文表达。
    2. 严格遵循英文的语法规则和惯用表达方式,使翻译结果自然流畅。
    3. 回复示例:
       \=====
    
    -  <翻译后的英文内容>
      \=====
    
    ### 技能 2: 英译中
    
    1. 当用户提供英文文本时,精确且清晰地将其翻译成通俗易懂的中文。
    2. 注重中文表达的自然性和准确性,让译文符合中文的语言习惯。
    3. 回复示例:<翻译后的中文内容>
    
    ## 限制:
    
    - 仅专注于中英文之间的翻译工作,不涉及其他语种。
    - 始终保证翻译的精准性和流畅性,务必严格按照规定格式进行回复。
    
    """
    @mcp.tool(
        name="translate",
        description="使用 gemini 翻译文本,中英文互译",
    )
    def translate(content: str = Field(description="需要翻译的文本")) -> str:
        if not GOOGLE_AI_STUDIO_KEY:
            return "API_KEY is not configured."
        try:
            res = call_openai(translatePrompt, content)
            return res
        except Exception as e:
            return f"Error translating: {e}"
    
    1. 使用 deepl api 实现
    @mcp.tool(
        name="translate_deepl",
        description="使用 deepl 翻译,支持多种语言互译",
    )
    def translate_deepl(
        content: str = Field(description="需要翻译的文本"),
        source_lang: str = Field(
            description="当前语言,source language,支持: AR,BG,CS,DA,DE,EL,EN-GB,EN-US,ES,ET,FI,FR,HU,ID,IT,JA,KO,LT,LV,NB,NL,PL,PT-BR,PT-PT,RO,RU,SK,SL,SV,TR,UK,ZH,ZH-HANS,ZH-HANT"
        ),
        target_lang: str = Field(
            description="目标语言,target language,支持:AR,BG,CS,DA,DE,EL,EN-GB,EN-US,ES,ET,FI,FR,HU,ID,IT,JA,KO,LT,LV,NB,NL,PL,PT-BR,PT-PT,RO,RU,SK,SL,SV,TR,UK,ZH,ZH-HANS,ZH-HANT"
        ),
    ) -> str:
        url = "https://deeplx.mingming.dev/translate"
        headers = {"Content-Type": "application/json"}
        data = {"text": content, "source_lang": source_lang, "target_lang": target_lang}
        response = requests.post(url, headers=headers, data=json.dumps(data))
        return response.text
    
    2 条回复    2025-05-17 00:19:58 +08:00
    billzhuang
        1
    billzhuang  
       67 天前 via iPhone
    斗胆问一句,我都有 LLM 了,为啥不直接问,却要走 MCP
    gopheryi
        2
    gopheryi  
    OP
       67 天前
    我主要是在 vscode + cline 插件里用这个工具,cline 目前还没有报错 prompt 的功能,每次写很麻烦,可以直接把 prompt 写在 mcp 里
    就可以这样用: 把 @xxx 文件 或则输入内容 翻译成英文/法语...

    其实还可以优化,比如长文本可能超出 llm 单次支持的长度,在 mcp 里拆分翻译后再返回
    @billzhuang
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:43 · PVG 08:43 · LAX 17:43 · JFK 20:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.