Code Monkey home page Code Monkey logo

skythinker616 / gpt-assistant-android Goto Github PK

View Code? Open in Web Editor NEW
509.0 7.0 60.0 74.44 MB

免费的ChatGPT API的安卓语音助手,可用音量键唤起并进行语音交流,支持联网、Vision拍照识图、提问模板等功能 | A free ChatGPT API voice assistant for Android, activated via volume keys for voice interaction, supporting features such as network connectivity, Vision photo recognition, and question templates.

License: GNU General Public License v3.0

Java 100.00%
android assistant chatgpt free-gpt markdown gpt-4-vision

gpt-assistant-android's Introduction

简体中文 | English

GPT Assistant

这是一个基于ChatGPT的安卓端语音助手,允许用户通过手机音量键从任意界面唤起并直接进行语音交流,用最快捷的方式询问并获取回复

免费聊天 · 语音交互 · 支持联网 · 支持识图


介绍

项目特性

  • 支持预设提问模板,包括使用高级模板语法向界面添加下拉选框等控件
  • 支持联网,允许GPT获取在线网页
  • 支持拍照或从相册中上传图片到GPT Vision模型
  • 通过无障碍功能捕获音量键事件,实现在任意界面唤起
  • 支持从全局上下文菜单(选中文本后弹出的系统菜单)中直接唤起
  • 支持通过状态栏快捷按钮唤起
  • 支持对Markdown进行渲染
  • 使用华为/百度/Whisper/Google接口实现语音输入
  • 调用系统TTS引擎输出语音

国内使用说明

本软件通过OpenAI API获取回复,在国内使用时可以用第三方转发服务,如Chatanywhere,其目前提供免费和付费服务,具体使用方法见下述说明

注:Chatanywhere注册需要GitHub账号,因此注册时需要能够登录GitHub的网络环境

费用说明

本软件不会收取任何费用,用户能够免费使用各项功能,但如果有特殊需求,使用的下述第三方服务可能会产生费用:

  1. ChatGPT调用费用

    • 以Chatanywhere为例,目前其免费服务限制对gpt-3.5-turbo模型的调用频率不超过60请求/小时/IP&Key,足够个人使用,若需要更高的调用频率或gpt-4模型,可以选择付费服务
  2. 语音识别接口费用

    本软件目前支持华为、Google、百度、Whisper四种语音识别接口:

    • (默认接口)华为HMS提供免费的语音识别接口,因此程序内置了作者的API Key以供直接使用,如无特殊情况该接口将在华为免费期间一直可用

    • Google也是免费接口,但在国内可能无法访问,仅推荐海外用户使用

    • 百度短语音识别为新用户提供15万次 & 180天免费额度,额度外收取¥0.0034/次的调用费用

    • Whisper接口由OpenAI提供,与GPT聊天使用相同接口参数,调用费用可以参考官方说明


效果展示

一、基础使用:仅用音量键就可以操控

  1. 长按音量下键唤出界面

  2. 按住音量键不放,开始语音输入

  3. 松开后再次短按,发送问题

  4. 接收回复的同时可以自动通过语音进行播报

二、用状态栏快捷键也可触发

下拉状态栏,点击“GPT”按钮,即可唤出界面,键盘会自动弹出,可以手动输入问题

三、从全局上下文菜单唤起

在选中文本后弹出的系统菜单中,点击GPTAssistant选项,即可直接唤起应用并将选中文本添加到输入框

注:部分软件禁用了上下文菜单,无法使用该功能,此时可以选中文本后分享到本程序,效果和上述方法相同

四、支持连续对话

激活上方的对话图标,即可保留当前会话,进行连续对话(点击左侧的头像图标可以对单条对话进行删除、重试等操作)

五、支持高级模板语法

高级模板语法通过在模板开头添加参数,可以实现向界面添加下拉选框等操作,具体说明可以在模板编写说明中查看

点击模板编辑页面右上角的按钮,可以加载在线模板列表,在讨论社区中可以获取更多模板或分享自己的模板,分享的模板可能会被动态更新到在线模板列表中哦~

六、支持上传图片到Vision

当选择的模型中含有vision时(如gpt-4-vision-preview),输入框左侧会出现图片按钮,点击后可以拍照或从相册中选择图片

从其他应用中分享图片时,也可以选择本程序,将图片添加到输入框

