news 2026/4/16 15:56:17

大模型(LLMs)面试——Agent篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型(LLMs)面试——Agent篇

大模型(LLMs)面试——Agent篇

慕容千语2025年8月13日 10:39

一、什么是 大模型(LLMs)agent?

大模型(LLMs)agent 是一种超越简单文本生成的人工智能系统。它使用大型语言模型(LLM)作为其核心计算引擎,使其能够进行对话执行任务、推理并展现一定程度的自主性。简而言之,代理是一个具有复杂推理能力记忆和执行任务手段的系统。

二、大模型(LLMs)agent 有哪些部分组成?

在LLM赋能的自主agent系统中(LLM Agent),LLM充当agent大脑的角色,并与若干关键组件协作。

2.1介绍一下 规划(planning)?

一项复杂任务通常会包含很多步骤,Agent需要了解这些步骤是什么并提前规划。

2.1.1拆解子目标和任务分解
2.1.1.1如何进行 拆解子目标和任务分解?
  • 拆解子目标和任务分解:Agent能够将大型任务分解为较小,易于管理的子目标,从而高效地处 理复杂任务。

2.1.1.2拆解子目标和任务分解 有哪些方法?
  • Chain of thought:模型被要求“think step by step”利用更多的时间进行计算,将艰难的任务分解成更小,更简单的步骤。CoT将大型任务转化为多个可管理的任务,并对模型的思维过程进 行了阐释;

  • Tree of Thoughts:进一步扩展CoT,在每一步都探索多种推理的可能性。它首先将问题分解为 多个思考步骤,并在每个步骤中生成多个思考,从而创造一个树形结构。搜索过程可以是BFS(广度优先搜索)或DFS(深度优先搜索),每个状态由分类器(通过一个prompt)或少数 服从多数的投票原则来决定。

任务分解可通过以下几种方式实现:

  • a. 给LLM一个简单的提示词“Steps for XYZ.\n1.”,“What are the subgoalsfor achieving XYZ?”;

  • b. 使用针对具体任务的指令,例如对一个写小说的任务先给出“Write a story outline.”指令;

  • c. 使用者直接输入;

Graph of Thoughts:同时支持多链、树形以及任意图形结构的Prompt方案,支持各种基于图形 的思考转换,如聚合、回溯、循环等,这在CoT和ToT中是不可表达的。将复杂问题建模为操作图 (Graph of Operations,GoO),以LLM作为引擎自动执行,从而提供解决复杂问题的能力。某 种程度上,GoT囊括了单线条的CoT和多分枝的ToT。

注:无论是CoT还是ToT,本质上是通过Prompt的精心设计,激发出模型原有的Metacognition 只是如何通过某条神经元的线索能更加精准的调动出大脑中最擅长Planning的部分

  • LLM+P:通过借助一个外部的经典Planner来进行一个更加长序列的整体规划。这种方法利用 规划域定义语言(Planning Domain Definition Language, PDDL)作为中间接口来描述规划问 题。整个使用过程,首先LLM将问题翻译成“问题PDDL”,接着请求经典Planner根据现有的“领 域PDDL”生成一个PDDL Plan,最后将PDDL计划翻译回自然语言(LLM做的)。根本上讲, Planning Step是外包给外部工具的,当然也有一个前提:需要有特定领域的PDDL和合适的 Planner。

    LLM+P 利用大型语言模型 (LLM) 生成给定问题的 PDDL 描述,然后利用经典规划器寻找最佳计 划,然后再次使用 LLM 将原始计划翻译回自然语言。

2.1.2模型自我反省
2.1.2.1如何进行 模型自我反省?

自查与自纠:Agent能够对过去的actions进行自我批评和自我反省,从错误中吸取教训,并在 今后的工作中加以改进,从而提高最终结果的质量(本质上是产生RL的数据,RL并不需要 HF)

2.1.2.2模型自我反省 有哪些方法?

ReAct:即Reson+Act通过将Action Space扩展为特定任务的离散动作和语言空间的组合,在 LLM内部整合了推理(Reasoning)和行动(Action)。

  • 推理(Reasoning):使LLM能够与环境交互(例如,使用Wikipedia Search的 API);

  • 行动(Action):通过提示词使得LLM用自然语言生成整体的推理过程。

