当前位置: 首页 > article >正文

大模型:Agent(智能代理)

一、环境在此之前我们需要确定一下环境网盘分享的是我们第三方库的配置环境。requirements3.txt链接: https://pan.baidu.com/s/1FjHEmBK6Pz4XS4aN3Ak76g 提取码: 89yt这里我使用的是python3.11python版本不能太老否则很多库会不兼容使用的是虚拟环境要安装这些库可以把这个文档保存然后在终端输入pip install -r 文档地址二、创建第一个自定义工具最基础的 Agent 创建流程。我们定义了一个计算文本字数的工具并让 Agent 使用它。from langchain import hub from langchain.agents import create_structured_chat_agent, AgentExecutor from langchain.memory import ConversationBufferMemory from langchain.schema import HumanMessage from langchain.tools import BaseTool from langchain_openai import ChatOpenAI导入我们需要的库# 初始化大模型 # 这里使用通义千问的API你需要替换成自己的API密钥 model ChatOpenAI( modelqwen-plus, openai_api_keysk-**********************9,#填入自己申请的key openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0 ) # 测试模型是否正常工作 model.invoke([HumanMessage(content我是一个非常聪明的人工智能助手这句话的字数是多少)])申请自己key可以参考文章https://blog.csdn.net/2201_75573294/article/details/159113608?fromshareblogdetailsharetypeblogdetailsharerId159113608sharereferPCsharesource2201_75573294sharefromfrom_link# 1. 定义自定义工具类 class TextLengthTool(BaseTool): name 文本字数计算工具 # 工具名称 description 当你被要求计算文本的字数时使用此工具 # 工具描述很重要模型根据这个判断何时使用 def _run(self, text): 工具的具体实现逻辑 return len(text)BaseTool所有自定义工具都需要继承的基类name 和 description这两个属性是模型选择工具的关键依据# 2. 创建工具列表 tools [TextLengthTool()] # 3. 从hub获取提示词模板 prompt hub.pull(hwchase17/structured-chat-agent) # 4. 创建agent agent create_structured_chat_agent( llmmodel, toolstools, promptprompt ) # 5. 创建记忆组件让agent记住对话历史 memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue ) # 6. 创建agent执行器 agent_executor AgentExecutor.from_agent_and_tools( agentagent, toolstools, memorymemory, verboseTrue, # 显示详细执行过程 handle_parsing_errorsTrue # 解析错误时自动处理 ) # 7. 测试询问字数会调用工具 agent_executor.invoke({input: 我是一个非常聪明的人工智能助手这句话的字数是多少}) # 8. 测试询问数学问题不会调用工具直接用模型知识回答 agent_executor.invoke({input: 请你充当我的数学老师告诉我什么是勾股定理})memory让agent能记住对话上下文verboseTrue能看到agent的思考过程对学习和调试非常有帮助三、使用现成的Python执行工具使用 LangChain 提供的现成工具让 agent 能够执行 Python 代码。1。’先安装一个第三方库pip install langchain_experimental2.具体实现from langchain_experimental.agents.agent_toolkits import create_python_agent from langchain_experimental.tools import PythonREPLTool from langchain_openai import ChatOpenAI # 创建工具列表使用现成的Python交互式环境工具 tools [PythonREPLTool()] # 创建专门用于执行Python代码的agent agent_executor create_python_agent( llmChatOpenAI( modelqwen-plus, openai_api_keysk-*******************, openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0 ), toolPythonREPLTool(), # 指定使用的工具 verboseTrue, agent_executor_kwargs{handle_parsing_errors: True} )PythonREPLTool一个强大的工具让agent能够执行任意Python代码create_python_agent专门用于创建Python编程agent的便捷方法# 测试数学计算 agent_executor.invoke({input: 5的3.6次方是多少}) # agent会生成代码print(5 ** 3.6) 并执行 # 测试斐波那契数列 agent_executor.invoke({input: 第12个斐波那契数列的数字是多少}) # agent会编写代码计算斐波那契数列并返回结果agent会自主决定编写什么代码来解决问题四、CSV文件分析工具展示了如何使用create_csv_agent来分析表格数据。可以自己写一个文档内容然后保存txt是可以csv识别的。然后对他进行提问from langchain_experimental.agents.agent_toolkits import create_csv_agent from langchain_openai import ChatOpenAI # 创建专门用于分析CSV文件的agent agent_executor create_csv_agent( llmChatOpenAI( modelqwen-plus, openai_api_keysk-**********************, # 注意不同示例使用了不同密钥 openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0, ), pathrD:\aboutxue\dataxue.txt, # 指定数据文件路径 verboseTrue, agent_executor_kwargs{handle_parsing_errors: True} ) # 测试询问数据集基本信息 agent_executor.invoke({input: 数据集有多少列用中文回复}) # agent会使用pandas读取数据并统计列数 agent_executor.invoke({input: 数据集包含哪些变量用中文回复}) # agent会显示所有列名 # 测试具体数据查询 agent_executor.invoke({input: 数据集里广州演唱会有几场用中文回复}) # agent会筛选数据并计数 agent_executor.invoke({input: 五月一日是在哪开演唱会用中文回复}) # agent会按条件查询具体信息agent读取指定路径的CSV文件将用户问题转化为pandas代码执行代码获取结果并输出。create_csv_agent专门用于数据分析的agent创建函数。agent底层使用pandas库处理数据。支持各种复杂的查询需求。五、多工具协同工作重点展示如何让agent同时拥有多个工具并根据问题智能选择。from langchain import hub from langchain.agents import create_structured_chat_agent, AgentExecutor from langchain.memory import ConversationBufferMemory from langchain.tools import BaseTool, Tool from langchain_experimental.agents.agent_toolkits import create_csv_agent, create_python_agent from langchain_experimental.tools import PythonREPLTool from langchain_openai import ChatOpenAI # 初始化基础模型 model ChatOpenAI( modelqwen-plus, openai_api_keysk-0b717f29b6ee4852a2331cf1ffa30d4f, openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0 )# 1. 定义第一个自定义工具字数计算 class TextLengthTool(BaseTool): name 文本字数计算工具 description 当你需要计算文本包含的字数时使用此工具 def _run(self, text): return len(text) # 2. 创建Python执行agent作为工具使用 python_agent_executor create_python_agent( llmChatOpenAI( modelqwen-plus, openai_api_keysk-*********************, openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1 ), temperature0, toolPythonREPLTool(), verboseTrue, agent_executor_kwargs{handle_parsing_errors: True} ) # 3. 创建CSV分析agent作为工具使用 csv_agent_executor create_csv_agent( llmChatOpenAI( modelqwen-plus, openai_api_keys**********************************, openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0, ), pathrD:\aboutxue\dataxue.txt, verboseTrue, agent_executor_kwargs{handle_parsing_errors: True} )# 4. 组装工具列表关键步骤 tools [ Tool( namePython代码工具, description当你需要借助Python解释器进行数学计算、数据处理或执行代码时使用这个工具。 用自然语言把要求给这个工具它会生成Python代码并返回代码执行的结果。, funcpython_agent_executor.invoke # 注意这里传入的是函数不是agent本身 ), Tool( nameCSV分析工具, description当你需要回答关于dataxue.txt文件的问题时使用这个工具。 它可以查询数据集的行数、列数、特定条件的记录等。 接受完整的问题作为输入在使用Pandas库计算后返回答案。, funccsv_agent_executor.invoke ), TextLengthTool() # 直接使用自定义工具类实例 ] # 5. 创建记忆组件 memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue ) # 6. 获取提示词模板 prompt hub.pull(hwchase17/structured-chat-agent) # 7. 创建主agent agent create_structured_chat_agent( llmmodel, toolstools, promptprompt ) # 8. 创建主执行器 agent_executor AgentExecutor.from_agent_and_tools( agentagent, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue )Tool包装类可以将已有的agent包装成工具实现工具嵌套description的编写艺术描述越清晰agent选择越准确多步推理agent能自主决定调用多个工具的先后顺序# 9. 测试一使用Python工具 agent_executor.invoke({input: 第8个斐波那契数列的数字是多少}) # 10. 测试二使用CSV工具 agent_executor.invoke({input: 数据集里广州演唱会有几场用中文回答}) # 11. 测试三组合使用多个工具最复杂的任务 agent_executor.invoke({ input: 我是一个聪明的人工智能助手这句话的字数是多少你需要调用python代码工具来确定这个数字是否是斐波那契数列当中的数字 })当执行第三个测试时Agent来思考流程识别任务需求需要计算字符串的字数需要判断这个数字是否属于斐波那契数列使用字数计算工具调用 TextLengthTool得到结果9我是一个聪明的人工智能助手共9个字符使用Python工具把判断9是否在斐波那契数列中的任务交给Python工具Python工具生成并执行代码返回结果9在斐波那契数列中吗生成的代码会计算斐波那契数列直到超过9然后判断综合结果最终答案字数是9并且9是斐波那契数列中的数字六、Self-Ask with Search 模式一种特殊的agent类型它擅长处理需要多步推理的问题。1.self-ask-with-search模式的特点工具名称固定必须使用 Intermediate Answer这是该模式的约定拆解问题善于将复杂问题拆解为多个子问题中间答案每个子问题的答案称为Intermediate Answer最终汇总基于所有中间答案得出最终结论from langchain import hub from langchain.agents import AgentExecutor, create_self_ask_with_search_agent from langchain.memory import ConversationBufferMemory from langchain.schema import HumanMessage from langchain.tools import BaseTool from langchain_openai import ChatOpenAI # 初始化模型 model ChatOpenAI( modelqwen-plus, openai_api_keysk-***************************, openai_api_basehttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0 ) # 测试模型 model.invoke([HumanMessage(content我是一个非常聪明的人工智能助手这句话的字数是多少)])# 注意这里的工具名称必须是 Intermediate Answer class TextLengthTool(BaseTool): name Intermediate Answer # 这个名称是固定的不能随意更改 description 当你被要求计算文本的字数时使用此工具 def _run(self, text): return len(text) # 创建工具列表 tools [TextLengthTool()] # 获取特定的prompt模板 prompt hub.pull(hwchase17/self-ask-with-search) print(prompt.template) # 可以查看prompt的具体内容 # 创建self-ask-with-search类型的agent agent create_self_ask_with_search_agent( llmmodel, toolstools, promptprompt ) # 创建记忆组件 memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue ) # 创建执行器 agent_executor AgentExecutor.from_agent_and_tools( agentagent, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue )# 测试一简单问题 agent_executor.invoke({input: 我是一个非常聪明的人工智能助手这句话的字数是多少}) # 测试二复杂比较问题 agent_executor.invoke({input: 林肯和罗斯福谁活得更久}) # 查看prompt的完整内容注释部分 Question: Who lived longer, Muhammad Ali or Alan Turing? Are follow up questions needed here: Yes. Follow up: How old was Muhammad Ali when he died? Intermediate answer: Muhammad Ali was 74 years old when he died. Follow up: How old was Alan Turing when he died? Intermediate answer: Alan Turing was 41 years old when he died. So the final answer is: Muhammad Ali Question: When was the founder of craigslist born? Are follow up questions needed here: Yes. Follow up: Who was the founder of craigslist? Intermediate answer: Craigslist was founded by Craig Newmark. Follow up: When was Craig Newmark born? Intermediate answer: Craig Newmark was born on December 6, 1952. So the final answer is: December 6, 1952 Question: {input} Are followup questions needed here:{agent_scratchpad} 以上代码需要注意的API密钥管理示例中的密钥需要替换为你自己的建议使用环境变量存储工具描述优化多测试不同描述找到让模型理解最准确的方式调试技巧始终开启verboseTrue观察agent的思考过程错误处理设置handle_parsing_errorsTrue让agent更健壮记忆管理长对话中注意控制记忆大小避免token超限七、总结与对比五种agent类型的适用场景示例agent类型适用场景创建第一个自定义工具Structured Chat Agent需要自定义工具的通用场景使用现成的Python执行工具Python Agent数学计算、编程任务CSV文件分析工具CSV Agent数据分析、表格查询多工具协同工作Multi-Tool Agent需要多种能力的复杂任务Self-Ask with Search 模式Self-Ask Agent需要多步推理的比较类问题

