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(())
}