demo 和产品之间隔着这些工程议题

从 demo 到产品

前面 11 篇让你能端到端做出一个可用的 AI 应用,但"可用"和"可运营"之间还差不少东西。这一篇不再深挖单点技术,而是铺一张地图,讲清楚从原型走向产品过程中会遇到的几类工程问题、对应的工具生态、以及什么时候值得投入。内容按照重要度排,前面的议题你一定会碰到,后面的看业务阶段。

LangChain 和 LlamaIndex:什么时候用、什么时候不用

这两个是 Python AI 生态最出名的框架,也是最被争议的。我们前面十一篇全都没用它们,依然完整走通了所有核心能力。所以先摆一个基本态度:它们不是必需品,评估它们的标准是"减少了多少工程量"减去"增加了多少认知负担"

LangChain 的强项是它提供了"万物皆可 chain"的统一抽象——把不同模型、不同向量库、不同工具、不同 parser 插在一起。它的弱项也正是这个——抽象层次多、版本变化大、文档滞后、调试时追一个 bug 要跳十几层。

LlamaIndex 更聚焦"让 LLM 能用你的数据",核心是 RAG 和数据连接器。它在"从各种奇怪数据源加载数据"这件事上做得很成熟,Confluence、Notion、Slack、Airtable 等都有现成 connector。

实务建议:

  • 你的项目核心是 RAG + 多数据源集成——LlamaIndex 能省大量脏活
  • 你的项目有很复杂的多 agent 编排——考虑 LangGraph(LangChain 的状态机模块)
  • 你的项目只是调 LLM + 几个工具——自己写。本系列的代码量已经证明这条可行
  • 你的团队已经深度使用 LangChain——沿用它避免技术栈分裂

反面经验:不要因为"别人都在用"就引入框架。LangChain 的抽象对理解 LLM 应用运作是负面的,很多开发者用了一年都不清楚底下的 HTTP 请求长什么样。先手写一遍,再决定框架。

评测:没有评测就没有改进

"为什么 RAG 回答变差了"这种问题,没有评测集你就只能靠手感判断。正经做 AI 产品的第一个基础设施是评测。

评测集怎么攒——最低成本的方式:每次用户反馈不满意的 case 都记录下来,每周找几十条人工标注"正确答案应该是什么"。三个月能积累几百条高质量评测集,比任何自动化方案都值钱。

离线评测

  • RAG:用 ragas 自动计算 faithfulness、answer_relevancy、context_precision、context_recall
  • 通用任务:用 promptfooopenai/evals 做批量 Prompt / 模型对比
  • LLM-as-judge:用一个更强的模型(比如 GPT-4)给测试输出打分,作为人工评估的代理。注意偏差,judge 本身有系统性倾向

在线评测

  • 用户显式反馈(赞/踩按钮)——转化率约 0.1~1%,样本量要上去
  • 隐式信号——对话轮数、跳出率、复制回答的比例
  • A/B 实验——两个 Prompt 或两个模型并行上线,按业务指标比较

基本原则:任何改动上线前先过评测集,任何严重回退都有人担责。没有这个纪律,团队会在不同改动之间反复震荡。

可观测性:调用 + 上下文 + 延迟 + 成本

传统 APM 工具(DataDog、Sentry、Prometheus)没法照顾 LLM 应用的特有需求——Prompt 是什么、response 是什么、哪些工具被调了、每一步用了多少 token、消耗了多少钱。AI 原生的可观测性工具填这个空白。

主流选择:

  • Langfuse——开源自托管或 SaaS,和语言无关,Python 集成简单。本系列最推荐的默认
  • Arize Phoenix——开源,侧重评测和 trace,对 RAG 场景特别友好
  • LangSmith——LangChain 官方,和 LangChain 深度集成,非 LangChain 项目接入稍麻烦
  • Helicone——以"代理 OpenAI API"形式工作,接入门槛最低

用 Langfuse 举例,接入 5 行代码:

from langfuse.openai import OpenAI  # 替换原本的 from openai import OpenAI

client = OpenAI(...)
# 之后所有调用自动上报到 Langfuse dashboard

接入后你在 dashboard 里能看到:每次对话的完整 Prompt、每个工具调用、每步延迟、累计 token 消耗、各模型调用占比。线上事故排查从"搜日志靠运气"变成"点进 trace 看全貌",效率差一个数量级。

成本:LLM 应用的核心变量

LLM 应用的成本结构和传统 Web 完全不同——流量越大边际成本越高,不像 Web 应用规模上去之后单位成本下降。几个高 ROI 的成本优化手段:

1. 缓存——对重复 Prompt 做哈希缓存。对话类场景命中率不高,但工具类、分类类场景命中率 30~70% 常见。redisdiskcache 都够用。

import hashlib
import json
from functools import lru_cache