相关文章:

大模型:Agent(智能代理)

一、环境 在此之前我们需要确定一下环境,网盘分享的是我们第三方库的配置环境。 requirements3.txt 链接: https://pan.baidu.com/s/1FjHEmBK6Pz4XS4aN3Ak76g 提取码: 89yt 这里我使用的是python3.11,python版本不能太老,否则很多库会不兼…...

基于ThinkPHP框架的外卖点餐系统设计与实现

目录 可选框架 可选语言 内容 可选框架 J2EE、MVC、vue3、spring、springmvc、mybatis、SSH、SpringBoot、SSM、django 可选语言 java、web、PHP、asp.net、javaweb、C#、python、 HTML5、jsp、ajax、vue3 内容 随着移动互联网信息技术高速发展,许多上班族、…...

基于Simulink的极点配置法优化Buck动态响应​

目录 手把手教你学Simulink——基于Simulink的极点配置法优化Buck动态响应​ 摘要​ 一、背景与挑战​ 1.1 Buck变换器动态响应的核心需求与传统PID局限​...

CEO必会之创建公司文化

CEO必会之创建公司文化 CEO必会之建立公司文化:把墙上标语,变成员工骨子里的信仰 课程导语 话术升级: 各位好,今天我们来聊一个CEO最容易忽视、但也最决定企业高度的课题:建立公司文化。 很多人觉得文化是虚的——墙上…...

