对接极速行情丨DolphinDB MDL 行情插件使用指南

通联数据依托于金融大数据,结合人工智能技术为投资者提供个性化、智能化、专业化投资服务, MDL 则是通联数据提供的高频行情数据服务。DolphinDB 提供了能够从 MDL 服务器获取高频行情数据的 DolphinDB MDL 插件,帮助用户方便地通过 DolphinDB 脚本语言将实时行情数据接入 DolphinDB 中,以便进行后续的计算或存储

本文主要介绍如何通过 MDL 插件将实时行情数据写入分布式数据库。本文全部代码需要运行在 2.00.11 或者更高版本的 DolphinDB Server 以及插件上,目前仅支持 Linux 系统。

1. DolphinDB MDL 行情插件介绍

MDL 插件基于 MDL 官方提供的行情数据服务 C++ SDK(即 TCP 版本 MDL)实现。MDL 插件最核心的功能是实现了行情回调函数,每次接收到行情时会写入订阅时所指定的 DolphinDB 共享流表中。DolphinDB MDL 插件目前已经支持了包括上交所、深交所、中金所 、郑商所、上期能源、大商所、广期所数据源的 50 余种数据类型,订阅使用所需指定的参数详情见下文。具体MDL 插件的接口介绍见 DolphinDB MDL Plugin 使用说明。

2. 基本使用介绍

2.1 安装插件

MDL 插件目前可以在 2.00.11 版本及以后的 DolphinDB Server 通过插件市场进行安装。节点启动后,连接节点并在 GUI(或 VS Code、Web UI)等 DolphinDB 客户端中执行 installPlugin 函数,则可以下载到与当前 server 版本适配的 MDL 插件文件,插件文件包括插件描述文件及插件的二进制文件。

login("admin", "123456")
installPlugin("MDL")

installPlugin 函数若正常返回,则代表下载成功,其返回值为插件描述文件(PluginMDL.txt)的安装路径,如:

/path_to_dolphindb_server/server/plugins/MDL/PluginMDL.txt

installPlugin 函数实际上是完成从远程文件服务器拉取插件文件到 DolphinDB Server 所在的服务器,压缩后的 MDL 包大小约为 60 MB,下载需要一定的耗时。

2.2 加载插件

在脚本中调用插件相关的接口前,需要先加载插件。在 GUI(或 VS Code、Web UI)等客户端中执行 loadPlugin("MDL")。以下示例中使用了相对路径,也可以使用 2.1 中返回的绝对路径 /path_to_dolphindb_server/server/plugins/MDL/PluginMDL.txt

loadPlugin("./plugins/MDL/PluginMDL.txt")

loadPlugin 函数正常返回则插件加载成功,以 VS Code 为例,首次加载成功后返回的部分信息如下,返回值内容是 MDL 插件所提供的函数:

3. 行情的接入与存储

本章以订阅沪深两市的全市场股票的逐笔数据、实时写入 DolphinDB 分布式数据库为例,对 MDL 插件的使用进行说明。

3.1 数据接入方案

数据接入的流程如下:

  • 通过 MDL 插件订阅深圳市场的股票逐笔委托、逐笔成交,以及上海市场的逐笔合并数据逐笔数据写入 DolphinDB 的三个持久化流数据表。持久化流数据表是具备发布订阅功能的内存表。
  • 订阅持久化流数据表写入 DolphinDB 分布式数据库,将数据存储到磁盘上。

注意:请勿使用 MDL 插件将行情数据直接写入分布式数据库。因为分布式数据库并不适用于此类高频的流式写入。建议在使用时,借助流数据表及其发布订阅功能以实现部分的批处理。这样既可以提高写入的吞吐量,也有助于降低时延。

MDL 行情接收流程图

下面分步骤介绍关键的 DolphinDB 代码实现,完整脚本见附录。

3.2 数据接入方案实施步骤

3.2.1 流表和分布式表规划

注意:为保证后续的 enableTableShareAndPersistence 函数能够正常执行,需要节点启动之前在配置文件中(单节点:dolohindb.cfg,集群:cluster.cfg)指定配置参数 persistenceDir ,配置参考功能配置。

获取表结构