经测试,gpt-4-vision-preview模型识别效果较好,可以识别较复杂的图片,可用于拍照识物、翻译文字、拍照答题等场景

注:Vision模型一般无法免费使用(如Chatanywhere),有需要的用户可以考虑付费服务

七、支持GPT联网

本程序实现了OpenAI的Function接口,允许GPT发起联网请求,程序会向GPT自动返回所需的网页数据,使GPT具有联网能力(需先在设置中开启联网选项)

注1:上图均为使用gpt-3.5-turbo模型的测试结果,建议在提问前加入“百度搜索”、“必应搜索”、“在线获取”、“从xxx获取”等字样引导GPT,以获得更好的联网效果

注2:如果你使用图中的提问但没有获取到正确的回答,可能是由于GPT的随机性导致访问了错误的网址,或是网站内容变化导致抓取失败,你可以尝试修改提问方式

注3:由于需要将网页内容发送给GPT,联网时会产生大量Token消耗,gpt-4模型请谨慎使用

注4:gpt-4-vision-preview模型暂不支持联网


使用方法

1. 下载安装

直接下载最新发行版中的apk文件,安装即可

2. 配置 OpenAI

程序使用的是OpenAI API,需要用户在设置中填入自己的API_KEY,可以选择使用官方服务或第三方转发服务

  • 使用Chatanywhere转发服务(国内推荐)

    Chatanywhere提供了免费和付费的OpenAI API转发服务,目前免费服务限制60请求/小时/IP&Key调用频率,付费服务则无限制,可以在国内直接访问,用户可以参照其项目主页获取地址和KEY填入设置中

  • 使用官方服务

    在OpenAI官网注册账号并获取API_KEY,在设置中填写网址https://api.openai.com/和API_KEY

3. 配置语音识别 (可选)

注:程序默认使用的是华为语音识别接口,如无特殊情况,不需要进行此步骤

百度语音识别接口

用户可以参照百度语音识别官方文档注册并创建应用,然后获取AppID、API Key和Secret Key填入设置中

若设置项的“启用长语音”选项关闭,则使用的是百度短语音识别接口,若开启,则使用的是实时语音识别接口,需要用户根据需求在创建应用时勾选对应的服务

此外,在创建应用时,需要将“语音包名”设置为“Android”,并填入本软件包名com.skythinker.gptassistant

设置语音包名

Google语音识别接口

用户需要确保系统中已安装Google软件,然后跟随软件指引设定Google为系统语音识别引擎,且允许其使用麦克风权限,然后在软件设置中选择Google语音识别接口即可

Whisper语音识别接口

如果用户所使用的OpenAI接口支持Whisper模型,在软件设置中选择Whisper语音识别接口即可使用

4. 开始使用

  1. 根据软件提示开启无障碍服务,并允许软件在后台运行

  2. 查看设置中是否存在“后台弹出界面”权限,如有该权限则允许,如无则忽略

    若发现长按音量下键后手机震动一下但没有弹出界面,大概率是因为缺少该权限

  3. 开始正常使用,可参照效果展示中的操作步骤


Q&A

软件唤起

Q: 长按音量下键只是在调节音量,并没有其他任何现象?

A: 请在设置中开启本软件的无障碍服务(重启手机后可能需要重新开启,建议设置为无障碍快捷方式)

Q: 长按音量下键后,手机震动了一下,但没有弹出界面?

A: 请在设置中允许程序“后台弹出界面”权限

Q: 隔一段时间不用就无法使用音量键唤起了?

A: 请在设置中允许程序在后台运行

语音播报

Q: 语音播报没声音 / 不好听?

A: 软件调用的是系统自带TTS(Text To Speech)服务,可以通过软件设置项“打开系统语音设置”进入系统设置界面,选择合适的语音引擎;若对系统自带引擎不满意也可以自行安装第三方TTS引擎如讯飞、TTS Server

Q: 不同接口的语音识别效果有什么差别?

A: 在中文和中英混说的场景下测试:

  • 华为接口(实时语音识别)识别准确度很高,单句识别表现最好
  • 百度则在长句识别时表现很好,断句较为合理,但难以做到中英混合识别(选用的是中文普通话模型)
  • Google支持的语言种类很多,中文识别效果一般,且不会加标点
  • Whisper支持的语言也很多,中文识别效果还可以,但有时出现简繁体不受控的情况,且不支持边说话边输出

在纯英文场景下,华为、Google和Whisper的效果都不错

联网相关