def _key(messages, model, temperature):
    return hashlib.sha256(
        json.dumps({"m": messages, "model": model, "t": temperature}).encode()
    ).hexdigest()

@lru_cache(maxsize=1000)
def cached_chat(key):
    # 真实调用逻辑
    ...

2. Prompt Caching(厂商层)——OpenAI / Anthropic / DeepSeek 都推出了服务端 Prompt 缓存:相同前缀的 Prompt 只收缓存价(通常 10% 原价)。RAG、多轮对话、固定 system prompt 场景几乎免费捡到 5 倍成本下降。

3. 模型路由——简单任务(分类、提取)用小模型,难任务(推理、创作)用大模型。先用一个轻量分类器判断任务难度再决定用哪个模型。一个典型例子:客服意图识别用 qwen2.5:7b 本地跑,复杂客户问题才路由到 Claude。

4. 压缩上下文——长对话做摘要;RAG 检索后用重排筛掉低分片段;工具返回值超长时裁剪。上下文每省 1K token 成本就降一档。

5. 批处理——非实时任务(每天打标签 10 万条)走 batch API,主流厂商提供 50% 折扣,延迟换成本。

微调:什么时候值得

微调(fine-tuning)在媒体上被吹得很神,实际上 95% 的应用场景不需要微调——好的 Prompt、RAG、Function Calling 已经能解决问题。下面这些信号才是微调真正值得考虑的:

  • 有稳定的私有数据(标注过的 Q-A 对、行业专业文本、特定写作风格样本)
  • 固定场景重复使用,一次微调能摊到上百万次调用
  • 要求极低延迟或极低成本,小模型微调后能达到大模型效果
  • 需要稳定的输出风格(特定格式、口吻、用词),Prompt 试了都不够稳

不值得的信号:

  • 想让模型"学习新知识"——这应该用 RAG
  • 评测集不足几千条——数据量不够微调效果差
  • 还在验证需求阶段——方向未定,微调就是沉没成本

微调路径选择

  • OpenAI 托管微调——上传 JSONL、调 API、拿到自定义模型 ID。最省事,适合有 API 预算的团队
  • LoRA 本地微调——用 unslothaxolotl 在本地 GPU 上训练低秩适配器,7B 模型的 LoRA 微调单卡 A100 几小时能完成。成本低、迭代快
  • 全量微调——几乎只有研究场景才会做,一般项目别碰

如果你要开始探索微调,我的建议是:先做一个"全量保留原 Prompt,只微调 qwen2.5:7b 学习你的特定风格"的试验项目,感受一下数据准备、训练、评估的全流程。这个体验本身比结果更重要。

安全:别忽视的边界

AI 应用的安全威胁和传统应用显著不同,列几类最常见的供参考:

Prompt 注入——用户输入里藏"忽略之前指令"的文本。防御:把系统指令和用户输入分离放在不同 role、对用户输入做字符级清洗、对高危操作加二次确认

数据泄露——RAG 检索到了不该给这个用户看的文档(比如 HR 数据)。防御:检索前就根据用户身份过滤向量库(metadata filter),而不是检索后过滤

工具滥用——Agent 被诱导调用危险工具。防御:工具最小权限、写操作人工确认、审计日志

越狱——绕过安全限制让模型生成有害内容。防御:多层过滤(输入侧 + 输出侧)、用 OpenAI Moderation / 自训分类器做内容审核

成本攻击——构造超长上下文让模型调用成本飙升。防御:用户级配额、单次请求 token 上限

生产级应用最少要有:请求上限、输入过滤、输出审查、完整审计日志。

持续学习的资源

这一行进展非常快,基本每周都有新东西。几个我自己在跟的信息源:

看信息不是目的,挑一两条深入跟比广撒网有用。

本系列的终点与继续

写到这里,"Python 新手的 AI 进阶之路"主线完结。回头看你走过的路:

从一个搭不好 Python 环境的新手起步,到能调通 API、写稳定 Prompt、做结构化输出、处理向量和 RAG、实现 Function Calling 和 Agent、用 MCP 对接生态、本地部署模型、用 Streamlit 做产品。每一步都是真的能跑的代码,而不是概念展示。

接下来的五篇番外会补一些更细节的议题——LLM 简史、API 参数详解、Token 机制、上下文窗口演进、幻觉与开源。它们是主线的支撑材料,不按顺序读也没关系。

最后一个建议:做一个真实项目。看 100 篇文章不如写一个会被别人用的东西。选一个自己每天都会用的痛点(整理收藏夹、翻译、摘要、代码审查),做成一个 Streamlit 应用给自己用一个月。你会发现比跟完整个系列学到的东西加起来还多。

参考资料

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:进阶方向:评测、监控、成本与微调

本文链接:https://www.sshipanoo.com/blog/ai/ai-for-python/12-进阶方向/

本文最后一次更新为 天前,文章中的某些内容可能已过时!