1、库

 https://github.com/ollama/ollama-js 

思来想去还是用官方库把,直接用API有一些事情很麻烦

在wsl2里面

先起一个:


mkdir ollama-js

看了一下默认node和npm都装好了的

24还是不错

npm i ollama

安装一下,瞬间就秒掉了

npm run build

报错,没这个命令

lemonhall@LEMON-HP-LAPTOP:~/ollama-js/node_modules/ollama/dist$ ls
browser.cjs  browser.d.cts  browser.d.mts  browser.d.ts  browser.mjs  index.cjs  index.d.cts  index.d.mts  index.d.ts  index.mjs  shared
lemonhall@LEMON-HP-LAPTOP:~/ollama-js/node_modules/ollama/dist$

然后下面是一堆的奇怪文件



For readers in 2022: mjs means (ES6 modules)-javascript, against the CommonJS one, i.e. *.cjs. – 
NeoZoom.lua
 Mar 24, 2022 at 16:06

然后搜索了一下知道了,mjs是ES6的模块,cjs是CommonJS标准的,标准不一样罢了

 https://blog.csdn.net/weixin_51472145/article/details/131212853 


OK,不管了

 https://forums.rpgmakerweb.com/index.php?threads/mv-mz-es6-and-you-cool-stuff-you-might-not-know-you-can-do.152021/ 

搜索了一下官方论坛

好的,那我们就用ES6吧

我看了一下游戏的目录组织结构形式是这样的

打开mjs


直接copy到libs下面就好了

index里面引入一下试试

Cannot use import statement outside a module

 https://stackoverflow.com/questions/58211880/uncaught-syntaxerror-cannot-use-import-statement-outside-a-module-when-import 

好了,我大概知道怎么做了:

1、新建一个test.js

2、它使用了

ES6的新语法引入

然后这玩意好处是完全空间隔离的,也好,作为库函数确实方便

那我写好代码之后,绑定到全局的window上就好了;


3、老规矩新建事件

通了,然后就看怎么调用ollama.js那边了

官网的例子是这样写的

这是个包,外面还有一个包

所以名字取得都怪怪的

import {b as browser} from "./libs/ollama.js";
//import { b as browser } from './theModule';
// test.js
window.saySth = async function() {
    // 函数的具体实现
    const response = await browser.chat({
        model: 'llama2-uncensored:latest',
        messages: [{ role: 'user', content: 'Hello~' }],
      })
      console.log(response.message.content)
      $gameMessage.add(response.message.content);
};

好嘞,我们把这个函数修改一下

成这个样子,调用llama2的解码模型,原因是。。。。剩下几个模型运行速度太慢了,实在要命了

看来以后要改成用豆包来玩了

本地大模型机器受不了啊

运行效果也不是一般的好

NPC立马就可以和你say hello了,关键是几乎不带重样的

然后我还可以在函数前面把当前的游戏历的日期时间、当前游戏地图内部的天气情况,其它NPC的情况,关联人物的情况,实时得call出来,然后作为上下文塞给大模型

大模型就可以和你很人性化的打招呼了,真是nice啊

接下来,要结合choice系统,让这个npc可以和我实时聊天