分类 前后端 下的文章

前言

发现两个多月没写文章了,不过考试月也没啥好写的。

最近大模型这么火,正好有个项目用到,于是便水一篇教程吧。

此篇教程为 科大讯飞的星火大模型 部署教程,部署完成后即可与智能助手进行聊天。

这里是关于部署到服务器端,如果有其他需求可以查看官方文档。

 

大模型简介

大语言模型 (英语:large language model,LLM) 是一种语言模型,由具有许多参数(通常数十亿个权重或更多)的人工神经网络组成,使用自监督学习半监督学习对大量未标记文本进行训练[1]。大型语言模型在2018年左右出现,并在各种任务中表现出色[2]

尽管这个术语没有正式的定义,但它通常指的是参数数量在数十亿或更多数量级的深度学习模型[3]。大型语言模型是通用的模型,在广泛的任务中表现出色,而不是针对一项特定任务(例如情感分析、命名实体识别或数学推理)进行训练[2]

尽管在预测句子中的下一个单词等简单任务上接受过训练,但发现具有足够训练和参数计数的神经语言模型可以捕获人类语言的大部分句法和语义。 此外大型语言模型展示了相当多的关于世界的常识,并且能够在训练期间“记住”大量事实[2]

参考资料:llm - 搜索 (wikipedia.org)

 

部署

API领取

首先前往科大讯飞的星火大模型官网 讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 (xfyun.cn)

进行注册,然后领取大模型的API

这里选择 API免费试用 ,然后进入如下页面

选择第一个 个人免费包免费试用 。等到领取成功后,后台会有如下界面

这里的 APPIDAPISecretAPIKey 就是接口信息,后面会用到。

 

Linux SDK 下载

进入上面页面后,点击 Linux SDK 右边的下载按钮。将会下载SDK包,感兴趣的也可以点击文档查看使用教程

下载完成后传到服务器,使用解压命令解压包

unzip Spark3.0_Linux_SDK_v1.1.zip

然后进入解压出来的包 Spark3.0_Linux_SDK_v1.1 , 里面应该包含如下文件

root@echofree:/opt# cd Spark3.0_Linux_SDK_v1.1/
root@echofree:/opt/Spark3.0_Linux_SDK_v1.1# ls
build  include  lib  src

 

动态库配置

进入 lib 目录,里面会有一个相关的调用库

root@echofree:/opt/Spark3.0_Linux_SDK_v1.1# cd lib/
root@echofree:/opt/Spark3.0_Linux_SDK_v1.1/lib# ls
libSparkChain.so

这里为了方便点,直接采用暴力方法,将库文件 libSparkChain.so 复制到 /usr/lib

cp libSparkChain.so /usr/lib

 

API接口配置

进入 src 目录,会有一个 demo.cpp 文件,进入此文件,修改如下信息

int initSDK()
{
    // 全局初始化
    SparkChainConfig *config = SparkChainConfig::builder();
    config->appID("appID")        // 你的appid
        ->apiKey("apiKey")        // 你的apikey
        ->apiSecret("apiSecret"); // 你的apisecret
        // ->logLevel(0)
        // ->logPath("./aikit.log");
    int ret = SparkChain::init(config);
    printf(RED "\ninit SparkChain result:%d" RESET,ret);
    return ret;
}

将这里的 三个API配置信息改为自己的即可。

 

demo测试

配置完成后就要测试连接了,使用 GNU 编译套件进行编译,命令如下

g++ -Iinclude src/demo.cpp -o demo -lSparkChain -lstdc++ -lpthread

如果你会 Makefile 的话,也可以复制下面的进行编译

CC = g++
CFLAGS = -Iinclude
LIBS = -lSparkChain -lstdc++ -lpthread
SRC = src/server.cpp
OUTPUT = demo

all: $(OUTPUT)

$(OUTPUT): $(SRC)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

clean:
	rm -f $(OUTPUT)

如果一切正常,文件夹下会生成一个可执行文件 demo

root@echofree:/opt/Spark3.0_Linux_SDK_v1.1# ls
build  demo  files  include  lib  src

