外观
LLM Agent 面试题
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
一、什么是 LLM Agent?
LLM Agent 是一种超越简单文本生成的人工智能系统。它以大型语言模型(LLM)作为核心计算引擎,使其能够进行对话、执行任务、推理并展现一定程度的自主性。简而言之,Agent 是一个具有复杂推理能力、记忆和执行任务手段的系统。
LLM Agent 主要利用大模型的推理(Reasoning)、模仿(Few-shot Learning) 和规划(Planning) 能力,再结合函数调用来实现工具使用(Tool Use)。
二、LLM Agent 的核心组成
在 LLM 赋能的自主 Agent 系统中,LLM 充当"大脑"角色,并与以下关键组件协作:
2.1 规划(Planning)
一项复杂任务通常包含多个步骤,Agent 需要了解这些步骤是什么并提前规划。
2.1.1 拆解子目标和任务分解
Agent 能够将大型任务分解为较小、易于管理的子目标,从而高效地处理复杂任务。
主要方法:
| 方法 | 描述 |
|---|---|
| Chain of Thought (CoT) | 模型被要求"think step by step",将困难任务分解为更小、更简单的步骤,并阐释思维过程 |
| Tree of Thoughts (ToT) | 在 CoT 基础上扩展,每一步探索多种推理可能性,创造树形结构;搜索过程可采用 BFS 或 DFS,每个状态由分类器或多数投票决定 |
| Graph of Thoughts (GoT) | 同时支持多链、树形以及任意图形结构的 Prompt 方案,支持聚合、回溯、循环等复杂操作;将问题建模为操作图(Graph of Operations),以 LLM 为引擎自动执行 |
| LLM+P | 借助外部经典 Planner 进行长序列整体规划,使用 PDDL(Planning Domain Definition Language)作为中间接口,LLM 负责问题翻译和结果解释,Planner 负责求解 |
本质理解:无论是 CoT 还是 ToT,本质上都是通过精心设计的 Prompt,激发模型的多步推理与规划能力,而不是直接跳到最终答案。
任务分解的其他实现方式:
- 给 LLM 简单提示词,如 "Steps for XYZ.\n1." 或 "What are the subgoals for achieving XYZ?"
- 使用针对具体任务的指令(如写小说时先给 "Write a story outline.")
- 用户直接输入分解步骤
2.1.2 模型自我反省(Self-Reflection)
Agent 能够对过去的动作进行自我批评和自我反省,从错误中吸取教训并改进,从而提高最终结果的质量。
主要方法:
ReAct(Reasoning + Acting)
- 将 Action Space 扩展为特定任务的离散动作和语言空间的组合,在 LLM 内部整合推理和行动
- 推理(Reasoning):通过提示词让 LLM 用自然语言生成推理过程(如逐步思考)
- 行动(Action):使 LLM 能够与环境交互(如调用 Wikipedia Search API、计算器等工具)
- 标准格式:
Thought: ... → Action: ... → Observation: ...(循环重复)
Reflexion
- 让 Agent 具备动态记忆和自我反思能力的框架
- 采用标准 RL 设置,奖励模型提供简单二进制奖励
- 在每一个 Action 后,Agent 计算启发式函数,根据自我反思结果决定是否重置环境开始新循环
- 启发式函数判断轨迹是否低效(耗时长却未成功)或包含幻觉(一连串相同动作导致相同观察结果)
- 自我反思通过 Two-shot 示例创建(失败轨迹 + 理想反思),反思内容被添加到工作记忆中(最多三个)
2.2 记忆(Memory)
- 短期记忆:上下文学习即是利用模型的短期记忆学习
- 长期记忆:为 Agent 提供保留和召回长期信息的能力,通常利用外部向量存储和检索实现
2.3 工具使用(Tool Use)
- 对模型权重中缺失的信息,Agent 学习调用外部 API 获取额外信息
- 包括:当前信息获取、代码执行能力、专有信息源访问等
三、LLM Agent 代码实现思路
3.1 实例一:利用大模型判断做选择
通过构造选择题让大模型从多个选项中选择适合的工具。Prompt 设计示例:
请针对用户问题,选择一个适合的工具去回答,用 A、B、C 的选项字母告诉我答案。如果都不适合,选 D。
工具:
A. 商品导购和推荐工具
B. 订单查询工具
C. 退换货政策查询工具
D. 都不适合3.2 实例二:工具选择 + JSON 格式化输出
将选项替换为函数名称,要求模型按固定 JSON 格式输出,通过正则表达式提取并解析:
python
# Agent prompt 核心逻辑
agent_prompt = """Answer the following questions as best you can.
You have access to the following tools:
Search Order: 查询订单信息的工具,参数是订单id
Recommend product: 商品推荐导购工具,参数是商品类型
Use the following format:
Question: the input question
Thought: you should always think about what to do
Action: ```json {"action": $TOOL_NAME, "action_input": $INPUT}```
Observation: the result of the action
... (Thought/Action/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
"""3.3 实例三:LangChain Agent 集成
使用 LangChain 的 initialize_agent 配合 ZERO_SHOT_REACT_DESCRIPTION 类型,将自定义工具注册到 Agent 中:
python
from langchain.agents import initialize_agent, AgentType
tools = [
Tool(name="Search Order", func=search_order, description="查询订单信息"),
Tool(name="Recommend product", func=recommend_product, description="商品推荐导购"),
]
agent_tools = initialize_agent(
tools=tools, llm=chat,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
result = agent_tools.run("我想买一件衣服,有什么好推荐吗")四、如何给 LLM 注入领域知识?
| 方法 | 描述 |
|---|---|
| 检索 + LLM | 先用问题在领域数据库里检索候选答案,再用 LLM 对答案进行加工 |
| 领域知识微调 | 把领域知识构建成问答数据集,用 SFT 让 LLM 学习这部分知识 |
五、常见 LLM Agent 框架
| 框架 | 简介 | 地址 |
|---|---|---|
| AutoGPT | 自主 AI Agent,可自动分解目标并执行 | github.com/Significant-Gravitas/AutoGPT |
| AutoGen | 微软出品,多 Agent 对话协作框架 | github.com/microsoft/autogen |
| ChatDev | 模拟软件公司多角色协作开发 | github.com/OpenBMB/ChatDev |
| XAgent | 超自主 Agent,支持复杂任务自动解决 | github.com/OpenBMB/XAgent |
| GPT-Engineer | 根据自然语言描述生成完整代码库 | github.com/gpt-engineer-org/gpt-engineer |