1,视频地址
https://www.bilibili.com/video/BV1GJ4m1Y7Aj/
【Tauri】(4):整合Tauri和actix-web做本地大模型应用开发,可以实现session 登陆接口,完成页面展示,进入聊天界面
使用国内代理进行加速
配置rust环境方法
https://rsproxy.cn/
特别注意要配置好:
步骤三:设置 crates.io 镜像, 修改配置 ~/.cargo/config,已支持git协议和sparse协议,>=1.68 版本建议使用 sparse-index,速度更快。
[source.crates-io]
replace-with = 'rsproxy-sparse'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true
2,然后开始编写 http 服务
整合 tauri 代码和 actix-web,入门文档:
https://juejin.cn/post/7342858918161793059
参考文章:
https://blog.moonguard.dev/setting-up-actix-in-tauri
主要就是:
fn main() {
tauri::Builder::default()
.setup(|app| {
let handle = app.handle();
let boxed_handle = Box::new(handle);
thread::spawn(move || {
server::init(*boxed_handle).unwrap();
});
Ok(())
})
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
实现了 server::init
然后增加 controller :
#[post("/api/session")]
pub async fn session_handle() -> actix_web::Result<String> {
let text = "{\"status\":\"Success\", \"message\":\"\", \"data\": {\"auth\": false, \"model\":\"chatglm3\"}}";
println!("{}",text);
Ok(text.to_string())
}
这样就可以登陆成功了:
3,接下来就是实现 chat 聊天接口了
需要返回标准的 openai api 接口了。
4,解决跨域问题
https://docs.rs/actix-cors/latest/actix_cors/
使用 actix-cors 进行跨域处理:
use actix_cors::Cors;
use actix_web::{get, http, web, App, HttpRequest, HttpResponse, HttpServer};
#[get("/index.html")]
async fn index(req: HttpRequest) -> &'static str {
"<p>Hello World!</p>"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
let cors = Cors::default()
.allowed_origin("https://www.rust-lang.org")
.allowed_origin_fn(|origin, _req_head| {
origin.as_bytes().ends_with(b".rust-lang.org")
})
.allowed_methods(vec!["GET", "POST"])
.allowed_headers(vec![http::header::AUTHORIZATION, http::header::ACCEPT])
.allowed_header(http::header::CONTENT_TYPE)
.max_age(3600);
App::new()
.wrap(cors)
.service(index)
})
.bind(("127.0.0.1", 8080))?
.run()
.await;
Ok(())
}