web3.py 合约事件机制(Event Log System)

Agent Runtime 正在成为新的操作系统层 Agent Runtime 不是 AI 应用的辅助工具,而是支撑智能体规模化落地的底层基础设施——它抽象了状态管理、安全执行与凭证分发等核心能力,其本质是将 LLM 驱动的复杂交互,转化为可审计、可恢复、可编排的确定性事件流。这一范式迁移直指分布式系统中的经典命题:如何在非确定性模型与确定性工程之间建立可信契约?关键技术价值在于解耦 Harness(无状态执行器)、Session(事件日志即真相)与 Vault(零信任凭证代理),从而支撑金融、医疗等强合规场景的生产级部署。典型应用场景包括跨系统自动化工作流 阅读详情

Web3 合约事件机制(Event Log System)

Web3 合约事件机制(Event Log System) 是智能合约与外部世界(如 Python 客户端)进行通信的主要方式。接下来,我们从 Solidity 到 Python,逐步深入探讨这一机制。

一、Web3 事件机制与传统消息系统的差异

在开始之前,有必要明确一点:你已经敏锐地抓住了 Web3 事件机制与传统消息系统(如 MQ、WebSocket、Pub/Sub)之间的根本差异。你的理解是正确的,大多数“监听函数”实际上是通过 轮询(polling)或订阅区块事件 来实现的,这在区块链这种去中心化架构下几乎是唯一可行的方式。

但别担心,这种轮询并不意味着“浪费大量计算”。接下来,我们将详细解释这一点。


二、什么是 event?

在 Solidity 中,event 是一种 链上日志(log) 机制,它既不是函数,也不是状态。其主要作用在于:

在交易执行时,向链上写入结构化日志,供外部程序(如 DApp 或 Python 脚本)监听和读取。


三、ERC20 的标准事件

让我们先来看 ERC20 代币合约中的两个标准事件:

event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);

这两个事件具有固定的含义:

事件名触发时机含义
Transfer每次执行 transfer() 或 transferFrom() 时从一个地址转出代币到另一个地址
Approval执行 approve() 时授权另一个地址可以代为支配你的代币

四、事件是如何触发的?

在 Solidity 中,当执行 emit 语句时,会在链上产生一个“事件日志记录”:

emit Transfer(msg.sender, to, amount);

这一行代码不会修改合约状态,而是向 EVM 发出指令:

“请把一条 Transfer 类型的日志,记录到交易回执(receipt)的 logs 字段中。”

EVM 执行完交易后:

  • 区块中会存储这笔交易;
  • 交易执行结果(receipt)中会包含这条日志;
  • 节点会为这类日志生成索引(基于 topic)。

五、事件在以太坊节点中的存储方式

每个事件会被记录成一个结构体,例如:

{
  "address": "0xTokenContractAddress",
  "topics": [
      "0xddf252ad...(事件签名哈希)",
      "0x0000...from",
      "0x0000...to"
  ],
  "data": "0x...value编码",
  "blockNumber": 1234567,
  "transactionHash": "0xabc...",
  "logIndex": 3
}

其中:

  • topics 是可索引的字段(对应 event 中加了 indexed 的参数);
  • data 是非索引字段;
  • address 指明事件来自哪个合约;
  • 所有这些信息被存入区块的 receipts trie。

六、为什么事件监听是“轮询式”的?

在区块链中,没有中心服务器,也没有人能“主动通知”你。所有节点都是被动地等待新区块的产生。因此,外部程序(如你的 Python 服务)想知道“有没有新的 Transfer 事件”,只能通过以下方式:

  1. 获取最新区块号
  2. 检查其中的日志(logs)
  3. 看是否匹配我感兴趣的合约和事件主题(topics)

这本质上就是一种“轮询新区块”的行为。但别担心,这并不意味着“浪费算力”。


七、轮询并不等于“无效计算”

你担心的“浪费算力”问题,实际上主要取决于 监听方式的实现。现代 Web3 节点和 API 提供了几种优化手段:

🔹1. 节点本身会索引 logs

当你调用:

token.events.Transfer.create_filter(fromBlock='latest')

或

w3.eth.get_logs({...})

节点不会重新执行交易或扫描全链,而是从自己的 日志索引数据库(log index) 中筛选出匹配的事件。这只是数据库查询,而非计算执行。

换句话说:

监听日志消耗的资源更多是 I/O(查询),不是 CPU 计算。

🔹2. 使用 WebSocket 订阅(实时推送)

以太坊节点支持 eth_subscribe WebSocket 接口,允许你订阅事件:

