Skip to content

Latest commit

 

History

History
263 lines (185 loc) · 12 KB

File metadata and controls

263 lines (185 loc) · 12 KB

InterPilot

English | 中文

Windows Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) Python PyQt5 FFmpeg OpenAI SiliconFlow

本项目是一个基于 AI 的助手工具,能够从windows的输入输出设备中捕获音频,将音频转为文字后,再调用 LLM(大语言模型) API 给出回答。项目主要包括录音、转写和 AI 回答三个模块,旨在为个人的正当学习、工作、科研提供辅助支持。

部分内测用户反映,本工具可能可以在面试、会议、学习等场景中提供一定的帮助,比如在在线会议软件中作为AI面试工具辅助面试:获取面试官的音频然后得到回答,但是请注意:本工具仅供学习交流使用,不得用于任何不正当用途

经测试,本工具能够借助第三方工具隐藏界面以防止被录屏软件、屏幕共享等功能录制到,但工具本身不具备隐藏界面的功能。是否使用第三方工具与作者无关,风险由用户自行承担。

InterPilot

如果对你有所帮助,可以通过微信扫码打赏,感谢你的支持! 赞助

目录

灵感

来源于YT-Chowww/InterviewCopilot

特性

  • 音频捕获
    使用 LoopbackRecorder 从系统录制音频(支持 loopback 设备),并保存为 WAV 文件。

  • 语音转写
    基于 Whisper 模型在本地进行音频转写,支持多种模型规格(默认使用 base 模型)。

  • AI 辅助回答
    通过调用 LLM API(配置在 config.ini 中)对转写后的文本进行分析,生成回答。支持流式返回并实时更新界面

  • 图形用户界面
    基于 PyQt5 构建的简洁 GUI,支持录音、转写、发送文本至 LLM 等操作,并对 LLM 回复支持 Markdown 渲染

GUI

项目结构

C:.
│   config.ini
│   logo.png
│   main.py
|   main_cmd.py
|   README.md
│   requirements.txt
│
├── output
└── src
    │   audio_capture.py
    │   llm_client.py
    │   transcriber.py
    │   __init__.py
    │
    └── utils
        │   config_loader.py
        │   __init__.py
  • config.ini
    配置文件,包含 API 接口地址、API key、使用的模型、设备索引、默认提示词等参数。

  • logo.png
    应用程序图标(用于 GUI 窗口)。

  • main.py/main_cmd.py
    程序入口,负责启动图形界面和整体工作流程。

  • output/
    存放录音文件。

  • requirements.txt
    列出项目依赖的 Python 包(例如 PyQt5、markdown2、whisper、openai 等)。

  • src/
    存放核心模块:

    • audio_capture.py:音频录制模块。
    • transcriber.py:语音转写模块。
    • llm_client.py:调用 LLM API 的客户端。
    • utils/:包含一些工具类和配置加载模块。

安装与依赖