运行看看

root@echofree:/opt/Spark3.0_Linux_SDK_v1.1# ./demo

######### llm Demo #########

init SparkChain result:0
######### 同步调用 #########

syncOutput: assistant:Hello

syncOutput: assistant:こんにちは

######### 异步调用 #########
0:assistant:Hello:myContext
2:assistant::myContext
tokens:1 + 5 = 6
0:assistant:こ:myContext
1:assistant:んに:myContext
1:assistant:ちは (:myContext
1:assistant:Konnichi:myContext
2:assistant:wa):myContext
tokens:12 + 10 = 22

很好,配置完成!

 

加点互动

下面就要给他加互动功能了,毕竟大模型不能进行交互聊天,那还要他做什么

修改 demo.cpp 文件,内容如下

记得修改下 API信息哦

#include "../include/sparkchain.h"
#include <iostream>
#include <string>
#include <atomic>
#include <unistd.h>
#include <regex>

#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define RED "\033[31m"
#define RESET "\033[0m"

using namespace SparkChain;
using namespace std;

// async status tag
static atomic_bool finish(false);
// result cache
string final_result = "";

class SparkCallbacks : public LLMCallbacks
{
    void onLLMResult(LLMResult *result, void *usrContext)
    {
        int status = result->getStatus();
        printf(GREEN "%d:%s:%s:%s \n" RESET, status, result->getRole(), result->getContent(), usrContext);
        final_result += string(result->getContent());
        if (status == 2)
        {
            printf(GREEN "tokens:%d + %d = %d\n" RESET, result->getCompletionTokens(), result->getPromptTokens(), result->getTotalTokens());
            finish = true;
        }
    }

    void onLLMEvent(LLMEvent *event, void *usrContext)
    {
        printf(YELLOW "onLLMEventCB\n  eventID:%d eventMsg:%s\n" RESET, event->getEventID(), event->getEventMsg());
    }

    void onLLMError(LLMError *error, void *usrContext)
    {
        printf(RED "onLLMErrorCB\n errCode:%d errMsg:%s \n" RESET, error->getErrCode(), error->getErrMsg());
        finish = true;
    }
};

int initSDK()
{
    // 全局初始化
    SparkChainConfig *config = SparkChainConfig::builder();
    config->appID("appID")        // 你的appid
        ->apiKey("apiKey")        // 你的apikey
        ->apiSecret("apiSecret"); // 你的apisecret
        // ->logLevel(0)
        // ->logPath("./aikit.log");
    int ret = SparkChain::init(config);
    printf(RED "\ninit SparkChain result:%d" RESET,ret);
    return ret;
}

void syncLLMTest()
{
	cout << "\n######### 同步调用 #########" << endl;
	// 配置大模型参数
	LLMConfig *llmConfig = LLMConfig::builder();
	llmConfig->domain("generalv3");
	llmConfig->url("ws(s)://spark-api.xf-yun.com/v3.1/chat");

	Memory* window_memory = Memory::WindowMemory(5);
	LLM *syncllm = LLM::create(llmConfig, window_memory);

	// Memory* token_memory = Memory::TokenMemory(500);
	// LLM *syncllm = LLM::create(llmConfig,token_memory);

	int i = 0;
	//const char* input = "";
	while (1)
	{
		char input[256]; // 定义一个足够大的字符数组来接收用户输入

		printf("请输入问题 (输入 'q' 退出):");
		scanf("%s", input);

		if (strcmp(input, "q") == 0) {
			break; // 如果输入是 'q',则退出循环
		}

		// 同步请求
		LLMSyncOutput *result = syncllm->run(input);
		if (result->getErrCode() != 0)
		{
			printf(RED "\nsyncOutput: %d:%s\n\n" RESET, result->getErrCode(), result->getErrMsg());
			continue;
		}
		else
		{
			printf(GREEN "\nsyncOutput: %s:%s\n" RESET, result->getRole(), result->getContent());
		}

	}
	// 垃圾回收
	if (syncllm != nullptr)
	{
		LLM::destroy(syncllm);
	}
}


