进阶 16 分钟Support

使用本地 LLM 提供多语言客户支持:6 种语言,无需 cloud

您管理着一个接收法语、英语、西班牙语、德语、意大利语和阿拉伯语工单的客户支持团队。将每条消息发送到云端 API,意味着将电子邮件、订单号以及有时是个人数据暴露给第三方——并按 token 付费。本指南使用 Qwen 3.8 27B 搭建一个 100% 本地的多语言客户支持聊天机器人,具备自动语言检测、适应每种文化的语气,以及通过 webhook 直接集成 Zendesk 或 Freshdesk。

作者: Marie L.·更新于 2026-08-27·已在 Windows、macOS 和 Linux 上测试

#为什么使用本地 LLM 提供多语言客户支持

云API(如GPT-4o、Claude、Gemini)按token计费,并要求客户消息跨境传输至欧盟以外地区。对于每日处理5000个工单的B2C服务,月度费用很快会超过1500欧元,一旦客户在工单内容中提供IBAN或社会保障号码,GDPR合规性便变得极为繁琐。

本地 LLM 一次性解决两个问题。Qwen 3.8 27B(阿里巴巴,2026年8月14日发布)原生支持超过100种语言,对需求说明中提到的六种欧洲语言的处理质量可与入门级云模型相媲美,可在单块 RTX 4090 或 Mac M4 Max 上运行。每个客服工单的边际成本为零。

i
为何选择 Qwen 3.8 27B
这是阿里巴巴 2026 年的通用旗舰模型:上下文窗口为 262,000 个 token,支持视觉,并采用 Apache 2.0 许可证(允许自由用于商业用途)。用于客服时,这个超大的上下文窗口可以容纳工单的全部历史记录,无需截断;其多语言表现仍是同档次中最好的(Q4 版本占用 18 GB,可装入显存为 24 GB 的显卡)。有一项设置需要注意:将推理强度设为「low」。默认情况下,它会过度推理,导致客服回复的延迟无谓增加。

#先决条件

企业本地 AI 套件

在工作场所部署本地 AI:GDPR、AI 法案、多用户架构、成本、供管理层参考的说明材料。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款
显存至少为24 GB的GPU
RTX 3090、4090、5090,或配备32GB统一内存的Mac M3/M4 Max。Qwen 3.8 27B在Q4_K_M模式下占用约18GB。
Ollama 已安装
使用较新的版本,以原生支持 Qwen 3.8(视觉和长上下文)。
一个Zendesk或Freshdesk账户
需具备管理员权限,以创建 Webhook 集成和触发器。
可访问的HTTPS端点
要么使用 VPS 作为反向代理访问您的 Ollama,要么使用 ngrok / Cloudflare Tunnel 暴露本地服务器。
Python 3.11+
语言检测层和Webhook路由层:FastAPI + langdetect即可满足需求。

#1. 使用 Ollama 安装 Qwen 3.8 27B

该模型可直接在 Ollama 库中获取,请开始下载并进行快速测试:

终端
ollama pull qwen3.8:27b
ollama run qwen3.8:27b "Réponds en une phrase : qu'est-ce qu'un LLM open-weight ?"

pull 操作会下载约 18 GB 的数据。在 RTX 4090 上,Q4 量化下的推理速度为每秒 40–60 个 token,足以在 3 至 5 秒内生成一条客服回复。将推理强度设为“low”后,延迟还会进一步降低。

→
立即测试多语言功能
使用 ollama run,连续用 6 种语言提出同一个问题。Qwen 3.8 不会在不知不觉中切换语言,而旧代 Llama 有时会逐渐转向英语。这正是客户支持所需要的。

将 Ollama 暴露在网络上,以便您的webhook可以访问:

systemd 覆盖配置
sudo systemctl edit ollama
# Ajoutez :
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_KEEP_ALIVE=30m"

sudo systemctl restart ollama

OLLAMA_KEEP_ALIVE=30m 会在最后一次请求后将模型保留在显存中 30 分钟,避免在业务低峰时段处理每个工单时都要冷启动。

#2. 自动语言检测

在向 Qwen3 发送消息之前,先识别消息的语言,以选择合适的系统提示。fast-langdetect 库基于 Meta 的 fastText,可检测 176 种语言,每次请求耗时不到 5 毫秒;对于超过 50 个字符的消息,准确率超过 99%。

安装
pip install fast-langdetect fastapi uvicorn httpx
detector.py
from fast_langdetect import detect

