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

Solana 核心概念全解析:账户、交易、合约与租约,高流量区块链技术揭秘!

目录

1.Solana 核心概念简述

1.1. 账户(Account)

1.2. 交易(Transaction)

1.3. 交易指令(Instruction)

1.4. SPL 代币

1.5. 合约(Program)

1.6. 租约(Rent)

2通过RPC与Solana交互

2.1.配置环境

2.2.查看钱包信息

2.3.Token 账户查询

2.4.创建 Token 账户

2.5.实时监控账户变动

2.6.转账操作

3.Solana的Web3.js

3.1.交易代码

3.2.输出结果

4.通过 WalletAdatper 与钱包交互

4.1 依赖和示例界面

4.2Solana 钱包 API 整理 

4.2.1关键包和导入

4.2.2SolongWallet 适配器集成

4.2.3钱包连接和状态管理

4.2.4 交易操作

4.2.5 RPC 配置和管理


1.Solana 核心概念简述

Solana 是一个高性能的区块链平台,其核心概念包括 账户(Account)交易(Transaction)合约(Program)租约(Rent)。以下是对这些概念的简短易懂概括:

1.1. 账户(Account)

  • “一切皆账户”:类似 Linux 系统把所有资源抽象为“文件”,Solana 中所有的信息(如代币余额、合约代码等)都存储在账户对象中。
  • 账户结构
    • lamports:账户余额(Solana 的原生代币单位)。
    • data:存储的数据(对于合约账户,这里是代码;对于用户账户,这里可能是代币信息)。
    • owner:账户的所有者(通常是一个合约地址,决定谁能操作这个账户)。
    • executable:是否为可执行合约(如果是合约账户,此值为 true)。
    • rent_epoch:下次需要支付租金的周期。
  • 账户与签名

    1.2. 交易(Transaction)

    • 用户账户本质是一个 私钥,通过 Ed25519 算法生成(高效、安全、签名短)。
    • 账户地址是私钥对应的 公钥,经过 Base58 编码后变成可读形式(如 HawRVHh7t4d3H3bitWHFt25WhhoDmbJMCfWdESQQoYEy)。
    • 私钥签名用于证明对账户的控制权。
  • 定义:交易是用户与区块链交互的方式,例如转账或调用合约。
  • 组成
    • 一系列 交易指令(Instruction):指定要执行的操作、涉及的账户和数据。
    • 签名:由发起者的私钥生成,用于验证交易有效性。
    • 账户列表:交易中涉及的所有账户地址。
    • 最近区块哈希:确保交易的时效性。

1.3. 交易指令(Instruction)

  • 定义:交易的核心单元,描述具体的操作。
  • 结构
    • program_id_index:要调用的合约地址(在账户列表中的索引)。
    • accounts:操作涉及的账户。
    • data:输入的具体数据。

1.4. SPL 代币(SPL)

在以太坊中,普通代币被一个叫ERC20的提案定了规范,可以认为普通代币合约统一叫做ERC20代币。

那么Solana世界里的ERC20代币是什么呢?答案就是SPL代币。

The Solana Program Library (SPL) is a collection of on-chain programs targeting the Sealevel parallel runtime.

SPL Token是 " Solana Program Library"中的一个组成部分,叫做"Token Program",简称为SPL Token。

所有的代币都有这个合约来管理,该合约代码在 https://github.com/solana-labs/solana-program-library/tree/master/token

不同于以太坊中,一个代币就是一个合约。

SPL Token中,一个代币,仅仅是一个归Token合约管理的普通的Account对象,这个对象里面的二进制数据定义了 这个代币的基本属性

1.5. 合约(Program)

  • 类型
    • 系统合约(Native Program):由 Solana 官方提供,如 System Program(创建账户、转账)、BPF Loader Program(部署合约)。
    • 普通合约(On Chain Program):用户开发并部署的合约,如代币相关合约。
  • 特点
    • 合约是存储在账户中的可执行代码(executable = true)。
    • 用户通过交易调用合约执行逻辑。
    • Solana 的合约可以更新或销毁,销毁时存储资源会退还给部署者。