ReAct提示词模板包含了提供LLM思考的明确步骤,其大致格式为:

Thought: ... Action: ... Observation: ...

知识密集型任务(如HotpotQA、FEVER)和决策型任务(如AlfWorld Env、WebShop)的推理 轨迹示例

在知识密集型任务和决策任务的两个实验中,ReAct的表现比去掉Thought...的单一Act...方式更 加优异

Reflexion :是一个让Agent具备动态记忆和自我反思能力以提高推理能力的框架。Reflexion采 用标准的RL设置,其中奖励模型提供简单的二进制奖励,而Action Space则采用ReAct中的设 置,即在特定任务的行动空间中加入语言,以实现复杂的推理步骤。在每一个Action at之后, Agent会计算一个启发式函数ht,并根据自我反思的结果决定是否重置环境以开始一个新的循环

Reflexion的架构示意图

启发式函数判断何时整个循环轨迹是低效的或者何时因为包含了幻觉需要停止。低效规划指的是耗 时过长却未成功的循环轨迹。幻觉是指在环境中遇到一连串相同的行动,而这些行动会导致相同的 观察结果。

自我反思过程通过给LLM一个two-shot例子创造,每个例子都是一对(失败的轨迹、在计划中指导 进一步变化的理想反思)。接着,reflections将会被添加到Agent的工作记忆中作为查询LLM的上下 文,最多三个。

AlfWorld Env 和 HotpotQA 实验。在 AlfWorld 中,幻觉是比低效规划更常见失败因素。

2.2介绍一下 记忆(Memory)?

  • 短期记忆:上下文学习即是利用模型的短期记忆学习

  • 长期记忆:为agent提供保留和召回长期信息的能力,通常利用外部向量存储和检索实现

2.3介绍一下 工具使用(tool use)?

  • 对模型权重丢失的信息,agent学习调用外部API获取额外信息,包括当前信息、代码执行能 力、专有信息源的访问等等

三、大模型(LLMs)agent主要 利用了 大模型 哪些能力?

LLM Agent 主要利用大模型的推理(reasoning)、模仿(few-shot learning)和规划能力(Planning),再 结合函数调用来实现工具使用(Tools use)。

四、结合 代码 讲解 大模型(LLMs)agent思路?

4.1思路介绍

这里 使用了sa-bot开源项目,介绍 大模型(LLMs)agent 代码实现逻辑,该项目主要实现了以下 内容:

  • 实现将豆包(云雀大模型)接入langchain体系

  • 基于langchain测试skylark-chat的prompt agent

4.2实例一:利用大模型判断做选择

利用大模型从多个选择中选出正确的出来,比如按下面的问题输入大模型:

multi_choice_prompt="""请针对 >>> 和 <<< 中间的用户问题,选择一个适合的工具去回答 他的问题,只要用A、B、C的选项字母告诉我答案。 如果你觉得都不适合,就选D。 >>> {question} <<< 你能使用的工具如下: A. 一个能够查询商品信息为用户进行商品导购的工具 B. 一个能够查询最近下单的订单信息,获得最新的订单情况的工具 C. 一个能够商家的退换货政策、运费、物流时长、支付渠道的工具 D. 都不适合 请按以下格式进行回答`A`、`B`、`C`、`D`。 """ chat=doubao.ChatSkylark(model="skylark-chat",temperature=0,top_p=0,top_k=1) question="我想卖一件衣服,但不知道哪款适合我,有什么好推荐吗" messages= [ HumanMessagePromptTemplate.from_template( template=multi_choice_prompt, ).format(question=question), ] req=chat(messages) print("问题: %s"%question) print(req.content)

这个例子可以通过在本地运行python demo.py来得到结果。 结果如下:

根据提供的信息,最适合的工具是A. 一个为用户进行商品导购和推荐的工具。因为用户 的问题是关于选择适合的衣服,需要推荐和导购。B、C选项的工具虽然也有用,但并不是最直 接解决用户问题的工具。因此,选择A选项。回答为`A`。

在这里我们构造了一个选择题给到大模型,让大模型从多个选项中选出适合的工具。

4.3实例二:让大模型通过判断正确选择函数工具并输出

上面例子测试了大模型的推理和选择判断能力,下面我们将上面的 A,B,C,D 换成我们的函数名 称,并要求其按照固定格式输出,prompt如下:

请针对>>>和<<<中间的用户问题,选择一个适合的工具去回答他的问题,工具的名称已经 给出。 如果你觉得都不适合,就回复“no_tools: 以上工具都不适用”。 >>> {question} <<< 你能使用以下四个工具: -recommend_product: 一个为用户进行商品导购和推荐的工具 -search_order: 一个能够查询最近下单的订单信息,获得最新的订单情况的工具 -search_merchant_policies: 一个能够查询商家的退换货政策、运费、物流时长、支付渠道 的工具 -no_tools: 以上工具都不适用 请按以下格式进行回答: {{ "recommend_product": "一个为用户进行商品导购和推荐的工具" }}

测试skylark-chat:

问题: 我有一张订单,一直没收到,可以帮我查询下吗 { "search_order": "一个能够查询最近下单的订单信息,获得最新的订单情况的工具" }

这里可以看到,针对问题按预设的结果输出了所需要的工具,并做了格式,对格式化的json数据就可以被程序所处理。

问题: 请问你们家的货可以送到四川吗,物流大概要多久? 根据用户的问题,需要查询商家的退换货政策、运费、物流时长等信息。而给出的四个工具 中,search_merchant_policies能够查询商家的退换货政策、运费、物流时长、支付渠道等 信息,与用户需求相符。 因此,回复内容为: { "search_merchant_policies": "一个能够查询商家的退换货政策、运费、物流时长、支付 渠道的工具" }

这里可以看到,针对一些问题,skylark-chat 有时不是直接回复结果,而是会在前面解释一通,这是因为skylark-chat训练数据用到大量的 CoT 的方式来提升准确率。针对这种结果可以通过正则表达式提取json数据给到程序使用。

4.4 实例三:agent模板和解析

这里 agent 模板使用了经典的chat zero shot react,分为"Thought","Action","Observation" 三部分。这里直接看 prompt 代码:

agent_prompt="""Answer the following questions as best you can. You have access tothefollowingtools: SearchOrder: 一个能够查询订单信息,获得最新的订单情况的工具,参数是输入订单id Recommendproduct: 一个能够基于商品及用户 信息为用户进行商品推荐导购的工具,参数是输入要推荐的商品类型 Thewayyouusethetoolsisbyspecifyingajsonblob. Specifically, thisjsonshouldhavea`action`key (withthenameofthetoolto use) anda`action_input`key (withtheinputtothetoolgoinghere). Theonlyvaluesthatshouldbeinthe"action"fieldare: SearchOrder, Recommend product The$JSON_BLOBshouldonlycontainaSINGLEaction, doNOTreturnalistof multipleactions. Hereisanexampleofavalid$JSON_BLOB: \`\`\` {{ "action": $TOOL_NAME, "action_input": $INPUT }} \`\`\` ALWAYSusethefollowingformat: Question: theinputquestionyou mustanswer Thought: youshouldalwaysthinkaboutwhattodo Action: \`\`\` $JSON_BLOB \`\`\` Observation: theresultoftheaction ... (thisThought/Action/ObservationcanrepeatNtimes) Thought: Inowknowthe finalanswer FinalAnswer: thefinalanswertotheoriginalinputquestion Begin!Remindertoalwaysusetheexactcharacters`FinalAnswer`whenresponding.' {question} """ chat=doubao.ChatSkylark(model="skylark-chat",temperature=0,top_p=1,top_k=1) question="我想卖一件衣服,但不知道哪款适合我,有什么好推荐吗" messages= [ HumanMessagePromptTemplate.from_template( template=agent_prompt, ).format(question=question), ] result=chat(messages) # agent的解析 text=result.content pattern=re.compile(r"^.*?`{3}(?:json)?\n(.*?)`{3}.*?$", re.DOTALL) found=pattern.search(text) action=found.group(1) response=json.loads(action.strip()) print("问题: %s\n"%question) print(response) #json解析后已经满足json格式

运行可以看到正常解析出了符合要求的json格式:

{'action': 'Recommend product', 'action_input': {'user_demographic': {'age': 25, 'gender': 'Male', 'location': 'New York'}, 'preferences': {'style': 'Casual', 'color': 'Blue'}}}

4.5 实例四:将 skylark 接入 langchain 中测试 agent

