发布时间:2023-09-25
点击次数: AI Agent 是目前炙手可热的一个领域,在 OpenAI 应用研究主管 LilianWeng 写的一篇长篇文章中[1],她提出了 Agent = LLM+ 记忆 + 规划技能 + 工具使用的概念
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
图1 Overview of a LLM-powered autonomous agent system
Agent的作用是利用LLM的强大语言理解和逻辑推理能力,调用工具来帮助人类完成任务。然而,这也带来了一些挑战,比如基础模型的能力决定了Agent调用工具的效率,但基础模型本身存在着大模型幻觉等问题
本文以「输入一段指令自动实现复杂任务拆分和函数调用」的场景为例,来构建基础 Agent 流程,并侧重讲解如何通过「基础模型选择」、「Prompt设计」等来成功构建「任务拆分」和「函数调用」模块。
重新编写的内容是:地址:
https://sota.jiqizhixin.com/project/smart_agent
GitHub Repo:
需要重写的内容是:https://github.com/zzlgreat/smart_agent
对于实现「输入一段指令自动实现复杂任务拆分和函数调用」,项目构建的 agent 流程如下:

图1 《ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models》
为了实现上述流程,在「任务拆分」和「函数调用」模块中,项目分别设计了两个微调模型,以实现将复杂任务拆分并按需调用自定义函数的功能。归纳总结的模型 solver,可以与拆分任务模型相同
在「任务拆分」模块中,大模型需要具备将复杂任务分解为简单任务的能力。「任务拆分」的成功与否主要取决于两个因素:
同时希望任务拆分模型在给定 prompt 模板下的输出格式可以尽可能相对固定,但也不会过拟合丧失模型原本的推理和泛化能力,这里采取 lora 微调 qv 层,对原模型的结构改动尽可能地少。
在「函数调用」模块中,大模型需要具备稳定调用工具的能力,以适应处理任务的要求:
此外,在算力使用方面,通过 lora/qlora 微调实现了低算力条件下大型语言模型的微调和推理,并采用量化部署的方式,进一步降低推理的门槛。
对于选择「任务拆分」模型,我们希望模型具备强大的泛化能力和一定的思维链能力。在这方面,我们可以参考HuggingFace上的Open LLM排行榜来选择模型,我们更关注的是衡量文本模型多任务准确性的测试MMLU和综合评分Average

