分享一个由rust实现的openai api服务端+Android客户端

这篇具有很好参考价值的文章主要介绍了分享一个由rust实现的openai api服务端+Android客户端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发缘由

  1. 官方网页存在经常中途断开的问题.
  2. 经常使用不同ip登录openai帐号可能会导致封号.
  3. 使用开源项目chatgpt-web搭建过一个网页端,目前已被DNS污染,
  4. 体验GitHub Copilot.
  5. 已经使用了rust语言一段时间,打算用它写个服务端练手.

服务端

技术栈
  1. rust

Rust是一种系统级编程语言,由Mozilla开发。它的设计目标是提供一种安全、并发、实用的编程语言。Rust的语法类似于C++,但它具有内存安全和线程安全的特性,这使得它在编写高性能系统级代码时非常有用。Rust还有一个强大的包管理器Cargo,可以帮助开发者管理依赖项和构建项目。

  1. tokio

Tokio是一个基于Rust语言的异步运行时库,它提供了一种高效的方式来编写异步I/O应用程序。Tokio的核心是一个事件循环,它可以处理大量的并发连接,而不会消耗太多的系统资源。Tokio还提供了一组异步I/O原语,包括TCP、UDP、Unix域套接字、定时器等,这些原语可以帮助开发者编写高性能的网络应用程序。Tokio还提供了一些工具和宏,可以帮助开发者编写简洁、易于维护的异步代码。

  1. axum

Axum是一个基于Rust语言的Web框架,它使用了异步I/O和Tokio运行时来提供高性能的Web服务。Axum的设计目标是提供一种简单、易于使用的Web框架,同时保持高性能和可扩展性。Axum的核心是一个基于路由的处理器,它可以将HTTP请求路由到不同的处理器函数中。Axum还提供了一些中间件,可以用于处理请求和响应,例如身份验证、日志记录、错误处理等。Axum还提供了一些工具和宏,可以帮助开发者编写简洁、易于维护的Web应用程序。Axum的依赖管理使用Cargo,这使得开发者可以轻松地管理依赖项和构建项目。

  1. clap

Clap是一个基于Rust语言的命令行参数解析库,它提供了一种简单、易于使用的方式来解析命令行参数。Clap的设计目标是提供一种灵活、可定制的命令行解析器,同时保持高性能和易于使用。Clap支持各种类型的命令行参数,包括标志、选项、位置参数等。Clap还支持子命令,可以帮助开发者构建复杂的命令行工具。Clap的API文档非常详细,而且提供了大量的示例代码,这使得开发者可以快速上手并使用Clap来解析命令行参数。Clap的依赖管理使用Cargo,这使得开发者可以轻松地管理依赖项和构建项目。

  1. async-openai

async-openai是一个基于Rust语言的异步OpenAI API客户端库,它使用异步I/O和Tokio运行时来提供高性能的OpenAI API服务。async-openai的设计目标是提供一种简单、易于使用的方式来访问OpenAI API,同时保持高性能和可扩展性。async-openai支持各种类型的OpenAI API,包括文本生成、语言翻译、语言理解等。async-openai还提供了一些工具和宏,可以帮助开发者编写简洁、易于维护的异步代码。async-openai的依赖管理使用Cargo,这使得开发者可以轻松地管理依赖项和构建项目。

  1. anyhow

anyhow是一个基于Rust语言的错误处理库,它提供了一种简单、易于使用的方式来处理错误。anyhow的设计目标是提供一种灵活、可定制的错误处理机制,同时保持高性能和易于使用。anyhow的核心是一个Error类型,它可以包含任何类型的错误信息。anyhow还提供了一些工具和宏,可以帮助开发者编写简洁、易于维护的错误处理代码。anyhow的依赖管理使用Cargo,这使得开发者可以轻松地管理依赖项和构建项目。

  1. serde

serde是一个基于Rust语言的序列化和反序列化库,它提供了一种简单、易于使用的方式来将数据结构转换为字节流或从字节流中解析数据结构。serde的设计目标是提供一种灵活、可定制的序列化和反序列化机制,同时保持高性能和易于使用。serde支持各种类型的数据结构,包括基本类型、元组、数组、结构体、枚举等。serde还支持各种格式的数据序列化和反序列化,包括JSON、YAML、TOML、Bincode等。serde的API文档非常详细,而且提供了大量的示例代码,这使得开发者可以快速上手并使用serde来序列化和反序列化数据。serde的依赖管理使用Cargo,这使得开发者可以轻松地管理依赖项和构建项目。

  1. tracing

tracing是一个基于Rust语言的分布式应用程序跟踪系统,它提供了一种简单、易于使用的方式来跟踪应用程序中的事件和操作。tracing的设计目标是提供一种灵活、可定制的跟踪机制,同时保持高性能和易于使用。tracing支持各种类型的跟踪事件,包括日志记录、性能分析、错误处理等。tracing还提供了一些工具和宏,可以帮助开发者编写简洁、易于维护的跟踪代码。tracing的依赖管理使用Cargo,这使得开发者可以轻松地管理依赖项和构建项目。在Rust生态系统中,tracing是一个非常流行的跟踪库,被广泛用于构建高性能、可扩展的分布式应用程序。

服务端功能
  1. 隐私安全
    配合客户端,不记录任何设备信息,未保存ip信息,不记录任何聊天记录,高度隐私.

  2. 支持服务端指定api_key.

  3. 支持客户端自定义api_key.服务端只做转发功能.

  4. 自定义端口.

部分代码由GitHub Copilot生成

用法
./openai_api_server -a "your_key" -p "your_port"

客户端

技术栈
  1. okhttp
  2. room
  3. jtokkit
    用于token数计算
  4. lottie
    动画展示
  5. openai-client
    用于本地模式

部分代码由GitHub Copilot生成,大部分图片由Stable Diffusion WebUI生成.

客户端功能
  1. 自定义api_key.
  2. 本地模式(使用自己api_key,从本地发出请求,不使用服务器转发)
  3. 隐私安全.
    聊天记录存本地,可删除. 不收集任何隐私信息.
  4. 自定义最大token数.
  5. 自定义内容记录长度.
  6. 支持prompts
客户端截图
分享一个由rust实现的openai api服务端+Android客户端,rust,android,开发语言分享一个由rust实现的openai api服务端+Android客户端,rust,android,开发语言
分享一个由rust实现的openai api服务端+Android客户端,rust,android,开发语言分享一个由rust实现的openai api服务端+Android客户端,rust,android,开发语言

服务端项目地址:https://github.com/tangxuesong6/kyf_server
客户端项目地址:https://github.com/tangxuesong6/kyf_client文章来源地址https://www.toymoban.com/news/detail-542130.html

到了这里,关于分享一个由rust实现的openai api服务端+Android客户端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包