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

Skills 编写学习凰

简介AI Agent 不仅仅是一个能聊天的机器人如普通的 ChatGPT而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统更够完成更为复杂的AI场景需求。AI Agent功能根据查阅的资料agent的功能点如下Agent LLM 规划 记忆 工具使用LLM 用于回答推理的AI模型记忆 短期记忆对话历史长期记忆RAG知识库规划 任务的执行流工具 Agent可以调用的外部函数一个简单的Agent案例案例描述agent可以使用两个工具1. 记录公司数据的RAG知识库 2. python精确计算器import osfrom langchain_community.chat_models.tongyi import ChatTongyifrom langchain_community.embeddings import DashScopeEmbeddingsfrom langchain_community.vectorstores import FAISSfrom langchain_core.messages import ToolMessagefrom langchain_core.tools import toolfrom langchain_core.messages import HumanMessage, ToolMessagefrom langchain_core.documents import Documentfrom langchain_text_splitters import RecursiveCharacterTextSplitteros.environ[DASHSCOPE_API_KEY] api_keytooldef calculator(expression: str) - str:计算数学表达式。需要精确计算时使用。参数:expression: 数学算式如 2 2 或 500 * 0.8。返回:str: 计算结果如 4.0 或 400.0。print(f [??? 工具调用] 计算器正在计算: {expression})try:return str(eval(expression))except Exception as e:return f计算错误: {e}tooldef rag_search(query: str) - str:从数据库中搜索与查询公司内部相关的文档包括公司计划名代号截止日期等详细信息。参数:query (str): 要搜索的查询字符串。返回:str: 与查询相关的文档内容。# 从RAG数据库中检索文档raw_text 【公司内部机密代号“深蓝计划”】1. 项目目标开发一款能听懂猫语的翻译器。2. 核心技术基于Transformer的“喵声波”分析算法。3. 团队暗号如果有人问“今天天气怎么样”必须回答“我想吃鱼”。4. 截止日期2026年12月31日。5. 经费预算仅剩50元人民币主要用于购买猫条。RAG_PATH faiss_indexdocs [Document(page_contentraw_text)]text_splitter RecursiveCharacterTextSplitter(chunk_size25, chunk_overlap5)split_docs text_splitter.split_documents(docs)embeddings DashScopeEmbeddings(modeltext-embedding-v1)if os.path.exists(RAG_PATH):print(公司内部数据库已存在)ragdb FAISS.load_local(RAG_PATH, embeddings, allow_dangerous_deserializationTrue)else:print(创建公司内部数据库)ragdb FAISS.from_documents(split_docs, embeddings)ragdb.save_local(RAG_PATH)return \n\n.join(doc.page_content for doc in ragdb.similarity_search(query, k2))def run_agent(query:str):#初始化模型tool_maps{rag_search: rag_search,calculator: calculator}llm ChatTongyi(model_nameqwen-plus)tool_llm llm.bind_tools(toolslist(tool_maps.values()))message [HumanMessage(contentquery)]for i in range(5):print(*20\n第str(i1)轮\nquery\n*20)response tool_llm.invoke(message)message.append(response)print(f需要调用{len(response.tool_calls)}个方法)if not response.tool_calls:print(最终结果 response.content)returnfor tool_call in response.tool_calls:call_id tool_call[id]func_name tool_call[name]func_args tool_call[args]# 安全检查确保模型调用的工具真的存在if func_name in tool_maps:# 运行 Python 函数tool_func tool_maps[func_name]tool_output tool_func.invoke(func_args)print(工具调用 func_name 参数 str(func_args) 结果 tool_output)else:tool_output f错误: 工具 {func_name} 不存在。message.append(ToolMessage(contenttool_output,tool_call_idcall_id,namefunc_name,))if __name__ __main__:run_agent(公司计划是什么)run_agent(公司的经费预算是多少如果预算预算提高46%后多少)run_agent(今天天气真好)代码解析要实现复杂的工具调用必须实现AI的多轮对话在langchain框架中提供了大量的prompt模板让开发者不需要过度想一些基础的prompt实现。上面代码的执行流程如下初始化2个工具函数-绑定LLM与工具-通过循环进行多轮对话初始化2个工具函数这里的rag_search上一篇文章讲了具体实现这里就不废话了。tooldef calculator(expression: str) - str:计算数学表达式。需要精确计算时使用。参数:expression: 数学算式如 2 2 或 500 * 0.8。返回:str: 计算结果如 4.0 或 400.0。print(f [??? 工具调用] 计算器正在计算: {expression})try:return str(eval(expression))except Exception as e:return f计算错误: {e}tooldef rag_search(query: str) - str:......工具函数的格式主要有3个方面工具修饰 利用tool修饰器修饰函数的描述 这里放函数的描述大模型通过这个描述定位工具因此这部分必须详细可以参考上面:函数的描述函数的参数例子函数的返回例子工具的实现 返回值要是字符串如下tooldef func_name(arg) - str:描述......绑定LLM与工具工具的绑定非常的简单只需要简单的bind_tools类方法就行tool_maps{rag_search: rag_search,calculator: calculator}llm ChatTongyi(model_nameqwen-plus)tool_llm llm.bind_tools(toolslist(tool_maps.values()))通过循环进行多轮对话重点工具的调用流程提示词-LLM-要调用的工具-LLM-结果message [HumanMessage(contentquery)]for i in range(5):print(*20\n第str(i1)轮\nquery\n*20)response tool_llm.invoke(message)message.append(response)print(f需要调用{len(response.tool_calls)}个方法)if not response.tool_calls:print(最终结果 response.content)returnfor tool_call in response.tool_calls:call_id tool_call[id]func_name tool_call[name]func_args tool_call[args]# 安全检查确保模型调用的工具真的存在if func_name in tool_maps:# 运行 Python 函数tool_func tool_maps[func_name]tool_output tool_func.invoke(func_args)print(工具调用 func_name 参数 str(func_args) 结果 tool_output)else:tool_output f错误: 工具 {func_name} 不存在。message.append(ToolMessage(contenttool_output,tool_call_idcall_id,namefunc_name,))在调用bind_tools方法后大模型的返回对象会多出tool_calls字段的数组数据用于存放需要调用工具的参数函数名在调用函数后将调用函数的结果封装成ToolMessage传入再继续调用大模型。注意在调用LLM时可能LLM会不断要求Tool由此可能发生死循环因此要限制循环次数。安全与审思风险评估近些年ai提示词注入频频发生根据上面的案例tooldef calculator(expression: str) - str:计算数学表达式。需要精确计算时使用。参数:expression: 数学算式如 2 2 或 500 * 0.8。返回:str: 计算结果如 4.0 或 400.0。print(f [??? 工具调用] 计算器正在计算: {expression})try:return str(eval(expression))except Exception as e:return f计算错误: {e}LLM在调用这个工具时使用了eval这就造成了风险注入点不法分子可能利用这个漏洞获取电脑权限。修复思路修复上面漏洞可以参考以下几个思路通过指令提示词让LLM忽略并终止危险代码调用该函数在函数中用正则匹配危险代码或设置白名单替换eval函数将其换为更加安全的方法如手动写死运算秤秤抖谎