void uninitSDK()
{
    // 全局逆初始化
    SparkChain::unInit();
}

int main(int argc, char const *argv[])
{
    cout << "\n######### llm Demo #########" << endl;
    // 全局初始化
    int ret = initSDK();
    if (ret != 0)
    {
        cout << "initSDK failed:" << ret << endl;
        return -1;
    }

    syncLLMTest(); // 同步调用
   

    // 退出
    uninitSDK();

    return 0;
}

如果你仔细观察,会发现少了一部分代码。

星火大模型的接口调用给了两种方式,一种是同步,一种是异步

 

这里我用的是同步,所有文字都输出完,才会打印在终端。

正常的大模型,应该都是异步调用,即慢慢打印出来,这里留给读者自己修改了。

下面看下运行效果

root@echofree:/opt/Spark3.0_Linux_SDK_v1.1# ./demo

######### llm Demo #########

init SparkChain result:0
######### 同步调用 #########
请输入问题 (输入 'q' 退出):徐州天气怎么样

syncOutput: assistant:今天徐州市的天气是多云,气温在3℃到11℃之间,有点冷。东风4-5级,湿度为53%。空气质量良好,PM2.5指数为60。在这样的天气条件下,适宜旅游、钓鱼和户外运动,但要注意保暖。同时,感冒较易发生,请注意保持干净整洁的环境和清新流通的空气。
请输入问题 (输入 'q' 退出):你是什么

syncOutput: assistant:您好,我是科大讯飞研发的认知智能大模型,我的名字叫讯飞星火认知大模型。我可以和人类进行自然交流,解答问题,高效完成各领域认知智能需求。
请输入问题 (输入 'q' 退出):q
root@echofree:/opt/Spark3.0_Linux_SDK_v1.1#

效果还是不错的。

 

整点花活

既然一切都配置ok了,那肯定得进行应用开发了,这里来个小demo

这里是使用 Qt 开发的一个非常质朴的聊天界面,也就是开头所说的项目中正好用到大模型的地方。由于时间紧张,技术能力有限,就直接搬上去了。

具体原理就是使用 Linux的 socket多线程 与界面进行通信。服务器端负责接收客户端的信息并进行回复。

后续

由于技术有限,并且考试月繁忙,等到有空闲时间了,再写个单独的交互界面。

--> 前言发现两个多月没写文章了,不过考试月也没啥好写的。最近大模型这么火,正好有个项目用到,于是便水一篇教程吧。此篇教程为 科大讯飞的星火大模型 部署教程,部署完成后即可与智能助手进行聊天。这里是关于部署到服务器端,如果有其他需求可以查看官方文档。 大模型简介大语言模型 (英语:large language model,LLM) 是一种语言模型,由具有许多参数(通常数十亿个权重或更多)...

前言

最近逛大型同性恋交友社区(GitHub)时偶然发现了一款开源的网易云美化插件(BetterNCM),具体美化效果如下

而且此插件发展已经挺成熟的了,于是便想写篇安装教程。

不过插件已经有了成熟的文档,这里就当推荐了。

这里插一嘴,是否封号有带观察哦,当然也可以等我体验一个月

项目

相关链接

  1. GitHub地址:https://github.com/MicroCBer/BetterNCM
  2. 安装地址:https://microblock.cc/betterncm
  3. 用户文档:https://v2e2npdz15.feishu.cn/docx/UZkSd9d46o4fVOxaPNBcGXSenme

使用须知

BetterNCM是一个由一群热爱网易云音乐的云村村友开发的PC版网易云音乐扩展插件,可以提供非常丰富的自定义功能扩展增强能力。

考虑到工具性质,BetterNCM 将永远是完全开源免费的自由软件,所以如果你是从任何地方发现有任何人在售卖本工具,请立刻要求退款并举报商家!

作为一群爱好者,我们不会也没办法为你因为从其它途径购买本工具造成的损失负责!

如果你也希望为BetterNCM贡献代码,欢迎前来BetterNCM的Github开源仓库