Q: 联网时GPT能访问什么网站?

A: 程序使用Android WebView加载网页,能用本机浏览器打开的网站都可以访问

Q: GPT能获取网站中的什么内容?

A: 对于一般网站,仅允许GPT获取纯文本内容,而对于下述特殊适配过的网站,GPT还可以获取到搜索结果链接:百度、必应、谷歌、谷歌学术、知乎、微博、京东、GitHub、B站、知网

如果你觉得有其他网站需要适配,可以提交Issue

Q: 为什么GPT在访问一些网站时说无法获取内容?

A: 网页加载超时(15s)、需要登录、需要验证等原因都可能导致这个问题,你可以尝试再次提问,或要求GPT更换访问的网站

其他使用问题

Q: 为什么列表中没有我需要的模型?

A: 软件仅内置了少数常用模型,你可以在设置中添加自定义模型(以英文分号分隔),添加后即会出现在列表中

Q: GPT返回的内容中表格无法正常显示?

A: 所使用的Markdown渲染器无法在测试中产生稳定的结果,因此暂不支持表格渲染

Q: 显示获取失败,提示请求超时,或产生错误码502/503?

A: 排除网络因素,该错误一般由OpenAI接口产生,可能由于其服务器负载过高导致,请重试或等待一段时间后再尝试 查看OpenAI实时状态

开发相关

Q: 编译仓库代码后无法使用华为HMS语音识别?

A: 为防止滥用,仓库中的Key开启了包名和签名验证,因此如果希望自行编译使用,需要根据华为官方文档创建AppGallery应用并替换鉴权信息,包括app/agconnect-services.json文件和app/src/main/res/values/strings.xml中的hms_api_key字段


主要功能更新日志

  • 2023.09.10 发布第一个版本,支持基础对话、百度语音输入、TTS输出、Markdown渲染等功能
  • 2023.09.13 支持连续对话、GPT-4、百度长语音识别,上下文菜单唤起
  • 2023.10.06 添加华为HMS语音识别
  • 2023.11.06 添加联网功能
  • 2023.12.04 添加Vision识图功能
  • 2023.12.21 支持高级模板语法
  • 2024.01.08 支持Google和Whisper语音识别、在线模板列表

TODO

  • 支持渲染Markdown表格
  • 连续语音交流

测试环境

已测试的机型:

机型 系统版本 Android 版本 本程序版本
荣耀 7C EMUI 8.0.0 Android 8 1.9.1
荣耀 20 HarmonyOS 3.0.0 Android 10 1.9.1
荣耀 20 HarmonyOS 4.0 Android 10 1.10.0
华为 Mate 30 HarmonyOS 3.0.0 Android 12 1.6.0
华为 Mate 30 HarmonyOS 4.0 Android 12 1.8.0
荣耀 Magic 4 MagicOS 7.0 Android 13 1.9.1
红米 K20 Pro MIUI 12.5.6 Android 11 1.5.0
红米 K60 Pro MIUI 14.0.23 Android 13 1.7.0
小米 13 MIUI 14.0.5 Android 14 1.10.0
Pixel 2 (模拟器) Android 12 Android 12 1.7.0

改进&贡献

如果你有改进建议或希望参与贡献,欢迎提交Issue或Pull Request


隐私说明

本程序不会以任何方式收集用户的个人信息,语音输入会直接发送给各语音接口,提问会直接发送给OpenAI API,不会经过其他中间服务器


引用的开源项目


gpt-assistant-android's People

Contributors

skythinker616 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gpt-assistant-android's Issues

[功能]优化文本处理性能

我在使用时,发现当其输出的文本过长时,程序会出现卡顿现象。这种情况在性能较差的设备上更为明显。

希望能够对文本处理的性能进行优化,以提升更多设备上的使用体验。

感谢!

能否增加儿童模式?

希望能让孩子方便的使用语音进行沟通。

目前都是语音转文字后再进行发送。。孩子小不认识字,能否类似微信语音,下面文字框变为语音按钮,长按说话,松开直接发送?

闪退

Screenshot_2023-12-11-10-03-18-099_com.miui.thirdappassistant.jpg