系统依赖

  • FFmpeg
    本项目依赖 FFmpeg 进行部分音频处理,请确保已正确安装并配置环境变量。
    • 安装方法示例
      • Windows 用户:
        • 使用 Scoop
          scoop install ffmpeg
        • 或下载 Windows 预编译版本(下载链接
        • 将下载目录下的 bin 文件夹(例如 C:\Users\USERNAME\scoop\apps\ffmpeg\7.1.1\bin)添加到系统环境变量 PATH 中。
      • Mac 用户可使用 Homebrew 安装:
        brew install ffmpeg
      • whisper项目提到You may need rust installed as well,所以需要可能安装rust(但不安装好像没事儿,建议先不装,如果transcriber.py不能正常运行再参考Whisper

Python 依赖

建议使用miniconda或者anaconda创建虚拟环境(建议安装 Python 3.10版本):

conda create -n interview python=3.10
conda activate interview

然后使用以下命令安装项目所需依赖:

pip install -r requirements.txt

配置

请根据实际情况修改根目录下的 config.ini 文件,其中包括:

  • API_URL:LLM API 的地址。
  • API_KEY:访问 API 的密钥。
  • MODEL:调用的模型名称(例如 deepseek-ai/DeepSeek-R1-Distill-Qwen-7B,其他模型名称可以访问硅基流动(官网链接)-模型广场查看。
  • SPEAKER_DEVICE_INDEXMIC_DEVICE_INDEX:录音设备的索引,视具体系统配置而定。建议阅读录音设备索引注意事项部分。
  • OUTPUT_DIR:存储录音文件的目录。
  • WHISPER_MODEL_SIZWwhisper模型的大小,可选项为tiny basesmallmediumlargeturbo
  • DEFAULT_PROMPT:是拼接在发送给 LLM 的文本最前端的默认提示词,可根据使用场景调整,例如“你是一个XX方面的专家,你马上获取到的文本来自于XX,请你据此给出合理简洁的回答:”

具体配置说明

API

  • 建议注册硅基流动(官网链接)获取API_KEY,新用户受邀可获取14元额度(邀请码TzKmtDJH),足够用一段时间了
  • 官网左侧菜单栏-API秘钥-新建API秘钥-获取一段形如sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx的长字符串替换config.ini里的API_KEY即可
  • 使用其他支持OpenAI API的服务也可以,只需替换API_URLAPI_KEY即可(还是建议使用siliconflow,工具默认使用的deepseek-ai/DeepSeek-R1-Distill-Qwen-7B模型完全免费,白嫖万岁!)

录音设备索引

  • 默认SPEAKER_DEVICE_INDEX置为了-1,这会自动寻找可用的默认wasapi_loopback设备,一般录制的就是你的目前的扬声器(耳机)听到的声音,但如果出现问题,建议手动运行audio_capture.py查看全部可用设备后,手动指定正确的设备。你也可以通过修改这个参数使得录制的是麦克风输入的声音。
python src/audio_capture.py

使用说明

单独测试模块

项目各核心模块(录音、转写、LLM 客户端)均包含简单的测试代码。你可以分别运行下列文件,检查各功能模块是否正常运行:

  • src/audio_capture.py —— 用于实现音频录制功能(能够打印出系统中的音频设备列表)。
  • src/transcriber.py —— 用于实现音频转写功能(首次运行会自动下载模型)。
  • src/llm_client.py —— 用于实现 LLM 客户端功能(调用 LLM API 并返回回答)。

启动图形界面

运行 main.py 启动完整的面试助手 GUI:

python main.py

在 GUI 中你可以依次进行以下操作:

  • 开始录音:点击“开始录音”按钮,程序将自动生成唯一的录音文件名并开始录制音频。
  • 结束录音:点击“结束录音”按钮结束录音,录音文件保存在 output 目录中。
  • 转写文字:录音结束后(或手动点击),调用转写模块,将录音转为文字并显示在界面上。
  • 发送给 LLM:转写完成后,可以将文字发送至 LLM,生成 AI 回答,并在界面上显示支持 Markdown 格式的回复。
  • 修改转写文字并发送给 LLM

如果你想在终端中运行,可以使用 main_cmd.py

python main_cmd.py

注意事项

  • 录音设备:根据设备不同,可能需要调整 config.ini 中的 SPEAKER_DEVICE_INDEXMIC_DEVICE_INDEX 参数。 默认设置下,因为录制的是扬声器(你听到)的声音,所以在没有声音播放的时候,是不会录制的,所以必须播放一些音频或者视频,才能获取到音频。测试的时候可以放个视频。
  • 环境变量:确保 FFmpeg 已安装并已添加到环境变量 PATH 中,否则可能会影响音频处理。
  • 测试验证:建议先单独测试各模块,确认音频录制、转写和 LLM 回答均正常后再启动 GUI 整体运行。

应对在线会议等软件的屏幕共享功能(如果你不想让别人看到本工具)

使用shalzuth/WindowSharingHider隐藏UI界面————太棒的工具了!又方便又好用!

任务栏中图表的隐藏:

  • 直接使用windows自带的任务栏隐藏功能,或者干脆把任务栏移到第二个显示器
  • 使用一些隐藏工具(可以自己找一下)

使用turbotop可以使得窗口始终置顶————也是很好用的工具

  • 注意一下使用顺序不然可能会出现问题
    • 先使用turbotop使得窗口置顶
    • 再使用WindowSharingHider隐藏UI界面
    • 如果不太就行就换一下顺序多试几下

使用对比

待补充 / TODO

  • 在README中增加详细的使用案例或截图(GUI 操作示例、终端输出示例等)。
  • 增加voice_generate功能(TTS)——已经测试好,待集成
  • 增加麦克风扬声器音频共同识别功能
  • 增加截图、上传LLM功能
  • 任务栏中的图标隐藏功能

贡献

欢迎社区开发者提交 issue 或 pull request,一起完善这个 工具。如果有任何建议或改进意见,请随时联系。

免责声明 / Disclaimer

本项目仅供技术学习与研究交流之用,严禁用于以下用途:

  • 任何形式的求职面试作弊行为
  • 侵犯他人隐私或商业秘密
  • 违反当地法律法规的行为

使用者应对自身行为负全部法律责任,作者不承担任何因滥用本项目导致的直接或间接后果。使用即表示您已阅读并同意本声明。

许可证

本项目采用 Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) 许可证进行开源。
这意味着您可以自由地共享和修改本项目的内容,但仅限于非商业用途