3作者: mavdol04大约 1 个月前原帖
嘿!我构建了这个系统,通过使用Rust和机器学习来赋予NPC情感,使其更具人性化。<p>该系统根据文本输入或动作提供情感坐标(基于拉塞尔的圆周模型),并为每个实体提供持久的情感记忆。想象一下,NPC能够记住他们对特定玩家或事件的感受。<p>我在大约1000个视频游戏对话(如《上古卷轴:天际》、《赛博朋克》等)上预训练了一个DistilBERT模型,并计划很快提取和评估超过10万个对话。不过,工作室/团队可以手动添加对话,以丰富他们自己的数据集。<p>这个矩阵并不生成对话,它只是分析内容。当你传入文本或动作时,它会返回在愉悦度(愉快/不愉快)和唤醒度(精力充沛/平静)尺度上的情感坐标。<p>例如:<p>- [0.00, 0.00] = 中立<p>- [0.29, 0.80] = 兴奋<p>- [-0.50, -0.30] = 悲伤/疲惫<p>我在这里制作了一个快速可视化工具,以帮助理解 <a href="https://valence-arousal-visualizer.vercel.app/" rel="nofollow">https://valence-arousal-visualizer.vercel.app/</a><p>该系统根据情感状态帮助选择要播放的对话/动作:<p>- 玩家对NPC说了一些不好的话 → 系统检测到负面愉悦度 → 游戏从“愤怒对话池”中选择<p>- NPC记得过去的积极互动 → 系统返回正面愉悦度 → 可用更友好的回应<p>因此,开发者仍然编写对话或选择下一个动作,但这个矩阵有助于动态管理NPC的情感状态和记忆。<p>以下是项目结构,以便更好地理解其工作原理:<p>- src/config: NPC配置设置的辅助工具<p>- src/module: 核心引擎,包含情感预测、记忆存储和实体管理<p>- src/api: FFI层,使用pub extern "C"将我们的模块与C/C++游戏引擎和修改工具(如Unity、Unreal等)连接起来<p>要实现它,只需调用`build.sh`,它将创建DLL文件,你可以在C++/C/C#中直接调用矩阵函数。<p>我很想听听关于代码质量和整体架构的反馈。<p>欢迎诚实地分享好的、坏的和丑陋的方面。如果你想贡献代码,欢迎提交PR!
1作者: Cappybara12大约 1 个月前原帖
大家好! 在OLake,我们的团队已经在用Go构建一个高吞吐量的数据复制工具一段时间了。随着我们不断推动实际工作负载,越来越明显的是,Go非常适合数据工程,具备简单的并发性、可预测的部署、小型容器以及出色的性能,而无需JVM。 作为这一旅程的一部分,我们一直在为Apache Iceberg的Go生态系统做贡献。本周,我们的PR(拉取请求)已成功合并,允许向分区表写入数据(https://github.com/apache/iceberg-go/pull/524)。 虽然这听起来可能比较小众,但它为Go服务直接写入Iceberg(无需经过Spark/Flink的绕道)并立即在Trino/Spark/DuckDB中准备查询打开了非常实用的路径。 我们新增的功能包括:分区的扇出写入器,将数据拆分为多个分区,每个分区都有自己的滚动数据写入器,在达到目标文件大小时高效地刷新/滚动Parquet,支持所有常见的Iceberg转换:身份、桶、截断、年/月/日/小时,基于Arrow的写入以实现稳定的内存和快速的列式处理。 我们对Go在构建OLake平台方面的信心源于:该运行时的并发模型使得协调分区写入器、批处理和背压变得简单。小型静态二进制文件 → 便于在边缘和侧车中部署数据摄取器。出色的运维故事(可观察性、性能分析和合理的资源使用),在高频率复制时尤为重要。目前这项技术的帮助在于:构建微型摄取器,将数据库中的变化流式传输到Iceberg,适用于不希望使用大型JVM堆栈的边缘或本地捕获场景,以及希望在每个写入路径上减少小文件数量的团队(无需为每个写入路径单独进行压缩作业)。 对于仍然对Go感到担忧的数据团队,我们有案例研究可以帮助你:查看我们因该语言的轻量级模型而达到的基准测试结果。相关数据请见:https://olake.io/docs/benchmarks 如果你正在尝试Go + Iceberg,我们非常乐意合作,因为我们相信开源 :) 代码库链接:https://github.com/datazip-inc/olake