yibie
2025 年9 月 13 日 15:45
1
Provide a simpler and more user-friendly GPTel conversation interface.
Superchat.el
简介
Superchat.el 是一个独立的 Emacs AI 聊天客户端,它从 org-supertag 项目的 chat-view 模块演化而来。与原始版本不同,Superchat 去除了所有 org-supertag 特有的依赖,使其成为一个完全独立的包。
主要特性包括:
保留了完整的命令系统
新增了将文件作为上下文添加到对话的功能
支持与各种大型语言模型(LLM)进行对话
使用 GPL-3 协议开源
安装与配置
依赖要求
安装步骤
将 superchat.el 文件放置在您的 Emacs 加载路径中
在您的 Emacs 配置文件(通常是 ~/.emacs.d/init.el)中添加以下代码:
(require 'superchat)
基本配置
您可以通过以下自定义选项来配置 Superchat:
;; 设置使用的 AI 模型(如果为 nil,则使用 gptel 的默认模型)
(setq superchat-model "gpt-4")
;; 设置数据存储目录
(setq superchat-data-directory "~/.emacs.d/superchat/")
;; 设置会话保存目录
(setq superchat-save-directory "~/.emacs.d/superchat/chat-notes/")
;; 设置文件选择的默认目录
(setq superchat-default-directories '("~/Documents" "~/Projects"))
快速开始
使用 M-x superchat 启动 Superchat
在提示符后输入您的问题
按 RET 或 C-c C-c 发送消息
等待 AI 助手回复
基本对话示例
User: 你好,你能帮我做什么?
Assistant: 我是一个 AI 助手,可以帮助您回答问题、分析代码、提供建议等。
核心功能详解
基本对话
Superchat 允许您与各种大型语言模型进行自然语言对话。
命令系统
Superchat 提供了一个强大的命令系统,允许您定义和使用自定义提示词:
在输入提示符后,您可以使用自动补全功能来查看和选择命令:
输入 / 字符
继续输入命令的首字母,此时如果你有用 company 或 corfu 插件,从弹出的列表中选择命令。
如果你没有 company 或 corfu,可以直接按下 M-TAB(或您的 Emacs 环境中的补全键)触发自动补全,从弹出的列表中选择命令。
例如,要使用 /create-question 命令,您可以输入 /c 然后按 M-TAB,系统会显示所有以 ‘c’ 开头的可用命令供您选择。
文件上下文支持
Superchat 可以将文件内容作为上下文添加到对话中:
在输入提示符后按 # 键
选择要添加的文件
文件内容将作为上下文提供给 AI
您也可以手动输入文件路径,格式为 # /path/to/file。
当设置了 superchat-default-directories 时,文件选择将限制在指定的目录中,使您能够更轻松地从预定义位置选择文件。
高级用法
自定义命令
您可以使用 /define 命令创建自定义提示词:
/define explain-code "请解释以下代码的作用:$input"
在自定义提示词中,您可以使用以下变量:
$input:用户的输入内容
$lang:设置的语言(默认为 English)
上下文管理
键绑定
RET 或 C-c C-c:发送输入
#:智能添加文件路径到上下文
C-c C-h:显示命令列表
C-c C-s:保存当前会话
配置选项
以下是 Superchat 的主要自定义选项:
superchat-buffer-name:聊天缓冲区的名称(默认为 “Superchat ”)
superchat-model:使用的 AI 模型(如果为 nil,则使用 gptel 的默认模型)
superchat-data-directory:数据存储目录
superchat-save-directory:会话保存目录
superchat-default-directories:文件选择的默认目录列表
superchat-general-answer-prompt:通用回答提示词模板
故障排除
常见问题
无法连接到 AI 服务 :请检查您的 gptel 配置是否正确,包括 API 密钥和端点设置。
文件上下文未正确添加 :确保文件路径正确且文件可读。您可以查看消息缓冲区中的诊断信息来排查问题。
命令系统使用问题 :使用 /commands 命令查看所有可用命令及其用法。
调试建议
检查 gptel 的配置是否正确
查看 *Messages* 缓冲区中的诊断信息
确保所有依赖包都已正确安装和加载
许可证
Superchat.el 采用 GPL-3 协议开源。
8 个赞
yibie
2025 年9 月 24 日 10:22
3
版本升级到 0.2
新增记忆系统
可以根据对话总结用户的画像习惯,任务,目标等等
可以在对话中首先检索有无相关的记忆,以形成对话的连续感
目前记忆的召回还有改进的地方,但这个框架已经可以跑了。
这个记忆系统没有使用任何 embedding 的技术,以纯 elisp 实现。
新增依赖 org-ql。
yibie
2025 年9 月 25 日 15:42
4
版本升级到 0.2.1
继续更新记忆机制,现在可以
很好地召回之前记录下来的记忆
可以很好地自动化总结对话 seesion
基于使用次数的记忆遗忘算法
yibie
2025 年9 月 29 日 09:35
5
更新 0.2.2
现在 superchat 的大模型配置,将完全继承自 gptel。
用户不必自己另行设置,因此删除了容易让人产生误会的 superchat-model 自定义项。
yibie
2025 年10 月 10 日 03:55
7
superchat 现在支持 gptel tools——
这里的天气信息来自 openweather 的 api。
;; 工具定义(示例:天气查询工具)
(defun my/ow-fetch-json (location unit)
(require 'url)
(require 'json)
(let ((api-key "API-KEY")
(units (if (and unit (string-match-p "\\(f\\|F\\)" unit))
"imperial"
"metric")))
(when (or (null api-key) (string= api-key ""))
(error "OpenWeather API key 未设置"))
(let* ((urlstr (format "https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=%s"
(url-hexify-string location) api-key units))
(buf (url-retrieve-synchronously urlstr t t 10)))
(unless buf
(error "HTTP 请求失败"))
(with-current-buffer buf
(goto-char (point-min))
(unless (search-forward "\n\n" nil t)
(kill-buffer buf)
(error "响应格式不对"))
(let ((data (json-parse-buffer :object-type 'alist
:array-type 'list
:null-object nil
:false-object nil)))
(kill-buffer buf)
data)))))
(defun my/ow-tool (location unit)
"gptel 用的天气查询工具:返回 JSON 字符串。"
(let ((data (my/ow-fetch-json location unit)))
(json-encode data)))
;; 注册工具到 gptel
(setq gptel-tools
(list
(gptel-make-tool
:name "get_weather"
:function (lambda (location unit)
(my/ow-tool location unit))
:description "获取某个城市当前天气,返回 JSON 数据"
:args (list '(:name "location" :type "string"
:description "例如 “Shanghai, CN” 或 “London, UK”")
'(:name "unit" :type "string"
:description "温度单位,可为 celsius 或 fahrenheit"
:optional t)))))
1 个赞
yibie
2025 年10 月 13 日 08:50
8
superchat 升级到 0.4:新增 workflow 功能
工作流就像把多轮对话录成“脚本”。一次指令即可完成搜索、分析、保存等步骤,再也不用手动重复。
聊天里直接调用:输入 >workflow-name 主题 即可运行同名 .workflow 文件,自动复用你在 gptel 中已经启用的工具与 MCP 服务器。
按需组合步骤:可以继续使用 #文件路径、 @model 、/write-file 等语法,把文件、模型切换、结果保存串联起来。
一次配置,长期使用:把工作流文件放在 ~/.emacs.d/superchat/workflow/(或 superchat-data-directory/workflow/),想用随时调用。
简单线性执行:每一行非空内容就是一个步骤,按顺序逐行执行。目前暂不支持 n8n 那样的分支/条件,请使用直线流程。
试试看:
新建 ~/.emacs.d/superchat/workflow/ai-news-summary.workflow,写入以下内容。
在 superchat 中输入 >ai-news-summary AI技术(或任何关键词)。
工作流会自动检索新闻、生成摘要,并把 Markdown 报告写入你指定的文件。
# Workflow: AI技术新闻摘要
# Description: 每周技术新闻摘要
/web-search 搜索关于 "$input" 相关的新闻
@qwen3-coder:30b-a3b-q8_0 分析上面(3 个角度:商业,技术,社会)搜索到的新闻信息,生成一份简洁的中文的新闻摘要
将分析结果保存到 #/Users/chenyibin/Documents/news-summary.md
我使用 >ai-news-summary Emacs 然后得到的执行结果:
# News Summary
## Emacs News
- **eldoc-mouse**: Updates from eldoc-mouse, display document on a popup for mouse hover.
- **inhibit-mouse.el**: Deactivate mouse input in Emacs (Alternative to disable-mouse) by James Cherti.
- **Mechanical Keyboards**: Thoughts on Mechanical Keyboards and the ZSA Moonlander (Reddit).
- **Links**: From reddit.com/r/emacs, r/orgmode, r/spacemacs, Mastodon #emacs.
2 个赞
yibie
2025 年10 月 19 日 03:16
9
Andrej Karpathy 昨天说遗忘是智能的特性,而非 bug。我回头望了一眼自己设计的 memory 机制(就是基于遗忘的),哈哈哈哈!
版本升级到 0.2.1
继续更新记忆机制,现在可以
很好地召回之前记录下来的记忆
可以很好地自动化总结对话 seesion
基于使用次数的记忆遗忘算法
yibie
2025 年11 月 2 日 15:13
10
哈哈,karthink 觉得 superchat 看上去很棒!
以及,superchat 现在正式列入 GPTel 的 Alternatives。
yibie
2025 年11 月 3 日 02:03
12
哎呀,不是什么大佬,都是 Emacser。嗯呐,我是珠海的~