当前位置: 首页 > 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的…...

SkillLite 多入口架构实战:CLI / Python SDK / MCP / Desktop / Swarm 一页理清

摘要 SkillLite 是轻量级 AI Agent Skills 执行引擎:同一套 Rust workspace 拆分多 crate,向上提供「开箱即用的 Agent 产品」与「可嵌入的安全执行内核」。集成方既可通过终端 CLI 与 MCP 接入 IDE,也可在 Python 中调用 scan_code、execut…...

做质检员其实太容易了|云质QMS为您揭秘

质检员入门全流程手册一、质检员的基本业务知识1. 质检员的岗位使命严格执行质量检验标准,对各类生产原料、成品、辅料的质量检验,监控生产工艺的运行情况,对发现的问题及时上报,不断提升产品质量,维护企业质量信誉。2…...

Prompt工程已进入“微秒级响应”时代:奇点大会实测数据显示——提示结构优化带来3.7倍推理吞吐提升

第一章:Prompt工程已进入“微秒级响应”时代:奇点大会实测数据总览 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上,全球首个面向生产环境的Prompt编译器——PromptLLVM v0.9正式发布,并同步公开其端到…...

5分钟掌握CAD_Sketcher:Blender中实现精确参数化设计的终极指南

5分钟掌握CAD_Sketcher:Blender中实现精确参数化设计的终极指南 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher CAD_Sketcher是Blender中基于约束的几何草图工具…...

告别无效流量!亚马逊关键词挖掘:新手 7 天精准获客不浪费

亚马逊日常运营,关键词选不对,广告全白费:​花大价钱投热门大词,点击多、转化少,ACoS 居高不下;​自己想的关键词没人搜,广告预算花不出去,零曝光零订单;​只盯着 10 几个…...

S32K3XX时钟树实战:从EB配置到外设时钟精准分配

1. S32K3XX时钟树基础:从晶振到外设的时钟旅程 第一次接触S32K3XX系列芯片时,我被它的时钟系统搞得晕头转向。直到把整个时钟链路比作城市供水系统才豁然开朗——晶振就像水源,PLL是增压泵,而七大时钟则是通往不同区域的主管道。这…...

博客建站选购香港云主机要注意哪些

博客建站选购香港云主机要注意哪些?很多人一上来就看价格,哪个便宜买哪个。这是个误区。选配置之前,先问自己三个问题:我的博客是什么类型?纯文字博客、图片站,还是会有视频?预计每天有多少访问量?我的技术能力如何?能自己折…...

Redis:延迟双删的适用边界与落地细节弦

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

大模型上线后模型突变怎么办:从灰度失败到秒级回滚的7个关键检查点

第一章:大模型工程化版本管理与回滚机制 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化中的版本管理远超传统软件的 Git commit 粒度,需同时追踪模型权重、Tokenizer 配置、训练超参、推理服务镜像及依赖环境快照。单一 SHA 哈希已无法承载…...

Unity发布京东小游戏笔

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

k8s集群搭建时提示Unable to connect to the server: tls: failed to verify certificateUnable to connect to the

当执行kubeadm init后kubeadm init \--apiserver-advertise-address192.168.79.132 \--pod-network-cidr192.168.0.0/16 \--kubernetes-version1.31.2 \--image-repository registry.aliyuncs.com/google_containerskubeadm init \--apiserver-advertise-address192.168.79.132…...

SITS2026平台重构全记录:从单体Java商城到LLM+RAG驱动的AI原生电商,6周完成核心链路迁移并提升GMV 42%

