5分钟手把手系列(三):本地编写一个AI Agent(Langchain + Ollama)

背景

随着AI技术的不断升级,AI智能体的应用场景也非常多应用场景下不断普及与落地,很多线上零代码编排平台也如雨后春笋一般的普及开来,那作为天生爱专研的阿里人,肯定不满足于各种封装好的平台工具使用,也是希望能通过代码层面一探究竟,看看大家耳熟能详的AI智能体是怎么现实的。

本文就是基于此目的,通过简单的教程,帮助大家实现AI Agent层面的第一个”“hello world”程序demo。在实现demo之前,首先还是给不熟悉AI Agent的同学介绍一下相关的概念,以及AI Agent相对于普通模型的优势。

AI Agent

首先要理解一个背景,普通预训练好的模型,在回答用户问题时,只能使用他预训练时的知识信息,但这些训练数据往往不是最新的,大部分可能停留在2022~2023年左右,而定期去使用最新数据全量训练各个模型的做法是各个公司无法接受的,所以就衍生出一个必现的问题,用户对AI模型提出的问题,如果涉及到一些未在训练数据中的私密内容、或者最新内容,AI是无法回答的。

至于通过微调、提示词优化等手段去优化训练模型,也仅仅是使得模型对于某类场景更好用而已,无法解决AI知识库过时、不全等信息茧房问题。

  • 但如果问题是涉及最新的时政要闻时,就需要LLM有自己的决策能力,通过推理得出action,如通过使用搜索引擎等工具去获取最新信息,从而解决用户问题。 AI Agent就能很好的解决上面提到的点,避免如下图的尴尬

在这里插入图片描述

AI Agent(人工智能代理)是一种能够感知环境、进行决策和执行动作的智能实体。 不同于传统的人工智能, AI Agent 具备通过独立思考、调用工具去逐步完成给定目标的能力。 比如,告诉 AI Agent 帮忙买火车票,它就可以直接调用 APP 选择购买特定日期的火车票,再调用支付程序下单支付,无需人类去指定每一步的操作。 普通LLM和 AI Agent 的区别在于 AI Agent 可以独立思考并做出行动:

  • 普通LLM与人类之间的交互是基于 prompt 实现的,用户prompt 是否清晰明确会影响LLM回答的效果
  • Agent 的工作仅需给定一个目标,它就能够针对目标独立思考并做出行动,它会根据给定任务详细拆解出每一步的计划步骤,依靠来自外界的反馈和自主思考,自己给自己创建 prompt,来实现目标。

在这里插入图片描述

编码

介绍完了什么是AI Agent,那就进入我们的正题了,如何在本地快速编写AI Agent的Demo。本文主要采用的LangChain + Ollama的方案来实现本地AI Agent代码编写与调试。

LangChain

LangChain是一个开源的Python库,它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成,实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛,使得任何人都可以基于LLM构建自己的创意应用。

在这里插入图片描述
上图是Langchain的最新架构图,大家有兴趣可以自行去官网阅读相关文档 ,当然,目前也有不少声音来质疑Langchain,但Langchain对于新手小白入门AI Agent无疑还是最佳的选择。

Ollama

一个本地运行大模型的生态工具,对新手友好,适合对AI感兴趣的新手朋友们,无需繁琐的各种收费AI API注册与充值。具体使用可以看之前的教程《5分钟手把手系列(一):使用Mac Book Pro本地部署大模型(Ollama+Llama3.1_8B+Docker+OpenWebUI)》

Pycharm

1、程序是通过Python语言在Pycharm中编写调试的,首先新建工程

2、在实际编码的过程中,需要在终端安装相关Python依赖包,可以通过如下命令行提前安装,避免找不到包的报错

pip install langchain-community
pip install google-search-results

3、相应的依赖包安装完成后,我们通过ollama启动qwen2:7b的本地量化模型,然后通过代码新建一个qwen2的大模型对象,并对qwen2进行提问,右键点击“run”之后

from langchain_community.llms import Ollama

#1、加载本地ollama大模型,我们这里加载qwen2模型,对中文更友好
llm = Ollama(model="qwen2:7b")
res = llm.invoke("今天星期几")
print(res)

显示下图结果,怎么样,这么简单的问题也回答不了,是不是对AI很失望,这也就是我们需要AI Agent的理由

4、如背景章节里中所介绍,Agent是有推荐决策的能力,能通过用户的问题,得出每一步的Action、Observation、Thought,最终得出的Final Answer。本文由于篇幅原因,就不自行编写相关tools了,使用Python库google-search-results来实现Agent在线联网搜索功能。

Serpapi

而在使用google-search之前,需要serpapi.com/注册后获取SERPAPI_API_KEY

5、在获取到SERPAPI_API_KEY后,我们通过代码“os.environ[“SERPAPI_API_KEY”]”将key加载到环境变了中,并通过代码加载搜索工具、初始化Agent

from langchain_community.llms import Ollama
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
import os
os.environ["SERPAPI_API_KEY"] = "xxxxxxxxxxxx"

#1、加载本地ollama大模型,我们这里加载qwen2模型,对中文更友好
llm = Ollama(model="qwen2:7b")

#2、加载在线搜索工具serpapi。
tools = load_tools(["serpapi"], llm=llm)

#3、最后,让我们工具、模型、代理类型等参数初始化代理,verbose=True打开日志
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, handle_parsing_errors=True)