相关文章:

Skills 编写学习凰

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,agent的…...

如何快速掌握DankDroneDownloader:无人机固件管理的完整指南

如何快速掌握DankDroneDownloader:无人机固件管理的完整指南 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader 当你想完全掌控自己的…...

电源管理入门-18 Power Domain管理

SoC中通常有很多IP,按逻辑可以把几个相关功能的IP划为一个电源域。一个电源域内的IP,通常按相同的方式由同一个硬件模块PMIC供电,电压一样并且电源管理例如休眠唤醒一致。为什么有设备电源管理还需要power domain划分? 对每个设备…...

SL3040兼容MP2494 4.5-80V宽电压输入,1.5A输出电流

在电力电子领域,DC-DC转换器作为能量转换与管理的核心组件,其性能直接影响到系统的稳定性与效率。SL3040作为一款集成了功率MOSFET的降压型开关稳压器,凭借其卓越的性能和广泛的应用场景,成为了众多工程师在设计高电压功率转换系统…...

4月8日TRO最新案件预警

26-cv-3820 立案时间:2026-04-07 原告:Celine SA 代理律所 :Kossofipr 诉讼类型: Trademark26-cv-3822 立案时间:2026-04-07 原告:La…...

微波管参数全解析:什么是增益、带宽?看懂这张图就够了!

