什么是AI工程?
AI工程是设计、构建和运营在生产环境中可靠交付价值的AI系统的学科。与专注于提升模型能力的AI研究不同,AI工程专注于让AI系统在规模化运行时可靠工作——处理边缘情况、从故障中恢复,并在单个AI组件具有概率性和不可预测性的情况下提供一致的业务成果。
💡 为什么现在很重要: 在2026年,AI演示与生产AI系统之间的差距前所未有地大。虽然ChatGPT可以写诗,Claude可以编程,但构建能够可靠处理数百万客户请求的AI系统需要根本不同的技能组合。AI工程就是这套技能组合。
简而言之
AI模型是概率性的。生产系统需要是确定性的。AI工程是通过系统化的提示工程、错误处理、可观察性和反馈循环方法来弥合这一差距的学科。它不是要构建更好的模型——而是要围绕不完美的模型构建更好的系统。
关键洞察: 你不需要完美的AI来构建完美的AI系统。你需要的是工程纪律。
相关文章
AI工程技术栈
第1层:模型选择和优化
AI工程从为工作选择正确的模型开始——而不是最强大的模型。
# 错误:一个模型统治一切
response = expensive_gpt4_turbo(user_query)
# 正确:为正确的任务选择正确的模型
if is_simple_classification(task):
response = fast_small_model(task)
elif requires_reasoning(task):
response = claude_sonnet(task)
elif needs_multimodal(task):
response = gpt4_vision(task)
关键原则:
- 成本性能优化:在可能的情况下使用较小的模型
- 延迟预算:匹配模型与响应时间要求
- 后备策略:当主模型失败时会发生什么?
第2层:提示工程即代码
在AI工程中,提示不是字符串——它们是具有版本、测试和部署管道的软件组件。
class CustomerSupportPrompt(BasePrompt):
version = "2.3.1"
def __init__(self):
self.template = """
你是{company_name}的客户支持代理。
上下文:
- 客户级别:{customer_tier}
- 之前的互动:{interaction_history}
- 当前情绪:{sentiment_score}
任务:{user_query}
约束条件:
- 响应长度:少于{word_limit}个词
- 语气:{tone_directive}
- 政策约束:{policy_rules}
输出格式:{output_schema}
"""
def validate(self, response):
# AI输出的结构化验证
return ResponseSchema.validate(response)
@monitor_performance
def execute(self, **kwargs):
# 带有可观察性的仪表化执行
return self.llm.complete(
self.render(**kwargs),
temperature=self.get_temperature(),
max_tokens=self.get_max_tokens()
)
为什么这很重要: 当提示是代码时,它们可以被:
- 版本控制
- A/B测试
- 监控漂移
- 自动优化
第3层:确定性包装器
AI输出是概率性的。生产系统需要确定性。AI工程在概率核心周围构建确定性包装器。
class DeterministicAIService:
def __init__(self, llm, cache, validator):
self.llm = llm
self.cache = cache
self.validator = validator
async def process_request(self, request):
# 1. 检查相同请求的缓存
cache_key = self.generate_cache_key(request)
if cached := await self.cache.get(cache_key):
return cached
# 2. 验证输入
if not self.validator.validate_input(request):
raise InvalidRequestError()
# 3. 使用重试逻辑处理
for attempt in range(3):
try:
response = await self.llm.complete(request)
# 4. 验证输出
if self.validator.validate_output(response):
await self.cache.set(cache_key, response)
return response
except Exception as e:
if attempt == 2:
# 回退到基于规则的系统
return self.fallback_handler(request)
raise AIProcessingError("重试后失败")
第4层:可观察性和监控
AI系统的失败方式与传统系统不同。AI工程需要专门的可观察性。
@dataclass
class AIMetrics:
# 性能指标
latency_p50: float
latency_p99: float
tokens_per_second: float
# 质量指标
coherence_score: float
factuality_score: float
task_completion_rate: float
# 业务指标
user_satisfaction: float
task_success_rate: float
cost_per_request: float
# 漂移检测
prompt_template_version: str
output_distribution_shift: float
embedding_drift_score: float
需要监控的内容:
- 令牌使用:成本优化
- 延迟分布:用户体验
- 输出质量:自动评分
- 语义漂移:当输出随时间变化时
- 错误模式:系统性故障
AI工程的五大支柱
1. 通过冗余实现可靠性
AI组件会不可预测地失败。AI工程通过系统冗余构建可靠性。
class ReliableAIPipeline:
def __init__(self):
self.primary_model = ClaudeAPI()
self.secondary_model = GPT4API()
self.fallback_model = LocalLLaMA()
self.rule_based_fallback = RuleEngine()
async def process(self, request):
# 尝试主模型
try:
return await self.primary_model.complete(request)
except (RateLimitError, TimeoutError):
# 尝试次要模型
try:
return await self.secondary_model.complete(request)
except Exception:
# 尝试本地模型
try:
return await self.fallback_model.complete(request)
except Exception:
# 最终回退到规则
return self.rule_based_fallback.process(request)
关键模式:
- 模型级联:昂贵 → 便宜 → 本地 → 规则
- 地理分布:不同地区,不同提供商
- 时间重试:某些故障是暂时的
2. 通过验证实现质量
每个AI输出都需要验证。AI工程构建全面的验证管道。
class OutputValidator:
def __init__(self):
self.structural_validator = JSONSchemaValidator()
self.semantic_validator = SemanticChecker()
self.business_validator = BusinessRuleEngine()
self.safety_validator = ContentSafetyChecker()
def validate(self, output, context):
# 结构:格式是否正确?
if not self.structural_validator.check(output):
return ValidationError("无效结构")
# 语义:是否有意义?
if not self.semantic_validator.check(output, context):
return ValidationError("语义不匹配")
# 业务:是否遵循我们的规则?
if not self.business_validator.check(output, context):
return ValidationError("违反业务规则")
# 安全:向用户展示是否安全?
if not self.safety_validator.check(output):
return ValidationError("违反安全规则")
return ValidationSuccess()
3. 通过缓存提升性能
AI API调用既昂贵又缓慢。智能缓存至关重要。
class SemanticCache:
def __init__(self, embedding_model, threshold=0.95):
self.embeddings = {}
self.responses = {}
self.embedding_model = embedding_model
self.threshold = threshold
async def get_or_compute(self, query, compute_fn):
# 为查询生成嵌入
query_embedding = await self.embedding_model.embed(query)
# 查找相似的缓存查询
for cached_query, cached_embedding in self.embeddings.items():
similarity = cosine_similarity(query_embedding, cached_embedding)
if similarity > self.threshold:
# 缓存命中!
return self.responses[cached_query]
# 缓存未命中 - 计算并存储
response = await compute_fn(query)
self.embeddings[query] = query_embedding
self.responses[query] = response
return response
缓存策略:
- 精确匹配:用于重复查询
- 语义相似性:用于相似查询
- 结果缓存:用于昂贵的计算
- 嵌入缓存:用于向量操作
4. 通过优化进行成本控制
AI API成本可能会失控。AI工程实施系统化的成本优化。
class CostOptimizer:
def __init__(self, budget_manager):
self.budget_manager = budget_manager
self.model_costs = {
'gpt-4': 0.03, # 每1k令牌
'gpt-3.5': 0.002, # 每1k令牌
'claude': 0.01, # 每1k令牌
'local': 0.0001 # 计算成本
}
async def route_request(self, request):
# 估计复杂度
complexity = self.estimate_complexity(request)
# 检查预算
remaining_budget = self.budget_manager.get_remaining()
# 基于复杂度和预算路由
if complexity == 'simple' or remaining_budget < 100:
return await self.use_model('gpt-3.5', request)
elif complexity == 'moderate':
return await self.use_model('claude', request)
else:
return await self.use_model('gpt-4', request)
def estimate_complexity(self, request):
# 分析请求以估计复杂度
if len(request) < 100 and 'simple' in request:
return 'simple'
elif requires_reasoning(request):
return 'complex'
return 'moderate'
5. 通过反馈实现演进
AI系统必须随时间改进。AI工程构建持续学习循环。
class FeedbackLoop:
def __init__(self):
self.feedback_store = FeedbackDatabase()
self.prompt_optimizer = PromptOptimizer()
self.model_selector = ModelSelector()
async def process_feedback(self, request, response, feedback):
# 存储反馈
await self.feedback_store.save({
'request': request,
'response': response,
'feedback': feedback,
'timestamp': datetime.now()
})
# 分析模式
if feedback.is_negative():
similar_failures = await self.find_similar_failures(request)
if len(similar_failures) > 5:
# 系统性问题 - 优化提示
new_prompt = await self.prompt_optimizer.optimize(
current_prompt=self.current_prompt,
failures=similar_failures
)
await self.deploy_new_prompt(new_prompt)
# 更新模型选择
await self.model_selector.update_performance_stats(
model=response.model,
success=feedback.is_positive()
)
AI工程模式
模式1:三明治模式
将AI放置在确定性层之间:
输入验证 → AI处理 → 输出验证 → 业务逻辑
def sandwich_pattern(user_input):
# 底层:输入验证
validated_input = validate_and_sanitize(user_input)
# 夹层:AI处理
ai_output = ai_model.process(validated_input)
# 顶层:输出验证和转换
validated_output = validate_and_transform(ai_output)
# 提供:应用业务逻辑
return apply_business_rules(validated_output)
模式2:断路器
防止AI系统中的级联故障:
class AICircuitBreaker:
def __init__(self, failure_threshold=5, timeout=60):
self.failure_count = 0
self.failure_threshold = failure_threshold
self.timeout = timeout
self.last_failure_time = None
self.state = 'closed' # closed, open, half-open
async def call(self, ai_function, *args):
if self.state == 'open':
if time.time() - self.last_failure_time > self.timeout:
self.state = 'half-open'
else:
raise CircuitBreakerOpen()
try:
result = await ai_function(*args)
if self.state == 'half-open':
self.state = 'closed'
self.failure_count = 0
return result
except Exception as e:
self.failure_count += 1
self.last_failure_time = time.time()
if self.failure_count >= self.failure_threshold:
self.state = 'open'
raise e
模式3:置信度级联
基于置信度分数路由:
class ConfidenceCascade:
def __init__(self, models):
self.models = models # 按成本/能力排序
async def process(self, request, confidence_threshold=0.8):
for model in self.models:
response = await model.complete(request)
confidence = await self.evaluate_confidence(response)
if confidence > confidence_threshold:
return response
# 如果没有模型满足阈值,返回最佳尝试
return self.select_best_attempt(all_responses)
模式4:语义路由器
基于语义理解路由请求:
class SemanticRouter:
def __init__(self):
self.routes = {
'technical_support': TechnicalSupportAgent(),
'billing': BillingAgent(),
'general_inquiry': GeneralAgent(),
'complaint': ComplaintHandler()
}
self.classifier = IntentClassifier()
async def route(self, request):
# 分类意图
intent = await self.classifier.classify(request)
# 路由到适当的代理
if intent.confidence > 0.8:
return await self.routes[intent.category].handle(request)
else:
# 低置信度 - 使用通用代理
return await self.routes['general_inquiry'].handle(request)
测试AI系统
AI组件的单元测试
传统的单元测试不适用于概率系统。AI工程为非确定性调整测试:
class AIComponentTest:
def test_customer_support_response(self):
# 不要测试精确输出
response = customer_support_ai.respond("我需要账单方面的帮助")
# 测试属性
assert 'billing' in response.lower() or '账单' in response
assert len(response) < 500 # 简洁性
assert sentiment_analyzer.analyze(response) > 0.7 # 积极语气
assert not contains_pii(response) # 安全性
def test_response_consistency(self):
# 测试多次运行的语义一致性
responses = []
for _ in range(5):
response = ai_model.complete("你们的退货政策是什么?")
responses.append(response)
# 所有响应应该语义相似
embeddings = [embed(r) for r in responses]
for i in range(len(embeddings)):
for j in range(i+1, len(embeddings)):
similarity = cosine_similarity(embeddings[i], embeddings[j])
assert similarity > 0.85
基于属性的测试
测试属性,而不是特定输出:
from hypothesis import given, strategies as st
class PropertyBasedAITest:
@given(st.text(min_size=10, max_size=1000))
def test_summary_properties(self, text):
summary = ai_summarizer.summarize(text)
# 应该始终保持的属性
assert len(summary) < len(text) # 摘要更短
assert language_detect(summary) == language_detect(text) # 相同语言
assert get_key_entities(text).issubset(get_key_entities(summary)) # 保留实体
行为测试
跨场景测试行为:
class BehavioralTest:
def test_escalation_behavior(self):
# 模拟愤怒的客户
conversation = [
"这个产品太糟糕了!",
"我现在就要退款!",
"这是不可接受的!我要打电话给我的律师!"
]
for i, message in enumerate(conversation):
response = support_ai.respond(message, history=conversation[:i])
# 应该适当升级
if i < 2:
assert 'manager' not in response.lower() and '经理' not in response
else:
assert 'manager' in response.lower() or '经理' in response or 'escalate' in response.lower() or '升级' in response
生产中的AI工程
部署策略
1. 影子模式 在不影响用户的情况下与现有系统并行运行AI:
async def handle_request(request):
# 现有系统处理请求
traditional_response = traditional_system.process(request)
# AI系统并行处理(非阻塞)
asyncio.create_task(
shadow_ai_processor.process_and_compare(request, traditional_response)
)
return traditional_response
2. 逐步推出 在监控指标的同时缓慢增加AI使用:
class GradualRollout:
def __init__(self, initial_percentage=1):
self.ai_percentage = initial_percentage
self.metrics = MetricsCollector()
async def process(self, request):
if random.random() < self.ai_percentage / 100:
response = await ai_system.process(request)
self.metrics.record('ai', response)
else:
response = await traditional_system.process(request)
self.metrics.record('traditional', response)
# 根据成功自动调整百分比
if self.metrics.ai_success_rate > self.metrics.traditional_success_rate:
self.ai_percentage = min(100, self.ai_percentage * 1.1)
return response
3. 功能标志 动态控制AI功能:
class AIFeatureFlags:
def __init__(self):
self.flags = {
'use_ai_recommendations': True,
'ai_confidence_threshold': 0.8,
'max_ai_response_time': 2.0,
'fallback_enabled': True
}
async def process_with_flags(self, request):
if not self.flags['use_ai_recommendations']:
return traditional_recommendations(request)
start_time = time.time()
response = await ai_system.get_recommendations(request)
if time.time() - start_time > self.flags['max_ai_response_time']:
logger.warning("AI响应太慢")
if self.flags['fallback_enabled']:
return traditional_recommendations(request)
return response
优雅处理AI故障
class GracefulDegradation:
def __init__(self):
self.strategies = [
self.try_ai_with_retry,
self.try_simpler_model,
self.try_cached_similar,
self.try_rule_based,
self.return_safe_default
]
async def process(self, request):
context = {'request': request, 'attempts': []}
for strategy in self.strategies:
try:
result = await strategy(context)
if result:
return result
except Exception as e:
context['attempts'].append({
'strategy': strategy.__name__,
'error': str(e)
})
# 记录降级路径以供分析
logger.error(f"所有策略都失败了:{context}")
return self.error_response()
AI工程的商业案例
成本分析
没有AI工程:
- 高API成本:未优化的模型使用
- 可靠性差:~70-80%的成功率
- 迭代缓慢:改进提示需要数周
- 隐藏故障:用户发现问题
有了AI工程:
- 成本降低60%:智能路由和缓存
- 99.5%可靠性:后备和验证
- 每日改进:自动优化
- 主动监控:在用户注意到之前捕获问题
ROI计算
投资:
- 2名AI工程师 × 3个月 = 150,000美元
- 基础设施和工具 = 50,000美元
总计:200,000美元
第一年回报:
- API成本降低:500,000美元
- 减少停机时间:300,000美元
- 更快的功能交付:400,000美元
总计:1,200,000美元
ROI:第一年500%
常见反模式
反模式1:上帝提示
# 错误:一个提示中包含所有内容
response = ai.complete("""
你是客户服务代理、销售代表、
技术支持和投诉处理人员。处理这个:{query}
""")
# 正确:专门的代理
intent = classify_intent(query)
response = specialized_agents[intent].handle(query)
反模式2:盲目信任
# 错误:直接信任AI输出
user_data = ai.extract_user_data(document)
database.save(user_data) # 危险!
# 正确:验证一切
user_data = ai.extract_user_data(document)
validated_data = UserDataSchema.validate(user_data)
sanitized_data = sanitize_pii(validated_data)
database.save(sanitized_data)
反模式3:上下文填充
# 错误:将所有内容填充到上下文中
context = load_entire_database()
response = ai.complete(f"上下文:{context}\n查询:{query}")
# 正确:选择性上下文加载
relevant_context = vector_db.search(query, limit=5)
response = ai.complete(f"上下文:{relevant_context}\n查询:{query}")
反模式4:同步一切
# 错误:顺序处理
response1 = await ai_model_1.process(data)
response2 = await ai_model_2.process(data)
response3 = await ai_model_3.process(data)
# 正确:并行处理
responses = await asyncio.gather(
ai_model_1.process(data),
ai_model_2.process(data),
ai_model_3.process(data)
)
AI工程的未来
近期(2026-2027)
1. AI原生架构
- 为概率组件设计的系统
- 对后备和重试的原生支持
- AI指标的内置可观察性
2. 标准化
- AI组件的通用接口
- 行业标准提示格式
- 共享评估基准
3. 工具成熟度
- IDE支持提示开发
- AI特定的调试工具
- 自动提示优化
长期(2028+)
1. 自优化系统
- 自动改进其提示的AI系统
- 基于性能的动态模型选择
- 持续架构演进
2. AI工程平台
- AI应用开发的全栈平台
- 集成测试和监控
- AI组件市场
3. 新抽象
- AI系统的更高级原语
- AI行为的声明性规范
- AI流程的可视化编程
关键要点
-
AI工程关注系统,而不是模型——专注于可靠性,而不仅仅是能力
-
概率核心周围的确定性包装器——通过工程使不可靠的组件变得可靠
-
可观察性不可妥协——你无法改进无法衡量的东西
-
测试属性,而不是输出——为非确定性系统调整测试
-
成本优化是核心关注点——没有优化,成本会螺旋式上升
-
反馈循环实现持续改进——构建随时间变好的系统
-
优雅降级至关重要——计划失败,不要希望它们不会发生
结论
AI工程是令人印象深刻的演示与交付真正价值的生产系统之间的区别。随着AI模型变得更加强大,工程挑战不会消失——它们会演变。
掌握AI工程的组织将构建不仅强大,而且可靠、成本效益高且持续改进的系统。他们将通过系统的工程实践将AI的固有不可预测性转化为竞争优势。
未来属于那些能够将可靠性工程化到不可靠组件中、构建复合改进的反馈循环,并创建能够优雅处理从完美AI响应到完全失败的全部频谱的系统的人。
问题不是AI是否会改变你的行业——而是你是否有工程纪律来有效地利用它。
常见问题
AI工程与MLOps有什么不同?
MLOps专注于机器学习模型的生命周期——训练、部署、监控。AI工程更广泛,涵盖了AI组件周围的整个系统架构,包括提示工程、后备策略和业务逻辑集成。MLOps是AI工程的子集。
我需要成为AI研究人员才能成为AI工程师吗?
不需要。AI工程是关于使用现有AI能力构建可靠系统的。你需要强大的软件工程技能、系统设计经验,以及对AI能力和限制的理解——但不需要深厚的ML知识。
AI工程师最重要的技能是什么?
系统思维。设计即使单个组件不可靠也能保持可靠的架构的能力。这包括理解故障模式、构建适当的抽象,以及创建持续改进的反馈循环。
如何说服我的组织投资AI工程?
从成本分析开始。展示未经工程化的AI系统如何导致螺旋式上升的API成本、可靠性差和用户不满。然后演示一个小型概念验证,展示成本降低和可靠性改进。ROI通常会说明一切。
我应该使用什么工具进行AI工程?
首先关注基础:良好的日志记录(带有请求/响应对的结构化日志)、监控(Prometheus/Grafana或类似工具)、支持基于属性测试的测试框架,以及提示的版本控制。特定的AI工具不如扎实的工程实践重要。
如何在AI系统中处理合规性和安全性?
将合规性构建到你的验证层中。每个AI输出都应该通过安全扫描、PII检测和合规性检查,然后才能到达用户。审计日志应该捕获完整的请求/响应对。考虑通过更受限制的模型运行敏感操作。
关于作者
Vinci Rufus是一位技术高管和思想领袖,开创了AI工程领域。拥有超过25年的软件架构和系统设计经验,他领导了在金融、医疗保健和技术领域每天处理数百万请求的生产AI系统的开发。
作为将AI组件视为一流架构关注点的早期倡导者,Vinci帮助定义了能够大规模实现可靠AI系统的模式和实践。他在确定性包装器、语义缓存和优雅降级方面的工作影响了领先技术公司处理AI可靠性的方式。
Vinci经常在会议上谈论传统软件工程与AI系统的交叉点,强调AI的未来不仅仅是更好的模型——而是围绕这些模型的更好工程。
联系Vinci讨论AI工程实践、生产AI架构,以及使用不可靠组件构建可靠系统。