编写工具函数:

# 模拟电商订单 defsearch_order(input: str)->str: print("调用search_order:一个能够查询订单信息,获得最新的订单情况的工具:") return"{order},订单状态:已发货".format(order=input) # 模拟商品推荐 defrecommend_product(input: str)->str: print("调用recommend_product:一个能够基于商品及用户信息为用户进行商品推荐导购 的工具:") return"黑色连衣裙"

接入langchain的agent:

tools= [ Tool( name="Search Order", func=search_order, description="""一个能够查询订单信息,获得最新的订单情况的工具,参数是输入订 单id""" ), Tool( name="Recommend product", func=recommend_product, description="一个能够基于商品及用户信息为用户进行商品推荐导购的工具,参数是 输入要推荐的商品类型 ) ] chat=doubao.ChatSkylark(model="skylark-chat",temperature=0,top_p=0,top_k=1) agent_tools=initialize_agent(tools=tools, llm=chat, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) result=agent_tools.run("我想卖一件衣服,但不知道哪款适合我,有什么好推荐吗") print(result)

查看结果:

我需要找到一个工具来推荐适合我的衣服。根据给定的工具,我可以使用“Recommend product”来获得推荐。 Action: Recommendproduct ActionInput: 衣服类型 Observation: 调用recommend_product:一个能够基于商品及用户信息为用户进行商品推荐导 购的工具 Observation: 黑色连衣裙 Thought: 根据推荐的结果,我选择了黑色连衣裙。 FinalAnswer: 黑色连衣裙

Tips:

Volcengine在windows下安装出错: OSError: Cannotloadnativemodule'Crypto.Cipher._raw_ecb': Trying '_raw_ecb.cp311-win_amd64.pyd': cannotloadlibrary 'C:\Users\Admin\AppData\Local\Programs\Python\Python311\Lib\site•packages\Crypto\Util\..\Cipher\_raw_ecb.cp311-win_amd64.pyd': error0xc1, Trying '_raw_ecb.pyd': cannotloadlibrary 可以尝试: pip3uninstallpycryptodomex pipinstallpycryptodome
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:21:47

雀魂智能助手Akagi:从零开始打造专业麻将分析系统

雀魂智能助手Akagi&#xff1a;从零开始打造专业麻将分析系统 【免费下载链接】Akagi A helper client for Majsoul 项目地址: https://gitcode.com/gh_mirrors/ak/Akagi 在激烈的麻将对局中&#xff0c;每一个决策都可能影响最终的战局走向。Akagi作为一款专为雀魂游戏…

作者头像 李华
网站建设 2026/4/16 12:57:22

BiliTools跨平台B站资源下载工具功能解析与使用指南

BiliTools跨平台B站资源下载工具功能解析与使用指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools Bi…

作者头像 李华
网站建设 2026/4/16 12:52:06

MinerU功能全测评:学术论文解析真实表现

MinerU功能全测评&#xff1a;学术论文解析真实表现 获取更多AI镜像 想探索更多AI镜像和应用场景&#xff1f;访问 CSDN星图镜像广场&#xff0c;提供丰富的预置镜像&#xff0c;覆盖大模型推理、图像生成、视频生成、模型微调等多个领域&#xff0c;支持一键部署。 1. 引言&am…

作者头像 李华
网站建设 2026/4/16 12:56:30

Win11Debloat高效清理工具:一键解决Windows系统臃肿问题

Win11Debloat高效清理工具&#xff1a;一键解决Windows系统臃肿问题 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和…

作者头像 李华
网站建设 2026/4/16 13:07:23

PC手游键盘操控配置:告别手残党的终极解决方案

PC手游键盘操控配置&#xff1a;告别手残党的终极解决方案 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 还…

作者头像 李华
网站建设 2026/4/16 12:41:54

如何利用Uncle小说PC版打造个人专属数字图书馆

如何利用Uncle小说PC版打造个人专属数字图书馆 【免费下载链接】uncle-novel &#x1f4d6; Uncle小说&#xff0c;PC版&#xff0c;一个全网小说下载器及阅读器&#xff0c;目录解析与书源结合&#xff0c;支持有声小说与文本小说&#xff0c;可下载mobi、epub、txt格式文本小…

作者头像 李华