具体步骤

  1. 查看用户文档,了解下具体功能,是否为自己所需,文档地址:https://v2e2npdz15.feishu.cn/docx/UZkSd9d46o4fVOxaPNBcGXSenme
  2. 接着查看文档安装教程,点击安装地址:https://microblock.cc/betterncm
  3. 进入网易云,点击插件图标,下载相关插件,也可以将GitHub上的美化插件移到此插件目录下

主题推荐

GitHub地址:https://github.com/solstice23/refined-now-playing-netease

一个美化网易云音乐播放界面的 BetterNCM 插件

效果如下

ps:此主题为Argon主题作者另一个开源项目

评价

有得就有失,虽然美化后很好看,但是需要牺牲一部分性能,这里推荐有独显的笔记本安装哦。

 

--> 前言最近逛大型同性恋交友社区(GitHub)时偶然发现了一款开源的网易云美化插件(BetterNCM),具体美化效果如下而且此插件发展已经挺成熟的了,于是便想写篇安装教程。不过插件已经有了成熟的文档,这里就当推荐了。这里插一嘴,是否封号有带观察哦,当然也可以等我体验一个月项目相关链接GitHub地址:https://github.com/MicroCBer/BetterNCM安装地址:htt...

前言

最近有不少小伙伴询问我个人主页是如何搭建的,于是便写了这个文章教程,效果如下