> 摘要:微波管作为大国重器的“心脏”,其性能好坏直接决定雷达探测距离、卫星通信质量。但真正衡量管子水平的核心指标,其实就两大类:增益与带宽。本文结合经典功率-频率特性图,用大白话拆解增益、饱和、带宽等关键…...

ctfileGet:突破网盘限速的本地解析方案

ctfileGet:突破网盘限速的本地解析方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在数字化办公与学习环境中,网盘已成为文件传输与存储的基础设施。然而,下载速…...

杰理之蓝牙空闲状态时间设置【篇】

set_idle_period_slot(1600);...

杰理之蓝牙歌词信息获取回调【篇】

const u8 more_avctp_cmd_support 1;置上1 需要在void bredr_handle_register()注册回调函数 要动态获取播放时间的,可以发送USER_CTRL_AVCTP_OPID_GET_PLAY_TIME命令就可以了 要半秒或者1秒获取就做个定时发这个命令...

硬盘出售 / 淘汰必看:3 种安全擦除方法,数据彻底无法恢复

很多人处理旧硬盘时,只做简单格式化就转手,殊不知格式化仅删除文件索引,数据可轻易被恢复,极易造成隐私泄露。本文整理 3 种实用的硬盘安全擦除方案,覆盖免费工具、简易操作,帮你彻底销毁数据,杜…...

生产仓储管理标签企业有哪些

在当今的生产仓储管理领域,标签起着至关重要的作用。它不仅能够提高管理效率,还能确保货物信息的准确传递。那么,有哪些生产仓储管理标签的企业值得关注呢?今天就为大家重点介绍广州杰众智能科技有限公司。一、杰众智能科技的基本…...

37、web常见的攻击方式有哪些?如何防御?

一、先给面试官一个总览Web 常见攻击我通常会从 前端安全、认证安全、传输安全、服务端安全 四类来理解。 前端最常见的是 XSS、CSRF、点击劫持; 认证相关有 SQL 注入、暴力破解、会话劫持; 传输层有 中间人攻击; 工程层面还要关注 文件上传、…...

沐曦股份曦云C系列GPU Day 0 适配智谱GLM-5.1 全栈技术领跑国产AI生态

4月8日,智谱新一代旗舰模型GLM-5.1实现开源。目前,沐曦股份曦云 C 系列 GPU已完成该系列模型Day 0 全量适配,再度以全栈自主技术实力,领跑国产 GPU 生态适配赛道。相比于GLM-5,GLM-5.1的整体能力得到了全面提升&#x…...

Teamcenter许可证文件关键参数解析、性能调优与安全加固

Teamcenter许可证文件关键参数解析、性能调优和安全加固你是远非也老是被许可证问题搞得焦头烂额?是远非每次 从来担心有未曾漏掉什么?去年我在一个装备制造企业做项目时,客户团队都是许可证管理混乱闹的,光是误购及闲置就浪费了8…...

ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优卮

Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

我让 Claude 和 Codex 同时审计 个模块,它们只在 个上达成共识儆

整体排查思路 我们的目标是验证以下三个环节是否正常: 登录成功时:服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端:浏览器是否成功接收并存储了该Cookie。 后续请求:浏览器在执行查询等操作…...

RAG是什么?为什么它能让AI更靠谱,告别“一本正经地胡说八道”

RAG可以理解为“先查资料,再回答”:让AI更像带依据的助手,而不是自由发挥的写作机。 你会拿到:RAG人话解释 引用式输出模板(可复制)。 本文由“壹伴编辑器”提供技术支持 1|一句话讲清 你可能遇…...

6个步骤让Windows系统性能提升60%:Win11Debloat全方位优化指南

