AI大模型开发实战:基于LangGraph、Ollama构建本地AI智能体

一、理解 AI 智能体

AI 智能体是能够感知其环境并采取行动以实现特定目标的实体或系统。这些智能体可以从简单的算法到能够进行复杂决策的复杂系统。

img

以下是关于 AI 智能体的一些关键点:

(1)感知(Perception):AI 智能体使用传感器或输入机制来感知其环境。这可能涉及从各种来源收集数据,如摄像头、麦克风或其他传感器。

(2)推理(Reasoning):AI 智能体接收信息,并使用算法和模型来处理和解释数据。这一步涉及理解模式、进行预测或生成响应。

(3)决策制定(Decision-making):像人类一样,AI 智能体根据其感知和推理来决定行动或输出。这些决策旨在实现其编程或学习过程中定义的特定目标或目的。此外,AI 智能体将更多地作为助手而不是取代人类。

(4)执行(Action):AI 智能体根据其决策执行行动。这可能涉及现实世界中的身体动作(如移动机器人臂)或数字环境中的虚拟动作(如在应用程序中提出建议)。

二、AI 智能体与 RAG 应用的区别

RAG(检索增强生成)应用和 AI 智能体指的是人工智能领域内的两个不同概念。

RAG 通过结合信息检索方法来提高大型语言模型(LLM)的性能或输出。检索系统根据输入查询从大型语料库中搜索相关文档或信息。然后,生成模型(例如基于 Transformer 的语言模型)使用这些检索到的信息生成更准确和上下文相关的响应。这有助于通过整合检索到的信息来提高生成内容的准确性。此外,这种技术消除了对新数据进行微调或训练 LLM 的需求。

另一方面,AI 智能体是设计用来执行特定任务或一系列任务的自治软件实体。它们基于预定义的规则、机器学习模型或两者结合来运行。它们通常与用户或其他系统交互,以收集输入、提供响应或执行动作。一些 AI 智能体的性能随着时间的推移而提高,因为它们可以根据新数据和经验学习和适应。AI 可以同时处理多个任务,提供可扩展性。

img

总之,RAG应用是专门设计用于通过结合检索机制来增强生成模型的能力;智能体是更广泛的实体,旨在自主执行各种任务。

三、LangGraph 简介

LangGraph 是一个强大的库,用于使用大型语言模型(LLM)构建有状态、多参与者应用程序。它有助于创建涉及单个或多个智能体的复杂工作流程,提供循环、可控性和持久性等关键优势。

优势

  • 循环和分支:与使用简单有向无环图(DAG)的其他框架不同,LangGraph 支持循环和条件语句,这对于创建复杂的智能体行为至关重要。
  • 细粒度控制:作为一个低级框架,LangGraph 提供了对应用程序流程和状态的详细控制,使其成为开发可靠智能体的理想选择。
  • 持久性:它包括内置的持久性,允许你在每个步骤后保存状态,暂停和恢复执行,并支持高级功能,如错误恢复和人工干预的工作流程。

特点

  • 循环和分支:在你的应用程序中实现循环和条件语句。
  • 持久性:在每个步骤后自动保存状态,支持错误恢复。
  • 人工干预:中断执行以供人工批准或编辑。
  • 流式支持:每个节点生成输出时即时流式传输。
  • 与LangChain集成:与LangChain和LangSmith无缝集成,也可以独立使用。

四、Ollama 简介

Ollama 是一个开源项目,它使在本地机器上运行大型语言模型(LLM)变得简单且用户友好。它提供了一个用户友好的平台,简化了 LLM 技术的复杂性,使其易于访问和定制,适用于希望利用 AI 力量而无需广泛的技术专业知识的用户。它易于安装。此外,我们有一系列模型和一套全面的功能和功能,旨在增强用户体验。

img

关键特点:

  • 本地部署:直接在本地机器上运行复杂的 LLM,确保数据隐私并减少对外部服务器的依赖。
  • 用户友好的界面:设计直观易用,适用于不同技术水平的用户。
  • 可定制性:微调 AI 模型以满足您的特定需求,无论是研究、开发还是个人项目。
  • 开源:作为开源项目,Ollama 鼓励社区贡献和持续改进,促进创新和协作。
  • 轻松安装:Ollama 以其用户友好的安装过程脱颖而出,为 Windows、macOS 和 Linux 用户提供直观、无忧的设置方法。

五、使用 LangGraph 和 Ollama 创建 AI 智能体的步骤

在这个案例中,我们将使用qwen2:7b 模型创建一个简单的智能体示例。这个智能体可以使用 Tavily 搜索 API 搜索网络并生成响应。

我们将从安装 Langgraph 开始,这是一个设计用于使用 LLM 构建有状态、多参与者应用程序的库,非常适合创建智能体和多智能体工作流程。LangGraph 受到 Pregel、Apache Beam 和 NetworkX 的启发,由 LangChain Inc. 开发,可以独立于 LangChain 使用。