from web3 import Web3

w3 = Web3(Web3.WebsocketProvider("wss://mainnet.infura.io/ws/v3/你的API_KEY"))

def handle_event(event):
    print(f"Transfer: {event['args']['from']} -> {event['args']['to']} {event['args']['value']}")

token = w3.eth.contract(address=address, abi=abi)
event_filter = token.events.Transfer.create_filter(fromBlock='latest')

while True:
    for e in event_filter.get_new_entries():
        handle_event(e)

这底层使用的是:

{"method": "eth_subscribe", "params": ["logs", {...}]}

这样做的效果是:

  • 你不需要主动轮询;
  • 节点在有新日志时会通过 WebSocket 主动“推”给你;
  • 你只需保持一个持续的连接。

👉 这种方式的资源消耗几乎可以忽略(主要是保持长连接)。

🔹3. 大型节点服务商做了事件缓存

像 Infura、Alchemy、QuickNode 等节点服务提供商,都会在后台维护高效的事件索引数据库。因此,当你监听代币事件时:

  • 你的查询请求不会直达以太坊底层;
  • 而是命中这些云端的缓存索引;
  • 响应延迟低、资源消耗小。

八、为什么不能“反向通知”?

你可能会问:既然是事件,为什么不能让合约主动通知我?原因在于:

智能合约没有“外部网络访问”权限。

EVM 在设计上是完全封闭的:

  • 不能发 HTTP 请求;
  • 不能写文件;
  • 不能向外推送数据。

因此,合约只能“写日志”,不能“发消息”。外部程序(Python、前端、服务端)需要主动去链上读取这些日志。


九、Python 中如何监听这些事件?

现在,让我们具体看看如何在 Python 中监听这些事件。

1️⃣ 连接节点

from web3 import Web3

# 连接以太坊节点(可用Infura或本地节点)
w3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/你的API_KEY"))

2️⃣ 定义合约对象

abi = [...]  # ERC20 合约 ABI
contract_address = "0xYourTokenContractAddress"

token = w3.eth.contract(address=contract_address, abi=abi)

3️⃣ 查询历史事件(离线)

# 获取最近10000个区块的 Transfer 事件
events = token.events.Transfer.create_filter(
    from_block=w3.eth.block_number - 10,
    to_block='latest'
).get_all_entries()

for e in events:
    print(e['args']['from'], e['args']['to'], e['args']['value'])

4️⃣ 实时监听事件(在线监听)

import time

transfer_filter = token.events.Transfer.create_filter(from_block='latest')

print("Listening for Transfer events...")

while True:
    for event in transfer_filter.get_new_entries():
        print(f"📦 {event["event"]}: {event['args']['from']} -> {event['args']['to']} amount={event['args']['value']}")
    time.sleep(2)

每当有人调用合约的 transfer() 函数,并在区块链上成功打包时,这个监听脚本就会立刻打印出这笔转账信息。


十、轮询优化建议(如果你要自己实现)

场景建议方式效果
你只关心实时事件✅ 用 WebSocket eth_subscribe几乎零轮询,节点推送
你要批量查询历史✅ 用 eth_getLogs 一次批量查节点内部索引查询
你要监控多个代币✅ 建立多个 Filter(或统一 Filter topics)减少重复扫描
你要在自己节点上跑✅ 使用 --log-bloom-filter(Geth 参数)加速事件检索

十一、总结一张图(事件流转机制)

在这里插入图片描述

十二、总结一句话

区块链世界没有“消息推送”,
事件是写在区块里的“日志”,
监听是从这些日志中筛选出你关心的部分。
现代节点实现已经让这个过程几乎不消耗无效计算。

完整的监听事件脚本

离线获取事件

# 获取最近10个区块的 Transfer 事件
import json
from web3 import Web3

infura_url = f"https://mainnet.infura.io/v3/{YOUR_INFURA_API_KEY}"
w3 = Web3(Web3.HTTPProvider(infura_url))

abi_string = '[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]'
abi = json.loads(abi_string)
token = w3.eth.contract(address='0xdAC17F958D2ee523a2206206994597C13D831ec7', abi=abi)

events = token.events.Transfer.create_filter(
    from_block=w3.eth.block_number - 10,
    to_block='latest'
).get_all_entries()

for e in events:
    print(e['args']['from'], e['args']['to'], e['args']['value'])

通过http实时监听事件

import time

transfer_filter = token.events.Transfer.create_filter(from_block='latest')

print("Listening for Transfer events...")

