赞
踩
作者:yeyan,中国地质大学 工程硕士 来自:青稞AI
由于chatpgt的发展,除了基础的问答需求,利用chatgpt完成一系列复杂任务的需求也应用而生,产生了很多关于ai agent的应用框架,具体应用如下图,包括开源和商业的。
得益于llm模型的强大能力,将llm作为大脑,ai agent可以做到根据任务目标,进行思考,分解任务,然后调用相应工具完成任务。
一般ai agent的结构如下:
一个agent(智能体)主要包含以下3个部分:
•(1) Perception:感知,主要就是信息的输入,比如文本,语言等信息。•(2) Brain:这个是核心,基于llm,根据输入信息,制定任务计划等。•(3) Action:执行,根据计划执行对应的任务,比如调用第三方api,从工具集(tools)选中合适的tool执行任务。
agents支持多种形式,如下图所示,single anget就是将anget作为一个ai助手,类似目前gpt的问答操作;agent-agent就是多个agent可以相互交互,比如chatdev,定义了多个角色,实现了一个虚拟的开发公司;human-agent就是加入人工提示或者反馈,根据人工信息,agent可以调整任务,实现更好的完成任务。
目前开源的ai agent有很多,如AutoGPT,BabyAGI,openagents等,本文以agentgpt为例,介绍一下其大概流程和结构。
agentgpt主要包含3个部分,其他如AutoGPT,BabyAGI等llm-based agent基本结构都是类似的。
•Reasoning and Planning:推理和计划,如果定义一个目标,只是简单的输入给llm模型,只能得到一个粗略的答案;如果使用"prompt engineering"(提示工程),则可以将目标分解成多个更容易理解的步骤,并用思维链提示的方法进行反思。•** Memory**:记忆,分为短期记忆和长期记忆。短期记忆是根据上下文学习,受限于llm的token长度;长期记忆是当执行一个复杂任务时,需要考虑到历史任务的情况,当代理的任务长时间运行时,超过token长度时,就会会过期的记忆,agentgpt此处采用了向量数据库存储历史信息的特征向量。•Tools:工具集,llm只支持文本的输出,对于复杂任务,比如定个机票,llm就无法完成。解决方法就结合"prompt engineering",定义一系列工具集,通过prompt和工具功能的描述,agent就可以根据任务调用相应的工具,比如定义一个“search”工具,功能描述是用“Google Search”的api搜索内容,描述中还可以可以包含api调用的输入输出以及内容格式等。
promts的重点就是设计合适的prompt模板,不同的llm对prompt的格式可能不同。
常用的方法如下:
•zero-shot方法(只提供prompt,不提供示例)
- Prompt:
- Classify the text into neutral, negative or positive.
-
-
- Text: I think the vacation is okay.
- Sentiment:
-
-
- Output:
- Neutral
•one-shot,two-shot,N-shot等方法,即提供1、2 或 N 个示例,以提高模型的准确性
•Chain-of-Thought (CoT) Prompting(思维链),通过在增加逻辑推理步骤,实现比较复杂的任务。
•ReAct技术(Reasoning + Action) ReAct是将推理和执行合并,可以动态推理和执行,通过不断的think和action,获取最终的答案。
•Plan and Solve(sp任务) 也是一种思维链方法,主要要求模型理解问题,提取变量和相关值,并逐步指定计划。
具体prompt的技术可以参考以下文章,有很详细的例子。
•Prompt Engineering Guide
https://www.promptingguide.ai
•Learn Prompting: Your Guide to Communicating with AI
https://learnprompting.org/docs/intro
也可以参考agentgpt代码库的prompts.py文件,里边有一些prompt的模板。
# 分析任务的prompt analyze_task_prompt = PromptTemplate( template=""" High level objective: "{goal}" Current task: "{task}" Based on this information, use the best function to make progress or accomplish the task entirely. Select the correct function by being smart and efficient. Ensure "reasoning" and only "reasoning" is in the {language} language. Note you MUST select a function. """, input_variables=["goal", "task", "language"], )
agent执行多次时,会忘记之前的操作,agentgpt用Weaviate向量数据库解决这个问题,向量数据库能够存储任务执行的历史记录作为memory,agent就在任务循环中访问memory的数据。
向量数据库简介如下图:
关于memory,可以参考langchain种的memory机制:用户输入之后,再执行核心逻辑之前,先从memory中读取之前的信息,作为past_messages,修改用户输入,然后再一起送入llm模型,得到当前任务的输出,再得到最终任务的结果前,将输入输出先存入memory,在之后的任务中可以参考这部分任务的信息。
agentgpt中关于promt的思维链技术采用了langchain,目前基本这块都使用langchain,具体langchain可以参考文章【Kevin:LangChain:一个让你的LLM变得更强大的开源框架】,写得很详细,也可以看langchain官网文档【Introduction | ️ Langchain】。
https://zhuanlan.zhihu.com/p/636043995
https://python.langchain.com/docs/get_started/introduction
目前agentGPT仅支持chatgpt模型,暂时不支持本地llm模型,不过可以参考代码model_factory.py#L37和agent_service_provider.py#L18,修改此处,添加本地模型的调用接口。
agentGPT测试,以获取paperwithcode网站最新目标检测的sota算法为例。
输入对应的任务“Get the latest sota models on the paper with code website about object detection on coco dataset”。
搜索网站->进入网站->网站内部搜索->过滤->排序
[1]AgentGPT原文blog: Autonomous AI in your browser https://reworkd.ai/blog/Understanding-AgentGPT [2]agentgpt demo网址 https://agentgpt.reworkd.ai/zh [3]Plan-and-Solve-Prompting技术 https://github.com/AGI-Edgerunners/Plan-and-Solve-Prompting [4]Prompt Engineering Guide文档 https://www.promptingguide.ai/ [5]Learn Prompting: Your Guide to Communicating with AI https://learnprompting.org/docs/intro [6]kevin:LangChain:一个让你的LLM变得更强大的开源框架 https://zhuanlan.zhihu.com/p/636043995 [7]Memory | ️ Langchain https://python.langchain.com/docs/modules/memory/ [8]开源ai-agents列表:awesome-ai-agents https://github.com/e2b-dev/awesome-ai-agents [9]叶赛文:ChatGPT api里的system,user,assistant有什么作用?如何使用? https://zhuanlan.zhihu.com/p/638552350 [10]AutoGPT https://github.com/Significant-Gravitas/AutoGPT [11]BabyAGI https://github.com/yoheinakajima/babyagi [12]openagents https://github.com/xlang-ai/openagents [13]langchain中文教程 https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide [14]awesome-langchain https://github.com/kyrolabs/awesome-langchain
备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群
id:DLNLPer,记得备注呦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。