调用 MDL::getSchema 方法可以获取行情数据各个表的表结构。运行以下代码可以获取上海股票逐笔合并、深圳股票逐笔成交和逐笔委托三张表的表结构:

// 深交所股票逐笔成交
transactionSchema = MDL::getSchema(`MDLSID_MDL_SZL2, 36);
// 深交所股票逐笔委托
orderSchema = MDL::getSchema(`MDLSID_MDL_SZL2, 33);
// 上交所股票逐笔合并
ngtsSchema = MDL::getSchema(`MDLSID_MDL_SHL2, 24);

创建持久化流数据表

得到行情数据的表结构后,使用该表结构创建持久化流数据表。

cacheSize = 1000000enableTableShareAndPersistence(table=streamTable(cacheSize:0, transactionSchema[`name], transactionSchema[`type]), tableName=`transactionTable_sz, cacheSize=cacheSize)
enableTableShareAndPersistence(table=streamTable(cacheSize:0, orderSchema[`name], orderSchema[`type]), tableName=`orderTable_sz, cacheSize=cacheSize)
enableTableShareAndPersistence(table=streamTable(cacheSize:0, ngtsSchema[`name], ngtsSchema[`type]), tableName=`ngtsTable_sh, cacheSize=cacheSize)

代码第二行的 cacheSize 变量控制了在建表时预分配内存的大小、以及流数据表可占用的最大内存,其单位是行,设置较大的 cacheSize 可以降低出现峰值时延的频率。具体大小可以根据实际的可使用的内存大小决定。具体优化原理可参考 DolphinDB 流计算时延统计与性能优化。

创建分布式数据库

为将行情数据存入分布式数据库,需要根据之前得到的行情数据表结构来创建分布式库表,分区规则参考自《基于 DolphinDB 存储金融数据的分区方案最佳实践》。

注意:由于 MDL 没有当天的日期字段,因此需要手动增加日期字段以便于分区。

transactionColName = transactionSchema[`name]
transactionColName.append!("Date")
transactionColType = transactionSchema[`type]
transactionColType.append!(DATE)
orderColName = orderSchema[`name]
orderColName.append!("Date")
orderColType = orderSchema[`type]
orderColType.append!(DATE)
ngtsColName = ngtsSchema[`name]
ngtsColName.append!("Date")
ngtsColType = ngtsSchema[`type]
ngtsColType.append!(DATE)dbName = "dfs://Stock_TB"
transactionTbName = "transactionTable_sz"
orderTbName = "orderTable_sz"
ngtsTbName = "ngtsTable_sh"dbDate = database(, partitionType=VALUE, partitionScheme=2024.01.01..2025.01.01)
dbID = database(, partitionType=HASH, partitionScheme=[SYMBOL, 25])
db = database(directory=dbName, partitionType=COMPO, partitionScheme=[dbDate, dbID],engine='TSDB',atomic='CHUNK')tbSchema = table(1:0, transactionColName, transactionColType)
db.createPartitionedTable(table=tbSchema,tableName=transactionTbName,partitionColumns=`Date`SecurityID,sortColumns=`SecurityID`TransactTime)
tbSchema = table(1:0, orderColName, orderColType)
db.createPartitionedTable(table=tbSchema,tableName=orderTbName,partitionColumns=`Date`SecurityID,sortColumns=`SecurityID`TransactTime)
tbSchema = table(1:0, ngtsColName, ngtsColType)
db.createPartitionedTable(table=tbSchema,tableName=ngtsTbName,partitionColumns=`Date`SecurityID,sortColumns=`SecurityID`TickTime)

3.2.2 订阅 MDL 行情将增量数据到流数据表

建立 MDL 连接句柄

用户配置 MDL 的连接信息及验证 TOKEN,使用 MDL::createHandle 函数创建连接的句柄。注意创建连接句柄并没有连接,只有在执行 MDL::connectMDL 后才会真正进行连接、接收数据。

因为通联 MDL 不支持同时订阅在不同服务器的数据源,也就是当同时订阅上交所 L2 和深交所 L2 时,只能收到其中一个数据源的行情。为了解决这个问题,需要创建两个句柄,分别订阅上交所 L2 和深交所 L2 的数据。