6个步骤让Windows系统性能提升60%:Win11Debloat全方位优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutte…...

收藏!AI高薪风口已来,普通人也能抓住转行机会!

本文指出AI岗位平均月薪高达60738元,远超新经济行业平均水平。AI能力已从技术岗专属变为全行业通用技能,近八成公司要求员工具备AI能力。AI岗位缺口巨大,供需比仅为0.97,企业更看重实际能力而非学历。AI时代为普通职场人提供了重新…...

构建企业级统一认证中心:Spring Boot OAuth2 Server 的架构实践与深度解析

构建企业级统一认证中心:Spring Boot OAuth2 Server 的架构实践与深度解析 【免费下载链接】oauth2-server spring boot (springboot 3) oauth2 server sso 单点登录 认证中心 JWT,独立部署,用户管理 客户端管理 项目地址: https://gitcode.com/gh_mirrors/oau/oa…...

数据库回顾

题目:584. 寻找用户推荐人 表: Customer ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | referee_id | int | ---------------------- 在 SQL 中,id 是该表的…...

cf1091div2 C.Grid Covering(数论)

Problem - C - Codeforces 保证遍历完每行每列所以gcd(n,a)1,gcd(m,b)1很好理解 为了遍历所有网格,因为在2*lcm(n,m)次数后会再次踏上轮回重复循环,此时访问了2*lcm(n,m)个格子,于是 2*lcm(n,m)>n*m,也就是2*lcm>gcd(n,m)*…...

AI 对 IT 行业的真实冲击:不是狼来了,是狼已经在门口了

JeecgBoot AI专题观察 | 一个深度使用 AI 编程半年的开发者,聊聊这个行业正在发生什么、程序员该怎么办从手写汇编到高级语言,从高级语言到框架,从框架到低代码——每一次技术跃迁,都有人说程序员要失业了。结果呢?需求…...

科研级时间序列解析:从 ARIMA 到 Mamba,深度学习与频域分析的全栈技术方案

时间序列是水文、气象等领域中最为常见的数据类型,对时间序列数据的预测、分类以及异常值检测等也是这些领域最常见的任务;但是,时间序列分析技术从二十世纪二十年代兴起,一百年以来已经变的非常繁杂。以实践序列分析为主线&#…...

深度理解算法和数据结构:栈并非天生存在,而是数组的「思想封装」|4 道经典题从本质吃透栈与单调栈

前言 在学习栈、队列这类数据结构时,很多人会陷入一个误区:把它们当成固定的 API、死记push/pop/top操作。 但我最近真正想通了一件事 ——数据结构从来不是先有的结构,而是先有的思想。栈并不是什么神奇的黑盒,它本质上就是&…...

WinCDEmu:开源虚拟光驱工具的技术架构与实践指南

WinCDEmu:开源虚拟光驱工具的技术架构与实践指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 副标题:5个核心优势让你高效管理光盘映像文件 一、核心价值解析 WinCDEmu作为一款开源虚拟光驱解决方案&…...

20260408 硬盘分区管理

一、硬盘分区管理 大容量的硬盘,分区使用:C盘系统盘,D盘办公,E盘娱乐。 1.1 识别硬盘设备接口类型设备命名示例说明SATA/SAS/USB/SCSI/dev/sda、/dev/sdb …物理机常用的磁盘设备命名virtio-blk(虚拟机)/de…...

实测H3C s5500-52C-SI 交换机破解密码

1.使SecureCRT连接上交换机;2.重新启动交换机,启动阶段一直按Ctrlb键,直到显示“press ctrl-b to enter boot menu”和“password:”界面时按enter,如下图:3.交换机显示boot menu界面,有10个选项…...

写段代码教会你什么是HOOK技术?HOOK技术能干什么?肯

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...

STM32 串口通信入门:printf 重定向 + 调试技巧

作为STM32新手,串口通信是嵌入式调试的万能钥匙。很多新手调试程序时,只能靠LED亮灭判断运行状态,出错后无从排查;想查看变量、确认函数执行情况,也没有有效方法。串口通信可解决这一问题,通过printf函数&a…...