我们将使用qwen2:7b 作为我们的 LLM 模型,该模型将与 Ollama 和 Tavily 的搜索 API 集成。Tavily 的 API 针对 LLM 进行了优化,提供了事实性、高效、持久的搜索体验。

开始安装langgraph包:


pip install -U langgraph

如有需要,安装其他包:

pip install langchain-openai langchainhub

完成安装后,我们将进入下一个关键步骤:提供 Travily API 密钥。

注册 Travily 并生成 API 密钥。

export TAVILY_API_KEY="apikeygoeshere"

现在,我们将运行以下代码来获取模型。请尝试使用 Llama 或任何其他版本的

qwen2:7b。
ollama pull qwen2:7b

导入构建智能体所需的所有必要库。

from langchain import hub
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.prompts import PromptTemplate
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from langchain_community.chat_models 
import ChatOllama

我们将首先定义我们想要使用的工具,并将工具与 llm 绑定。在这个简单的例子中,我们将使用通过 Tavily 提供的内置搜索工具。

示例代码如下所示:

import os


# 设置环境变量"TAVILY_API_KEY",将其值设为一个API密钥字符串
# 这个密钥用于认证和授权应用程序访问Tavily API的服务
# 通过将API密钥存储在环境变量中,可以提高代码的安全性和可维护性,避免硬编码敏感信息
os.environ["TAVILY_API_KEY"] = "tvly-xxxxxxxxxx"


# 初始化ChatOpenAI实例,设置以下参数:
# model参数指定使用的语言模型为"qwen2:7b"
# temperature参数设置为0.0,这意味着生成的响应将更加确定和基于模型的知识,减少随机性
# api_key参数设置为"ollama"
# base_url参数指定了与模型交互的API基础URL,此处指向本地主机上的一个特定端口和路径
llm = ChatOpenAI(model="qwen2:7b", temperature=0.0, api_key="ollama", base_url="http://localhost:11434/v1")


# 创建工具列表,其中包含一个TavilySearchResults实例,用于执行搜索操作
# max_results参数设置为3,这意味着每次搜索将返回最多3个结果
tools = [TavilySearchResults(max_results=3)]

下面的代码片段检索一个提示模板并以可读格式打印。然后可以根据需要使用或修改此模板。

# 从LangChain的Hub中拉取一个预定义的prompt模板
prompt = hub.pull("wfh/react-agent-executor")
# 使用pretty_print()方法以更易读的格式打印模板内容
prompt.pretty_print()

使用前面创建的语言模型(llm)、一组工具(tools)和一个提示模板(prompt)创建一个智能体(agent)。

# 创建agent对象
agent = create_react_agent(llm, tools, messages_modifier=prompt)


from IPython.display import Image, display
# agent.get_graph()方法返回代理的内部状态图,描述了代理的组件和它们之间的关系
# draw_mermaid_png()方法将状态图转换为PNG格式的图像,便于可视化展示
display(Image(agent.get_graph().draw_mermaid_png()))

这段代码的作用是在Jupyter Notebook中显示智能体的结构和工作流程图,帮助理解和调试智能体的行为。

img

agent 节点会使用消息列表调用语言模型。如果生成的 AIMessage 包含 tool_calls,则图将调用 tools 节点。tools 节点执行工具(每个 tool_call 执行一个工具),并将响应作为 ToolMessage 对象添加到消息列表中。然后 agent 节点再次调用语言模型。这个过程会一直重复,直到响应中不再有 tool_calls。然后 agent 返回包含键 “messages” 的字典,其中包含了完整的消息列表。

# 调用agent的invoke方法
response = agent.invoke({"messages": [("user", "解释人工智能")]})


# 遍历响应字典中'messages'键对应的列表,该列表包含了代理生成的响应消息
for message in response['messages']:
 print(message.content)

生成如下响应:

img

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

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

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

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud微服务开发(三)网关

目录 1.网关概述 2.网关路由 3.网关登录校验 3.1自定义过滤器 3.2实现登录校验 3.3微服务获取用户 3.4OpenFeign在不同微服务之间传递用户 4.网关配置管理 5.配置热更新 6.动态路由 1.网关概述 顾明思议,网关就是网络的关口。数据在网络间传输&#xff0…

利用DFT画有限长序列的DTFT