需要注意的是,在 createHandle 建立连接时可以指定 workerNum 线程数,如果指定了大于 1 的线程数,则 MDL 的回调会在多个线程内进行,因此写入 DolphinDB 流表的过程也是多线程的。下面的例子中指定线程数为 1,即单线程进行回调。

// 配置连接
HOST =  ["mdl-sse01.datayes.com","mdl01.datayes.com","mdl02.datayes.com","mdl01.datayes.com","mdl02.datayes.com","mdl01.datayes.com","mdl02.datayes.com","mdl01.datayes.com","mdl02.datayes.com","mdl-cloud-bj.datayes.com","mdl-cloud-sz.datayes.com","mdl01.datayes.com","mdl02.datayes.com"]
PORT =  [19010,19011,19011,19010,19010,19013,19013,19012,19012,19012,19012,19018,19018]
// TOKEN 根据实际需要进行替换
USERNAME = "97887ADLJFKAJLSDF98976WRUJD0KJDFLAKJDS"handle_sh = MDL::createHandle(`handle_sh, HOST, PORT, USERNAME, 1)
handle_sz = MDL::createHandle(`handle_sz, HOST, PORT, USERNAME, 1)

订阅行情数据

使用 MDL::subscribe 函数进行 MDL 行情订阅,在订阅时需要传入要订阅的数据服务 ID 和版本号,并指定消息 ID。

// 深交所股票数据
MDL::subscribe(handle_sz, orderTable_sz, `MDLSID_MDL_SZL2, `MDLVID_MDL_SZL2, 33)
MDL::subscribe(handle_sz, transactionTable_sz, `MDLSID_MDL_SZL2, `MDLVID_MDL_SZL2, 36)
// 上交所股票数据
MDL::subscribe(handle_sh, ngtsTable_sh, `MDLSID_MDL_SHL2, `MDLVID_MDL_SHL2, 24)

有关 MDL 插件对数据品类的支持情况和相关订阅参数,参考附录 3.。

3.2.3 订阅流表写入分布式库

订阅 3.2 节中的三个持久化流数据表,将增量数据实时写入分布式数据库。

Transaction = loadTable(database=dbName, tableName=transactionTbName)
Order = loadTable(database=dbName, tableName=orderTbName)
Ngts = loadTable(database=dbName, tableName=ngtsTbName)def handleInsert(tb, mutable msg) {msg.addColumn("Date", DATE)msg.replaceColumn!("Date", take(date(now()), msg.size()))tableInsert(tb, msg)
}subscribeTable(tableName="transactionTable_sz", actionName="transactionTableInsert", offset=-1, handler=handleInsert{Transaction}, msgAsTable=true, batchSize=20000, throttle=1, reconnect=true)
subscribeTable(tableName="orderTable_sz", actionName="orderTableInsert", offset=-1, handler=handleInsert{Order}, msgAsTable=true, batchSize=20000, throttle=1, reconnect=true)
subscribeTable(tableName="ngtsTable_sh", actionName="ngtsTableInsert", offset=-1, handler=handleInsert{Ngts}, msgAsTable=true, batchSize=20000, throttle=1, reconnect=true)
  • handleInsert 自定义函数会手动新增一列新的 Date 数据,并写入当天的日期。
  • 通过调整 subscribeTable 函数中的 batchSize 和 throttle 参数可以控制写入分布式数据库的频率。
    • batchSize=20000 表示当未处理消息的数量达到 20000 时,handler 才会处理消息。
    • throttle=1 表示继上次 handler 处理消息之后,若未处理消息的数量还没有达到 20000 ,但是时间间隔 1s 后也会处理消息。
    • 因此,达到 batchSize 设置的条件或者达到 throttle 设置的条件,才会向分布式数据库写入一次。

3.2.4 启动 MDL 连接,开启数据写入

由于 MDL 需要在连接前设置完数据的订阅,连接后将无法添加订阅。所以在订阅后,使用函数 MDL::connectMDL 连接 MDL,行情数据将进入流数据表。

MDL::connectMDL(handle_sh)
MDL::connectMDL(handle_sz)

3.3 MDL 运行状态监控

运行过程中,可以查看 MDL 行情的接收情况。可以使用 MDL::getHandleStatus 查询 MDL 行情的接收情况。

