微店

AI 全栈开发工程师二面面经

完整信息

12 条问法 · 12 道题

本篇目录

来源内容仅部分可用:原文不足

1. 自我介绍

2. 你做过的系统中,哪一部分最能体现你的技术能力?

3. 怎样证明一个 Agent 的执行结果不是偶然成功?

不能只看几次人工演示,需要建立可重复的任务数据集和完整的执行记录。

测试集应包含正常任务、边界任务、工具失败、数据缺失、权限不足、模型返回异常和多次重试等情况。每次执行都要保存:

  • 使用的模型和 Prompt 版本。
  • 工具列表和工具版本。
  • 每一步的输入、输出和状态。
  • 工具调用次数和耗时。
  • 最终结果及其校验结果。

评估指标可以包括任务完成率、关键步骤成功率、人工接管率、重复调用率、平均执行步数、异常恢复成功率和单位任务成本。

如果 Agent 在相同输入和相同工具状态下结果差异很大,就需要检查规划约束、随机参数、上下文压缩和工具返回格式,而不能简单认为模型“不稳定”。

4. 如何控制 Agent 的最大执行范围?

Agent 的执行范围应该同时受到步数、时间、Token、工具次数和预算限制。

public class ExecutionBudget {

    private final int maxSteps;
    private final long deadline;
    private final int maxToolCalls;
    private final int maxTokens;

    private int steps;
    private int toolCalls;
    private int usedTokens;

    public boolean canContinue() {
        return steps < maxSteps
                && toolCalls < maxToolCalls
                && usedTokens < maxTokens
                && System.currentTimeMillis() < deadline;
    }

    public void consumeStep() {
        steps++;
    }

    public void consumeToolCall() {
        toolCalls++;
    }

    public void consumeTokens(int tokens) {
        usedTokens += tokens;
    }
}

除了数量限制,还要限制工具权限。例如 Agent 可以查询商品法规,但不能直接修改商品价格、删除商品或发布商品。对于高风险操作,需要拆成预览和确认两个步骤。

5. 如何设计一个支持多国家法规的知识库?

法规知识库不能只按普通文本切分,还需要保存国家、地区、法规类型、生效时间、适用类目和版本信息。

文档元数据可以设计为:

{
  "documentId": "regulation-100",
  "country": "DE",
  "category": "cosmetics",
  "version": "2026-01",
  "effectiveFrom": "2026-01-01",
  "effectiveTo": null,
  "language": "de",
  "source": "official"
}

用户查询时,国家、类目和生效时间应该作为结构化过滤条件参与召回,而不能只依赖向量相似度。

同时需要保留原文条款号和页码,审核结果必须可以回到法规原文。法规更新时,要让新旧版本在索引层面明确隔离,避免模型同时看到互相冲突的条款。

6. 图片识别结果和文本审核结果不一致时,应该怎样处理?

首先要区分两种情况:

  • 图片和文本描述表达的是同一事实,但细节不同。
  • 图片识别出文本中没有声明的商品特征。

系统不能让模型直接选择一个结果作为最终事实,而应该保留来源和置信度:

{
  "field": "material",
  "textValue": "cotton",
  "imageValue": "leather",
  "textConfidence": 0.96,
  "imageConfidence": 0.82,
  "conflict": true
}

对于影响合规结论的冲突,应进入人工复核或补充识别流程。对于低风险字段,可以根据预设优先级处理。

最终审核结果应该说明冲突来源:

商品描述声明材质为棉,但图片识别结果疑似包含皮革元素。
当前无法自动确认,建议补充材质证明。

7. Spring Boot 中如何设计模型调用客户端?

模型调用客户端应该统一封装超时、重试、流式响应、错误转换、Token 统计和链路追踪,不能让业务代码到处直接拼 HTTP 请求。

接口可以定义为:

public interface ModelClient {

    ModelResponse chat(ModelRequest request);

    Flux<ModelChunk> stream(ModelRequest request);