while True:
    for event in transfer_filter.get_new_entries():
        print(f"📦 {event["event"]}: {event['args']['from']} -> {event['args']['to']} amount={event['args']['value']}")
    time.sleep(2)

使用 WebSocket 订阅事件的完整示例

import asyncio
from web3 import AsyncWeb3, WebSocketProvider
from eth_abi.abi import decode

SOCKET_URL = f"wss://mainnet.infura.io/ws/v3/{YOUR_INFURA_API_KEY}"
CONTRACT_ADDRESS = "0xdAC17F958D2ee523a2206206994597C13D831ec7"

async def subscribe_to_transfer_events():
    async with AsyncWeb3(WebSocketProvider(SOCKET_URL)) as w3:
        transfer_event_topic = w3.keccak(text="Transfer(address,address,uint256)")
        filter_params = {
            "address": CONTRACT_ADDRESS,
            "topics": [transfer_event_topic],
        }
        subscription_id = await w3.eth.subscribe("logs", filter_params)
        print(f"Subscribing to transfer events for WETH at {subscription_id}")

        async for payload in w3.socket.process_subscriptions():
            result = payload["result"]

            from_addr = decode(["address"], result["topics"][1])[0]
            to_addr = decode(["address"], result["topics"][2])[0]
            amount = decode(["uint256"], result["data"])[0]
            print(f"{w3.from_wei(amount, 'ether')} WETH from {from_addr} to {to_addr}")