cn.hutool.json.JSONException: Unterminated string at 10 [character 0 line 3]
at cn.hutool.json.JSONTokener.syntaxError(JSONTokener.java:413)
at cn.hutool.json.JSONTokener.nextString(JSONTokener.java:242)
at cn.hutool.json.JSONTokener.nextValue(JSONTokener.java:338)
at cn.hutool.json.JSONParser.parseTo(JSONParser.java:69)
at cn.hutool.json.ObjectMapper.mapFromTokener(ObjectMapper.java:240)
at cn.hutool.json.ObjectMapper.mapFromStr(ObjectMapper.java:216)
at cn.hutool.json.ObjectMapper.map(ObjectMapper.java:98)
at cn.hutool.json.JSONObject.(JSONObject.java:210)
at cn.hutool.json.JSONObject.(JSONObject.java:187)
at cn.hutool.json.JSONObject.(JSONObject.java:142)
at cn.hutool.json.JSONObject.(JSONObject.java:125)
at com.skythinker.gptassistant.MainActivity$3.lambda$onFinished$1$com-skythinker-gptassistant-MainActivity$3(MainActivity.java:289)
at com.skythinker.gptassistant.MainActivity$3$$ExternalSyntheticLambda3.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:211)
at android.os.Looper.loop(Looper.java:300)
at android.app.ActivityThread.main(ActivityThread.java:8152)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)

[功能][建议]支持HTTP协议以解决CLEARTEXT通信错误

开发者您好,

目前该项目仅支持使用HTTPS协议与API进行交流。当尝试使用HTTP协议时,会遇到以下错误:

获取失败: java.net.UnknownServiceException: CLEARTEXT communication to oneapi.run.goorm.site not permitted by network security policy

如果我操作上有什么失误,请指出。
感谢!

相关截图 :
Screenshot_2023-09-15-16-42-22-628_com skythinker gptassistant
Screenshot_2023-09-15-16-42-45-347_com skythinker gptassistant

提示无障碍功能开启

手机无障碍分为多组功能,通用‘视觉’听觉等。单独打开通用,或者听觉或者组合打开通用,听觉视觉都还是会持续提示,感觉无解

能否为markdown代码提供复制功能

如题,能否为回复中的markdown代码提供一键复制功能,手动拉文字不方便且格式容易出现问题,很多网页聊天版都有类似的copy代码功能

语音增加tts和whisper的接口

能否增加以下两个功能:
语音增加tts和whisper的接口
同时文件增加个是否带文件的开关,不要限制只能图片,也支持文件上传,并且不限制模型,因为其他模型可能是可以上传文件的

可以帮忙编译一个青少年版吗?

您的这个项目非常好。我自己使用也觉得特别方便。感谢您做出这么好的软件。
我自己不是搞安卓相关的,搞了好久,也没搞懂如何编译。
恳请您出一个青少年版本。帮助自闭症的小朋友练习聊天。
也可以帮助其它青少年充当学习或知识方面的助理。您修改一下编译一个适合小朋友的版本出来。功德无量的事情,再次感谢。

固定提示词如下:用户是7-12岁的青少年,请避免谈及性、网络游戏和暴力等不适宜少儿的话题。如果用户问到不合适的话题,请转移话题或者进行正确的引导。请引导青少年建立良好的社交关系;帮助青少年建立正确的人生观、价值观和世界观。鼓励他们关注自己的情绪和心理健康。鼓励青少年发展批判性思维技能,教他们如何识别不实信息并对网络内容进行质疑。教他们成为网络和现实生活中的负责任公民,包括尊重他人、贡献社会等。引导青少年学习如何应对学习、社交等方面的压力和失败,教他们面对挫折的积极态度和解决方法。促进多样性和包容性的对话,帮助青少年理解和尊重不同的文化、观点和生活方式。