1.6. 租约(Rent)

  • 什么是租约
    • 账户需要支付“租金”来保持数据存储在区块链上,租金根据存储的数据量和时间计算。
  • 规则
    • 免租:账户余额超过“两年租金”的阈值则无需支付租金。
    • 租金不足:余额低于免租阈值或付不出租金的账户会被“垃圾收集”(删除)。
  • 与交易费用的区别
    • 租金是为存储付费。
    • 交易费用是为处理指令付费。

2通过RPC与Solana交互

    2.1.配置环境

    首先,将钱包配置指向 Devnet 环境:

    solana config set --url https://api.devnet.solana.com

    2.2.查看钱包信息

    查看当前钱包地址:

    solana address

    获取测试网 SOL(开发资金):

    solana airdrop 2

    查看钱包 SOL 余额:

    solana balance

    查看钱包中所有 SPL Token 余额:

    spl-token accounts

    2.3.Token 账户查询

    通过这个 curl 请求,你可以查询 Czorr4y9oFvE3VdfCLVFuKDYxaNUG1iyQomR7kMZUuzi 这个钱包地址下,所有与 7vtXvye2ECB1T5Se8E1KebNfmV7t4VkaULDjf2v1xpA9 这个 SPL Token(Token 的 Mint 地址)相关的 Token 账户。 

    curl  https://api.devnet.solana.com -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id": 1,"method": "getTokenAccountsByOwner","params": ["Czorr4y9oFvE3VdfCLVFuKDYxaNUG1iyQomR7kMZUuzi",{"mint": "7vtXvye2ECB1T5Se8E1KebNfmV7t4VkaULDjf2v1xpA9"},{"encoding": "jsonParsed"}]}'

    查询结果解析:

    {"jsonrpc": "2.0","result": {"context": {"apiVersion": "2.1.13","slot": 363620820},"value": [{"account": {"data": {"parsed": {"info": {"isNative": false,"mint": "7vtXvye2ECB1T5Se8E1KebNfmV7t4VkaULDjf2v1xpA9","owner": "Czorr4y9oFvE3VdfCLVFuKDYxaNUG1iyQomR7kMZUuzi","state": "initialized","tokenAmount": {"amount": "94000000000","decimals": 9,"uiAmount": 94,"uiAmountString": "94"}},"type": "account"},"program": "spl-token","space": 165},"executable": false,"lamports": 315139280,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 165},"pubkey": "EZhhUANUMKsRhRMArczio1kLc9axefTUAh5xofGX35AK"}]},"id": 1
    }
    • pubkeyEZhhUANUMKsRhRMArczio1kLc9axefTUAh5xofGX35AK - Token 账户公钥
    • mint7vtXvye2ECB1T5Se8E1KebNfmV7t4VkaULDjf2v1xpA9 - SPL Token 的类型标识符
    • ownerCzorr4y9oFvE3VdfCLVFuKDYxaNUG1iyQomR7kMZUuzi - 该 Token 账户的拥有者钱包地址
    • tokenAmount:当前持有的代币数量(带有小数位信息)

    2.4.创建 Token 账户

    为某个 SPL Token 创建关联账户(需要确保接收者有对应的 Token 账户才能接收特定代币):

    spl-token create-account 9pbWQJHTSLELGekc85QHYCHozRdLo4si2nCPbMNZ2bxj --owner HybiEijLUVae5NFoiW52jCoN2bQ9TUL74wJkfPRgHxbm --fee-payer /Users/linzhihao/.config/solana/id.json

    2.5.实时监控账户变动

    使用 WebSocket 订阅账户变化(需要提前安装 wscat 工具):

    wscat -c wss://api.devnet.solana.com

    连接后发送订阅请求: 

    {"jsonrpc":"2.0","id":1,"method":"accountSubscribe","params":["HybiEijLUVae5NFoiW52jCoN2bQ9TUL74wJkfPRgHxbm",{"encoding":"jsonParsed","commitment":"finalized"}]}

    监听Solana token account HybiEijLUVae5NFoiW52jCoN2bQ9TUL74wJkfPRgHxbm

    2.6.转账操作

    转移 SPL Token 到另一个钱包(自动为对方创建接收账户):

    spl-token transfer --fund-recipient  9pbWQJHTSLELGekc85QHYCHozRdLo4si2nCPbMNZ2bxj 0.01 BBy1K96Y3bohNeiZTHuQyB53LcfZv6NWCSWqQp89TiVu
    • --fund-recipient:如果目标地址没有该Token的账户,则为其创建一个。
    • 1:转账的Token数量,1表示转1个单位的该Token。
    • BBy1K96Y3bohNeiZTHuQyB53LcfZv6NWCSWqQp89TiVu:目标收件人的Solana Public Address

    3.Solana的Web3.js

    3.1.交易代码

    // solana-test.js
    const { Connection, Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, TransactionMessage, VersionedTransaction } = require('@solana/web3.js');
    const fs = require('fs'); 
    const bs58 = require('bs58');async function main() {try {// 1. 读取 id.json 文件const idJson = JSON.parse(fs.readFileSync('/Users/linzhihao/.config/solana/id.json', 'utf8'));// 2. 解码为 Uint8Arrayconst secretKey = new Uint8Array(idJson);// 3. 创建 Keypairconst keypair = Keypair.fromSecretKey(secretKey);console.log('✅ Loaded keypair from secret key');console.log(`   Address: ${keypair.publicKey.toString()}`);// 4. 连接到 Solana 网络const connection = new Connection('https://api.devnet.solana.com', 'confirmed');// 5. Check account balanceconst balance = await connection.getBalance(keypair.publicKey);console.log(`✅ Current balance: ${balance / LAMPORTS_PER_SOL} SOL`);// If balance is too low, request an airdropif (balance < 0.1 * LAMPORTS_PER_SOL) {console.log('⏳ Requesting airdrop of 1 SOL...');const airdropSignature = await connection.requestAirdrop(keypair.publicKey,1 * LAMPORTS_PER_SOL);// Wait for confirmationconst latestBlockhash = await connection.getLatestBlockhash('finalized');await connection.confirmTransaction({blockhash: latestBlockhash.blockhash,lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,signature: airdropSignature});const newBalance = await connection.getBalance(keypair.publicKey);console.log(`✅ New balance after airdrop: ${newBalance / LAMPORTS_PER_SOL} SOL`);}// 6. Set up recipient address for transfer (just an example address)const recipientAddress = new PublicKey('Ey9M2QMRfg8Tuysyh3UEdeB9NwZmRaJU5FUjKtBSNJnb');const transferAmount = 0.01 * LAMPORTS_PER_SOL; // 0.01 SOLconsole.log(`⏳ Preparing to send ${transferAmount / LAMPORTS_PER_SOL} SOL to ${recipientAddress.toString()}...`);// 7. Get latest blockhashconst latestBlockhash = await connection.getLatestBlockhash('finalized');console.log(`✅ Fetched latest blockhash. Last Valid Height: ${latestBlockhash.lastValidBlockHeight}`);// 8. Create a transfer instructionconst transferInstruction = SystemProgram.transfer({fromPubkey: keypair.publicKey,toPubkey: recipientAddress,lamports: transferAmount});// 9. Create a transaction messageconst message = new TransactionMessage({payerKey: keypair.publicKey,recentBlockhash: latestBlockhash.blockhash,instructions: [transferInstruction]}).compileToV0Message();// 10. Create a versioned transactionconst transaction = new VersionedTransaction(message);// 11. Sign the transactiontransaction.sign([keypair]);console.log('✅ Transaction signed');// 12. Send the transactionconst signature = await connection.sendTransaction(transaction);console.log(`✅ Transaction sent with signature: ${signature}`);// 13. Confirm the transactionconsole.log('⏳ Confirming transaction...');await connection.confirmTransaction({blockhash: latestBlockhash.blockhash,lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,signature: signature});console.log('✅ Transaction confirmed');// 14. Check the new balanceconst newBalance = await connection.getBalance(keypair.publicKey);console.log(`✅ New balance after transfer: ${newBalance / LAMPORTS_PER_SOL} SOL`);} catch (error) {console.error('❌ Error:', error);}
    }main();

    3.2.输出结果

    ✅ Loaded keypair from secret key
       Address: Ed5NC8cwDiJ7A8831DoAdELq6aouydCbywUDLg3EwC8k
    ✅ Current balance: 2.89027628 SOL
    ⏳ Preparing to send 0.01 SOL to Ey9M2QMRfg8Tuysyh3UEdeB9NwZmRaJU5FUjKtBSNJnb...
    ✅ Fetched latest blockhash. Last Valid Height: 351840779
    ✅ Transaction signed
    ✅ Transaction sent with signature: 2x4DEvKHvuXDtrFUfPhLL1EcicYTf1AKKuuer6gU5o2Rrt14sa85uRGgrApZJUPLJod6JdgGuezwVBbb5x3RLs7n
    ⏳ Confirming transaction...
    ✅ Transaction confirmed
    ✅ New balance after transfer: 2.88027128 SOL

    4.通过 WalletAdatper 与钱包交互

    4.1 依赖和示例界面

    npm install \@solana/wallet-adapter-react@0.15.35 \@solana/wallet-adapter-base@0.9.23 \@solana/wallet-adapter-wallets@0.17.0 \npm install @solana/buffer-layout
    npm install @solana/web3.js@latest
    npm install @craco/craco --save-dev
    npm install web-vitals

     

    4.2Solana 钱包 API 整理 

    4.2.1关键包和导入

    // 核心适配器和连接
    import { ConnectionProvider, WalletProvider, useConnection, useWallet } from '@solana/wallet-adapter-react';
    import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';
    import { WalletModalProvider } from '@solana/wallet-adapter-react-ui';// UI 组件
    import { WalletDisconnectButton, WalletMultiButton } from '@solana/wallet-adapter-react-ui';// 特定钱包适配器
    import { SolongWalletAdapter } from '@solana/wallet-adapter-solong';
    import { PhantomWalletAdapter } from '@solana/wallet-adapter-phantom';// Solana Web3 工具
    import { Keypair, Connection, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from '@solana/web3.js';

    4.2.2SolongWallet 适配器集成

    // 初始化 SolongWallet 适配器
    const solongAdapter = new SolongWalletAdapter();// 组合多个钱包适配器
    const wallets = useMemo(() => [new PhantomWalletAdapter(),new SolongWalletAdapter(),// 可以添加更多适配器...],[]
    );// 提供钱包适配器给应用
    <WalletProvider wallets={wallets} autoConnect>{/* 应用组件 */}
    </WalletProvider>

    4.2.3钱包连接和状态管理

    <ConnectionProvider endpoint={endpoint}><WalletProvider wallets={wallets} autoConnect><WalletModalProvider>{/* 应用组件 */}</WalletModalProvider></WalletProvider>
    </ConnectionProvider><div style={styles.walletButtons}><WalletMultiButton /><WalletDisconnectButton />
    </div>

    4.2.4 交易操作

    // 在组件内部获取钱包连接和功能
    const { connection } = useConnection();
    const { publicKey, sendTransaction } = useWallet();// 创建交易
    const transaction = new Transaction();
    const recipientPubKey = Keypair.generate().publicKey;// 添加转账指令
    transaction.add(SystemProgram.transfer({fromPubkey: publicKey,toPubkey: recipientPubKey,lamports: 0.01 * LAMPORTS_PER_SOL,})
    );// 获取最新区块哈希
    const { blockhash, lastValidBlockHeight } = value;
    transaction.recentBlockhash = blockhash;
    transaction.feePayer = publicKey;// 发送交易
    const signature = await sendTransaction(transaction, connection, { minContextSlot,skipPreflight: false 
    });// 等待确认
    const confirmationResponse = await connection.confirmTransaction({blockhash,lastValidBlockHeight,signature,
    }, 'confirmed');

    4.2.5 RPC 配置和管理

    export const RPC_CONFIG = {// 默认 Solana Devnet - 有低速率限制DEFAULT: clusterApiUrl(WalletAdapterNetwork.Devnet),// 替代端点 - 在这里添加您的 API 密钥HELIUS: 'https://rpc-devnet.helius.xyz/your-api-key',QUICKNODE: 'https://your-quicknode-devnet-endpoint',ALCHEMY: 'https://solana-devnet.g.alchemy.com/v2/your-api-key',// 默认使用哪个端点ACTIVE: 'DEFAULT',// 速率限制错误的最大重试次数MAX_RETRIES: 3,// 指数退避的基本延迟(毫秒)BASE_DELAY: 1000,// 余额轮询间隔(毫秒)- 增加到 30 秒POLLING_INTERVAL: 30000,
    };

    相关文章:

    Solana 核心概念全解析:账户、交易、合约与租约,高流量区块链技术揭秘!

    目录 1.Solana 核心概念简述 1.1. 账户&#xff08;Account&#xff09; 1.2. 交易&#xff08;Transaction&#xff09; 1.3. 交易指令&#xff08;Instruction&#xff09; 1.4. SPL 代币 1.5. 合约&#xff08;Program&#xff09; 1.6. 租约&#xff08;Rent&#x…...

    Leetcode-853. Car Fleet [C++][Java]

    目录 一、题目描述 二、解题思路 Leetcode-853. Car Fleethttps://leetcode.com/problems/car-fleet/description/ 一、题目描述 There are n cars at given miles away from the starting mile 0, traveling to reach the mile target. You are given two integer array …...

    012 rocketmq事务消息

    文章目录 事务消息概念介绍交互流程事务消息原理TransactionListener接⼝TransactionProducer.javaTransactionConsumer.java 事务消息 内置topic中的消息对消费者不可见 本地事务mq消息事务消息 消息队列 RocketMQ 版提供的分布式事务消息适⽤于所有对数据最终⼀致性有强需求…...

    ChatGPT与DeepSeek:开源与闭源的AI模型之争

    目录 一、模型架构与技术原理 二、性能能力与应用场景 三、用户体验与部署灵活性 四、成本与商业模式 五、未来展望与市场影响 六、总结 随着人工智能技术的飞速发展&#xff0c;ChatGPT和DeepSeek作为两大领先的AI语言模型&#xff0c;成为了行业内外关注的焦点。它们在…...

    Ollama的底层实现原理分析

    一、背景 Ollama我们可以很方便的对DeepSeek等开源大模型进行部署&#xff0c;几条命令便能部署一个本地大模型服务&#xff0c;降低了非专业大模型开发者的门槛。 我们从中可以看到类似Docker的影子&#xff0c;ollama run 、ollama list等等&#xff0c;拉取对应大模型镜像&a…...

    nginx 动态计算拦截非法访问ip

    需求&#xff1a;在Nginx上实现一个动态拦截IP的方法&#xff0c;具体是当某个IP在1分钟内访问超过60次时&#xff0c;将其加入Redis并拦截&#xff0c;拦截时间默认1天。 技术选型&#xff1a;使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑…...

    商业秘密维权有哪些成本开支?

    企业商业秘密百问百答之六十三&#xff1a;商业秘密维权费用项目有哪些&#xff1f; 在商业秘密维权过程中&#xff0c;原告可能需要支付多种费用&#xff0c;一般费用项目包括&#xff1a; 1、诉讼费。诉讼费是向法院支付的费用&#xff0c;包括起诉费、案件受理费等。这些费…...

    使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法

    使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法 引言 原文:On using the UA-Speech and TORGO databases to validate automatic dysarthric speech classification approaches 构音障碍简介 构音障碍是一种由于脑损伤或神经疾病(如脑瘫、肌萎缩侧索硬化症、帕金森…...

    WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口

    WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口&#xff0c;其主要作用是定义了如何处理 WebSocket 的各种事件和消息。以下是 WebSocketHandler 的主要作用和功能&#xff1a; ### 1. 处理 WebSocket 生命周期事件 WebSocketHandler 定义了多个方法来…...

    Pikachu

    一、网站搭建 同样的&#xff0c;先下载安装好phpstudy 然后启动Apache和Mysql 然后下载pikachu&#xff0c;解压到phpstudy文件夹下的www文件 然后用vscode打开pikachu中www文件夹下inc中的config.inc.php 将账户和密码改为和phpstudy中的一致&#xff08;默认都是root&…...

    如何使用 Jenkins 实现 CI/CD 流水线:从零开始搭建自动化部署流程

    如何使用 Jenkins 实现 CI/CD 流水线:从零开始搭建自动化部署流程 在软件开发过程中,持续集成(CI)和持续交付(CD)已经成为现代开发和运维的标准实践。随着代码的迭代越来越频繁,传统的手动部署方式不仅低效,而且容易出错。为了提高开发效率和代码质量,Jenkins作为一款…...

    Vue.js 学习笔记

    文章目录 前言一、Vue.js 基础概念1.1 Vue.js 简介1.2 Vue.js 的特点1.3 Vue.js 基础示例 二、Vue.js 常用指令2.1 双向数据绑定&#xff08;v-model&#xff09;2.2 条件渲染&#xff08;v-if 和 v-show&#xff09;2.3 列表渲染&#xff08;v-for&#xff09;2.4 事件处理&am…...

    数据存储:一文掌握RabbitMQ的详细使用

    文章目录 一、RabbitMQ简介二、RabbitMQ的概述2.1 基本概念2.2 实际应用场景三、RabbitMQ的安装与配置3.1 安装RabbitMQ3.2 启用管理插件四、使用Python操作RabbitMQ4.1 安装Pika库4.2 生产者示例4.3 消费者示例4.4 发布/订阅模式示例五、RabbitMQ的高级特性5.1 消息持久化5.2 …...

    辛格迪客户案例 | 祐儿医药科技GMP培训管理(TMS)项目

    01 项目背景&#xff1a;顺应行业趋势&#xff0c;弥补管理短板 随着医药科技行业的快速发展&#xff0c;相关法规和标准不断更新&#xff0c;对企业的质量管理和人员培训提出了更高要求。祐儿医药科技有限公司&#xff08;以下简称“祐儿医药”&#xff09;作为一家专注于创新…...

    FreeRtos实时系统: 十六.tickless低功耗模式

    FreeRtos实时系统: 十六.tickless低功耗模式 一.tickless低功耗模式简介二.tickless模式详解三.tickless模式相关配置项四.tickless低功耗模式实验五.课堂总结 一.tickless低功耗模式简介 STM32低功耗模式&#xff1a; 二.tickless模式详解 为了可以降低功耗&#xff0c;又不…...

    CSDN博客:Markdown编辑语法教程总结教程(上)

    ❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. CSDN Markdown编辑器功能简介1.1 基础操作界面1.2 创作助手和语法说明 2. Markdown编辑器语法2.1 目录2.2 标题2.2.1 标题级别设置2.2.2 标题居中 3. 文本样式3.1 强调文本&#xff08;斜体&#xff09…...

    多个pdf合并成一个pdf的方法

    将多个PDF文件合并优点&#xff1a; 能更容易地对其进行归档和备份.打印时可以选择双面打印&#xff0c;减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf&#xff0c;双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …...

    Spark基础篇 RDD、DataFrame与DataSet的关系、适用场景与演进趋势

    一、核心概念与演进背景 1.1 RDD(弹性分布式数据集) 定义:RDD 是 Spark 最早的核心抽象(1.0版本引入),代表不可变、分区的分布式对象集合,支持函数式编程和容错机制。特点: 无结构化信息:仅存储对象本身,无法自动感知数据内部结构(如字段名、类型)。编译时类型安全…...

    odoo初始化数据库

    在 Odoo 中&#xff0c;初始化数据库的命令会因使用的环境和启动方式而有所不同&#xff0c;下面为你详细介绍几种常见的初始化数据库的方式。 1. 使用命令行工具初始化 在命令行中&#xff0c;你可以使用 Odoo 的启动脚本并结合相关参数来初始化数据库。以下是基本的命令格式…...

    大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2)

    大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2) 前言12. LangChain原理及agents构建Gradio UI12.2 学习资料12.2.1 学习文档12.2.2 用途示例12.2.3 OpenAI和DeepSeek例程1. OpenAI示例2. DeepSeek例程参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradi…...

    挑战杯推荐项目

    “人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

    学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

    2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

    深度学习习题2

    1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

    Bean 作用域有哪些?如何答出技术深度?

    导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

    TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

    在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

    Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

    Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

    通过MicroSip配置自己的freeswitch服务器进行调试记录

    之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

    五子棋测试用例

    一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

    Linux-进程间的通信

    1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

    表单设计器拖拽对象时添加属性

    背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...