    ModelEmbedding embedding(String text);
}

请求配置可以使用 @ConfigurationProperties:

@ConfigurationProperties(prefix = "model")
public class ModelProperties {
    private String baseUrl;
    private String apiKey;
    private Duration connectTimeout;
    private Duration readTimeout;
    private int maxRetries;

    // getter / setter
}

不同模型供应商的返回格式不应该直接暴露给业务层,而应该转换成统一的内部对象。这样后续更换模型时,不需要修改上层业务逻辑。

8. Spring Boot 应用中的配置如何避免被错误覆盖?

需要明确配置优先级,并对关键配置做启动校验。

例如模型地址、租户隔离开关、生产环境日志级别和数据库连接配置都应该在启动时验证,避免应用启动后才暴露问题。

@Component
@Validated
@ConfigurationProperties(prefix = "model")
public class ModelProperties {

    @NotBlank
    private String baseUrl;

    @NotBlank
    private String apiKey;

    @NotNull
    private Duration timeout;

    // getter / setter
}

敏感配置使用环境变量或密钥管理系统注入,不提交到代码仓库。生产环境还应该输出配置摘要,但不能打印 API Key、数据库密码等敏感字段。

9. Agent 工具返回大量数据时,如何避免上下文快速膨胀?

工具不应该把完整数据库结果原样返回给模型,而应根据任务目标进行裁剪和聚合。

例如查询商品审核记录时,可以只返回:

{
  "total": 1260,
  "matched": 18,
  "items": [
    {
      "productId": "P1001",
      "riskType": "label_missing",
      "country": "FR",
      "status": "OPEN"
    }
  ],
  "truncated": true
}

工具层可以采用分页、字段选择、聚合统计和摘要化。对于后续步骤真正需要的原始数据,可以保存到任务状态中,只把引用 ID 返回给模型。

还要设置单次工具结果的最大字节数和最大条目数,超过限制时返回截断信息,避免模型误以为已经拿到了全部数据。

10. 如何让 Agent 正确理解工具之间的依赖关系?

工具之间的依赖不能只写在自然语言描述中,最好通过状态和前置条件表达。

例如:

extract_product_features
    -> classify_category
    -> query_regulations
    -> check_rules
    -> generate_review

每个工具可以声明前置状态:

public record ToolDefinition(
        String name,
        Set<String> requiredStates,
        Set<String> producedStates
) {
}

执行工具前检查状态:

if (!context.containsState("CATEGORY_IDENTIFIED")) {
    throw new IllegalStateException("必须先完成类目识别");
}

对于固定流程,应该由工作流控制工具顺序;对于开放式任务,可以让 Agent 选择工具,但后端仍然负责验证依赖关系。

11. 如何处理工具调用参数不完整的问题?

首先判断参数是否可以从当前上下文中可靠推导。如果不能推导,就应该向用户追问,而不是让模型猜测。

参数可以分为三类:

  • 必须由用户提供。
  • 可以从上下文提取。
  • 可以使用安全默认值。

例如目标国家、商品 SKU 和审核类型属于关键参数,缺失时必须补充;分页大小可以使用默认值。

工具 Schema 中需要明确必填字段:

{
  "type": "object",
  "required": ["productId", "country"],
  "properties": {
    "productId": {
      "type": "string"
    },
    "country": {
      "type": "string",
      "enum": ["US", "DE", "FR", "JP"]
    }
  },
  "additionalProperties": false
}

参数校验失败后,不应该无限重试。可以将错误字段和格式要求返回给模型,最多修复有限次数,仍然失败就转人工或要求用户补充。

12. 如何处理模型返回了合法 JSON,但业务语义仍然错误?

JSON 合法只说明格式正确,不代表内容正确。

例如模型返回:

{
  "riskLevel": "LOW",
  "evidence": []
}

格式上没有问题,但审核结

本篇目录
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11
  12. 12

同作者面经

展开其余 5 篇收起其余 5 篇

相关公司