查看原文
其他

AI-Typing-Assistant:借助大模型的打字助手,本地运行,安全,可定制

思辨view kate人不错 2024-05-19

今天介绍的 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中的文本无需修改,它适用于中文环境。

在日常使用时,无论是发送中文还是英文消息,只需按F9或F10键,打字助手就能迅速完成拼写纠正、大小写调整和标点修正任务。

此外,根据个人的具体需求,调整PROMPT_TEMPLATE = Template的内容非常方便。

根据上述修改,它现在可以充当总结助手的角色。快捷键也能够按需调整。

我为其设置了1个快捷指令,使得下一次使用时更加便捷。

你需要将Python和.py文件的路径修改为与你的电脑相对应的路径。

对于希望简化流程的用户,利用OpenAI Translator客户端配合Ollama使用本地模型,也能够实现自定义翻译、解释、总结等任务。

比较OpenAI Translator和AI-Typing-Assistant,使用相同的模型翻译,后者的翻译速度更快。

AI-Typing-Assistant通过全局输入框内的快捷键激活,由LLM生成的内容会直接替换掉原始文本。
OpenAI Translator通常需要通过快捷键激活或选中文本后运行,其生成的内容,除了写作翻译任务外,通常不会替换原始文本。
两个应用都表现出色。
随着模型性能的持续提升和对多语言的更好支持,这类辅助工具预计将在提升工作效率和改善用户体验方面扮演更加重要的角色。

精选历史文章,请看这里:

Mac 用户的 RAG 交互:通过 Chat-with-MLX 与数据对话

Mistral Large 亮相,仅次于 GPT-4 ,介绍+API 使用

实测在Mac上使用Ollama与AI对话的过程 - 模型选择、安装、集成使用记,从Mixtral8x7b到Yi-34B-Chat

LM Studio-简化安装和使用开源大模型 | OpenAI API 文字转语音本地运行程序分享


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存