需要重新书写的内容是:图2 HuggingFace 开放的LLM排行榜(0921)
本项目选择了任务拆分模型型号为:
对于选择"函数调用"模型,meta开源的Llama2版本的CodeLlama编程模型的原始训练数据包含了大量的代码数据,因此可以尝试使用qlora进行自定义脚本微调。对于函数调用模型,选择CodeLlama模型(34b/13b/7b均可)作为基准
本项目选择了函数调用模型型号为:
为了对「函数调用」模型进行微调,该项目采用了 prompt loss mask 的训练方式,以稳定处理模型的输出。下面是损失函数的调整方式:
保了你只考虑了被 mask 为 1 的标签的损失。为了防止除以零的情况,加一个很小的数 1e-9。任务拆分方面,该项目使用了大型语言模型高效推理框架 ReWOO(Reasoning WithOut Observation)中 planner 设计的 Prompt 格式。只需要将'Wikipedia[input]'等函数替换为相应的函数和描述即可,下面是该示例 prompt:
For the following tasks, make plans that can solve the problem step-by-step. For each plan, indicate which external tool together with tool input to retrieve evidence. You can store the evidence into a variable #E that can be called by later tools. (Plan, #E1, Plan, #E2, Plan, ...) Tools can be one of the following: Wikipedia[input]: Worker that search for similar page contents from Wikipedia. Useful when you need to get holistic knowledge about people, places, companies, historical events, or other subjects.The response are long and might contain some irrelevant information. Input should be a search query. LLM[input]: A pretrained LLM like yourself. Useful when you need to act with general world knowledge and common sense. Prioritize it when you are confident in solving the problem yourself. Input can be any instruction.
对于函数调用,因为后续会进行 qlora 微调,所以直接采用 huggingface 上开源函数调用数据集 [3] 中的 prompt 样式。请参见下文。
### Instruction:<prompt> (without the <>)### Response:如:### Instruction:For the following tasks, make plans that can solve the problem step-by-step. For each plan, indicate which external tool together with tool input to retrieve evidence. You can store the evidence into a variable #E that can be called by later tools. (Plan, #E1, Plan, #E2, Plan, ...) Tools can be one of the following:get_current_time[input]: Get the current time for now. search_bing[input]: Search the web for content on Bing, and return the top 10 results. Remember, the results may not as good as Wikipedia. If you think the result will not exist in wikipedia, use it. search_wiki[input]: Search the web for content on Wikipedia, and return the top 3 results. If you think the result can exist in wikipedia, use it. search_bilibili[input]: Search for videos on Bilibili, which is a website full of ACG. It can return top 10 search results. s*e_file[input]: s*e a file in the target dir which contains the data. query_mysql[input]: Execute the sql in the local mysql database. And return the result. What movies did the director of 'Oppenheim' direct? List the top 10 best.### Response:Step 1: Identify the director of "Oppenheimer" movie.#E1 = search_wiki("Director of Oppenheimer")Step 2: Retrieve information about the director's other works.If the retrieved name exists in Wikipedia, proceed with searching their filmography using search_wiki. Otherwise, try searching through Bing or another source like IMDb.For example, if Christopher Nolan is found as the director of "Oppenheimer":#E2 = search_bing("Filmography of Christopher Nolan")Step 3: Extract the list of films directed by this person from the retrieved information.From the returned results, extract the titles of the top 10 best movies according to critics/audience ratings or personal preference.采用 trelis 数据集的格式。数据集规模较小,仅有55行。其结构实际上与alpaca格式相似。分为systemPrompt,userPrompt和assistantResponse,分别对应alpaca的Instruction,prompt和Response。以下是示例:

图3 HuggingFace 函数调用开源数据集示例
在Ubuntu 22.04系统上,使用了CUDA 11.8和Pytorch 2.0.1,并采用了LLaMA-Efficient-Tuning框架。此外,还使用了Deepspeed 0.10.4
需要进行针对 Marcoroni-70B 的 lora 微调
全部选择完成后,新建一个训练的 bash 脚本,内容如下:
accelerate launch src/train_bash.py \--stage sft \--model_name_or_path your_model_path \--do_train \--dataset rewoo \--template alpaca \--finetuning_type lora \--lora_target q_proj,v_proj \--output_dir your_output_path \--overwrite_cache \--per_device_train_batch_size 1 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--s*e_steps 1000 \--learning_rate 5e-6 \--num_train_epochs 4.0 \--plot_loss \--flash_attn \--bf16
这样的设置需要的内存峰值最高可以到 240G,但还是保证了 6 卡 4090 可以进行训练。开始的时候可能会比较久,这是因为 deepspeed 需要对模型进行 init。之后训练就开始了。

需要重新写的内容是:图4 6 卡 4090 训练带宽速度
共计用时 8:56 小时。本次训练中因为主板上的 NVME 插槽会和 OCULINK 共享一路 PCIE4.0 x16 带宽。所以 6 张中的其中两张跑在了 pcie4.0 X4 上,从上图就可以看出 RX 和 TX 都只是 PCIE4.0 X4 的带宽速度。这也成为了本次训练中最大的通讯瓶颈。如果全部的卡都跑在 pcie 4.0 x16 上,速度应该是比现在快不少的。

