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

SEATA分布式事务——AT模式云

简介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函数将其换为更加安全的方法如手动写死运算俗刈说堵

相关文章:

SEATA分布式事务——AT模式云

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

从数据采集到回放验证:ADTF 适配 ROS 的 ADAS 测试实践胃

一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) { private readonly SqlSource _source new(builder.DataSource); private readonly IParamQuery_accountQuery b…...

Java中ThreadPoolExecutor 深度剖析

ThreadPoolExecutor 深度剖析(基于Java 21) 这是 JUC 中最核心、最复杂的并发组件之一。以下按维度逐一展开,辅以源码与图示。一、底层实现原理 1.1 核心控制字段:ctl ThreadPoolExecutor 用一个 AtomicInteger 类型的 ctl 字段同…...

OpenCV实战:SimpleBlobDetector参数调优全攻略(附完整代码)

OpenCV实战:SimpleBlobDetector参数调优全攻略(附完整代码) 在工业视觉检测和医学图像分析领域,斑点检测是一项基础但至关重要的任务。想象一下这样的场景:生产线上的零件表面缺陷检测、显微镜下的细胞计数、PCB板焊点…...

旧安卓手机别扔!手把手教你搭建个人隐私安全检测环境(Kali+Metasploit实战)

旧安卓设备重生计划:构建家庭隐私安全实验室的5个关键步骤 那部抽屉里积灰的旧安卓手机,或许是你提升数字安全意识的最佳教具。当科技媒体不断报道数据泄露事件时,大多数人依然对手机应用的权限滥用缺乏直观认知。本文将带你用退役设备搭建一…...

KDE桌面Mac化实战:从Launchpad到全局菜单的完整改造指南

1. 为什么要把KDE桌面改造成macOS风格? 作为一个长期使用Linux的老用户,我完全理解大家对macOS那种简洁优雅界面的向往。但说实话,macOS的封闭性总是让人感觉束手束脚。直到有一天我发现,原来用KDE Plasma可以完美复刻macOS的视觉…...

从Bulk CMOS到先进工艺:Sentaurus TCAD中几何结构与掺杂如何‘捏’出你的Ion和Ioff

从Bulk CMOS到先进工艺:Sentaurus TCAD中几何结构与掺杂如何‘捏’出你的Ion和Ioff 在半导体器件设计中,Ion(导通电流)和Ioff(关断电流)是衡量器件性能的两个关键指标。就像雕塑家通过调整黏土的形状和质地…...

探秘Text2Vec:智能文本处理的新利器

探秘Text2Vec:智能文本处理的新利器 【免费下载链接】text2vec Fast vectorization, topic modeling, distances and GloVe word embeddings in R. 项目地址: https://gitcode.com/gh_mirrors/tex/text2vec Text2Vec是一款强大的R语言文本处理工具包&#xf…...

AgentCPM-Report实战案例:Pixel Epic在跨境数据合规白皮书撰写中的应用

AgentCPM-Report实战案例:Pixel Epic在跨境数据合规白皮书撰写中的应用 1. 引言:当数据合规遇上像素冒险 跨境数据合规是当前企业出海面临的重要挑战之一。传统白皮书撰写需要耗费大量时间收集法规、分析案例、整理框架,而Pixel Epic这款基…...

STM32步进电机4轴控制源码(相对/绝对/回原点/梯形加减速运动控制 F103 F405版本)

STM32步进电机4轴控制源码,相对,绝对,回原点,梯形加减 STM32步进电机4轴控制源码,相对,绝对,回原点,梯形加减速,运动控制,两份源码,F103&#xff…...

嵌入式语音交互实战:基于树莓派4B与SYN6288的智能语音播报系统设计

1. 智能语音播报系统入门指南 想象一下,当你走进电梯时听到"请注意安全"的语音提示,或者在健身房跑步机上听到"当前速度5公里/小时"的播报,这些场景背后都离不开智能语音播报技术。今天我要分享的,是如何用树…...

7种高效连接方式全解析:php-amqplib连接RabbitMQ的终极指南

7种高效连接方式全解析:php-amqplib连接RabbitMQ的终极指南 【免费下载链接】php-amqplib The most widely used PHP client for RabbitMQ 项目地址: https://gitcode.com/gh_mirrors/ph/php-amqplib php-amqplib作为最广泛使用的PHP RabbitMQ客户端&#xf…...

Razer-macos核心组件深度剖析:设备管理器与动画系统

Razer-macos核心组件深度剖析:设备管理器与动画系统 【免费下载链接】razer-macos Color effects manager for Razer devices for macOS. Supports High Sierra (10.13) to Monterey (12.0). Made by the community, based on openrazer. 项目地址: https://gitco…...

如何快速上手Remax:5分钟创建你的第一个跨平台小程序

如何快速上手Remax:5分钟创建你的第一个跨平台小程序 【免费下载链接】remax 使用真正的 React 构建跨平台小程序 项目地址: https://gitcode.com/gh_mirrors/re/remax Remax是一个让开发者能够使用真正的React构建跨平台小程序的强大框架。通过Remax&#x…...

Pixel Epic · Wisdom Terminal 计算机视觉应用:YOLOv5目标检测模型协同优化案例

Pixel Epic Wisdom Terminal 计算机视觉应用:YOLOv5目标检测模型协同优化案例 1. 当大语言模型遇见计算机视觉 在安防监控室里,值班人员正盯着十几个屏幕,突然发现一个可疑身影。"把第三摄像头画面放大,看看那个人手里拿的…...

用App Inventor给ESP8266做个遥控App,5分钟搞定智能灯开关(保姆级教程)

5分钟打造智能灯控系统:零基础玩转App Inventor与ESP8266 第一次尝试物联网项目时,我被各种专业术语和复杂配置搞得晕头转向——直到发现这个组合:App Inventor的可视化编程加上ESP8266的Wi-Fi模块,配合巴法云的MQTT服务&#xff…...

lvgl-micropython、lv_micropython和lv_binding_micropython到底啥关系?一文读懂抵

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...

ESLint 9.0+ 配置实战:从零到一构建现代前端代码规范

1. 为什么你需要ESLint 9.0的扁平化配置 最近接手了一个Vue 3 TypeScript的新项目,当我像往常一样准备配置ESLint时,发现官方文档已经全面转向了全新的扁平化配置方式。作为一个从ESLint 6.x时代就开始使用它的老用户,我必须承认这次改动确实…...

如何打造专属AI开发工作流:Forge高级配置的终极指南

如何打造专属AI开发工作流:Forge高级配置的终极指南 【免费下载链接】forgecode AI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models 项目地址: https://gitcode.com/gh_mirrors/forge39/forgecode Forge作为一款…...

SMUDebugTool终极指南:7个维度深度解析AMD Ryzen系统硬件调试

SMUDebugTool终极指南:7个维度深度解析AMD Ryzen系统硬件调试 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: htt…...

终极指南:如何选择最佳哈希函数提升uthash程序性能

终极指南:如何选择最佳哈希函数提升uthash程序性能 【免费下载链接】uthash C macros for hash tables and more 项目地址: https://gitcode.com/gh_mirrors/ut/uthash 在C语言开发中,哈希表是提升数据查找效率的关键工具。uthash作为一款轻量级的…...

hidapi项目贡献指南:如何参与开源HID库的开发

hidapi项目贡献指南:如何参与开源HID库的开发 【免费下载链接】hidapi A Simple library for communicating with USB and Bluetooth HID devices on Linux, Mac, and Windows. 项目地址: https://gitcode.com/gh_mirrors/hi/hidapi hidapi是一个跨平台的开源…...

我不是狐狸,我是那Harness Engineering膳

Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT&#xff0…...

终极免费方案:如何让NVIDIA显卡完美解决显示器色彩过饱和问题

终极免费方案:如何让NVIDIA显卡完美解决显示器色彩过饱和问题 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirrors/no/novideo_srgb…...

抖音批量下载神器:5分钟搞定无水印视频批量下载

抖音批量下载神器:5分钟搞定无水印视频批量下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

如何将PerfView与Azure DevOps集成:实现持续性能监控的完整指南

如何将PerfView与Azure DevOps集成:实现持续性能监控的完整指南 【免费下载链接】perfview PerfView is a CPU and memory performance-analysis tool 项目地址: https://gitcode.com/gh_mirrors/pe/perfview PerfView是一款强大的CPU和内存性能分析工具&…...

Docker数据持久化:Volume完全指南,从入门到生产环境选型

你有没有遇到过这种情况:数据库跑在容器里,存了一堆数据,结果容器一删,数据全没了。这是因为容器的文件系统是临时的。容器没了,里面的数据也就没了。Docker Volume(数据卷)就是来解决这个问题的…...

告别命令行恐惧:用SmartGit可视化搞定Git分支与合并冲突

告别命令行恐惧:用SmartGit可视化搞定Git分支与合并冲突 在团队协作开发中,Git分支管理和合并冲突是每个开发者都无法回避的挑战。传统的命令行操作虽然强大,但对于许多开发者来说,复杂的命令和晦涩的错误信息常常让人望而生畏。…...

Klib未来展望:探索轻量级C库的无限可能与社区共建路线图

Klib未来展望:探索轻量级C库的无限可能与社区共建路线图 【免费下载链接】klib A standalone and lightweight C library 项目地址: https://gitcode.com/gh_mirrors/kl/klib Klib作为一款独立轻量级C语言库,以其高效、简洁的设计理念在开发者社区…...

MySQL优化全攻略:索引、SQL与分库分表的最佳实践记

一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...