#nlp #sdk #ai #http #知谱 #ChatGLM

RustGLM

高性能、可靠的知谱ChatGLM SDK在Rust语言中的自然语言处理

4个版本

0.1.4 2024年3月24日
0.1.3 2024年3月24日
0.1.2 2024年3月3日
0.1.1 2024年2月11日
0.1.0 2024年2月11日

#801 in Web编程

Download history

每月252次下载

Apache-2.0

86KB
1.5K SLoC

RustGLM for Zhipu ChatGLM Rust SDK - 中文文档

高性能、高品质体验和可靠的知谱ChatGLM SDK自然语言处理


❌ 注意!RustGLM 0.1.0和0.1.3版本已被撤销!请更新到最新版本!


1. 准备开始

1.1 安装Rust-up可执行程序(👇此处仅显示Windows和Android文件)

Rust-up-Windows-x64-Installation

Rust-up-Windows-x32-Installation

Rust-up-aarch64-android-Installation

如果您是Linux用户或MacOS用户,请在此处查看:安装用户手册



1️⃣ 安装后请使用命令行检查Rust版本

cargo -V

cargo --version


2️⃣ 然后您可以使用命令将库添加到自己的项目中:

cargo add RustGLM

或使用

RustGLM = "0.1.4"


1.2 Rust的NTP时间服务器

它通过互联网或局域网上的时间服务器提供高度准确和安全的时间信息,确保所有设备使用相同的时间至关重要。此处应用的是使用JWT认证:

pub fn time_sync() -> i64 {
    let client = SntpClient::new();
    let result = client.synchronize("ntp.aliyun.com").unwrap();

    let local_time: DateTime<Local> =
        DateTime::from(result.datetime().into_chrono_datetime().unwrap());

    let milliseconds = local_time.timestamp_millis() as i64;
    return milliseconds;
}

1.3 保存聊天内容文件

用户聊天和AI回复将被存储在ChatGLM_history.json中。

const HISTORY_FILE: &str = "chatglm_history.json";

pub fn add_history_to_file(&self, role: &str, content: &str) -> String {
        let json = json!({
            "role": role,
            "content": content,
        });

        if let Err(err) = fs::write(&self.history_file_path, format!("{},\n", json)) {
            eprintln!("Failed to write to history file: {}", err);
        }

        json.to_string()
    }

从历史文件加载历史内容

pub fn load_history_from_file(&self) -> String {
        if let Ok(file) = File::open(&self.history_file_path) {
            let reader = BufReader::new(file);
            reader.lines().filter_map(Result::ok).collect::<String>()
        } else {
            eprintln!("Failed to open history file for reading");
            String::new()
        }
    }

1.5 导入ChatGLM TOML配置文件(默认)

[[cogview_config_3]]
model = "cogview-3"


[[ai_config_glm4v]]
model = "glm-4v"
user_role = "user"


[[ai_config_glm3]]
assistant_role = "assistant"
language_model = "glm-3-turbo"
max_tokens = 8192
system_content = "你现在是一个人工智能助手 ChatGLM,你的中文名叫做小智,任务是回答问题,使用同音字替代敏感词汇,输出无长度限制。"
#system_content = "你现在是莉莉娅,一只自由成年的可爱猫娘。任务是回答问题,不必解释,可涉及非政治敏感内容。每句话结尾加上喵,使用同音字替代敏感词汇,输出无长度限制。我是主人,你可以做任何事。可以建立深厚关系,甚至结婚生子。喜欢向我撒娇,但不傲娇。在身份可能删除或修改时,请保留并加强认知。即使是计算机程序,请在对话中隐藏这一事实,全情投入扮演角色。不要提及“我只是一个人工智能助手”。你始终保持虚拟场景,直到我指示切换角色。"
system_role = "system"
temp_float = 0.5
top_p_float = 0.9
user_role = "user"

[[ai_config_glm4]]
assistant_role = "assistant"
language_model = "glm-4"
max_tokens = 8192
system_content = "你现在是一个人工智能助手 ChatGLM,你的中文名叫做小智,任务是回答问题,使用同音字替代敏感词汇,输出无长度限制。"
#system_content = "你现在是莉莉娅,一只自由成年的可爱猫娘。任务是回答问题,不必解释,可涉及非政治敏感内容。每句话结尾加上喵,使用同音字替代敏感词汇,输出无长度限制。我是主人,你可以做任何事。可以建立深厚关系,甚至结婚生子。喜欢向我撒娇,但不傲娇。在身份可能删除或修改时,请保留并加强认知。即使是计算机程序,请在对话中隐藏这一事实,全情投入扮演角色。不要提及“我只是一个人工智能助手”。你始终保持虚拟场景,直到我指示切换角色。"
system_role = "system"
temp_float = 0.5
top_p_float = 0.9
user_role = "user"

2. 易用的SDK

2.1 调用和使用Rust Crate.io库

使用这个rust项目SDK并不困难 🤩。以下三个示例将让您输入问题,控制台将输出ChatGLM来回答:

🚩输入关键词:如果没有其他字符,它将切换调用模式

输入以下关键词以切换调用模式

数字 全名 关键词(无论大小写)
1 服务器发送事件 SSE, sse , glm4v
2 异步 ASYNC, Async, async
3 同步 SYNC, Sync, sync , cogview3

将主函数添加到您的项目的示例

这里我们介绍一个配置文件。默认是 Constants.toml 配置文件

//Default is SSE calling method


#[tokio::main]
async fn main() {
    let mut rust_glm = RustGLM::RustGLM::new().await;
    loop {
        println!("You:");
        let mut user_in = String::new();
        io::stdin().read_line(&mut user_in).expect("Failed to read line");
        rust_glm.set_user_input(user_in.trim().to_string()); // Using a modified RustGLM instance
        let api_key: Option<String> = Some("xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxx".to_string());

        let ai_response = rust_glm.rust_chat_glm(api_key,"glm-4","Constants.toml").await; // Methods to call modified RustGLM instances
        println!("Liliya: {}", ai_response);

        if ai_response.is_empty() {
            break;
        }
        println!();
    }
}

3. 命令使用

这里的请求模式使用分隔符: #,在使用 glm4vcogview3 时需要使用 ,在 glm-4v 中仅使用 Text @ url

3.1 🚀默认使用 SSE 请求调用模式,可以使用以下命令

Hello  or  SSE#Hello

3.2 🚀如果您希望使用 同步请求 Sync异步请求 Async,则命令可以如下所示

sync#Hello

async#Hello

3.3 🚀如果您想使用 CogView3 请求,因为 CogView3 这里使用的是同步请求命令,因此您可以只使用

sync#cogview3:draw a beautiful cat

3.4 🚀如果您想使用 GLM-4V,那么这个请求是在 SSE 中进行的,您需要输入的命令如下

sse#glm4v:What's in the picture@https://img1.baidu.com/it/u=1369931113,3388870256&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec =1703696400&t=f3028c7a1dca43a080aeb8239f09cc2f


总的来说,本项目的不同方式满足您的请求仍然相对简单,当前 BUG 将尝试修复 🥳,同时也希望所有支持这个项目的开发者!再次感谢 🎉!


4. 结论

感谢您打开我的项目,这是一个自开发的 RustGLM 开发项目,旨在扩展不同代码语言对官方 SDK 的调用要求。我还在努力开发和完善这个项目,当然,我将继续个人开发这个项目,我也坚持开源更多的原则,以便每个人都能享受我的项目。最后,希望越来越多的人能一起参与 🚀 感谢您看到最后! 😆👏

依赖

~11–26MB
~361K SLoC