需要进行改写的内容是:图5展示了LLaMA-Efficient-Tuning生成的损失曲线
以上是 LLaMA-Efficient-Tuning 自动生成的 loss 曲线,可以看到 4 个 epoch 后收敛效果还是不错的。
2)针对 codellama 的 qlora 微调
根据前文所述的 prompt loss mask 方法,我们对 trainer 类进行了重构(请参考项目代码仓库中的 func_caller_train.py)。由于数据集本身较小(共55行),所以仅需两分钟即可完成4个epoch的训练,模型迅速收敛
在项目代码仓库中,提供了一个简短可用的 toolkit 示例。里面的函数包括:
现在有一个70B和一个34B的模型,在实际使用中,用6张4090同时以bf16精度运行这两个模型是不现实的。但是可以通过量化的方法压缩模型大小,同时提升模型推理速度。这里采用高性能LLM推理库exllam*2运用flash_attention特性来对模型进行量化并推理。在项目页面中作者介绍了一种独特的量化方式,本文不做赘述。按照其中的转换机制可以将70B的模型按照2.5-bit量化为22G的大小,这样一张显卡就可以轻松加载
需要重新编写的内容是:1)测试方法
给定一段不在训练集中的复杂任务描述,同时在 toolkit 中添加训练集中不包含的函数和对应描述。如果 planner 可以完成对任务进行拆分,distributor 可以调用函数,solver 可以根据整个流程对结果进行总结。
需要重新写的内容是:2)测试结果
任务拆分:首先使用 text-generation-webui 快速测试任务拆分模型的效果,如下图所示:

图6 任务拆分测试结果
这里可以写一个简单的 restful_api 接口,方便在 agent 测试环境下的调用(见项目代码 fllama_api.py)。
函数调用:在项目中已经写好了一个简单的 planner-distributor-worker-solver 的逻辑。接下来就让测试一下这个任务。输入一段指令:what movies did the director of 'Killers of the Flower Moon' direct?List one of them and search it in bilibili.
「搜索 bilibili 」这个函数是不包含在项目的函数调用训练集中的。同时这部电影也是一部还没有上映的新电影,不确定模型本身的训练数据有没有包含。可以看到模型很好地将输入指令进行拆分:
同时进行函数调用得到了以下结果:点击结果是 Goodfellas,和该部电影的导演匹配得上。
Narration Box
Narration Box是一种语音生成服务,用户可以创建画外音、旁白、有声读物、音频页面、播客等
68
查看详情
本项目以「输入一段指令自动实现复杂任务拆分和函数调用」场景为例,设计了一套基本 agent 流程:toolkit-plan-distribute-worker-solver 来实现一个可以执行无法一步完成的初级复杂任务的 agent。通过基础模型的选型和 lora 微调使得低算力条件下一样可以完成大模型的微调和推理。并采用量化部署的方式,进一步降低推理的门槛。最后通过该 pipeline 实现了一个搜索电影导演其他作品的示例,实现了基础的复杂任务完成。
局限性:本文只是基于搜索和基本操作的 toolkit 设计了函数调用和任务拆分。使用的工具集非常简单,并没有太多设计。针对容错机制也没有太多考虑。通过本项目,大家也可以继续向前一步探索 RPA 领域上的应用,进一步完善 agent 流程,实现更高程度的智能自动化提升流程的可管理性。
以上就是AI Agent 如何实现?6张4090 魔改Llama2:一句指令拆分任务、调用函数的详细内容,更多请关注其它相关文章!
# 使用了
# 荆门律师网站推广公司
# 思明seo优化流程
# 公司推广网站选火21星
# 推广部营销部
# 篮球论文网站建设
# 盘县网站推广公司
# 长垣网站seo优化
# 德芙巧克力营销推广方案
# seo竞标方式
# seo百度全中占比
# 实现了
# 这也
# 重构
# 图片
# 是一个
# 都是
# 开源
# 的是
# 如何实现
# 一句
# type
# film
# fig
# follow
# ai agent
# llama
# ai
相关栏目:
【
行业新闻62819 】
【
科技资讯67470 】
相关推荐:
AI新视野,增长新势能,伙伴云受邀出席笔记侠创业讲真话AI峰会
美图设计室2.0使用教程
如何提高集群协作效率?中外团队合作研发基于均值偏移的机器人队形控制策略
华为推出全新操作系统HarmonyOS 4,AI和新引擎完美融合
剧透!蜜小豆@2025世界人工智能大会多个亮点曝光
清华系面壁智能开源中文多模态大模型VisCPM :支持对话文图双向生成,吟诗作画能力惊艳
GPT-4成功战胜AI-Guardian审核系统:谷歌研究团队的人工智能抵抗人工智能
水路两栖艇、消防灭火机器人……这个展览“黑科技”抢眼
一文看懂基础模型的定义和工作原理
午报 | 字节跳动要造机器人;东方甄选首次启动自有APP|直播|
280万条多模态指令-响应对,八种语言通用,首个涵盖视频内容的指令数据集MIMIC-IT来了
人工智能框架生态峰会即将召开,聚焦AI大模型技术与科学智能探索!
华为发布两款AI存储新品
新华三集团总裁兼首席执行官于英涛:人工智能时代需要想象力,更需要精耕务实
海南省公安机关警用无人机培训班结业并举行警航比武演练
五项人工智能尚未能够实现的任务
清华&中国气象局大模型登Nature:解决世界级难题,「鬼天气」预报时效首次达3小时
美图公司吴欣鸿:AI技术重构影像产业
智能技术提高现代商业运营的7七种方式
时间、空间可控的视频生成走进现实,阿里大模型新作VideoComposer火了
北京市通用人工智能产业创新伙伴计划名单公布,京东科技入选“算力伙伴”
探展WAIC |万向区块链杜宇:不存在单一技术的iPhone时刻,Web3.0核心将基于AI+区块链+物联网
马斯克WAIC2025演讲全文:AI将对人类文明产生深远影响
官宣!爱康AI未来之夜三大亮点提前剧透!
人工智能的变革之路:通过OpenAI的GPT-4漫游
奥比中光子公司和斯坦德机器人深度合作,共同推进新一代激光雷达的研发
零AI含量!纯随机数学无限生成逼真3D世界火了,普林斯顿华人一作
苹果AR头显商标与华为撞车,在中国或改名
自动驾驶汽车避障、路径规划和控制技术详解
吴恩达、Hinton最新对话!AI不是随机鹦鹉,共识胜过一切,LeCun双手赞成
中科院自研新一代 AI 大模型“紫东太初 2.0”问世
曝光HarmonyOS 4的重要新能力:全面升级AI大模型,小艺实现全面进化
【趋势周报】全球人工智能产业发展趋势:OpenAI向美国专利局提交“GPT-5”商标申请
构建数字文旅新高地!洛阳涧西区开启元宇宙时代
AI+音乐如何“生成”动听旋律?一起揭秘世界人工智能大会开场曲
AI 程序 Text With Jesus 在海外迅速受到关注:与耶稣和撒旦进行对话
游族AI创新院揭牌成立 推进AI赋能游戏业务
无需标注数据,「3D理解」进入多模态预训练时代!ULIP系列全面开源,刷新SOTA
调查显示:实际上没有那么多人在用 ChatGPT
MIT开发“PhotoGuard”技术保护图像免遭恶意AI编辑
黄仁勋:5年前,我们对AI抱有巨大期望
Unity发布Sentis和Muse AI工具,助力创作游戏和3D内容
讯飞星火大模型实现升级 助力通用人工智能人才培养
常见的五个人工智能误解
微软 Azure AI 文本转语音服务升级:新增男性声音和扩展语言支持
复盘MWC上海:AI大模型时代到来 通信网络将会怎样改变?
DragGAN开源三天Star量23k,这又来一个DragDiffusion
原小米 9 号员工李明打造全球首款 AI 安卓桌面机器人
田渊栋团队新研究:微调
微软向美国政府提供GPT大模型,如何保证安全性?