Kiki:基于Alfred的AI工作流引擎,实现零切换的智能文本处理
1. 项目概述Kiki一个为效率而生的AI工作流引擎如果你和我一样每天都在与文字打交道无论是写代码、写文档、回复邮件还是整理笔记那你一定体会过那种在多个工具和窗口间反复切换的割裂感。想快速润色一段文字得打开网页版ChatGPT想翻译一个句子又得切到另一个标签页想把一段会议录音转成文字还得去找专门的工具。这种碎片化的操作不仅打断心流更浪费了大量宝贵时间。Kiki的出现就是为了终结这种低效。它不是一个独立的软件而是一个深度集成在macOS效率神器Alfred中的工作流Workflow。你可以把它理解为一个“AI指令中枢”通过几个简单的快捷键或关键词就能在你当前正在工作的任何应用中直接调用OpenAI、Anthropic、OpenRouter乃至本地大模型的能力完成文本处理、对话、翻译、总结、转录等一系列任务并将结果无缝粘贴回原处。它的核心设计哲学是“零上下文切换”和“高度可定制”。想象一下这样的场景你在写一封英文邮件对某个表达不确定只需选中那句话按下快捷键选择“语法检查”一秒后修正后的文本就替换了原内容。或者你在阅读一篇长文选中一段触发“总结”预设一个简洁的摘要便出现在段落下方。再或者你突然有个灵感直接呼出Alfred输入框输入kc 用比喻的方式解释一下量子纠缠一个生动的解释就以对话框形式弹了出来。这一切都无需离开你手头的应用。我使用Kiki已经超过半年它彻底改变了我与AI协作的方式。从最初简单的文本润色到如今复杂的多轮对话、基于Markdown的笔记协作甚至自动化脚本的调用Kiki已经成了我数字工作流中不可或缺的“副驾驶”。接下来我将为你彻底拆解这个强大的工具从基础配置到高阶玩法分享我一路踩坑积累下来的实战经验。2. 核心设计思路为何Kiki与众不同市面上的AI工具层出不穷但大多以独立应用或网页服务的形式存在。Kiki选择以Alfred工作流为载体是一个极其聪明的设计这背后有几层关键的考量。2.1 基于Alfred的深度系统集成优势Alfred是macOS上老牌且强大的启动器和效率工具拥有庞大的用户群体和成熟的生态系统。Kiki基于此构建带来了几个先天优势全局呼出无处不在无论你正在使用哪个应用浏览器、IDE、笔记软件、邮件客户端都可以通过统一的Alfred热键通常是Option Space瞬间呼出命令栏调用Kiki。这种“系统级”的访问能力是任何独立应用难以比拟的。利用现有生态Kiki直接复用Alfred的UI组件如下拉列表、对话框、剪贴板管理、文件操作等功能无需自己再造轮子保证了交互的稳定性和一致性。用户也无需学习一套全新的交互逻辑。触发方式多样化除了关键词Kiki充分利用了Alfred支持的多种触发方式如热键Hotkey、代码片段Snippet、通用动作Universal Action、外部触发器External Trigger。这为不同场景下的自动化提供了丰富的入口。2.2 “在线”与“离线”模式的优雅统一这是Kiki设计上最精妙的一点。它没有将自己绑定在某个特定的AI服务商上而是抽象出了一套统一的接口。在线模式只需配置OpenAI、Anthropic或OpenRouter的API密钥即可使用对应的云端模型如GPT-4、Claude 3。离线模式如果你希望数据完全本地化或者想试用最新的开源模型可以留空在线API密钥转而配置一个自定义API端点Custom API Endpoint。只要这个端点兼容OpenAI的API格式这是目前绝大多数本地模型服务器的标准如Ollama、LM Studio、text-generation-webuiKiki就能无缝调用。混合模式你甚至可以同时配置在线和离线服务。Kiki通过一个简单的命名约定来区分它们在配置模型名时为本地模型加上custom_前缀例如custom_llama3在线模型则直接使用服务商提供的模型ID如gpt-4-turbo。在预设或对话中你可以自由指定使用哪个模型Kiki会自动将请求路由到正确的端点。这种设计赋予了用户极大的灵活性和未来兼容性。当有新的模型或API服务出现时只要它提供兼容OpenAI的接口就能立即被Kiki所用。2.3 上下文管理的智能与克制与许多聊天客户端不同Kiki对上下文即对话历史的管理非常“克制”。它默认设计为处理单次对话或短期连续对话。每次新对话未特殊声明时都会重置上下文。这听起来似乎是个限制但实际上是为了追求极致的轻量和快速响应。实操心得理解“重置上下文”的利与弊默认重置上下文意味着每个请求都是独立的这避免了无关历史对话对当前任务的干扰也减少了不必要的token消耗能省钱。但对于需要多轮深入探讨的复杂任务这就成了障碍。别担心Kiki提供了完整的解决方案1) 在发起对话时按住Ctrl键可以保留现有上下文继续聊天2) 通过“Kiki选项”菜单可以复制当前上下文文件并随时恢复3) Markdown Chat功能天生就是为了管理长对话而设计的。你需要根据任务类型灵活选择这三种模式。2.4 预设Preset系统将常用操作固化这是Kiki提升效率的核心。你可以将任何重复性的AI指令——比如“翻译成中文”、“改写成更正式的语气”、“提取关键点”——保存为一个“预设”。每个预设都是一个独立的JSON配置文件你可以为其指定触发指令在文本预设菜单中显示的名称。系统角色System Role给AI的固定指令定义其行为模式如“你是一位专业的技术文档翻译”。模型这个预设固定使用哪个模型可覆盖全局默认设置。高级参数温度Temperature、最大生成长度Max Tokens等。一旦创建调用这个预设就变成了一个选择菜单项的动作。这相当于为你最常用的AI能力创建了专属的“快捷键”将原本需要手动输入提示词Prompt的过程简化到极致。3. 从零开始详细配置与避坑指南拿到Kiki工作流文件.alfredworkflow后双击即可导入Alfred。首次使用必须进行配置。这个过程看似简单但几个关键设置决定了后续使用的顺畅度。3.1 基础配置API、模型与数据目录打开Alfred偏好设置找到Workflows标签页点击Kiki工作流然后点击右下角的[Configure...]按钮。第一步配置API连接在线服务在OpenAI API Token、OpenRouter API Token、Anthropic API Token中至少填写一个你有权限且余额充足的API密钥。如果你只用其中一种只填一个即可。本地服务如果你要使用本地模型如通过Ollama留空所有在线API Token字段然后在API Endpoint URL中填入你的本地服务器地址。格式通常为http://127.0.0.1:11434/v1/chat/completionsOllama默认。请务必确认你的本地模型服务器已启动并正在运行。混合模式如果所有API Token字段和Endpoint URL都填写了Kiki会优先尝试在线服务。要指定使用本地模型必须在模型名称前加custom_前缀。第二步设置默认模型在Default Model字段中输入你希望默认使用的模型ID。例如OpenAI:gpt-4o-miniAnthropic:claude-3-haiku-20240307OpenRouter:openai/gpt-4-turbo本地Ollama:custom_llama3注意前缀 请务必确认你输入的模型ID在你的API账户中是可用的否则请求会失败。第三步选择数据目录Kiki Data Directory用于存放对话记录、历史文件和你的自定义预设。建议选择一个固定的、易于访问的文件夹例如~/Documents/KikiData。点击“浏览”按钮选择或创建文件夹。第四步安装必要依赖Kiki依赖jq这个命令行工具来处理JSON数据。如果系统没有配置界面会提示。打开终端Terminal输入以下命令安装brew install jq如果你没有安装Homebrew需要先安装它访问 brew.sh 获取安装命令。完成以上四步点击Save基础配置就完成了。你可以立即在Alfred中输入kc hello来测试是否连通。3.2 高级配置解析让Kiki更贴合你的习惯基础配置能让Kiki跑起来但以下几个选项能极大提升体验Alternative Model System Role设置一个备选模型和系统角色。在聊天时按住Cmd键发送就会使用这个备选设置。这非常适合A/B测试不同模型的效果或者快速切换到一个具有特定“人格”的AI比如“严厉的代码审查员”和“富有创造力的作家”。Path to copy context files to设置一个路径用于存放你主动保存的对话上下文文件。当你在进行一个重要的长对话时可以通过“Kiki选项”菜单快速将当前上下文备份到这里方便日后恢复。我通常设为~/Documents/KikiData/SavedChats。MD Chat Pattern ID这是Markdown Chat功能的关键。Kiki需要一种方式来识别你笔记中的“元数据头”。默认是三个连字符---。但有些Markdown编辑器比如我用的Bear会把连续的---自动转换成一条横线。如果你的编辑器也这样可以改成***或!--和--之类的标记。这个标记用于包裹你的聊天设置参数。避坑指南模型配置的常见问题请求失败提示“模型不存在”99%的原因是模型ID拼写错误或者你的API账户没有该模型的访问权限。去对应服务商的后台确认模型ID和权限。本地模型连接超时首先确认你的本地模型服务器如Ollama是否正在运行ollama serve。其次检查API Endpoint URL的端口号是否正确。最后尝试在浏览器中访问http://127.0.0.1:11434/v1/models以Ollama为例看是否能返回JSON格式的模型列表以此验证端点是否可用。混合模式下本地模型请求仍发往在线API请检查你是否在模型名称前正确添加了custom_前缀。在预设文件里配置模型时同样需要这个前缀。3.3 预设文件夹的创建与激活Kiki的强大之处在于自定义预设但预设功能默认是关闭的。你需要手动激活它在Kiki配置中勾选Create Presets Folder选项。进行一次任意聊天比如kc test。打开你设置的Kiki数据目录你会发现多了一个名为presets_的文件夹注意下划线。关键一步将这个文件夹重命名为presets去掉下划线。只有这样Kiki才会在启动时加载其中的预设文件。现在打开presets文件夹你会看到三个JSON文件text.json文本预设models.jsonMarkdown Chat专用模型列表systems.jsonMarkdown Chat专用系统角色列表。我们主要编辑text.json。4. 核心功能实战从基础对话到文本魔法配置妥当后让我们进入实战环节。Kiki的功能可以大致分为三个层次基础交互、文本处理、以及高阶的Markdown对话。4.1 基础聊天关键词与修饰键的妙用kc(Kiki Chat)核心聊天关键词。输入kc加空格直接开始输入你的问题。回复会以Alfred对话框形式呈现。ko(Kiki Options)管理菜单。可以在这里复制最新回复、复制/打开上下文文件、清空日志、打开数据目录等。按住Cmd键选择选项会直接在Finder中显示对应文件非常方便。kt(Kiki Text)文本预设菜单。列出所有你在text.json中定义的自定义预设。修饰键Modifier Keys是提升操作效率的灵魂。在Alfred输入栏中输入kc或kt后不要按回车而是按住以下键再按回车会有不同效果修饰键在kc(聊天) 时的作用在kt(文本预设) 或选中文本操作时的作用无/Shift对话框回复重置上下文使用主模型。对话框显示结果重置上下文使用主模型。Cmd对话框回复重置上下文使用备选模型。对话框显示结果重置上下文使用备选模型。Ctrl对话框回复保留上下文使用主模型。对话框显示结果保留上下文使用主模型。Option直接粘贴到最前端的应用重置上下文使用主模型。直接粘贴结果到原选中文本位置重置上下文使用主模型。Fn(聊天中无效)在选中文本下方插入结果重置上下文使用主模型。Fn Shift对话框回复重置上下文使用预设模型列表中的任一模型。对话框显示结果重置上下文使用预设模型列表中的任一模型。实操技巧修饰键的组合使用我最常用的组合是Option直接粘贴和Ctrl保留上下文。例如我需要AI帮我连续修改一段代码我会1) 选中代码按热键呼出通用动作选“发送到Kiki聊天”按住Option回车直接粘贴修改建议2) 我回复“还有另一种写法吗”再次按住Ctrl回车保留之前的对话历史让AI知道我们在讨论同一段代码。这个流程完全不需要鼠标也无需在应用间切换。4.2 文本处理通用动作与代码片段这是Kiki的杀手级应用场景——对任何应用中选中的文本进行即时处理。方法一通用动作 (Universal Actions)在任何应用中用鼠标或键盘选中一段文本。按下你为Alfred通用动作设置的热键我的是Option Cmd \。在弹出的Alfred面板中输入“kiki”你会看到一系列选项“发送到Kiki聊天”、“总结”、“翻译”、“修复语法”等。选择所需操作Kiki会处理选中的文本并默认将结果粘贴回原处相当于自动按了Option键。方法二代码片段 (Snippets)对于更频繁的操作通用动作仍需要两步热键选择。代码片段可以一步到位。在Kiki工作流编辑器中找到橙色图标的“Snippet Trigger”对象。你可以为不同的预设绑定不同的快捷键。例如我设置CtrlShiftG为“语法检查”CtrlShiftT为“翻译成中文”。使用时在任意编辑器选中文本直接按下CtrlShiftG选中的文本会被自动发送到对应的Kiki预设进行处理结果瞬间替换原文本。这个过程流畅到几乎无感。注意事项代码片段的兼容性Kiki的代码片段依赖于模拟“向上选择至行首”的快捷键默认是CtrlShiftA或OptionShift↑来获取文本。但并非所有应用都响应这些快捷键。比如一些Java开发的IDE或特定浏览器输入框可能不兼容。建议在主要使用的应用中先测试。如果无效可以在Kiki配置的Snippet Hotkey Simulation选项中切换另一种模拟方式试试。4.3 创建你的第一个自定义文本预设让我们动手创建一个实用的预设将选中的文本翻译成中文并保持专业语气。导航到你的Kiki数据目录下的presets文件夹用文本编辑器打开text.json。文件内部是一个JSON数组。你会看到两个默认示例。我们在最后一个花括号}后加一个逗号,然后在新行开始添加我们的预设。{ id: translate_zh_pro, theTitle: 翻译成专业中文, thePrompt: 将以下文本翻译成中文要求译文准确、专业、流畅符合中文书面语习惯\n\n[[txt]] }保存文件。现在在Alfred中输入kt你应该能看到“翻译成专业中文”这个新选项。选中一段英文通过通用动作或代码片段调用它试试效果。参数进阶你还可以在预设中固定模型和系统角色让这个预设的行为更精确。这需要更复杂的JSON结构。例如我们希望这个翻译预设固定使用GPT-4并给它一个翻译专家的角色{ id: translate_zh_gpt4, theTitle: GPT-4专业翻译, thePrompt: 你是一位专业的技术文档翻译。请将以下文本精准、流畅地翻译成中文特别注意技术术语的统一和句子结构的自然\n\n[[txt]], theModel: gpt-4-turbo, theSystem: 你是一位资深中英翻译专家擅长科技、学术类文本。 }注意theModel和theSystem是可选参数。如果留空则使用Kiki全局配置或调用时修饰键指定的模型。5. 高阶玩法Markdown Chat与自动化集成当你熟练使用基础功能后Markdown Chat和外部触发器将为你打开新世界的大门实现真正的“沉浸式”AI协作。5.1 Markdown Chat在笔记中与AI深度对话这个功能允许你在任何Markdown编辑器如Bear、Typora、VS Code中以书写笔记的形式与AI进行结构化、可保存的长对话。工作原理Kiki通过AppleScript“告诉”你的编辑器“选中全部文本 - 复制”。然后Kiki分析复制的文本根据特定规则Pattern识别出你的最新提问和对话设置将提问发送给AI最后再将AI的回答“粘贴”回你的编辑器插入到合适的位置。如何设置一个Markdown Chat笔记在你的Markdown编辑器新建一个笔记。在笔记开头用你配置的Pattern ID默认是---包裹一个“设置块”。在这个块里你可以用特定代码定义本次对话的参数。--- M_gpt4: S_assistant: C_10: T_0.7: ---上面这行意思是使用models.json中ID为gpt4的模型使用systems.json中ID为assistant的系统角色保留最近10轮对话作为上下文温度设为0.7。 3. 在设置块下方直接写下你的问题例如“帮我规划一个关于机器学习入门的7天学习计划。” 4. 将光标放在笔记中任何位置触发你为Markdown Chat设置的热键或外部触发器。触发后你的笔记会变成这样--- M_gpt4: S_assistant: C_10: T_0.7: --- ### USER 帮我规划一个关于机器学习入门的7天学习计划。 ### ASSISTANT 以下是为期七天的机器学习入门学习计划注重概念理解与实践结合 **第一天基础与环境搭建** - **上午**了解机器学习基本概念监督/无监督学习、常见任务。推荐吴恩达《机器学习》课程前两讲。 - **下午**搭建Python环境Anaconda安装Jupyter Notebook, NumPy, Pandas, Matplotlib。尝试运行第一个打印“Hello, ML”的Notebook。 ...现在你可以在### ASSISTANT部分下方继续写下你的下一个问题例如“第二天提到的线性回归能用Python写一个最简单的示例吗”然后再次触发Markdown Chat。Kiki会识别到### USER这个标记知道这是上一轮对话的延续从而将新旧内容一起作为上下文发送。核心技巧Markdown Chat的三种触发模式Kiki识别你的请求是有优先级的继续对话查找---后的### USER标记。如果找到则将其后直到下一个---或文件末尾的内容作为新问题并保留之前的全部上下文。从分隔线开始如果没有### USER则查找最近的一对---分隔线。将这对分隔线之间的内容作为新问题发送并保留此分隔线之前的上下文。全新对话如果以上都没有则将整个文件内容作为问题发送并重置上下文使用设置块中的参数。 理解这个优先级你可以灵活地在一个笔记文件中管理多个独立的对话线程。5.2 为Markdown Chat配置模型和系统角色Markdown Chat的模型和系统角色列表是独立管理的存放在presets/models.json和presets/systems.json中。这样做的目的是让你可以快速在笔记头部切换而不用去改Kiki的主配置。编辑models.json:{ gpt4: gpt-4-turbo, claude_smart: claude-3-5-sonnet-20241022, local_fast: custom_llama3:8b }编辑systems.json:{ assistant: You are a helpful assistant., critic: You are a harsh critic. Point out every flaw, assumption, and potential improvement in the users text. Be direct and concise., creative: You are a creative writer. Respond with imaginative, vivid, and engaging language. }在笔记头部你就可以通过M_gpt4和S_critic这样的组合来快速定义一个“使用GPT-4的严厉批评家”角色。5.3 自动化集成外部触发器的强大力量这是为“自动化狂人”准备的功能。Kiki暴露了一系列外部触发器External Triggers允许你通过Alfred的URL Scheme或AppleScript从其他应用或工作流直接调用Kiki的功能。最强大的触发器kikiActions这个触发器可以替代几乎所有手动操作。它接受一串用逗号分隔的参数来定义一次完整的操作。格式为kikiActions, [模式], [输入源], [修饰键代码], [预设ID]举个例子我想创建一个Alfred工作流一键翻译Chrome浏览器中选中的文本在Alfred中新建一个空白工作流。添加一个“Trigger” - “External Trigger”将其配置为接收参数{query}。添加一个“Actions” - “Run Script”节点语言选bash脚本如下# 获取选中的文本这里需要借助其他工具如pbpaste或AppleScript # 假设我们已经通过其他方式将选中文本放入了变量 SELECTED_TEXT # 然后我们调用Kiki的“翻译成专业中文”预设并直接粘贴结果 open alfred://runtrigger/com.ognistik.kiki/kikiActions?argumentdirect,copy,4,translate_zh_prodirect: 直接运行指定预设不弹出菜单。copy: 输入源是当前选中的文本。4: 修饰键代码对应Option直接粘贴。代码表可在Kiki工作流中查看。translate_zh_pro: 我们之前创建的预设ID。为这个新工作流设置一个全局热键比如CtrlCmdT。现在在Chrome里选中英文按下CtrlCmdT翻译好的中文就会直接替换原文本。你还可以将这个触发器集成到Raycast、Keyboard Maestro、Hazel等任何能执行URL或AppleScript的自动化工具中。6. 常见问题与故障排查实录即使设计精良在实际使用中仍会遇到各种问题。以下是我遇到并解决过的典型情况。6.1 请求失败与网络问题症状Alfred弹出错误提示如“Network error”、“Failed to get response”。排查步骤检查API密钥确认密钥正确且未过期在线服务账户有余额。检查模型ID确认配置的模型ID完全正确包括大小写和前缀custom_。测试端点连通性对于本地模型在终端用curl命令测试API端点是否响应。例如curl http://127.0.0.1:11434/v1/chat/completions -H Content-Type: application/json -d {model: llama3, messages: [{role: user, content: Hello}]}。查看完整日志在Kiki配置中开启更详细的日志输出然后查看Alfred的DebuggerCmd Option .里面通常会有更具体的错误信息比如API返回的429频率限制、401密钥错误等状态码。6.2 AppleScript兼容性与Markdown Chat故障症状Markdown Chat触发后无反应或选中的是错误文本或粘贴格式混乱。排查步骤确认编辑器支持并非所有编辑器都很好地支持AppleScript。Bear、Typora、VS Code需安装相关扩展支持较好。一些国产编辑器或Electron应用可能不支持。检查“复制为纯文本/富文本”这是最常见的问题。Kiki期望编辑器“复制”操作输出的是纯文本或Markdown文本。但很多编辑器如某些版本的Word、Pages默认复制的是富文本RTF这会导致Kiki无法解析。在编辑器的设置中寻找“复制时包含格式”或类似的选项并关闭它。简化笔记格式如果笔记开头有复杂的YAML Front Matter、图片、表格可能会干扰Kiki对模式Pattern的识别。尝试在一个只有纯文本和---分隔符的简单笔记中测试。使用“手动选择”模式如果自动化选择总出问题可以改用Markdown Chat的“热键触发”方式。先手动用CmdA全选笔记内容再按你设置的Markdown Chat热键。这绕过了AppleScript的自动选择步骤。6.3 预设不生效或JSON错误症状自定义的预设没有出现在kt列表中或者调用时报错。排查步骤检查文件夹名称确认预设文件夹名是presets而不是presets_。检查JSON语法一个多余的逗号、缺少的引号、或错误的括号都会导致整个文件无法加载。可以使用在线JSON校验工具如 jsonlint.com 粘贴你的text.json内容进行检查。利用Kiki自检Kiki有一个隐藏技能你可以让它帮你检查JSON。在Alfred输入框输入kc然后粘贴你的JSON内容让它“检查这段JSON格式是否正确并修复”。它通常能给出准确的修改建议。重启Alfred修改预设文件后有时需要重启Alfred或使用reload命令才能重新加载工作流配置。6.4 性能优化与成本控制上下文过长导致响应慢或费用高在Kiki配置中合理设置Context Messages Limit。对于日常快速问答设为5-10轮即可。对于需要长上下文的分析任务再通过Ctrl键或Markdown Chat来管理。本地模型响应慢尝试使用量化版本如llama3:8b-q4_K_M或更小的模型。在Ollama中可以使用ollama pull来获取优化后的版本。混合模型策略将快速、便宜的小模型如gpt-4o-mini,claude-3-haiku用于简单任务预设翻译、润色将强大但昂贵的大模型如gpt-4-turbo,claude-3-5-sonnet用于复杂分析和创作预设。在预设文件中通过theModel参数固定下来。经过这番从原理到实战从配置到排坑的详细梳理你应该已经能感受到Kiki作为一个生产力杠杆的威力。它不是一个开箱即用的傻瓜工具而是一个需要你稍加调教、但一旦驯服就能极大释放潜力的强大框架。我的建议是从一两个最常用的预设开始比如“翻译”和“总结”将其融入你的日常工作流。当你习惯了这种“即选即用”的AI交互方式后自然会探索更多可能性最终构建出完全属于你个人的、无可替代的AI辅助系统。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2577542.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!