AI-Typing-Assistant:借助大模型的打字助手,本地运行,安全,可定制
今天介绍的 AI-Typing-Assistant 非常好用,推荐体验一下。
https://github.com/patrickloeber/ai-typing-assistant
作者Patrick Loeber,一位著名的博客作者和软件工程师,拥有超过25万名YouTube订阅者。
作者的博客和视频教程非常详细,推荐看下。
https://patloeber.com/typing-assistant-llm/
https://www.youtube.com/watch?v=IUTFrexghsQ&t=122s
作者提到,他的灵感源自Andrej Karpathy的一条推文,该推文强调了GPT在修正轻微拼写错误上的出色表现。
在作者的博客中,他详细说明了如何结合使用Ollama、Mistral 7B以及Python来创建一个本地部署的打字辅助工具。这个工具的主要机制是通过监控快捷键来进行文本修正,核心优势在于应用了大型语言模型(LLM)以纠正输入错误。
整个脚本不到100行代码,可以跨平台工作,只需适当调整快捷键即可。作者提供了完整代码、演示和逐步的编码教程。
运行前需要打开相关权限。
通过按下F9键,可以对当前行的文字进行拼写、大小写和标点符号的修改。而使用F10键,则允许对选中的文本执行拼写、大小写和标点符号的调整。
这个打字助手的好处:
本地运行:保证了处理数据的安全性,避免了敏感信息的潜在外泄。
跨平台兼容:代码可以在不同操作系统上运行,仅需适当调整快捷键设置。
可定制性:用户可以根据需要自定义热键和模型配置,增加新的功能如文本生成或摘要。
在处理多种语言环境时,错误校正需借助于各自的模型或对现有模型进行专门训练,以便适配不同的语言构造和语法规范。
在中文环境中,建议采用Mistral、Qwen和Yi等模型进行处理。
对于那些经常需要进行大量文本输入的用户,打字助手可以显著提高他们的工作效率。
代码:
import time
from string import Template
import httpx
from pynput import keyboard
from pynput.keyboard import Key, Controller
import pyperclip
controller = Controller()
OLLAMA_ENDPOINT = "http://localhost:11434/api/generate"
OLLAMA_CONFIG = {
"model": "mistral:7b-instruct-v0.2-q4_K_S",
"keep_alive": "5m",
"stream": False,
}
PROMPT_TEMPLATE = Template(
"""Fix all typos and casing and punctuation in this text, but preserve all new line characters:
$text
Return only the corrected text, don't include a preamble.
"""
)
def fix_text(text):
prompt = PROMPT_TEMPLATE.substitute(text=text)
response = httpx.post(
OLLAMA_ENDPOINT,
json={"prompt": prompt, **OLLAMA_CONFIG},
headers={"Content-Type": "application/json"},
timeout=10,
)
if response.status_code != 200:
print("Error", response.status_code)
return None
return response.json()["response"].strip()
def fix_current_line():
# macOS short cut to select current line: Cmd+Shift+Left
controller.press(Key.cmd)
controller.press(Key.shift)
controller.press(Key.left)
controller.release(Key.cmd)
controller.release(Key.shift)
controller.release(Key.left)
fix_selection()
def fix_selection():
# 1. Copy selection to clipboard
with controller.pressed(Key.cmd):
controller.tap("c")
# 2. Get the clipboard string
time.sleep(0.1)
text = pyperclip.paste()
# 3. Fix string
if not text:
return
fixed_text = fix_text(text)
if not fixed_text:
return
# 4. Paste the fixed string to the clipboard
pyperclip.copy(fixed_text)
time.sleep(0.1)
# 5. Paste the clipboard and replace the selected text
with controller.pressed(Key.cmd):
controller.tap("v")
def on_f9():
fix_current_line()
def on_f10():
fix_selection()
with keyboard.GlobalHotKeys({"<101>": on_f9, "<109>": on_f10}) as h:
h.join()
作者采用了以下两个库进行开发:
https://pynput.readthedocs.io/en/latest/
https://github.com/asweigart/pyperclip
基于作者的代码,我选择了Ollama列表中适合的模型进行了更换,并将timeout从10秒调整至30秒。这是因为本地模型的处理效率受到电脑配置的影响,若处理较长的文本,适当增加timeout的时长会更为合适。
如果使用目的仅限于打字辅助,那么PROMPT_TEMPLATE = Template中的文本无需修改,它适用于中文环境。
此外,根据个人的具体需求,调整PROMPT_TEMPLATE = Template的内容非常方便。
根据上述修改,它现在可以充当总结助手的角色。快捷键也能够按需调整。
你需要将Python和.py文件的路径修改为与你的电脑相对应的路径。
对于希望简化流程的用户,利用OpenAI Translator客户端配合Ollama使用本地模型,也能够实现自定义翻译、解释、总结等任务。
比较OpenAI Translator和AI-Typing-Assistant,使用相同的模型翻译,后者的翻译速度更快。
精选历史文章,请看这里:
Mac 用户的 RAG 交互:通过 Chat-with-MLX 与数据对话
Mistral Large 亮相,仅次于 GPT-4 ,介绍+API 使用
实测在Mac上使用Ollama与AI对话的过程 - 模型选择、安装、集成使用记,从Mixtral8x7b到Yi-34B-Chat
LM Studio-简化安装和使用开源大模型 | OpenAI API 文字转语音本地运行程序分享