asyncio.run(subscribe_to_transfer_events())
【信息科学与工程学】计算机科学与技术——第七十七篇 系统架构设计02 编号类型模型配方企业资本运作的方法/规则/条件/依据及所有的步骤(​风险处理/异常处理/危机应对关联知识法律法规和裁决依据​​由发起人(通常是知名投资人、投行或产业资本)先设立一个只有现金、无实际业务的特殊目的收购公司(SPAC),通过IPO募集资金并在交易所上市。然后在规定时间内(通常24个月)寻找一家非上市公司进行合并(De-SPAC),使目标公司迅速实现上市,规避传统IPO的复杂流程和不确定性。1.:在开曼或特拉华注册空壳公司,注入少量种子资金。2. 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识

CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找

weixin_49199313的博客 290

区块链工程师私藏笔记:Web3.py事件监听与日志处理实战技巧

auto-generated

CompiGap的博客 1106

【信息科学与工程学】【数据科学】第一百二十二篇 大数据产品中的函数与算法01

它通常指。下面按照你给出的表格列💡 说明:下表中的"产品"以开源/主流商业组件为具象载体(Hadoop、Spark、Flink、Kafka、Hive、HBase、Iceberg、Atlas、Ranger、TensorFlow 等),它们共同构成一个完整的大数据产品家族;代码为实现示例,用于说明算法在工程系统中的落地方式。

weixin_49199313的博客 197

AI Agent Runtime 正在 commoditize:从自研沙箱到托管执行时的范式迁移

AI Agent 运行时(runtime)正经历类似操作系统层的历史性 commoditization 过程——当基础设施复杂度越过临界点,其价值必然向上迁移至可审计、可追溯、可契约化的上层抽象。核心驱动力来自两大技术现实:一是 context window 溢出引发的静默失败倒逼 session 必须解耦为持久化事件日志(event log),二是 sandbox 从‘宠物式’容器运维转向‘牲畜式’微虚拟化按需供给。这使得 agent 开发重心从调度编排、凭证管理、状态恢复等底层工程,转向定义工具契约(Y

weixin_30861459的博客 342

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计03

编号366-380共15个条目,涵盖了SQL/NoSQL数据库、小文件、对象、向量、CDN、应用框架等各类数据对CPU、GPU、ASIC、FPGA、NPU、内存、SSD、HDD、RAID卡、操作系统、Redis、容器、MPP数据库、CDN等缓存硬件和软件的配置需求。:mark_cache_size,uncompressed_cache_size,merge_tree配置。:调整vm.dirty_ratio,增大vfs_cache_pressure,启用透明大页。

weixin_49199313的博客 227

Nvidia Tesla A100 驱动安装方法

Nvidia Tesla A100 驱动安装方法 遇到的问题:以前安装tesla系列、geforce系列等gpu 驱动的时候,只需执行nvidiaxxxx.run驱动包或者安装nvidiaxxxx.rpm包即可,但遇到新的GPU Nvidia Tesla A100的时候,安装完驱动似乎不起作用,找了半天资料,原来需要以下步骤才可以使用;

qq_24343177的博客 2万+

Agent Runtime 正成为AI时代的操作系统基座

Agent Runtime 是支撑大模型智能体(Agent)可靠执行的核心基础设施,其本质是封装工具调用、状态管理、凭证隔离与可观测性的标准化执行层。随着 AWS AgentCore、Google Vertex AI Agent Builder 和 Anthropic Managed Agents 等云原生方案成熟,Runtime 层正快速收敛为类操作系统内核的默认存在——无需自研、按需调用、开箱合规。技术价值在于将复杂性下沉:通过 session-as-event-log 实现可审计的状态一致性,借助 c

xjwolaile的博客 328

小案例:利用图床自动化批量上传图片并获取图片链接

用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...

采菊东篱下,Python满乾坤! 4409

WebAssembly与PWA:终结安装包时代的新兴应用分发技术

在软件分发领域,传统的安装包模式面临分发效率低、更新体验差等瓶颈。WebAssembly作为一种高性能、安全的二进制指令格式,通过其沙箱环境和跨平台特性,为计算密集型任务提供了接近原生的执行性能。结合渐进式Web应用(PWA)的即时更新和跨平台一致性优势,这些技术正在重塑应用交付方式。它们使得复杂应用能够直接在浏览器中运行,无需本地安装,显著降低了开发者的适配成本和用户的使用门槛。这种“无安装”范式特别适用于工具类、内容消费类应用,正在推动软件分发向更高效、更安全的方向演进。

weixin_34268843的博客 295

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

MuJoCo 仿真中的碰撞检测与参数优化实战

本文深入解析MuJoCo仿真中的碰撞检测机制与参数优化策略,涵盖位掩码配置、凸包分解实战及穿模问题解决方案。通过具体案例和参数设置建议,帮助开发者高效解决机械臂抖动、轴孔装配等常见问题,提升仿真精度与稳定性。特别针对步进电机仿真提供了高增益位置执行器的优化方案。

weixin_29081101的博客 332

AI Agent技能安全测试:AgentTrap框架如何量化评估第三方技能信任风险

在AI Agent(智能体)技术架构中,技能(Skills)作为扩展其功能的核心模块,允许Agent执行文件操作、API调用等具体任务。其工作原理是通过预定义或动态加载的接口,使大型语言模型能够与外部系统交互。这项技术的价值在于极大地提升了Agent的实用性和自动化能力,使其能处理复杂、多步骤的现实世界问题。然而,这也引入了显著的安全与信任挑战:第三方开发的技能可能存在越权执行、数据泄露或资源滥用的风险。因此,在工程实践中,对技能进行系统性的安全测试与信任度量变得至关重要。应用场景广泛覆盖了智能客服、自动化

weixin_30470643的博客 364

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

fyihdg的专栏 1218

Python编程从入门到精通:环境搭建与核心语法详解

Python作为动态类型语言,以其简洁语法和丰富生态成为最受欢迎的编程语言之一。其核心原理基于解释器执行,通过GIL实现线程安全,支持面向对象、函数式等多种编程范式。在技术价值方面,Python凭借PyPI仓库40万+第三方库,能够高效完成数据处理、Web开发、自动化运维等任务。本文以Python 3.11为例,详细讲解开发环境配置(VSCode/PyCharm)、基础语法结构(变量/流程控制)、函数模块化等核心概念,特别适合需要快速实现原型开发的工程师。通过掌握这些基础知识,开发者可以轻松应对数据分析、网

weixin_30239339的博客 362

vue微前端qiankun框架学习到项目实战,基座登录动态菜单及权限控制

技术无关,独立开发,独立部署,增量升级,独立运行,微前端的核心目标是将巨石应用拆解成若干可以自治的松耦合微应用。

前端开发工程师 9747

华为od 面试八股文_C++_01_含答案

华为od 面试八股文_C++_01_含答案

MISAYAONE的博客 5589

Vanna 2.0深度解析:企业级AI驱动SQL生成框架的架构设计与部署实践

在当今数据驱动的商业环境中,如何让非技术用户也能轻松访问和分析数据已成为企业数字化转型的关键挑战。Vanna 2.0作为新一代AI驱动SQL生成框架,通过创新的RAG(检索增强生成)技术,实现了自然语言到SQL查询的精准转换,为企业提供了安全、可扩展的数据查询解决方案。本文将深入分析Vanna 2.0的架构设计、技术选型、部署策略和最佳实践,为技术决策者和架构师提供全面的实施指南。 ## 核心架

gitblog_00594的博客 453

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MLOps可观测性实战:构建可归因的模型健康监控体系

机器学习模型部署后失效、指标正常但业务下滑、A/B测试结果矛盾——这些典型问题根源在于缺乏面向真实业务场景的ML可观测性。其核心原理是将模型推理链路解耦为请求层、特征层、模型层与业务层四维监控,通过元数据绑定、漂移检测、健康头注入等机制实现故障可追溯、归因可交叉验证。技术价值在于打破‘黑盒推理’幻觉,支撑模型从‘能跑通’升级为‘敢担责’。广泛应用于电商推荐、金融风控、动态定价等实时决策场景。本文聚焦Part 4落地关键,详解特征版本控制、模型健康体检报告与反向归因管道等工程实践。

hwpokay的专栏 482

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

FastAPI+Triton构建高可靠ML推理服务的工程实践

机器学习模型部署不是简单封装API,而是建立端到端的运行时契约。其核心在于服务化架构设计、资源精准隔离与生产级可观测性。FastAPI凭借Pydantic校验和ASGI异步支持,显著提升请求处理效率与接口健壮性;Triton Inference Server则通过动态批处理、GPU实例绑定和原生指标暴露,解决模型加载、显存争抢与延迟不可控等关键痛点。该组合在保障低延迟(P95<150ms)与高吞吐的同时,大幅降低运维复杂度,适用于边缘节点受限、多模型共存及需灰度发布的工业级AI交付场景。

bdk82924 446

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

期货保证金占用变多,怎样找出哪张合约增得最多?

盘中看了两次期货账户,第二次发现保证金占用多了。眼下占用最大的合约很显眼,但它不一定是这段时间增得最多的。如果复盘想知道“先查哪张”,要按前后差额排,不是按第二次的金额排。

weixin_49134609的博客 192

什么是加密货币凭证?

本文探讨了加密货币凭证对数字身份管理的变革性影响,强调了其核心优势,如增强的安全性和即时验证。它通过利用区块链的去中心化技术,解决了与凭证伪造、丢失和低效验证过程相关的问题。读者将了解到加密货币凭证如何在教育、专业认证和医疗等领域提供防篡改和全球可访问的解决方案。文章深入探讨了实际应用,展示了像麻省理工学院、项目管理协会和等组织为什么采用区块链凭证来简化流程并提升信任。

2301_77604523的博客 130

空圈容错・优快云 站点技术架构信任链诊断

本文为基于公开故障现象的黑箱架构推演报告,聚焦“监控健康但用户访问异常”共性问题。提出C/M/V/P四层可达性分析框架,强调V层需满足数据源、方法、环境三异才具仲裁能力。通过R1–R10探针识别架构风险,揭示同源校验、配置共担、降级粗放等隐患。诊断指出:进程存活≠链路通畅,200状态码≠内容正确。配套8问自测清单与∅_safe分级降级方案,推动从“全好/全崩”到“半坏可控”的可观测跃迁。所有推断假说需依赖图谱与压测验证,不构成线上定论。

Liaiyang66的博客 361

期货合约还有历史K线,就表示现在还能交易吗?

打开以前保存的期货研究资料,某个合约的K线仍能正常显示,过去的价格、成交量也都在。看着熟悉的图,容易顺势觉得:既然还能看,这个合约应该仍可作为当前交易对象。但图里保存的是过去发生过什么,当前合约状态回答的是它现在处于什么生命周期。历史K线仍在,与合约已经下市可以同时成立。对研究者来说,更有用的处理不是在“继续盯它”和“删掉旧图”之间二选一,而是把历史档案与当前关注对象分开。TqSdk提供的合约下市标志,可以帮助把这层区别标明白。

weixin_49134609的博客 181

FPGA 与加密行业:从算法加速到可信硬件的完整技术图谱

本文系统探讨FPGA与密码学的深度交叉,揭示其在加密加速、区块链基础设施、零知识证明及后量子密码中的关键作用。从底层硬件特性到工程实践,分析对称加密、公钥算法、零知识证明等负载的FPGA加速优势,强调其高能效、低延迟与灵活可重构的特性。结合当前密码学复杂度上升与硬件竞争加剧的趋势,指出FPGA是算法验证与高性能实现的理想载体,为安全计算提供高效硬件支撑。

weixin_49780322的博客 222
上一篇: web3.py 在以太坊上编写自己的加密货币(如何构建 ERC-20 代币)
下一篇: 以太坊开发者指南(一):开启区块链探险之旅
voidmort
博客等级 码龄9年 13粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值