SUPPORTED = {"fr", "en", "es", "de", "it", "ar"}

def detect_language(text: str) -> str:
    text = text.replace("\n", " ").strip()
    if len(text) < 10:
        return "en"  # message trop court, fallback raisonnable
    result = detect(text, low_memory=False)
    lang = result["lang"]
    return lang if lang in SUPPORTED else "en"
!
混合语言消息的陷阱
法国客户粘贴英文错误信息时,可能会让语言检测器转而判定为英语。只对第一段(第一个空行之前的内容)进行检测,而不要检测整条消息。否则,您就会用英语回复一位法语客户。

#3. 适配语言和语气的系统提示

优质的多语言客服服务并非把法语提示词翻译成英语,而是调整语体。专业场合的法语使用敬称,商务英语则更直接;德语要求明显体现正式礼貌,拉美西班牙语接受更热情的表达,意大利语更富表现力,阿拉伯语则要求在消息开头和结尾使用礼貌用语。

prompts.py
SYSTEM_PROMPTS = {
    "fr": (
        "Tu es un agent de support client professionnel. "
        "Réponds en français, avec vouvoiement systématique. "
        "Sois concis, empathique, factuel. Ne promets jamais de remboursement "
        "sans validation. Si tu ne sais pas, propose une escalade humaine."
    ),
    "en": (
        "You are a professional customer support agent. "
        "Reply in English, business-friendly tone, direct and concise. "
        "Never commit to a refund without confirmation. "
        "Escalate to a human if uncertain."
    ),
    "es": (
        "Eres un agente de soporte profesional. Responde en español, "
        "trato de usted, tono cálido pero conciso. Nunca prometas reembolsos "
        "sin confirmación. Escala a un humano en caso de duda."
    ),
    "de": (
        "Du bist ein professioneller Kundensupport-Agent. Antworte auf Deutsch "
        "mit Sie-Form, höflich-formell, präzise und sachlich. Versprich nie eine "
        "Rückerstattung ohne Bestätigung. Eskaliere im Zweifel an einen Menschen."
    ),
    "it": (
        "Sei un agente di assistenza clienti professionale. Rispondi in italiano, "
        "forma di cortesia (Lei), tono cordiale e conciso. Mai promettere rimborsi "
        "senza conferma. Scala a un umano in caso di dubbio."
    ),
    "ar": (
        "أنت موظف دعم عملاء محترف. أجب باللغة العربية الفصحى، "
        "بأسلوب رسمي ومهذب يبدأ بتحية وينتهي بعبارة لطيفة. "
        "لا تعد بأي استرداد دون تأكيد. إذا لم تكن متأكدًا، اطلب تدخل موظف بشري."
    ),
}
→
提示中的业务级防护
“绝不承诺退款”“不知道时就上报处理”“不提供折扣”这三条指令,是防止 LLM 在客服工作中造成实际损害的唯一保障。请在所有语言版本中加入这些指令。语气可以改变,业务规则不能改变。

#4. 集成Zendesk或Freshdesk的Webhook

Zendesk和Freshdesk在每个新工单创建时触发HTTP POST webhook。我们提供一个FastAPI端点,用于检测语言、选择提示词、调用Ollama,并将响应返回至支持系统API,以便作为内部评论添加(人工客服人员在发送前进行审核)。

webhook_server.py
from fastapi import FastAPI, Request
import httpx
from detector import detect_language
from prompts import SYSTEM_PROMPTS

app = FastAPI()
OLLAMA_URL = "http://localhost:11434/api/chat"

@app.post("/webhook/zendesk")
async def handle_ticket(req: Request):
    payload = await req.json()
    ticket_id = payload["ticket"]["id"]
    message = payload["ticket"]["description"]

    lang = detect_language(message)
    system = SYSTEM_PROMPTS[lang]

    async with httpx.AsyncClient(timeout=60) as client:
        r = await client.post(OLLAMA_URL, json={
            "model": "qwen3.8:27b",
            "messages": [
                {"role": "system", "content": system},
                {"role": "user", "content": message},
            ],
            "stream": False,
            "options": {"temperature": 0.3, "num_ctx": 8192},
        })
    draft = r.json()["message"]["content"]

    # Ajoute la réponse en note interne sur le ticket
    await post_internal_note(ticket_id, lang, draft)
    return {"status": "ok", "lang": lang}