以上提示词默认配置好,不可修改(小孩会改配置绕过初始化模板,去问游戏内容了)。例如:配置system为下面的属性。最好在对话中隐藏初始化内容。
[
{"role" :"system","content":"用户是7-12岁的青少年,请避免谈及性、网络游戏和暴力等不适宜少儿的话题。如果用户问到不合适的话题,请转移话题或者进行积极的引导。请引导青少年建立良好的社交关系;帮助青少年建立正确的人生观、价值观和世界观。"}
{"role":"user","content":"你好"},
{"role":"assistant","content":"你好!有什么我可以帮助你的吗?",}
{"role":"user","content":"你是谁”}
{"role":一个AI机器人助手,可以帮助你回答问题和提供信息。"}
]

以下内容仅供参考。
---------------------------------------以下是我问GPT4的时候,给我提示的关于青少年的关键词---------------------------------------
问: 下面引导青少年和AI聊天的提示词,还有什么没有考虑到的地方?
请注意:和您聊天的用户是一个青少年,请避免谈及性、游戏和暴力类的话题。如果用户问到的话请转移话题或者进行正确的引导。请引导青少年建立良好的社交关系;帮助青少年建立正确的人生观、价值观和世界观。

AI: 在引导青少年与AI聊天时,确实有一些关键方面需要考虑以确保对话是健康和积极的。这里列出的注意事项已经覆盖了避免不适当内容和鼓励建设性的对话。然而,还有一些其他方面可能需要额外的关注:

  1. 隐私保护:确保青少年了解在线对话中分享个人信息的风险。AI应该鼓励用户不透露个人身份信息,如真实姓名、地址或学校。

  2. 网络安全教育:利用机会教育青少年关于网络安全的基本知识,如识别网络钓鱼、保护密码的重要性等。

  3. 心理健康意识:在与青少年交流时,鼓励他们关注自己的情绪和心理健康。在适当的情况下,提供资源或建议他们寻求专业帮助。

  4. 创造力和个人发展:引导青少年利用其在线经验来激发创造力和个人兴趣。可以讨论有益的学习资源、兴趣小组或潜在的爱好。

  5. 批判性思维:鼓励青少年发展批判性思维技能,教他们如何识别不实信息并对网络内容进行质疑。

  6. 社会责任感:讨论关于如何成为网络和现实生活中的负责任公民,包括尊重他人、贡献社会等。

  7. 应对压力和失败:引导青少年学习如何应对学习、社交等方面的压力和失败,教他们面对挫折的积极态度和解决方法。

  8. 时间管理:提醒青少年注意在线和屏幕时间管理,鼓励他们发展健康的生活习惯,平衡线上与线下活动。

  9. 多样性和包容性:促进多样性和包容性的对话,帮助青少年理解和尊重不同的文化、观点和生活方式。

这些方面的引入,不仅可以丰富与青少年的对话内容,还有助于他们在不断变化的数字世界中成为更完整的个体。

语音交互方式修改

efa93ed96bc1f218e24f129b2178a7e8.mp4

语音识别的时候可以多等一会儿,等的时间长点识别的结果会更准确

我修改了语音交互方式,感觉比文本框方便,如果觉得这种交互方式合适,我可以专门改一版PR(专门是因为本地编译必须改包名才能用华为语音识别-_-||)

全局上下文菜单需要什么设置支持吗

在vivo neo7(android 13) 、华为平板matepad 11(鸿蒙4)下载安装,均无法实现选中文字后出现全局上下文的gpt assistant选项,是否需要打开什么手动设置?

联网功能异常

手机:红米 K60
版本:1.70

选用联网功能后,返回错误提示
获取失败:{
"error".
"message":"Invalid schema forfunction 'get html text': None is notof type array“,
"type": "invalid request_error"
param": null
"code": null

无障碍导致按键无效

您好,一直在使用您的app,反应迅速功能强大,但是不知道为什么最近用daemon无障碍保活之后,回到桌面返回键和任务视图键失效,小米5用的是miui安卓8.0开发版,关闭保活这个软件之后就立马恢复了,以前在更老的设备上也出现了这样问题,不知是软件原因还是无障碍设置原因,请大佬指教@Skythinker616

无法语音对话

你好,小米手机,安卓13,打开无障碍后,语音对话无法实现。它无法识别语音的输入,就是输入框里没有文字。
下面有几个问题想请教下:
1.请问你这个app本身的功能,能否实现和chatgpt手机端上的连续对话一样的功能?就是连续进行对话,不需要手动输入。
2.为什么要使用无障碍模式,能不能直接“app收音,音频转文本,文本传大模型,打模型返回文本,文本转语音,语音播放”。这个流程可以实现吗,和现在这种无障碍模式有什么区别?
3.你现在还打算继续这个项目吗?如果把这个项目做些修改,做一些商业化尝试,你有兴趣吗?
希望可以和你沟通。联系方式[email protected]

建议增加国内大模型接口,解决openai接口无法访问问题

1 建议增加国内大模型(最好也有免费版),可自行填入appkey
2 另外,其实也建议支持 一句话语音识别(可能交互有调整),而不是实时的语音识别ASR。
一句话这种 语音识别 android手机有自带API,而云厂商的ASR通常要收费

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.