Skip to content

AI工程 - 构建生产级AI系统的学科

Published: at 08:00 AM

什么是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流程的可视化编程

关键要点

  1. AI工程关注系统,而不是模型——专注于可靠性,而不仅仅是能力

  2. 概率核心周围的确定性包装器——通过工程使不可靠的组件变得可靠

  3. 可观察性不可妥协——你无法改进无法衡量的东西

  4. 测试属性,而不是输出——为非确定性系统调整测试

  5. 成本优化是核心关注点——没有优化,成本会螺旋式上升

  6. 反馈循环实现持续改进——构建随时间变好的系统

  7. 优雅降级至关重要——计划失败,不要希望它们不会发生


结论

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架构,以及使用不可靠组件构建可靠系统。


Previous Post
智能体AI - 从聊天机器人到自主数字工作者
Next Post
AI现实检验——最新劳动力市场数据对你的职业生涯意味着什么