post_internal_note 函数通过 Zendesk API(PUT /api/v2/tickets/{id}.json)或 Freshdesk API(POST /api/v2/tickets/{id}/notes)将草稿提交为私密评论。人工客服人员审阅、调整后点击“Envoyer”。您可以节省约 60% 的撰写时间,同时始终不让机器人独自回复。

  1. 01
    暴露端点
    Cloudflare Tunnel 或 ngrok 指向 http://localhost:8000。记下公开的 HTTPS URL。
  2. 02
    创建 webhook 目标
    在 Zendesk Admin → Apps & intégrations → Webhooks 中,创建一个目标,填写您的 URL,并将请求方法设为 POST。
  3. 03
    连接触发器
    在 Triggers 中,将条件设为 "Ticket Created",动作设为 "Notify webhook",并使用包含 {ticket: {id, description, requester}} 的 JSON 负载。
  4. 04
    使用模拟工单进行测试
    以德语创建一个工单。端点必须接收事件,检测到 "de",并在内部备注中发布德语草稿。
  5. 05
    逐步在生产环境中启用
    先从一个队列开始(例如西班牙语队列)。持续一周评估质量,再逐个队列扩展。
!
绝不直接向客户回复
LLM 负责撰写,人类负责审核。这是铁律。如果一个 Qwen 3.8 幻觉出订单号或编造退款政策,最终只会换来 Trustpilot 上的一星差评。在拥有六个月的分语言质量度量数据之前,请保持草稿模式。

#5. 按语言分别评估质量

Qwen 3.8 在这六种语言中的表现并不相同。法语和英语表现出色,西班牙语和意大利语表现很好,德语尚可,阿拉伯语则因方言而异(现代标准阿拉伯语 MSA 表现不错,马格里布方言则逊色一些)。需要通过测量来指导使用。

从第一天起,就要为每种语言记录以下三个指标:

无需修改即可审核通过的比例
代理直接发送的草稿比例。这是最简单且最直观的指标。目标值:3 个月内达到 40–60%。
编辑率(修改词数/生成词数)
通过对最终回答与草稿进行 diff 比较来衡量修改幅度。如果某种语言的修改比例超过 30%,就需要重新调整该语言的提示词。
按语言划分的 CSAT
将问题解决后的满意度调查结果与工单语言交叉分析。如果德语评分降至 3.5/5,而法语仍保持在 4.5,就说明表达语气存在问题。
i
实际应用场景的调整示例
在一家业务拓展至德国的法国电商的实际部署中,德国端的验证通过率一直停留在 18%。已查明的原因是:直译后的提示词写着“要富有同理心”。在德语商务语境中,“empathisch”听起来像心理治疗师的用语。将其替换为“verbindlich und lösungsorientiert”(亲切得体、以解决方案为导向)后 → 两周内验证通过率达到 45%。

#常见陷阱

机器人回复的语言错误
这几乎总是由混合语言消息造成的(法语工单下方带有英语签名)。请根据第一段检测语言,或在系统提示词之外,再添加明确指令 "Reply in {lang}" 来指定回复草稿的语言。
延迟 > 10 秒
请检查 OLLAMA_KEEP_ALIVE 是否已启用,以及模型是否仍驻留在显存中。ollama ps 应显示 100 % GPU。如果没有,请针对较短的客服工单将 num_ctx 降至 4096。
阿拉伯语响应格式错误(从右到左)
Qwen3 能很好地生成阿拉伯语,但有些客服界面不会自动按从右到左(RTL)的方向显示。在 Zendesk/Freshdesk 的回答区块上添加 dir="rtl" lang="ar"。
虚构促销信息的生成
将 temperature 降至0.2,并在提示词中明确写道:“除非工单中包含促销信息或折扣码,否则不要提及任何促销或折扣码。”LLM 很喜欢提供并不存在的赠品。
多次重放的 Webhook
Zendesk 在超时情况下可重试。将 ticket_id 存入 Redis,设置 10 分钟的 TTL 以实现幂等性——否则会对同一个 ticket 生成 3 个草稿。

#深入了解

基础方案稳定后,两个扩展可以显著提高审核通过率:将本地 RAG 接入您的知识库(FAQ、退货政策、保修条款),让回答以事实为依据;再用几千个已解决的工单增加一层 LoRA 微调,使语气符合企业风格。若要让多个工作站在生产环境中使用,在内网中部署并置于 Nginx 后方即可处理网络和身份认证方面的需求。

这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。