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知识库过时、不全等信息茧房问题。

  • 企业内的私密内容可以通过目前比较成熟的RAG技术,就能比较好的解决
  • 但如果问题是涉及最新的时政要闻时,就需要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注册与充值。

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产品功能。

 如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

五、AI产品经理大模型教程

在这里插入图片描述

LLM大模型学习路线 

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

### 使用LangChain框架构建代理 在构建基于LangChain的代理时,理解其核心组件对于成功实现至关重要[^2]。代理(Agent)是能够执行特定任务或一系列操作的实体,在LangChain中,通过组合不同的模块可以创建复杂的逻辑流。 #### 定义目标与需求分析 为了启动项目,明确想要解决的问题以及预期成果非常重要。这一步骤有助于决定哪些功能最为重要,并指导后续的设计决策。 #### 初始化环境设置 确保安装了必要的库文件并配置好开发环境。如果计划部署到云端,则可能还需要考虑像Azure这样的平台服务[^3]。 #### 创建基础结构 使用`langchain.Agent`类作为起点,定义基本属性和行为模式。此阶段涉及设定初始参数、加载预训练模型以及其他初始化工作。 ```python from langchain import Agent # 实例化一个新的代理对象 my_agent = Agent() ``` #### 设计交互流程 根据具体应用场景设计对话管理机制或其他形式的人机互动方式。利用LangChain提供的工具链(Chains),可以使这些过程更加流畅高效[^1]。 #### 集成外部资源和服务 连接API接口获取实时数据更新,或是调用其他微服务增强应用的功能性。例如,可以通过HTTP请求访问第三方数据库或云存储解决方案。 #### 测试与优化性能 反复测试以验证系统的稳定性和响应速度,必要时调整算法参数直至达到最佳效果。持续监控运行状况并对可能出现的问题保持警惕。 #### 发布上线准备 完成最终版本前进行全面的质量检测,准备好文档和支持材料以便用户查阅。当一切就绪之后就可以正式对外发布了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值