MATLAB中没有DTFT函数,计算机不可能给出连续结果,可以只能利用DFT的fft函数来实现。 %% L 7; x ones(1, L) figure; tiledlayout(2,3,"TileSpacing","tight") nexttile; stem([0:L-1],x) box off title([num2str(L), points rect…

MYSQL索引的分类和创建

目录 1、聚簇索引和非聚簇索引 tips: 小问题:主键为什么建议使用自增id? 2、普通索引 (常规索引)(normal) 3、唯一索引(UNIQUE ) 唯一索引和主键的区别: 唯一约束和唯一索引的区别&#…

Artec Leo3D扫描仪在重型机械设备定制中的应用【沪敖3D】

挑战:一家加拿大制造商需要有效的方法,为富于变化且难度较高的逆向工程,快速、安全、准确地完成重型机械几何采集。 解决方案:Artec Leo, Artec Studio, Geomagic for SOLIDWORKS 效果:Artec Leo三维扫描代替过去的手动…

数据驱动模型预测控制应用于自动驾驶车辆转向

Application of Data-driven Model Predictive Control for Autonomous Vehicle Steering 数据驱动模型预测控制应用于自动驾驶车辆转向 Abstract With the development of autonomous driving technology, there are increasing demands for vehicle control, and MPC has b…

Elasticsearch 架构及 Lucene 索引结构原理入门

文章目录 Elasticsearch 整体架构Lucene 索引结构Lucene 倒排索引核心原理倒排索引倒排表(Posting List) Elasticsearch 整体架构 一个 ES Index 在集群模式下,有多个Node(节点)组成,每个节点就是ES的 inst…

【源码阅读系列】(四)进程间通信(一)

进程间的通信 为什么需要进程间通信? 操作系统中的进程隔离机制确保了各个进程在独立的内存空间中运行,并通过严格的机制防止进程间的非法访问。然而,在某些场景下,进程间的通信(Inter-process Communication, IPC&a…

直线导轨使用润滑脂和润滑油的区别

直线导轨在使用过程中,润滑是非常重要的一环,它能够减少摩擦、降低磨损、防止腐蚀,并提高导轨的精度和使用寿命。润滑脂和润滑油是两种常用的润滑剂,它们各自有不同的特点和适用场景。 润滑脂是由基础油、增稠剂和添加剂组成的半固…

echarts绘制自定义展示排名和数据等信息(数据排名进度条)

目录 一、结构分析 二、配置图表各部分 1.名称及排序 2.进度条绘制 3.数据末端圆形绘制 (1)基本配置 (2)数据 (3)坐标轴配置 (4)点的样式 (5)项的样…

CV(4)--边缘提取和相机模型

前言 仅记录学习过程,有问题欢迎讨论 边缘提取(涉及语义分割): 图象的边缘是指图象局部区域亮度变化显著的部分,也有正负之分,暗到亮为正 求边缘的幅度:sobel,Canny算子 图像分高频分量和低…

【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件

sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…

如何用VScode恢复误删文件-linux

如果你用vscode远程在服务器上办公&#xff0c;有一天你用了&#xff1a; rm -rf *然后你发现你的文件不见了&#xff0c;不要着急。 这种方法只适用于不多的几个文件。 这个时候你要做的是&#xff0c;查看右侧的1&#xff1a; 从1里面查找你删除的文件&#xff0c;然后点…

IoTDB 报错 There are no available SchemaRegionGroup RegionGroups currently

现象 现象1&#xff1a; 现象2&#xff1a;时序数据库 IoTDB 系统遇到了一个持续增长的 schema_region 目录问题&#xff0c;导致频繁出现内存溢出&#xff08;OutOfMemory&#xff09;错误。在路径 data/datanode/consensus/schema_region 下&#xff0c;系统每分钟都会创建多…

使用ERA5数据绘制风向玫瑰图的简易流程

使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图&#xff0c;想到的还是高分辨率的ERA5land的数据&#xff08;0.1分辨率&#xff0c;逐小时分辨率&#xff0c;1950年至今&#xff09;。 风向&#xff0c;我分为了16个&…

hbuilder 安卓app手机调试中基座如何设置

app端使用基座 手机在线预览功能 1.点击运行 2.点击运行到手机或者模拟器 3.制作自定义调试基座 4.先生成证书【可以看我上一篇文档写的有】&#xff0c;点击打包 5.打包出android自定义调试基座【android_debug.apk】,【就跟app打包一样需要等个几分钟】 6.点击运行到手…

Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控

一、前言 用ffmpeg做硬解码开发&#xff0c;参考自带的示例hw_decode.c即可&#xff0c;里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码&#xff0c;也就是无需区分用的何种显卡&#xff0c;操作系统自动调度&#xff0c;基本上满足了各种场景的需要&#xff0…

Photoshop提示错误弹窗dll缺失是什么原因?要怎么解决?

Photoshop提示错误弹窗“DLL缺失”&#xff1a;原因分析与解决方案 在创意设计与图像处理领域&#xff0c;Photoshop无疑是众多专业人士和爱好者的首选工具。然而&#xff0c;在使用Photoshop的过程中&#xff0c;有时会遇到一些令人头疼的问题&#xff0c;比如突然弹出的错误…

EXCEL 数据透视表基础操作

目录 1 选择数据&#xff0c;插入数据透视表 2 选择数据透视表生成位置 3 出现了数据透视表的面板 4 数据透视表的基本结构认识 4.1 交叉表/列联表 4.2 row, column, cell 一个新增的筛选器&#xff0c;就这么简单 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

AI生成图表化:深入探索Mermaid

引言 在使用生成式AI时&#xff0c;只要你提出让AI帮你生成mermaid图&#xff0c;AI的生成就会出现丰富的图形&#xff01; 在现代文档编写中&#xff0c;图表的使用不仅能增强文档的可读性&#xff0c;还能更直观地表达复杂的概念和流程。Mermaid 作为一款开源的图表绘制工具…