DEV Community

沈富猷
沈富猷

Posted on

How I Built a Nationwide Bowling Directory with Replit, Next.js, and AI

#ai

先用“足够好”的小模型启动,再用数据与工程化迭代,比一上来追最强大模型更快、更稳、更省钱。本文给出一套能直接落地的最小架构、提示与评估方法、成本控制清单,以及上线前的 Checklist。

1. 为什么不是一味追“大模型”

  • 成本敏感:模型参数越大,请求价格/显存需求越高,很多业务并不需要“全能”。
  • 延迟体验:轻量模型 + 精简上下文,响应更快,交互更顺滑。
  • 可控性:小模型搜索空间小、行为更可预期,便于回归测试与灰度发布。
  • 迭代效率:真正的效果来自 数据与评估闭环,而非盲目堆参数。

经验法则:从 GPT-4o-mini / Llama-3.1-8B-Instruct / Qwen2.5-7B-Instruct 等基线起步;只有当指标/体验卡住时再升级模型或引入工具增强。


2. 最小可行架构(MVA)

目标:在 1–2 周内完成一个可上线的原型,同时保留未来扩展空间。

  • Client:Web/APP/CLI,首屏先渲染“骨架屏”,感知更快。
  • API Gateway:鉴权、限流、观测;给每条请求打“模板版本号”便于追查。
  • Orchestrator(编排):提示版本管理、路由策略、工具调用(检索/函数调用等)。
  • Retrieval(检索):向量库或搜索;严格控制 top-k(3–5)与片段长度。
  • LLM/Small Models:首选小模型;置信度不足再“升舱”到更强模型。
  • Observability:请求/响应/裁剪结果全量日志;可回放、可 AB。

落地选项

  • Orchestrator:LangChain / LlamaIndex / 自研(JSON Schema 强约束输出)。
  • 向量库:pgvector / SQLite + sqlite-vss / Elasticsearch。
  • Embedding:bge-m3text-embedding-3-small
  • 部署:Cloudflare Workers / Vercel + Serverless 后端。

3. 数据与提示:让模型更“听话”

3.1 数据侧三件事

  1. 文档清洗:去页眉页脚、目录、版权尾注;按自然段切分(200–500 字)。
  2. 标注小集:挑 30–100 个关键案例做“黄金集”,持续扩充。
  3. 输入归一化:用户输入先结构化(JSON/表格化),减少歧义。

3.2 提示工程三步走

  1. 角色 + 目标:一句话约束“你是谁,要达成什么”。
  2. 输入模板:把可变信息装入字段,保留 output_schema,便于解析与回放。
  3. 反例约束:列出 3–5 条常见误判,明确不该做什么。

示例(结构化提示)


json
{
  "role": "资深产品文案",
  "goal": "把功能更新写成 120 字以内的发布说明",
  "style": ["简洁", "具体", "避免夸张"],
  "input": "{{raw_text}}",
  "output_schema": { "title": "string", "summary": "string(<=120)" }
}
4. 评估与回归:比上线更重要
4.1 离线评估(LLM-as-Judge)
设定固定 审稿提示 与 裁判模型版本;维度包含:正确性(0.5)、简洁(0.2)、语气(0.3)。

输出 JSON(含评分与理由),方便统计与回归。

4.2 人工抽检与困难集
每周抽检 20–50 条;分歧样本进入“困难集”。

新版本上线前,必须通过“历史缺陷 + 困难集”回归。

4.3 在线指标
请求成功率、超时率、平均/尾延迟;

用户行为转化(点击/留存/反馈);

命中缓存率(衡量成本优化效果)。

5. 成本与延迟控制清单
 上下文裁剪:RAG 片段小而精,top-k=3–5。

 多路策略:先走“便宜模型”,低置信度再升舱。

 结果缓存:Key = 模板版本 + 归一化输入(Redis/KV)。

 请求合并:把大量小任务批量并行(注意速率限制)。

 流式输出:前端先出骨架屏,逐步填充。

 Embedding 复用:同文档多场景共享向量,避免重复开销。

简单估算:多数“问答/摘要/改写”类应用,通过缓存与裁剪,单位请求费用可降 40–80%。

6. 上线前 Checklist(必过)
 提示模板 带版本号,变更留档,可回滚。

 有 离线回归集 与自动评估脚本。

 请求/响应/裁剪结果 可追踪(能还原一次调用用了哪些片段)。

 失败与降级路径明确(缓存/规则引擎/人工兜底)。

 隐私合规:PII 脱敏、日志保留策略、第三方 DPA。

 SLO:可用性、延迟、错误率设定,配备告警。

7. 端到端最小样例(伪代码)
python
复制代码
# 仅示意:小模型优先 + 置信度升舱 + 缓存
def answer(query):
    key = cache_key(template_v="v3", q=normalize(query))
    if cached := cache.get(key):
        return cached

    ctx = retrieve(query, top_k=4)            # 精准裁剪
    out1, conf1 = call_small_model(query, ctx)

    if conf1 < 0.7:
        out2, conf2 = call_stronger_model(query, ctx)
        result = out2
    else:
        result = out1

    cache.set(key, result, ttl=86400)
    log_request(query, ctx, result, template_v="v3")
    return result
8. 结语
与其盯着“参数量”,不如把注意力放在 数据、评估、工程化与成本。
小模型 + 好数据 + 有纪律的工程实践,往往更快到达产品-市场匹配(PMF)。

如果这篇文章对你有帮助,欢迎收藏与转发;也欢迎留言交流你的落地经验。
Enter fullscreen mode Exit fullscreen mode

Top comments (0)