AI 全栈开发工程师二面面经
完整信息
本篇目录
来源内容仅部分可用:原文不足
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": []
}
格式上没有问题,但审核结
本篇目录
当前问题0112
- 01
自我介绍
- 02
你做过的系统中,哪一部分最能体现你的技术能力?
- 03
怎样证明一个 Agent 的执行结果不是偶然成功?
- 04
如何控制 Agent 的最大执行范围?
- 05
如何设计一个支持多国家法规的知识库?
- 06
图片识别结果和文本审核结果不一致时,应该怎样处理?
- 07
Spring Boot 中如何设计模型调用客户端?
- 08
Spring Boot 应用中的配置如何避免被错误覆盖?
- 09
Agent 工具返回大量数据时,如何避免上下文快速膨胀?
- 10
如何让 Agent 正确理解工具之间的依赖关系?
- 11
如何处理工具调用参数不完整的问题?
- 12
如何处理模型返回了合法 JSON,但业务语义仍然错误?