#4、由于昨天国足刚刚公布了美加墨世界杯亚洲区预选赛十八强赛的人员名单,我们就用最新的国足名单来测试一下
agent.run("请告诉我2024年中国男足参加美加墨世界杯18强赛的最新名单,通过表格方式给出所有人员的名单")

点击“run”后显示下图结果

> Entering new AgentExecutor chain...
我需要使用搜索引擎来查找关于2024年中国男足成年国家队最新名单的信息。

Action: Search
Action Input: "2024年中国男足成年国家队最新名单
Observation: ['北京时间8月21日,中国男足主教练伊万科维奇以直播形式公布了国足最新一期大名单。本期大名单中的队员,将随队征战2026世预赛亚洲区18强赛的前两轮比赛。', '第3轮至第5轮,将分别迎战澳大利亚、印度尼西亚与巴林。 国足大名单:. 门将:鲍亚雄、刘殿座、王大雷、颜骏凌. 后卫:高准翼、韩鹏飞、蒋光太、 ...', '此前征战36强赛且表现稳健的国足老面孔,如武磊、张玉宁、阿兰、林良铭、费南多、谢鹏飞、朱辰杰、蒋圣龙、蒋光太、李源一、王上源等人,只要没有出现伤病 ...', '不久前,中国男足总算对外公布了27人集训名单,其中武磊、张玉宁、王大雷、颜骏凌、朱辰杰、蒋圣龙等国家队常客悉数入选,也有谢文能、拜合拉木这样的 ...', '北京时间2024年8月21日,中国男足公布了世预赛18强赛第一阶段的球员名单。与以往不同的是,此次的名单公布采用的是线上直播的形式。', '本期国足集训名单,主教练扬科维奇对球队阵容进行大幅调整,包括刘洋、高天意、谭龙、朱辰杰、蒋圣龙、戴伟浚、方昊、何宇鹏、叶力江·什那尔9名亚运队球 ...', '北京时间2024年6月27日,2026年美加墨世界杯亚洲区预选赛18强赛抽签仪式举行,中国队与日本队、澳大利亚队、沙特阿拉伯队、巴林队和印度尼西亚队同在C组。', '2024年6月6日20点,中国国家足球队将在世预赛中对阵泰国队,最新23人名单公布,艾克森、谢维军、鲍亚雄未能入选,武磊和李源一因停赛缺席,张玉宁可能因伤替补。', '黄政宇、杨泽翔、鲍亚雄、徐皓阳、方昊、拜合拉木·阿卜杜外力、韩鹏飞、谢维军等球员入选,让这份名单充满了新意。阿兰的名字赫然在列,这是他时隔两年 ...', '这份国足亚洲杯26人中上海海港队是入围5人最多的俱乐部,包括武磊、张琳芃、颜骏凌、蒋光太、徐新,山东泰山的王大雷、刘彬彬、刘洋、陈蒲和上海申花足球 ...']
Thought:根据搜索结果,我找到了关于2024年中国男足成年国家队最新名单的信息。下面是对这些信息的总结,并通过表格形式给出所有人员名单:

| 位置 | 队员 |
| --- | --- |
| 门将 | 鲍亚雄、刘殿座、王大雷、颜骏凌 |
| 后卫 | 高准翼、韩鹏飞、蒋光太、(具体队员名未列出) |
| 中场/前腰 | 谭龙、朱辰杰、蒋圣龙、戴伟浚、方昊、何宇鹏、叶力江·什那尔 |
| 前锋 | 武磊、张玉宁、阿兰、林良铭(具体队员名未列出) |

请注意,此列表可能不包含所有成员。根据描述,“国家队常客”如武磊、张玉宁等人被提及,但具体的替换球员名单中并未详细列出。

Thought: 我现在知道了最终的表格形式人员名单。
Final Answer: 根据搜索结果和信息总结,以下是2024年中国男足成年国家队最新名单的部分内容(请注意实际名单可能包括更多成员):

| 位置 | 队员 |
| --- | --- |
| 门将 | 鲍亚雄、刘殿座、王大雷、颜骏凌 |
| 后卫 | 高准翼、韩鹏飞、蒋光太、(具体队员名未列出) |
| 中场/前腰 | 谭龙、朱辰杰、蒋圣龙、戴伟浚、方昊、何宇鹏、叶力江·什那尔 |
| 前锋 | 武磊、张玉宁、阿兰、林良铭(具体队员名未列出) |

请注意,上述列表可能不包含所有成员。实际名单可能包括更多球员,并且部分位置的具体人员有待进一步确认。

> Finished chain.


可以看出,在运行日志中,非常详细的打印出了Agent在每一步决策过程中的的Action、Observation、Thought,包括最终得出的Final Answer。虽然答案并没有完全列出所有名单,但对比不会使用工具的预训练模型,基本算是可用的答案了。

本地大模型对比

这是同样的描述,直接通过ollama向qwen2模型进行提问的结果,可以说是一本正经的胡说八道了

写在最后

正如笔者经常提及的论调,目前市面上大部分AI产品都仅在之前的产品流程中插入了一层AI逻辑,并未有实质性的突破应用场景落地,本文主旨也并不是希望所有同学都来学习AI相关的编程技术,仅仅是希望通过此篇文章,激发大家对AI技术一探究竟的兴趣,弄清楚AI运行过程中的一些底层逻辑,只有深入了解AI运行中各个环节原理,才有可能创造出更多创新性质的AI产品功能。

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值