MedGemma Medical Vision Lab高算力适配:异步I/O+零拷贝内存映射加速大影像加载

MedGemma Medical Vision Lab高算力适配:异步I/O零拷贝内存映射加速大影像加载 1. 引言:医学影像加载的性能挑战 医学影像分析系统面临着一个核心的技术难题:如何高效处理大型医学影像文件。一张普通的CT或MRI影像可能达到数百MB甚至GB级别…...

Get-cookies.txt-LOCALLY:终极本地Cookie导出工具完整指南

Get-cookies.txt-LOCALLY:终极本地Cookie导出工具完整指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在网络安全日益重要的今天&a…...

微信小程序-滑动拼图安全验证

滑动拼图验证组件1. 前提介绍2. 最终实现效果图3. 封装验证组件并使用1.编写组件2.引入并使用4. 总结1. 前提介绍 本项目是应用taro框架,使用Canvas 画布组件微信开发文档,来实现的 (注:此组件目前是纯前端校验,没涉及…...

Kimi-VL-A3B-Thinking快速上手:不写代码,用Web界面完成图文推理全流程

Kimi-VL-A3B-Thinking快速上手:不写代码,用Web界面完成图文推理全流程 你是不是经常遇到这样的场景:拿到一张复杂的图表,想快速提取里面的关键信息;或者看到一张产品图,想知道它的具体参数和特点&#xff…...

从Bezier到NURBS:Halcon中样条曲线拟合的技术演进与选型建议

从Bezier到NURBS:Halcon中样条曲线拟合的技术演进与选型建议 在工业视觉检测领域,曲线拟合算法的选择直接影响着测量精度和系统稳定性。Halcon作为计算机视觉领域的标杆工具,其曲线拟合技术经历了从简单多项式到NURBS(非均匀有理B…...

ruoyi-vue-pro ERP系统实战:5分钟搞定采购模块数据库设计与业务逻辑

Ruoyi-Vue-Pro ERP采购模块实战:从数据库设计到业务联调全解析 上个月接手一个制造业客户的ERP系统改造项目时,他们的采购主管抱怨现有系统存在三个致命问题:供应商信息混乱导致比价困难、采购订单与入库单脱节造成对账耗时、库存更新延迟引发…...

AI|大模型数学能力评估实战

1. 大模型数学能力评估的意义 评估大模型的数学能力,本质上是在测试它的逻辑思维和计算精度。这就像给一个学生做数学考试,不仅要看他能不能算出正确答案,还要观察他的解题思路是否清晰、步骤是否合理。在实际应用中,大模型的数学…...

Miniconda-Python3.10镜像效果展示:一键创建多个独立Python环境

Miniconda-Python3.10镜像效果展示:一键创建多个独立Python环境 1. 为什么需要独立的Python环境 在Python开发中,我们经常会遇到这样的困扰:不同项目依赖的库版本不同,导致冲突和兼容性问题。比如: 项目A需要Tensor…...

EfficientNet解析:复合缩放如何重塑轻量级网络性能

1. 从MobileNet到EfficientNet的进化之路 2017年,当Google首次推出MobileNet时,整个计算机视觉领域都为之一振。这个专为移动端设计的轻量级网络,用深度可分离卷积(Depthwise Separable Convolution)取代传统卷积&…...

Meshlab实用操作指南:从STL处理到点云化

1. Meshlab入门:为什么选择它处理STL文件? 如果你经常接触3D模型,尤其是工业设计、逆向工程或者3D打印领域,STL格式的文件对你来说一定不陌生。这种三角网格文件格式简单通用,但直接处理起来却不太方便——这时候Meshl…...

天问语音模块LU-ASR PRO语音替换全攻略:从MP3转换到一键烧录

天问语音模块LU-ASR PRO语音替换全攻略:从MP3转换到一键烧录 在智能硬件开发中,语音交互功能正变得越来越普及。天问语音模块LU-ASR PRO作为一款性能优异的语音识别模块,被广泛应用于各类智能设备中。本文将详细介绍如何对模块中的默认语音进…...

Android预装APK的V2签名失效问题分析与解决策略

1. 为什么V2签名在预装时会失效? 这个问题困扰过不少Android开发者。我去年在给某智能手表项目预装系统应用时就踩过这个坑,当时GTS测试总是报签名错误,折腾了一周才发现是预装方式的问题。先说说V2签名的特点:它会对整个APK文件进…...

岚图上市:成央国企高端新能源汽车第一股 武汉从造车向造链升级

雷递网 雷建平 3月19日岚图汽车(07489.HK)今日在港交所上市,成为“央国企高端新能源汽车第一股”。岚图汽车也成为继蔚小理、零跑汽车、奇瑞汽车之后,港股市场迎来的又一股重要的新能源造车力量。放眼全局,岚图也是华中…...

百度富文本编辑器在国产化信创环境中如何处理PPT导入?

教育网站CMS系统Word导入功能开发实录——C#程序员视角 一、需求拆解与前期调研 作为独立外包开发者,我首先与教育机构的产品经理进行了3次需求对齐会议,明确核心痛点: 教师群体:需将备课文档(含公式、表格、教学图…...

TSP求解器大比拼:Concorde vs LKH,哪个更适合你的项目?

TSP求解器深度评测:Concorde与LKH的核心差异与工程实践指南 当面对物流路径规划、芯片布线或无人机巡检路线优化等实际工程问题时,旅行商问题(TSP)的求解效率直接关系到业务成本。本文将带您深入两个业界标杆求解器——Concorde与…...

网页版百度UM编辑器能否跨平台粘贴Excel表格数据?

Word图片一键转存功能开发全记录 技术调研与选型 作为项目前端负责人,我近期专注于解决Word文档粘贴到UEditor时图片自动转存的问题。经过对同类方案的对比分析,确定以下技术路线: 前端技术栈 Vue2.6.14 UEditor 1.4.3Axios 0.21.1&…...

REST API的隐性成本有多高?——基于百万QPS压测的带宽、GC、内存占用三维对比报告

第一章:REST API的隐性成本有多高?——基于百万QPS压测的带宽、GC、内存占用三维对比报告在真实高并发场景下,REST API 的表层简洁性常掩盖其底层资源开销。我们对三类典型服务(Go net/http、Spring Boot WebMvc、Node.js Express…...

LlamaFirewall大模型防火墙框架:构建安全AI代理的开源护栏系统

1. LlamaFirewall框架的核心价值与应用场景 当大模型技术逐渐渗透到各行各业时,安全问题就像悬在头顶的达摩克利斯之剑。我去年参与过一个金融领域的AI客服项目,上线第三天就遭遇了精心设计的提示词注入攻击——攻击者用看似普通的用户提问,成…...

嵌入式开发实战:SPI回环测试完整流程与常见问题排查(基于Linux内核)

嵌入式Linux SPI回环测试全流程解析:从原理到实战 在嵌入式系统开发中,SPI(Serial Peripheral Interface)总线因其高速、全双工的特性,成为连接传感器、存储设备和显示模块的首选方案。而回环测试作为验证SPI通信可靠性…...

ARM架构下Python连接PostgreSQL的坑:手把手解决Aarch64安装psycopg2-binary的依赖问题

ARM架构下Python连接PostgreSQL的深度解决方案:Aarch64平台psycopg2-binary依赖问题全解析 在边缘计算和物联网设备快速普及的今天,ARM架构处理器凭借其低功耗、高性能的特性,正成为许多应用场景的首选。然而,当Python开发者尝试在…...

为什么93%的MCP项目在上线3个月后成本翻倍?揭秘本地数据库连接器的3层“幽灵开销”与零代码修复方案

第一章:MCP服务器本地数据库连接器成本失控的真相MCP(Microservice Coordination Platform)服务器在部署本地数据库连接器时,常因连接池配置失当、连接泄漏与无感知重连机制导致资源持续占用,最终引发云资源账单异常飙…...

别再死记HashMap了!多线程死循环、数据丢失,这些坑90%的人都踩过

面试时被问HashMap,你是不是也这样? “底层是数组链表,JDK1.8加了红黑树,扩容阈值是容量负载因子……”背得滚瓜烂熟,却被面试官追问一句“多线程下为什么会死循环”,瞬间卡壳。 更扎心的是:工作…...

风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景

风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景,并采用快速前推法或同步回代消除法进行削减,可以对生成场景数和削减数据进行修改,下图展示的为1000个场景削减至10个典型场景,并获…...

[Hello-CTF]RCE-labs靶场:从零到一的Docker化实战指南

1. 为什么你需要一个本地化的RCE靶场 作为一个刚接触CTF的新手,我最初在练习远程代码执行(RCE)漏洞时总是束手束脚——要么找不到合适的在线靶场,要么好不容易找到的靶场环境不稳定。直到后来发现用Docker搭建本地靶场这个方案&am…...

图像匹配避坑指南:NCC算法在工业检测中的实战应用

工业视觉实战:NCC算法在缺陷检测中的高阶应用与调优策略 工业生产线上的视觉检测系统正面临前所未有的挑战——每分钟处理上千件产品的同时,还要确保缺陷识别准确率超过99.9%。在这个追求极致效率与精度的领域,归一化互相关(NCC)算法以其独特…...

WANLSHOP多终端电商系统:FastAdmin+Uni-APP构建私域流量新生态

1. 为什么选择WANLSHOP构建私域流量生态 这两年做电商的朋友们应该都深有体会,公域流量越来越贵,获客成本高得吓人。我去年帮一个服装品牌做系统升级时,他们天猫店的单个客户获取成本已经突破200元。这时候,WANLSHOP这套基于FastA…...