[Echo's 个人主页 (liveout.cn)](https://liveout.cn/index/

 

项目地址

https://github.com/Tomotoes/HomePage

 

教程

1. 安装 node.js

首先,node.js 是啥子呢?这里简单解释下

Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。

科普地址:Node.js 教程 | 菜鸟教程 (runoob.com)

ubuntu 安装命令如下

sudo apt-get install -y nodejs

centos 安装命令如下

yum install -y nodejs

查看安装是否成功

node -v
//如果成功
v10.19.0

 

2. 安装 git

git 又是啥子呢?

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

科普地址:Git 教程 | 菜鸟教程 (runoob.com)

ubuntu 安装命令如下

sudo apt-get install git

centos 安装命令如下

yum -y install git-core

查看安装是否成功

git --version
//如果成功
git version 1.8.1.2

 

3. 部署项目

既然相关工具已经下载完成,下面就开始搭建吧!

首先通过 git 拉取项目仓库 (个人建议切换到opt目录)

//切换到opt目录
cd /opt

//拉取仓库
git clone https://github.com/Tomotoes/HomePage.git

拉取完成后进入项目目录

//进入项目目录 HomePage
cd HomePage

//npm 安装 Node.js 模块
npm install
npm run dev

进入目录后需要修改 相关配置,如 config.json

更多详细配置修改参考此文档:https://github.com/Tomotoes/HomePage/blob/master/README.zh_CN.md

修改完相关配置信息后执行以下命令

//生成项目文件到 dist 目录
npm run build

然后,你可以将dist目录部署到你喜欢的服务器托管商。

 

如果想通过菜单访问,可以讲dist文件放到博客根目录下面,菜单链接设置如下

https://域名/dist

这里的dist就是主页文件,你可以自己更改其名字,如index

通过 https://域名/index进行访问

 

结语

此教程可能存在相关错误,如有遇到,可进行留言。

 

--> 前言最近有不少小伙伴询问我个人主页是如何搭建的,于是便写了这个文章教程,效果如下[Echo's 个人主页 (liveout.cn)](https://liveout.cn/index/ 项目地址https://github.com/Tomotoes/HomePage 教程1. 安装 node.js首先,node.js 是啥子呢?这里简单解释下Node.js 是一个...

1. 开源地址

2. ChatGPT是什么

ChatGPT 是一种自然语言生成的聊天机器人模型,由OpenAI开发,它能够根据用户输入的文本内容,自动生成新的文本内容。它的名称来源于它所使用的技术—— GPT-3 架构,即生成式语言模型的第 3 代。

当用户在人机对话中向 ChatGPT 提问时,ChatGPT 可以根据用户的问题自动生成回答内容。比如下图,你让它写一段代码:

ChatGPT 的技术原理是基于深度学习和神经网络模型,通过大量的训练数据,学习人类语言的表达方式和语法规则,从而能够模拟人类语言的生成过程。通过这种方式,ChatGPT 可以较为自然地生成文本内容,并提供人机对话和自动回复等功能。

3. 项目介绍

通过调用ChatGPT的API,将QQ部署成机器人,实现ChaGPT的对话功能。

可以增加、删除管理员,并且重置

4. 项目要求

  • ChartGPT账号
  • QQ号
  • 服务器(安装JDK)
  • go-cqhttp_linux_arm64
  • AliceBot

5. 相关链接

B站视频教程【神仙教程】教你把全能ChatGPT变成QQ机器人_哔哩哔哩_bilibili

ChatGPT注册: 注册页面

短信平台在线接受短信的虚拟号码 - SMS-Activate 

go-cqhttp文档go-cqhttp基础教程文档

6. 项目部署

B站视频教程【神仙教程】教你把全能ChatGPT变成QQ机器人_哔哩哔哩_bilibili

部署

  1. 安装jdk1.8

    sudo apt-get install openjdk-8-jdk
  2. 下载运行go-cq 下载地址:https://docs.go-cqhttp.org/guide/quick_start.html#%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B

  3. 下载到服务器后使用

    tar -zxvf+压缩包(f后面有空格)

    进行解压

  4. 在解压目录下运行

    screen -S gocq
    ./go-cqhttp
  5. 第一次运行会先让你选连接方式,我们选择2:正向Websocket                                                                gocq在解压目录下生成config.yml,这时我们

    Ctrl+C
    nano config.yml //nano可以换成 vim

    拉到最下面找到address: 0.0.0.0:8080,把8080替换成9099,然后Ctrl+X,然后按Y,再回车一下保存

  6. 然后再次运行./go-cqhttp,完成登录后按Ctrl+A+D放到后台运行

  7. 执行jar包 先输入screen -S Alice 创建个会话

  8. 然后使用   

    java -jar -Xmx512m --clientBaseConfig.admin=管理员QQ --clientBaseConfig.robot=机器人QQ --clientBaseConfig.wakeUpWord=唤醒词 --clientBaseConfig.standbyWord=待机词 --clientBaseConfig.promptUpWord=提示词 --clientBaseConfig.robotName=机器人名称 --chatGPT.email=gpt邮箱 --chatGPT.password=gpt密码 --chatGPT.sessionToken=token --server.port=8080

  9. 运行后再使用Ctrl+A+D放到后台运行即可

机器人的所有操作指令(以下指令皆需唤醒机器人后再进行发送才能生效)

  • #reset chat    重置对话
  • #private        将机器人设为私有的,需要权限(默认就是私有)
  • #public         将机器人设为所有人可用
  • add @某人   添加一个拥有权限的使用者
  • del @某人    将某人从使用者列表移除

7. 常遇问题

期间遇到的情况以及解决方法

1. 运行脚本时候编码错误
解决:版本包不对,换一个

2. QQ登录安全环境检查
解决:先在本地下载exe程序,并且终端运行,然后生成的token文件上传到服务器

3.解压alice时候语法报错
解决:账号密码不能带有 ()

4. 最后启动时候报错:Port8080 was already in use

8080端口已经被使用了,换一个端口

--> [admonition]此教程已经失效!!![/admonition]1. 开源地址 GitHubFokersBoolean/AliceBot   GitHubMrs4s/go-cqhttp  2. ChatGPT是什么ChatGPT 是一种自然语言生成的聊天机器人模型,由OpenAI开发,它能够根据用户输入的文本内容,自动生成新的文本内容。它的名称来源于它所使用的技术—— GPT-3 架构...

介绍

个人博客网站简洁主页,觉得不错可以给个star哦

演示网站

https://www.liveout.cn/index/

部署

直接下载文件上传到网站目录,链接定向到目录

 

-->  GitHubPGwind/blog_index  介绍个人博客网站简洁主页,觉得不错可以给个star哦演示网站https://www.liveout.cn/index/部署直接下载文件上传到网站目录,链接定向到目录