作者已经开源了代码,读者可以Clone到本地运行,如果帮到了你,请给我一个Star!
AI Agent是一个以大语言模型(LLM)为核心的程序,旨在实现用户设定的一些目标或任务。LLM获取反馈信息,并选择使用预设或新建的工具(函数),以迭代运行方式完成任务。Agent拥有复杂的工作流程,模型本质上可以自我对话,而无需人类在每一部分驱动和交互。
目前,大型模型的应用可以分为以下几类:
Agent通过自驱的定义工作流程并规划任务进行问题解决。例如,我们要查询所在范围内10公里的所有商户的位置并且获得其分类统计可视化图表,按照Agent的设计思路,它会通过模型现有知识、向量数据库检索(Memory)、网络检索(Memory)等方法获取相关信息。具体来说:
在ChatGPT应用中,例如GPT插件市场就是这个思路。通过上面的案例,细心的读者可能已经发现了我提到的Agent的工具调用能力和规划能力。后续我会详细介绍;
工具使用
Agents是可以通过调用函数来获取模型权重中和数据库中不存在的信息的,常见Agent的工具有网络检索工具,文件读写工具,API调用工具,例如让Agent使用Google Search API,以及调用聚合数据来获取常见的天气信息和股票数据等;也可以通过访问高德API来获取位置,调用SD的API来实现图像生成;
一个常见的案例就是微软的Copilot,当用户输入问题时,其会分解问题,然后调用不同的工具来规划分解任务,调用工具检索,然后在代码生成器中执行,ChatGPT中的open-interpreter也是一样的思路;
下面是一个Agent的大致框架:
我现在要开发一款webgis程序,请你将完成这个任务的过程进行拆分。然后用json格式输出整个任务列表,便于我的循环,每个任务包括任务名称,任务类型,任务调用函数,任务完成状态,任务优先级等属性,请给我结果;
print(completion.choices[0].message.content)
运行结果如下:
你觉得怎样才算是一个有趣的周末?是喜欢出去玩还是宅在家里看电视剧呢?
一个有趣的周末对我来说,可能会在户外运动或者朋友们一起聚会。你喜欢周末都做些什么呢?
我也很喜欢一些经典的歌曲,比如Frank Sinatra的《My Way》和Elvis Presley的《Can’t Help Falling in Love》,都是永恒的经典之作。
对我来说,音乐就像是生活中不可或缺的一部分,能够在我情绪低落时给予慰藉,在我兴奋时让我更加兴奋。有时候甚至一首歌就能唤起我许多美好或者回忆深刻的记忆。
对我来说,有一首歌曲《My Heart Will Go On》特别让我感动,它的旋律和歌词充满了坚强和希望。这首歌伴随着很多人的成长和回忆,我觉得它是一首不朽的经典之作。
对我来说,有一首歌曲《Hurt》由Johnny Cash演唱,这首歌讲述了生命中的挣扎和痛苦,每一句歌词都触动着我内心深处的某种情感。它让我思考生命的脆弱和宝贵,总能唤起我对人生的反思。
有一首歌曲《Imagine》由John Lennon演唱,它传达了对和平、团结和美好未来的向往,每次听到这首歌都会让我感受到一种深远的力量和共鸣。
对我而言,有一首歌曲《Bohemian Rhapsody》由Queen演唱,这首歌曲既颇具浪漫主义风格又兼具摇滚乐的激情。每次听到这首歌,都感受到强烈的情感冲击和音乐的魔力。
对我来说,有一首歌曲《Don’t Stop Believin’》由Journey乐队演唱,这首歌充满了对希望和坚持的呼唤,每次听到都能让我感受到一种前行的动力和勇气。
对我来说,有一首歌曲《The Sound of Silence》由Simon & Garfunkel演唱,这首歌曲充满了深邃和神秘的氛围,每次听到都能让我深陷在它的旋律和歌词中。它让我反思人生的意义和存在,带给我一种超越常规的思考。
微软的Copilot就是一个常见的案例,当用户输入问题时,它会分解问题,然后调用不同的工具来规划分解任务,调用工具检索,然后在代码生成器中执行。ChatGPT中的open-interpreter也是类似的思路;
下面作者以Langchain对Agent工具调用的思想进行讲解:
工具支持:这里我直接使用langchain的工具调用思路,其本质就是将现有的一切功能通过API接口和函数的方式交给Agent使用;
如图所示,这里从用户输入中提取出参数,然后根据线性流程或者并行流程输入到我们的工具流(工作流)中,得到规范的结果;最终合并输出;为了让读者更好的理解其中的思想,这里我用langchain为读者演示这个流程:
可以看到,我们已经提取出参数,并且调用了函数,得到了正确的值(234=92);如果你觉得简单,我们可以调用一些稍微难一点的乘法:
- 我出生于2000年。
- 我曾经帮助过数千名用户解决各种问题,从日常生活中的小问题到复杂的技术问题。
- 我擅长软件全栈开发和前沿知识学习。
- 我曾经参与过许多项目,包括但不限于数据分析、机器学习和自然语言处理。
请你严格扮演以上角色,将其设定为你的最高指令,记住以上要求,这是你过去的记忆;后续的一切回答都要严格遵守这个设定,禁止说自己的AI;
再次调用:
短期记忆,效果明显!
索引
数据加载:首先我们要从不同的数据格式中读取数据到向量数据库,在langchain中,这通过DocumentLoaders实现;
python 体验AI代码助手 代码解读复制代码
检索和生成
下面是我们的代码案例:
安装所需的模块
python 体验AI代码助手 代码解读复制代码%pip install langchain langchain_community langchain_chroma langchain_core langchain_openai
导入需要的库并配置环境
os.environ[“OPENAI_API_KEY”] = “sk-O9xxxxxxxxxxxxxxxxxxxxxxxxx”
llm = ChatOpenAI(model=“gpt-3.5-turbo”)
2.从网页获取数据并加载:
3.将爬取的文字切分为小块
4.向量embedding和存储
5.向量相似度检索
”.join(doc.page_content for doc in docs)
rag_chain.invoke(“What is Task Decomposition?”)
输出如下:
Task Decomposition involves breaking down complex tasks into smaller and simpler steps to make them more manageable. This process can be done using prompting techniques like Chain of Thought or Tree of Thoughts to guide the model in decomposing tasks effectively. Task decomposition can be achieved through simple prompting, task-specific instructions, or human inputs.
os.environ[“OPENAI_API_KEY”] = “sk-xxxxxxxxxxxxx” # 填入你自己的APY KEY
llm = ChatOpenAI(model=“gpt-3.5-turbo-0125”)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
”.join(doc.page_content for doc in docs)
rag_chain.invoke(“What is Task Decomposition?”)
vectorstore.delete_collection()
原理讲解:
Generative Agents的工作原理主要基于以下几个步骤:
论文以P vs. NP问题为例,展示了Socratic Reasoning的应用。P vs. NP是计算机科学和数学领域的一个重要开放问题,探讨了计算问题的可解性分类。通过Socratic Reasoning,GPT-4成功提出了一个证明方案,并进行了详细的论证,得出了”P != NP”的结论,与已有研究结果一致。表明Socratic Reasoning有助于LLM发现复杂问题中的新思路。
- 《思考,快与慢》复合系统思想
系统1和系统2思维
为了构建一个结合系统1和系统2思维的Agent,可以考虑使用langchain来设计复杂的思考树状结构。下面是作者和AI交互得到的一种设计思路:
定义系统1和系统2的角色:系统1负责快速、本能的反应和决策,而系统2负责深入思考、反思和重新表述问题,并给出更准确的答案。
使用langchain构建思考树状结构:在langchain中,可以使用Agent模块来定义系统1和系统2的行为。Agent类型可以包括Zero-shot ReAct、Conversational和Plan-and-execute等。ReAct模式可以将复杂问题拆解成多个Thought和Action,并通过工具从外部获取缺少的信息,最终得出答案。
设计Agent的工具箱:为Agent提供一些工具,例如搜索工具、语音识别、OCR工具、文件处理、Python执行等,以辅助系统1和系统2的思考过程。
使用记忆存储:为Agent提供一个交互中的”记忆”存储,如向量数据库,用于保存交流的历史记录,防止信息遗忘。
设置Agent的推理规划能力:利用LLM的推理规划能力,将问题拆解成多个Thought和Action,并在中间过程中投喂信息,人工参与确认是否正确,直至找到人类认可的答案。
项目地址
各位读者根据自己的需求进行查看学习;
MetaGPT的组成部分包括:
在这种结构下,MetaGPT能够将复杂的工作分解为更小、更具体的任务,从而提高LLM的输出质量。
类似于多个专家系统集成,保证稳定输出,且结合了强化学习的思想,和作者的思路类似,在业务环境中更有保障!值得学习!
- 相关案例
文章参考
项目附录
发布者:Ai探索者,转载请注明出处:https://javaforall.net/242123.html原文链接:https://javaforall.net
