海康视觉九点旋转标定实战:从Modbus通讯到PLC联调的完整流程
2026/3/18 10:58:10
过去两年,我维护过一套基于正则+关键词的客服系统。用户问“我昨天买的手机能退吗”,规则要写“退|退货|退款|能不能退”,一旦用户换成“想把手上的新机退了”,规则立刻抓瞎。更糟的是多轮对话:用户先问“运费谁出”,再问“那要是七天外呢”,上下文一丢,答案全靠猜。结果客服同学每天仍要人工兜底 60% 的咨询量。
LLM 的出现把“写规则”变成了“读语义”。它能把“想把手上的新机退了”自动映射到“退货政策”意图,还能记住前面的“运费”话题,给出连贯回答。对开发团队来说,最大收益是把维护上万条正则的成本,变成维护一段自然语言 prompt。
我花两周跑了三组对比实验,结论直接放表:
| 维度 | OpenAI GPT-3.5 | Claude 3 Haiku | 本地 7B 量化 |
|---|---|---|---|
| 首 token 延迟(ms) | 600-900 | 400-600 | 120-200 |
| 每 1k 会话成本 | $0.002 | $0.001 | 电费≈0 |
| 数据隐私 | 出公网 | 出公网 | 完全本地 |
| 开发速度 | 最快 | 快 | 需 GPU 运维 |
| 上下文长度 | 4k | 200k | 8k(可扩展) |
选型建议
下面代码全部跑通 Python 3.10,依赖仅openai>=1.0和redis。
import uuid import redis from typing import Dict, List r = redis.Redis(host="localhost", decode_responses=True) def get_session_id() -> str: return uuid.uuid4().hex def save_turn(sid: str, role: str, content: str, ttl: int = 3600) -> None: key = f"chat:{sid}" r.lpush(key, f"{role}:{content}") r.expire(key, ttl) def load_history(sid: str) -> List[Dict[str, str]]: key = f"chat:{sid}" items = r.lrange(key, 0, -1) history = [] for item in reversed(items): # 按时间正序 role, content = item.split(":", 1) history.append({"role": spinxo role, "content": content}) return historyimport openai import time from typing import List, Dict client = openai.OpenAI() def chat_with_backoff(messages: List[Dict[str, str]], max_retry: int = 5) -> str: for attempt in range(1, max_retry + 1): try: rsp = client.chat.completions.create( model="gpt-3.5-turbo", messages=messages, temperature=0.3, max_tokens=300 ) return rsp.choices[0].message.content except openai.RateLimitError as e: wait = 2 ** attempt time.sleep(wait) except Exception as e: raise RuntimeError(f"LLM call failed: {e}") from e raise RuntimeError("Exceed max retry")intent_prompt = """ 你是客服意图识别器,只输出 JSON,不解释。 用户问题:{question} 可选意图:[退货政策, 运费说明, 优惠券, 账号安全, 其他] {"intent": "退货政策"} """把intent_prompt.format(question=msg)塞进messages里,LLM 会返回干净 JSON,后续用json.loads即可。
我用 locust 起 100 并发,脚本里每次随机拿 200 条真实对话。结果:
优化手段:
场景:用户聊了 50 轮,token 数飙到 3.8k,GPT-3.5 直接截断。
解决:
现象:用户问“你们卖苹果吗”,模型答“有的,红富士农场直采”。实际我们只做 3C。
检测:
{"confidence": 0.85},低于 0.7 走兜底话术纠正:
black + isort,CI 里跑flake8 --max-line-length 88Raises声明extra={"sid": sid}便于追踪我把 Claude 换到 Haiku 后,成本降一半,但平均延迟仍比 GPT-3.5 高 200 ms;本地 7B 模型速度飞起,却需要常备 GPU。你的业务场景会怎么选?是“小而快”的本地量化,还是“贵但稳”的云上 API?欢迎留言聊聊你们的折中方案。