第一章:SITS2026案例:AI原生电商平台实践 2026奇点智能技术大会(https://ml-summit.org) SITS2026是面向下一代电商基础设施的AI原生平台原型,由阿里云与浙江大学联合实验室在2024年Q4启动构建,于2025年Q2完成全链路灰度验证。该…...

一文搞懂:如何用 Spring AI 搭建 MCP Server 和 Client

MCP 概述 Model Context Protocol(MCP) 是一套标准化协议,用于实现 AI 模型与外部工具或资源的交互。它提供一致的接口,使 AI 模型能够访问数据库、API、文件系统及其他外部服务,同时支持多种传输机制,满足…...

GreaterWMS 开源库存管理系统深度解析:现代化仓储管理的架构与实践指南

GreaterWMS 开源库存管理系统深度解析:现代化仓储管理的架构与实践指南 【免费下载链接】GreaterWMS This Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I sta…...

Android权限延时动态声明机制和可行的解决方案

Android权限延时动态声明机制和可行的解决方案核心结论Android系统权限无法真正做到"运行时动态声明",但可以通过以下方案实现类似效果:方案一:动态功能模块(官方推荐)原理说明┌─────────────…...

万东医疗2026 CMEF发布影像智能体矩阵

当算力指数级增长,大模型渗透到每一处角落,人工智能正在重写医疗的底层代码。但问题从来不是“AI能做什么”,而是机器能否真正理解临床,像医生一样思考,然后自主行动?美的医疗旗下万东医疗在2026年春季CMEF…...

5分钟掌握艾尔登法环存档迁移工具:终极免费解决方案

5分钟掌握艾尔登法环存档迁移工具:终极免费解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 艾尔登法环存档迁移工具是一款专为《艾尔登法环》玩家设计的专业存档管理软件,能够…...

3分钟上手:用ArchivePasswordTestTool轻松找回遗忘的压缩包密码

3分钟上手:用ArchivePasswordTestTool轻松找回遗忘的压缩包密码 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经遇到…...

4.2《深入理解内存池(Memory Pool)与内存块(Memory Slab)设计与实现》

001、内存管理基础:从malloc/free到自定义内存管理器的必要性 一、从一次深夜调试说起 上周排查一个嵌入式设备偶发性死机问题,日志停在某行动态分配代码后消失。堆内存碎片化了——连续运行十几小时后,8MB的堆剩余总量还有3MB,但就是无法分配出一个连续的50KB缓冲区。设备…...

如何快速掌握LangGraph:构建智能工作流的5大秘诀

如何快速掌握LangGraph:构建智能工作流的5大秘诀 【免费下载链接】langgraph Build resilient language agents as graphs. 项目地址: https://gitcode.com/GitHub_Trending/la/langgraph LangGraph是一个强大的图网络框架,专门用于构建可编排、可…...

洞穴民宿的装修材料有哪些?

洞穴民宿的装修材料有哪些?在旅游市场不断发展的当下,洞穴民宿以其独特的风格和体验吸引着众多游客。那么,打造洞穴民宿需要用到哪些装修材料呢?天然石材天然石材是洞穴民宿装修的常用材料。如石灰岩、砂岩等,这些石材…...

【仅限首批200位架构师开放】:AI原生软件研发日志分析平台建设沙盘推演手册(含混沌工程注入模板+SLI/SLO反向推导表)

第一章:AI原生软件研发日志分析平台建设概览 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发日志分析平台并非传统日志系统的简单升级,而是以大模型理解能力为内核、以研发语义为驱动、以实时反馈闭环为目标的新型可观测基础设施。该平台…...

ObsPy的TauPyModel实战:如何为你的地震定位脚本快速集成P波理论走时计算?

ObsPy的TauPyModel实战:如何为你的地震定位脚本快速集成P波理论走时计算? 地震数据处理中,理论走时计算是定位震源和识别震相的基础环节。对于已经掌握基础地震分析的研究者和工程师而言,如何在现有脚本中高效集成可靠的理论走时计…...

51单片机项目省电实战:除了掉电模式,你的STC89C52还能这样‘偷懒’降功耗

51单片机低功耗设计实战:从电路优化到代码框架的全方位策略 在电池供电的物联网设备中,51单片机因其高性价比依然占据重要地位。但许多开发者在使用STC89C52这类经典型号时,往往只关注了手册中提到的掉电模式,却忽略了系统级功耗优…...

Block Copy 的内存布局详解掏

核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

duilib DPI 高分辨率 模糊问题及解决思路

1、问题 在客户机子上,出现了这么一个问题,就是反映duilib界面模糊,CEF也模糊 经排查,客户机子分辨率 3000以上,DPI采用了 300%,而我的程序没有专门适配DPI,而是采用的如下设置,让系统强制放缩的,因为他的机子DPI 300%,所以看起来放大了3倍,就看出模糊来了。 把这…...

Python3.8镜像实战:3步创建独立环境,复现实验结果不再难

Python3.8镜像实战:3步创建独立环境,复现实验结果不再难 1. 为什么需要Python独立环境 在Python开发中,我们经常会遇到这样的问题:昨天还能正常运行的项目,今天突然报错了;在A电脑上跑通的代码&#xff0…...

第6章 6.1.2 数据呈现的艺术:sprintf格式化操作符深度解析(MATLAB入门课程)

1. 为什么数据需要格式化呈现? 第一次处理实验数据时,我直接把MATLAB工作区的变量值复制到论文里,结果被导师狠狠批评了一顿。那些密密麻麻的数字堆在一起,小数点位数参差不齐,有些科学计数法显示,有些又是…...

Ubuntu 配置 Claude Code + MiniMax眯

先唠两句:参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜,它是菜单(资源路径)的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...