Shopee AI Agent 开发 二面

1、Function Calling 和传统工作流有什么区别?

传统工作流是提前把流程写死,比如先做意图识别,再查知识库,再调接口,最后生成答案。它的优点是稳定、可控、方便测试,缺点是灵活性差,场景一复杂就要不断加规则。

Function Calling 是把“什么时候调用工具、调用哪个工具、参数是什么”交给模型决定。它更灵活,适合开放式任务,但稳定性会差一些,容易出现乱调工具、参数错误、重复调用的问题。

线上一般不会纯用其中一种,常见做法是:主流程用工作流控住,局部节点再放给模型做 Function Calling,这样既有灵活性,也不至于失控。

2、多轮对话里上下文太长了怎么处理?

不能把所有历史对话都原样塞给模型,不然 token 成本、时延和噪音都会上升。常见做法是保留最近几轮原文,把更早的内容压缩成摘要,再从历史里补充和当前问题强相关的信息。

如果是线上系统,一般会把上下文拆成三部分:最近对话、历史摘要、外部记忆。最近对话保证连续性,摘要保证长期信息不丢,外部记忆负责补充用户偏好或者稳定事实。

def build_context(recent_msgs, summary, memory):
    context = []
    context.extend(recent_msgs[-6:])
    if summary:
        context.append({"role": "system", "content": f"历史摘要:{summary}"})
    context.extend(memory)
    return context

核心不是“保留越多越好”,而是“保留和当前任务最相关的内容”。

3、模型输出 JSON 不稳定怎么解决?

这是 Agent 里很常见的问题,比如模型输出工具名和参数时,经常会出现字段缺失、类型不对、JSON 不闭合、夹杂解释文本这些情况。

一般有三层处理。第一层是 prompt 约束,明确要求只输出 JSON。第二层是程序校验,用 schema 或 Pydantic 去验证,不合法就拒收。第三层是兜底修复,对轻微格式问题做自动清洗。

from pydantic import BaseModel, ValidationError

class ToolCall(BaseModel):
    tool_name: str
    args: dict

def parse_tool_call(text):
    try:
        return ToolCall.model_validate_json(text)
    except ValidationError:
        return None

工程上不能把执行完全交给模型,模型只负责生成候选,程序负责校验和执行。

4、工具很多的时候怎么做路由?

工具一多,模型容易选错,也容易在不该调的时候乱调。比较稳的做法不是把所有工具都塞进 prompt,而是先做一层候选筛选。

通常会先按任务类型或者意图把工具缩到一个小集合,比如查询类、写入类、分析类、搜索类。然后只把这几个候选工具交给模型选择。最后程序侧再做权限校验和参数校验。

这样做的好处是可以降低模型的选择难度,也能减少上下文长度。工具越多,越要做分层路由,而不是堆工具描述。

5、工具调用失败一般怎么处理?

先分错误类型。像超时、临时网络抖动、短暂 5xx,这种可以退避重试;像参数错误、权限不足、业务状态不允许,这种不应该重试,应该直接返回错误。

如果是有副作用的操作,比如发消息、提交审批、修改状态,就要特别注意幂等性,不能简单重放,否则可能造成重复执行。

import time

def retry_call(func, retries=3):
    for i in range(retries):
        try:
            return func()
        except TimeoutError:
            if i == retries - 1:
                raise
            time.sleep(2 ** i)

线上一般还会配合超时、熔断、降级和人工接管,不是只有“加重试”这么简单。

6、ReAct、Plan-and-Execute、Workflow Agent 分别适合什么场景?

ReAct 是边推理边行动,每一步根据观察结果决定下一步,适合开放任务,但步数不稳定,也容易发散。

Plan-and-Execute 是先做整体规划,再按步骤执行,适合长任务或者目标比较明确的任务,但如果初始规划错了,后面容易一路偏掉。

Workflow Agent 更像流程编排,主要流程是固定的,模型只在局部节点做决策。它最适合业务系统,因为可控、稳定、方便排查。

如果是企业里的 Agent 项目,通常不会纯用 ReAct,而是更偏 Workflow + 局部智能决策。

7、Chunk 切分策略为什么会影响 RAG 效果?

因为切分决定了检索的基本单元。如果 chunk 太大,会带入很多噪音;如果太小,语义可能不完整,召回到了也没法回答问题。

常见策略有固定长度切分

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务