stat = MDL::getHandleStatus()
select HandleName,CreateTime,IsConnect,SubscribeInfo from stat

返回结果如下,可以看到在本例提交了 MDL 订阅,订阅了深交所的逐笔成交和逐笔委托,以及上交所的逐笔合成,目前的连接状态为 true。

查询流表的订阅,可以看到发布订阅都正常进行。

getStreamingStat().subWorkers

查询 dfs 表中某一只股票的数据,观察数据。这里查询 600100 这支上交所股票的数据,执行以下命令,从 dfs 表中获取了从连接之后的所有该股票的逐笔数据。

select * from loadTable("dfs://Stock_TB", "ngtsTable_sh") where SecurityID=`600100

至此,已经成功订阅上交所和深交所的逐笔数据并将它落盘到 DolphinDB 分布式表中。

附录

1. 订阅落库的脚本文件

MDL落库脚本.dos

2. 常见问题

如果重复执行 loadPlugin 加载插件,会抛出模块已经被使用的错误提示,因为节点启动后,只允许加载一次 MDL 插件,即可在任意会话中调用该插件提供的函数。错误提示如下:

The module [MDL] is already in use.

可以通过 try-cach 语句捕获这个错误,避免因为插件已加载而中断后续脚本代码的执行:

try{ loadPlugin("./plugins/MDL/PluginMDL.txt") }catch(ex){print ex}

3. MDL 插件数据品类参数表

MDL 插件目前支持了下表中出现的数据品类。在订阅时可以查询该表,找到想要订阅的数据入参。表中为空的项,对应字段在订阅时填空即可。

行情源品种svrIDsvrVersion行情数据类型msgIDextraOrderLevel
上交所L2“MDLSID_MDL_SHL2”“MDLVID_MDL_SHL2”市场行情 (mdl.4.4)4
上交所L2“MDLSID_MDL_SHL2”“MDLVID_MDL_SHL2”市场行情 (mdl.4.4)

带10档买卖方向委托队列数据
41-10 (仅支持上交所、深交所快照。视具体需要的委托队列档位而指定, 下同。)
上交所L2“MDLSID_MDL_SHL2”“MDLVID_MDL_SHL2”指数行情 (mdl.4.6)6
上交所L2“MDLSID_MDL_SHL2”“MDLVID_MDL_SHL2”盘后固定价格行情消息 (mdl.4.16)16
上交所L2“MDLSID_MDL_SHL2”“MDLVID_MDL_SHL2”盘后固定价格交易逐笔成交消息 (mdl.4.17)17
上交所L2“MDLSID_MDL_SHL2”“MDLVID_MDL_SHL2”竞价逐笔合并行情 (mdl.4.24)24
orderbookSnapshotEngine

上交所L2股票行情快照实时合成
"SHL2_ORDER_AND_TRANSACTION"非通联MDL原始行情,
用于获取实时快照合成的数据
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”市场行情 (mdl.6.28)28
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”市场行情 (mdl.6.28)

带10档买卖方向委托队列数据
281-10
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”指数行情 (mdl.6.29)29
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”成交量统计指标行情快照 (mdl.6.30)30
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”盘后定价交易业务行情快照 (mdl.6.31)31
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”逐笔委托行情 (mdl.6.33)33
深交所L2“MDLSID_MDL_SZL2”“MDLVID_MDL_SZL2”逐笔成交行情 (mdl.6.36)36
orderbookSnapshotEngine

深交所 L2股票行情快照实时合成
"SZL2_ORDER_AND_TRANSACTION"非通联MDL原始行情,
用于获取实时快照合成的数据
中金所 L2“MDLSID_MDL_CFFEXL2”“MDLVID_MDL_CFFEXL2“期货行情 (mdl.21.1)1
郑商所 L2“MDLSID_MDL_CZCEL2““MDLVID_MDL_CZCEL2“期货行情 (mdl.23.1)1
郑商所 L2“MDLSID_MDL_CZCEL2““MDLVID_MDL_CZCEL2“期货组合行情 (mdl.23.5)5
上期能源 L2“MDLSID_MDL_SHFEL2““MDLVID_MDL_SHFEL2“上期期货 (mdl.22.1)1
上期能源 L2“MDLSID_MDL_SHFEL2““MDLVID_MDL_SHFEL2“原油期货 (mdl.22.3)3
大商所 L2“MDLSID_MDL_DCEL2”“MDLVID_MDL_DCEL2”期货行情 (mdl.24.1)1
大商所 L2“MDLSID_MDL_DCEL2”“MDLVID_MDL_SHFEL2“期货成交量统计 (mdl.24.3)3
大商所 L2“MDLSID_MDL_DCEL2”“MDLVID_MDL_SHFEL2“期货组合行情 (mdl.24.5)5
大商所 L2“MDLSID_MDL_DCEL2”“MDLVID_MDL_SHFEL2“期货最优价十笔委托 (mdl.24.7)7
广期所 L2“MDLSID_MDL_GFEXL2““MDLVID_MDL_GFEXL2“期货行情 (mdl.26.1)1
广期所 L2“MDLSID_MDL_GFEXL2““MDLVID_MDL_GFEXL2“期货成交量统计 (mdl.26.3)3
广期所 L2“MDLSID_MDL_GFEXL2““MDLVID_MDL_GFEXL2“期货组合行情 (mdl.26.5)5
广期所 L2“MDLSID_MDL_GFEXL2““MDLVID_MDL_GFEXL2“期货最优价十笔委托 (mdl.26.7)7

注:行情快照合成类型是为了对接 DolphinDB 快照合成流计算引擎的特殊处理,指将逐笔成交和逐笔委托处理为同构数据写入一张 DolphinDB 表中。(可联系 DolphinDB 小助手 dolphindb1,以进一步了解)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法day06

第一题 1658. 将 x 减到 0 的最小操作数 如题上述: 本题原来的意思给定一个数字x,从数组的左边或者右边 使用x减去数组中的数字,直到减去最后一个数字为0时,返回最小的操作次数;如果最终减去的数组中的数字之后不能得…

HR系统组合漏洞挖掘过程

前言 某天在项目中遇到了一个奇怪的人才管理系统,通过FOFA(会员可在社区获取)进行了一番搜索,发现了该系统在互联网上的使用情况相当广泛。于是,我开始了后续的审计过程。 在搜索过程中,我偶然间找到了一份…

「TypeScript系列」TypeScript 基础类型

文章目录 一、TypeScript 基础类型1. **Number**: 用于表示数字。可以是整数或浮点数。2. **String**: 用于表示文本类型的数据。3. **Boolean**: 表示逻辑值:true 或 false。4. **Array**: 表示一组值。TypeScript 使用泛型(generics)来定义…

Mysql存储引擎对比

存储引擎InnoDBMyISAM文件存储结构.frm文件:存放表结构的定义信息 .ibd文件或.ibdata文件:存放InnoDB数据(数据和索引)【独享表空间】每个表一个.ibd文件【共享表空间】所有表使用一个.ibdata文件- .frm文件:存放表结构…

Nginx静态压缩和代码压缩,提高访问速度!

一、概述 基于目前大部分的应用,都使用了前后端分离的框架,vue的前端应用,也是十分的流行。不知道大家有没有遇到这样的问题: 随着前端框架的页面,功能开发不断的迭代;安装的依赖,不断的增多&a…

机器学习【简述】

什么是机器学习 机器学习研究的是计算机怎么模拟人类的学习行为,以获取的知识或技能,并重新组织已有的知识结构使之不断改善自身。简单一点说,就是计算机从数据中学习初规律和模式,以应用在新数据上做预测的任务。近年来互联网数…

无人机的用途

无人机,即无人驾驶飞机,其用途广泛且多样,涉及到多个领域。 在农业领域,无人机通过搭载各种传感器和相机,可以对农田进行空中巡视,收集农田数据,如土壤含水量、气温、湿度等,以及植…

详细的性能分析和调优的示例过程:

当面临数据库查询性能下降的问题时,以下是一个详细的性能分析和调优的示例过程: ### 1. 监控和识别问题 假设你负责维护一个电子商务网站数据库,最近用户反映搜索功能响应慢。你立即使用数据库监控工具(如Prometheus、Grafana&am…

Ardupilot开源飞控工程项目编译回顾

Ardupilot开源飞控工程项目编译回顾 1. 源由2. 工程编译3. 命令列表3.1 工作环境设置3.2 获取工程代码3.3 建立编译环境3.4 编译工程代码3.5 保存编译结果3.6 清理编译结果3.7 编译设备目标 4. 补充 1. 源由 最近,有点莫名的连续遇到了2次Ardupilot编译报错。百思不…

Quartz.Net(2)——NetCore3.1整合Quartz.Net

在上篇文章中Quartz.Net(1) 已经介绍了Quartz.Net的基本运用&#xff0c;该篇文章中将主要介绍NetCore3.1如何整合Quartz.Net&#xff0c;在后台运行定时job&#xff0c;并运用到上篇文章讲到的介绍点。 1 导入Nuget包 <PackageReference Include"Quartz" Versio…

PyTorch中的torch.cuda.amp.autocast

torch.cuda.amp.autocast的使用 torch.cuda.amp.autocast是PyTorch中一种自动混合精度计算的方法&#xff0c;它允许在深度学习模型的训练过程中自动执行混合精度计算&#xff0c;从而加快训练速度并减少显存占用。 在使用torch.cuda.amp.autocast时&#xff0c;一般会将模型…

Ubuntu系统如何使用宝塔面板搭建HYBBS论坛并发布公网远程访问

文章目录 前言1. HYBBS网站搭建1.1 HYBBS网站安装1.2 HYBBS网站测试1.3. cpolar的安装和注册 2. 本地网页发布2.1.Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3.公网访问测试总结 前言 在国内…

【智能算法】河马优化算法(HO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;MH Amiri受到自然界河马社会行为启发&#xff0c;提出了河马优化算法&#xff08;Hippopotamus Optimization Algorithm, HO&#xff09;。 2.算法原理 2.1算法思想 …

动态IP的应用场景

动态IP适用于网络设备规模较小、需要灵活连接网络、经济条件有限或者需要临时建立网络的场景。

【C++】AVL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、AVL 树 1.1、AVL树的概念 1.2、AVL树节点的定义 1.3、AVL树的插入 1.4、AVL树的旋转 1.4.1、新节点插入较高左子树的左侧---左左&#xff1a;右单旋 1…

Spring整体流程源码分析

DisableEncodeUrlFilter 防止sessionId被泄露 包装器模式 WebAsyncManagerIntegrationFilter WebAsyncManagerIntegrationFilter通常与Spring MVC的异步请求处理机制一起使用&#xff0c;确保在使用Callable或DeferredResult等异步处理方式时&#xff0c;安全上下文能够正…

CSP备考---位运算

前言 本期我们将学习位运算&#xff0c;与本期类型的考点&#xff08;二进制转换&#xff09;反码、补码、原码。 1、位运算是什么 首先我们需要先了解位运算是什么。 我们知道&#xff0c;计算机中的数在内存中都是以二进制形式进行存储的 &#xff0c;而位运算就是直接对整…

332_C++_mmap 映射文件或设备到进程的地址空间,或者创建一个新的映射区域

mmap : 映射文件或设备到进程的地址空间,或者创建一个新的映射区域(通常是匿名的) mmap 是 Linux 和其他类 Unix 系统中的一个系统调用,用于映射文件或设备到进程的地址空间,或者创建一个新的映射区域(通常是匿名的)。mmap 提供了灵活的方式来管理内存,它经常用于实现…

打造本地GPT专业领域知识库AnythingLLM+Ollama

如果你觉得openai的gpt没有隐私&#xff0c;或者需要离线使用gpt&#xff0c;还是打造专业领域知识&#xff0c;可以借用AnythingLLMOllama轻松实现本地GPT. AnythingLLMOllama 实现本地GPT步聚&#xff1a; 1 下载 AnythingLLM软件 AnythingLLM官网地址&#xff1a; Anythi…

功能卓越,未来可期!实在Agent智能体公测圆满收官

“被需要的智能才是实实在在的智能。”一直以来&#xff0c;实在智能始终坚持从行业本质出发思考如何围绕客户需求打造更智能、更普惠的智能体数字员工&#xff0c;切实关注用户真实的使用体验与感受。 自2020年7月起&#xff0c;实在智能率先推出第一代实在RPA数字员工&#…