SONUB 首页 ZH English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

如何开启通知

此浏览器或网址无法使用通知。请使用支持通知的浏览器,通过安全连接访问SONUB。

如果通知被屏蔽,请在浏览器设置中允许通知。

  1. 打开地址栏旁的站点设置或浏览器的站点设置,将此网站的通知设为允许。
  2. 在设备设置中允许浏览器发送通知,并检查勿扰模式或专注模式。
  3. 返回SONUB,刷新页面,然后通过铃铛开启通知。

在iPhone或iPad上,将SONUB添加到主屏幕,从主屏幕打开后允许通知。

XSML · 从第一行代码到对话

现在,让我们打造属于你自己的人工智能吧。

在此浏览器中亲手输入代码,完成数据准备、小型GPT训练、Runner和XChat。不使用预训练权重或外部AI API。

9

创建XChat

完成自己的聊天客户端。

XChat是界面,Runner是执行服务,XSML是模型。给问题加格式,通过获取回答。

初版在浏览器终端运行,每题独立,不发送历史。下一步可在小上下文限制内增加历史。重点是请求真正经过自己训练的模型。

动手输入并实验

保持Runner运行,编写并运行xchat.py,在You>输入hi。先/exit回到bash,再执行kill。

cd ~/xsml
nano xchat.py
python3 xchat.py
hi
/exit
kill "$(cat runner.pid)"
xchat.py — 需要亲手编写的完整源码

input读取问题,Request发送JSON POST,urlopen读取真实响应;失败时显示错误。

import json
from pathlib import Path
from urllib.request import Request, urlopen
from urllib.error import URLError


def ask(question):
    cfg = json.loads(Path('settings.json').read_text())
    body = {'prompt': 'Q: ' + question + '\nA:', 'tokens': cfg['tokens']}
    request = Request('http://127.0.0.1:' + str(cfg['port']) + '/generate',
                      data=json.dumps(body).encode(),
                      headers={'Content-Type': 'application/json'})
    with urlopen(request, timeout=120) as response:
        return json.load(response)['text']


if __name__ == '__main__':
    print('XChat -> Runner -> XSML | /exit')
    while True:
        try:
            question = input('You> ').strip()
            if question == '/exit':
                break
            if question:
                print('XSML>', ask(question))
        except (EOFError, KeyboardInterrupt):
            break
        except (URLError, TimeoutError) as error:
            print('Runner:', error)

检查理解

展示XChat→Runner→权重→生成文本。停Runner应报连接错误,重启后恢复。

遇到问题时

不要在XChat里输入kill,它会成为问题。先退出,完成后导出项目。