一个桌面应用,让 AI 帮你处理所有 GitHub Issues

Autoresearch 桌面版是一个基于 Tauri v2 + React 的跨平台桌面应用,为 autoresearch 命令行工具提供了完整的图形化操作界面。它让你可以通过直观的 UI 管理 GitHub Issues、配置 AI Agent、监控自动化运行过程、查看历史记录,把原来需要手动敲命令的整个流程,变成点几下鼠标就能搞定的事。

下载:https://github.com/smallnest/autoresearch/releases/tag/v0.1.0

初始化项目

https://github.com/smallnest/wxeditor 为例。
我已把wxeditor项目git clone 本地 ~/workspace/mdeditor 文件夹。

打开应用后,首先进入概览页面。点击"切换项目"选择你的代码仓库目录,应用会自动检测项目下是否已有 .autoresearch/ 配置目录、program.md 规则文件和 agents/ Agent 配置目录。全部就绪后,页面会用绿色的状态提示告诉你"配置完整,可以开始使用"。

阅读全文

Hermes Agent 最大的彩蛋,90% 的人不知道这些斜杠命令

Hermes Agent 提供了大量的斜杠命令和内置的Skill——不仅打通了 Telegram、Discord、飞书等多个消息平台,还在会话管理、技能系统和记忆机制上引入了不少新玩法。今天我把 Hermes 的斜杠命令体系完整梳理一遍,按使用频率分类,方便大家各取所需。

Hermes Agent 是由 Nous Research 打造的自改进 AI Agent,内置学习循环、跨会话记忆、技能系统、任务调度和多平台消息网关。支持 OpenRouter(200+模型)、Anthropic、OpenAI、GLM、MiniMax 等任意 LLM Provider,一条命令安装,Linux/macOS/WSL2/Termux 均可运行。


一、每天都在用的几个

/new/reset

/new 开一个新会话,/reset 是别名。如果想换模型,直接 /new gpt-4o 或者 /new claude-opus 都可以,支持模糊匹配。

阅读全文

写公众号最痛苦的那段流程,终于有人重做了

写公众号最耗人的,常常不是内容本身,而是写完之后那一整套排版、预览、代码块、图片、复制发布的返工流程。wxeditor 不是普通 Markdown 编辑器,而是专门为微信公众号排版与发布场景重做的一套工具链。

大部分人苦微信公众号文章编辑器久矣!例如去年宝玉大佬的总结:

文章写完了,真正折磨人的事才刚刚开始。

标题不好看,要改!

代码块太丑,要改!

图片贴进去又乱了,要改!

好不容易排完,粘到公众号后台以后样式又变了,还得再改。

如果你经常写公众号,你一定懂这种崩溃感。

很多人以为公众号创作最难的是写。

其实不是。

真正耗时间、耗耐心、耗状态的,往往是写完之后那一堆排版和发布动作。

而最近看到的这个工具,我觉得非常值得写公众号的人认真看一眼。

它叫 wxeditor, 网址是 https://md.rpcx.io

不是“又一个 Markdown 编辑器”。

而是一个把公众号作者最烦的那段流程,重新做了一遍的工具。

它最厉害的,不是让你能写 Markdown

因为现在会写 Markdown 的工具太多了。

真正稀缺的,是一个能够把这条链路理顺的工具:

写作 -> 预览 -> 排版 -> 图片处理 -> 复制 -> 粘贴到公众号后台

wxeditor 做的,就是这件事。

它不是只给你一个编辑框。

它是把公众号作者最常遇到的问题,一刀一刀拆开,再一刀一刀补上。

第一件事:它把工作流变顺了

现在这个工具的核心结构是三栏:

  • 左边编辑区
  • 中间预览区
  • 右边样式面板

这不是简单的界面分栏。

它真正解决的是:你不用在多个工具之间来回跳。

更关键的是,它还把预览这件事做得更贴近真实发布场景:

  • 编辑区和预览区支持滚动同步
  • 默认是手机宽度预览
  • 折叠编辑区后还能切换到 1024px 网页预览模式

这意味着,你在排版长文时,不再需要一边拉滚动条,一边猜最终效果。

很多返工,其实从这里就已经开始减少了。

第二件事:它把那些高频但烦人的小动作一起做了

真正高频写作的人都知道,最拖效率的从来不是某一个大问题。

而是那些每次都会碰到的小动作:

  • Markdown 格式不统一
  • 外链处理麻烦
  • 想换个风格又得从头调
  • 排着排着发现整体气质不对

wxeditor 现在已经把这些动作做成了直接可用的能力:

  • Markdown 格式化
  • 外链转脚注
  • 随机色系
  • 随机风格
  • 一键复制到公众号
  • 复制 HTML 源码

这些单看都不算“炫技”。

但它们一起出现,说明这工具不是只做了个壳。

它是在认真压缩你发布前的摩擦。

第三件事:它不是给你几个模板,而是给你一整套主题系统

这点我觉得特别重要。

很多排版工具的主题,本质上只是几套固定皮肤。

第一篇觉得新鲜,第二篇就腻了。

免费的一些编辑器只提供几套上个时代的风格,离顶尖的风格差远了。

但 wxeditor 这次在主题系统上明显做得更深:

  • 内置多组公众号风格主题
  • 还有一组公司风格主题,采用DESIGN.md的分析,精准采集世上顶尖公司的网站风格
  • 160套代码风格任意可以,实时预览
  • 支持自定义主题保存

阅读全文

我把 Karpathy 的 AutoResearch 搬到了软件开发领域,效果炸了

像 Karpathy 训模型一样开发软件。

Andrej Karpathy 的 AutoResearch 项目于 2026 年 3 月发布,短短几天内在 GitHub 收获 5 万+ 星标,介绍视频播放量达 860 万次。这是一款开源 Python 工具,代码量仅 600 行左右,可让 AI 智能体在无需人工干预的情况下,于单张 GPU 上自主运行机器学习实验。它通过修改训练代码文件(train.py)生成实验方案,以固定 5 分钟训练时长和验证比特率(val_bpb)为统一评估指标,自动筛选并保留效果更优的代码修改,形成「假设生成 → 训练执行 → 指标判断 → 结果回滚/保留」的循环机制。

这个项目的精髓在于三点:① 量化目标(val loss 是唯一判断标准)、② 自主循环(Agent 不需要人类每轮介入)、③ 只保留改进(退化就回滚,绝不将就)。预计每小时可完成约 12 次实验,一觉醒来就能收获上百轮自动优化的结果。

阅读全文

Hermes Dashboard Light Theme 改造指南

背景

Hermes Agent 的 Web Dashboard 原本采用深青色(dark teal)主题,视觉风格偏向赛博朋克——暗底、琥珀色文字、锯齿化像素字体(Mondwest、RulesCompressed、RulesExpanded、Collapse)。这种风格虽然独特,但在日常使用中存在几个问题:

  1. 像素字体可读性差 — Mondwest 等自定义字体在低 DPI 屏幕上锯齿明显,中文环境下尤为突出

  2. 暗色主题不适合长时间使用 — 在明亮环境下对比度过高,容易视觉疲劳

  3. 与现代 SaaS 工具视觉割裂 — Linear、Vercel、Stripe 等主流工具均已采用亮色设计

![Hermes Dashboard Light Theme 改造指南__assets/image-20260414085354195.png](Hermes Dashboard Light Theme 改造指南__assets/image-20260414085354195.png)

因此我们将其改造为现代亮色主题,以 Inter + JetBrains Mono 为基础字体栈,主色选用紫色(#6d5dfc),整体风格干净克制。

改造概览

设计语言

属性 旧值(Dark Teal) 新值(Light)
背景色 #041C1C #fafafa

阅读全文

拆解Manus:真正有用的深度报告的生成

真正的深度研究报告不是让 AI "写"出来的,而是"研究"出来的。这两个字差别大了。

最近几个月,几个产品让我眼前一亮:Gemini Deep Research、Manus Wide Research,还有 OpenAI 的 Deep Research。它们都在做同一件事——让 AI 具备真正的"研究能力"。

这事儿得从"上下文窗口陷阱"说起。

一、上下文窗口陷阱

这个方案的巧妙之处在于规避了上下文窗口问题

传统方式是一个 Agent 处理所有任务,越往后上下文越拥挤,质量必然下降。而 Manus 的方式是每个 Agent 都从零开始,大家都是"满血"状态,不存在谁挤占谁的问题。

官方有个案例——研究 250 位 AI 研究员。

第 1 位到第 250 位,每位的详细程度都一样:完整的背景、研究方向、代表作、核心论文。这换成传统 AI 根本做不到——早就因为上下文爆炸而开始胡编乱造了。

技术实现细节

剥开产品外壳,Manus 的架构其实挺讲究的。核心思想来自一篇叫《CodeAct》的论文:让 AI 像程序员一样工作——写代码、运行代码、看结果、改代码、再运行。

ReAct 模式

每个 Agent 的执行逻辑是一个循环:观察(Observation)→ 思考(Thought)→ 行动(Action)→ 观察...不断迭代,直到任务完成。

这不是简单的"调用工具",而是边思考边行动。搜索结果不相关?换关键词。代码执行报错?检查原因、修改命令、重试。

1
2
3
┌─────────────────────────────────────────────┐
│ 观察 → 思考 → 行动 → 观察 → 思考 → 行动... │
└─────────────────────────────────────────────┘

沙箱隔离

每个 Agent 跑在独立的虚拟机环境里。这不是多线程,而是真正的隔离——独立的文件系统、独立的网络、独立的进程空间。

Manus 用了沙箱技术,这样就算某个 Agent 被诱导执行了危险命令,也影响不到其他 Agent 和宿主系统。

任务分解:DAG 结构

主 Agent 把复杂任务拆成有向无环图(DAG)。清楚知道哪些步骤可以并行,哪些必须等前置条件。

比如"研究 50 家风电公司"的执行图:

1
2
3
4
5
6
7
8
9
10
                [主 Agent:任务分解]

┌─────────┬─────────┼─────────┬─────────┐
↓ ↓ ↓ ↓ ↓
[Agent 1] [Agent 2] [Agent 3] ... [Agent 50]
研究公司1 研究公司2 研究公司3 研究公司50
↓ ↓ ↓ ↓ ↓
└─────────┴─────────┴─────────┴─────────┘

[主 Agent:结果汇总]

工具集

Manus 提供了 29 种工具,分成几类:

类别 工具示例 用途
命令执行 Shell、Python 执行任意代码和系统命令
文件操作 读写 txt/md/pdf/xlsx 处理各种格式的文档
网络能力 搜索、浏览器、端口部署 获取信息、部署服务
系统能力 进程管理、软件安装 配置运行环境

这些工具让 Agent 能真正"动手做事",而不是只会生成文本。比如研究一家公司,它可以:搜索公司官网、爬取财报数据、用 Python 分析财务指标、把结果写入表格。

动态质量检测

Manus 不是按预设流程走到黑。每次执行完一个步骤,都会判断:结果可信吗?需要调整方向吗?

1
2
3
4
def quality_check(result):
if result.confidence < 0.7:
trigger_self_correction()
return generate_validation_report()

代码执行报错?调整命令重试。搜索结果太少?换搜索引擎或关键词。这种自我纠错能力,让它在遇到问题时不会死磕,而是会寻找替代方案。

状态管理

每个任务维护一个 todo.md 文件,实时更新进度:

1
2
3
4
5
6
7
8
9
# TODO

{% asset_img cover.png %}

- [x] 收集公司列表
- [x] 研究前 10 家公司
- [ ] 研究中 30 家公司
- [ ] 研究后 10 家公司
- [ ] 汇总分析报告

这样做的好处是:任务中断后可以恢复;用户随时能看到进展;中间结果有地方存储,不会丢失。

当然这些分析都是我们基于Manus的产品、宣传资料和外部人员的分析做的推测,我们实际并不知道Manus内部的方案。仅供分析和学习。

四、真正的"研究"是什么?

看这些产品,我发现一个有趣的共通点:它们都在模仿人类研究员的工作方式。

人类研究员怎么做深度报告?

  • 首先规划:这个问题要从哪些角度分析?需要哪些数据?
  • 然后执行:找数据、读文献、做访谈、整理信息。
  • 最后综合:把零散的信息组织成有逻辑的故事。

关键在于,这不是一次性能完成的。需要反复迭代——查了资料发现方向不对,得换方向;分析到一半发现缺数据,得补数据。

传统的 LLM chat 模式,本质上是一次性生成。给你个 prompt,你吐出结果。这是"写作",不是"研究"。

真正的深度研究 agent,应该具备:

① 规划能力:能理解任务,制定研究策略,知道先查什么后查什么。

② 工具能力:会用搜索引擎、读数据库、解析文档,不只是从训练数据里抠信息。

③ 迭代能力:能根据中间结果调整方向,不是按预定流程走到黑。

④ 验证能力:能交叉验证信息来源,不是捡到什么信什么。

⑤ 综合能力:能把碎片信息拼成完整故事,不是简单的信息罗列。

Gemini Deep Research 和 Manus Wide Research,本质上都是在往这个方向努力。只是侧重点不同——前者重"深",后者重"广"。

五、一些思考

高质量的资料源

就像研究员一样,要想生成高质量的报告,必须要有高质量的数据源作为基础。

如上面提到过的,这方面搜索引擎具有优势,他们拥有全面性,时效性高的搜索资料。

一些专业的网站也有行业方面的专业资料,比如金融领域相关的,IT技术相关的、白酒方面相关的
电商方面相关的,旅游行业相关的、出行方面相关的、法律行业相关的,科普方面相关的,他们能够提供垂类专业的资料,如果要生成这方面的报告,找这些行业相关的网站信息是最好的。当然如果这些资料是公开的,可以通过搜索因为+专业的搜索词进行搜索获取,所以搜索引擎的重要性在AI的深度调研报告生成中占很重要的地位。

但是搜索引擎并不轻易把它的能力无偿的暴露出来,比如谷歌,它提供付费的搜索API,价格不低。Bing已经把它的搜索API下掉了。还有一些第三方的服务,或许是通过爬虫的方式进行搜索,比如Travily、Brave、SerpAPI等,也提供收费的服务。总的来说,好东西都是有价格的。这些搜索引擎增加了反爬虫的机制,我几个月前还能绕过这些限制,现在也不行了,他们都很聪明,不会轻易让你免费使用的。

从 Manus网站的输出来看,我怀疑它们买了某个或者某几个服务器服务商的服务,可以针对用户的请求,得到搜索引擎的列表 (SERP), 这是猜测,前端并看不出来,因为它们并不可能去做个搜索引擎。专业的人做专业的事。它们拿到搜索结果列表后,通过它们的AI浏览器,也就是虚拟机的浏览器去浏览网络,获取网页的内容。它们叫cloud browser,应该是基于browserbase开发的。沙盒技术和Browser我放在下一个拆解文章中在再专门介绍,这一篇还是专门关注调研报告的实现。

识别用户的意图

专业的用户会提供详细的、简洁的、对 AI 友好的提示词,但是大部分用户并不能很好的表达自己的意图,比如:

请帮我分析Apple的市场行情

这里的Apple指的是苹果电脑公司还是水果苹果🍎呢?非常有歧义。还有的提示词含糊不清。在Insight的实现在,我们首先实现的就是对用户的提示词进行澄清。理论上对于非常模糊的提示词,比如Apple这里例子,我们需要进一步询问用户,反问用户的意图,但是Insight还没进一步的实现这个功能,而是自动进行澄清,它是怎么实现的呢?

生成报告大纲

接下来专门有个agent(StructurePlannerNode)负责生成报告的节点,主要确定报告的主要大纲和方向。

区分报告的种类进行规划搜索任务

接下来针对报告的大纲, Planner Agent针对金融投资领域、技术开发领域、商业分析领域、政策相关领域、通用领域等各种领域制定搜索计划,为每个章节搜索足够的信息备用。

执行搜索

Search Agent 会根据搜索计划,逐步实现相关内容的搜索。

它会根据项目提供的工具,进行搜索。目前提供了travily、github、谷歌学术、知乎、微信公众号等网站的搜索,我其实还是期望能直接搜索google的搜索结果和一些顶级的专业网站的搜索内容。

搜索的结果内容如果太长,还会对它们进行summary,以便压缩上下文。

此节点还会针对每个章节进行内容的总结。

现在万事俱备了,所有的大纲和材料都准备好了,可以进行报告的编写了。有请 ContentWriter Agent。

内容的编写

ContentWriter 负责报告的编写,它根据大纲和材料进行内容的创作。

说起创作来,针对内容创作的场景,我们为了提高创作产品的质量,经常采用Reflection模式,针对生成的内容进行打分,要不要进行优化。

所以这个Agent生成后,会调用Reflector Agent进行打分,以便决定要不要调用Revisor节点进行订正。你看报告生成的日志也能观察到这一点。

除非生成的报告片段达到了“优”的级别,否则就会尝试补充和订正,直到达到了 5 轮的反复订正才算通过。

所以你会看到Insight生成的报告的质量还是很高的,不像一个玩具或者示例deep research产品的报告那么简略或者偏离主题。

Reportor Agent

最后这个Agent把各个章节合在一起,生成一个完整的markdown的报告。

会生成合理的章节,并进行编号。

另外还有的Podcast Agent,可以生成播客的脚本。如果用户请求中要求生成播客,那么此Agent就会自动生成。

工作流程

完整的工作流 (graph)如下:

工程开发

报告中缺乏图表,可以加强数据的采集和图表的展示。

报告中缺乏图片的润色,网上搜索的图片经常文不对题,不过我已经有方案了。


参考资料:

了解 Manus Sandbox - 您的云计算机

了解 Manus Sandbox - 您的云计算机

本来想写拆解Manus沙箱的文章,结果Manus官方自己写了 :)
了解 Manus Sandbox - 您的云计算机

正如 Manus 名称的出处"Mens et Manus"(Mind and Hand)所说的,Manus 希望让 AI 模型不仅只是思考,更可以帮你做出行动。而在我们给 AI 模型赋予的"手"中,最强大的莫过于一台真正的云计算机 —— Manus Sandbox。

什么是 Manus Sandbox?

Manus Sandbox 是 Manus 为每一个任务分配的完全独立的云虚拟机。每个 Sandbox 在自己的环境中运行,互不影响,可以并行执行任务。

Sandbox 的强大之处在于它的完整性——就像你手上使用的个人电脑一样,它拥有完整的能力:网络、文件系统、浏览器、各种各样的软件工具。我们的 AI Agent 经过设计与训练,可以很好地选择并正确使用这些工具帮助你完成任务。不仅如此,有了这台计算机,AI 可以通过自己最擅长的方式——编写代码来解决问题,甚至可以帮你制作一个完整的网站和移动端 App。这一切都发生在 Manus 背后的虚拟化平台上。这些 Sandbox 可以 7x24 小时工作,完成你下发的任务而不占用你的本地资源。

阅读全文

拆解Manus:沙盒架构深度解析

Manus 是一个通用目的 AI 代理(General-Purpose AI Agent),它能够在完整的沙盒环境中运行并交付生产级结果[1]。与传统的单一 LLM 聊天机器人不同,Manus 采用更复杂的多代理协调系统(Multi-Agent Coordination System):用户提示首先传递给规划代理(Planner Agent),该代理将任务分解为一系列子任务;然后执行代理(Executor Agent)使用多种工具(从网页浏览到终端命令)完成这些子任务[2]。为了使执行代理能够像人类研究人员或开发者一样工作,Manus 必须为其提供一个完整的云计算机环境——这就是 Manus 选择 E2B 作为其沙盒基础设施的核心原因。

Manus 的沙盒环境本质上是由 E2B 平台提供的 Firecracker 微虚拟机(microVMs)[3]。Firecracker 是 AWS 开发的轻量级虚拟化技术,能够在约 150 毫秒内启动一个完整的虚拟计算机环境——相比之下,Docker 容器需要 10-20 秒的启动时间,更重要的是,Docker 作为容器解决方案无法提供完整操作系统的所有功能[4]。Manus 联合创始人 Tao Zhang 强调:"Manus 不只是运行一些代码片段,它使用 27 种不同的工具,需要 E2B 提供完整的虚拟计算机来像真人一样工作"[5]。这些工具涵盖了从 Chromium 浏览器(访问 URL、保存图片、滚动页面)到终端命令(创建、编辑、删除文件),再到 Python、JavaScript、Bash 等编程语言环境的全栈能力。

从部署架构来看,Manus 选择了 E2B 的自托管部署模式(Self-Hosting Deployment)[6]。这意味着 Manus 在自己的机器上运行 E2B,而非依赖 E2B 的云服务——这种选择使 Manus 能够完全控制沙盒基础设施,同时简化运维管理。Tao Zhang 表示:"E2B 自托管很容易管理,我们能够在半天内完成实现和部署"[7]。如果 Manus 选择自建这套基础设施,技术上是可行的,但需要一支 3-5 人的全职基础设施团队花费数月时间来开发和维护——对于大多数构建 Agent 平台的团队来说,这会分散对产品和研发工作的注意力。通过选择 E2B,Manus 能够快速交付产品,专注于改进多代理编排系统,而不是重新发明云运行时基础设施。

E2B 沙盒的会话持久性(Session Persistence)是 Manus 架构的关键特性之一。沙盒会话可以持续运行数小时,代理在每次迭代中决定在沙盒中执行哪个操作[8]。对于付费用户,E2B 沙盒中保存的信息可以长达 14 天——这对于需要数十分钟才能完成的复杂任务至关重要。更重要的是,沙盒会话支持暂停和恢复(Pause and Resume):当代理需要向用户确认某些信息、需要凭据访问特定网站、或者需要通过"验证你是人类"测试时,可以暂停当前任务,待条件满足后恢复执行。这种能力使得 Manus 的代理能够在保持上下文的同时,灵活地处理需要人工介入的场景。

阅读全文

Notex:一个开源 NotebookLM 替代方案的实现

Google 的 NotebookLM 上线后,不少人体验了它的文档问答和内容生成功能。它很好用,但有个问题:数据需要上传到 Google 的服务器。对于一些敏感的内部文档,这不太合适。

于是就想做一个开源版本:数据存在本地,想用什么模型就自己配置。一个元旦假期,基本功能就跑起来了。

项目叫 Notex,代码在 GitHub 上,今天聊聊它的实现。

本项目受open-notebook项目的启发。但是open-notebook缺少信息图、思维导图、幻灯片等高级功能。本项目弥补了这些功能
信息图采用最新的nano banana pro实现
幻灯片采用 宝玉的 《预订本年度最有价值提示词 —— 生成既有质感,又能随意修改文字的完美 PPT》 的方式,生成真正意义上的PPT

功能概览

这块是核心,负责和 LLM 打交道。

使用 LangChainGo 作为抽象层,支持 OpenAI 和 Ollama:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func createLLM(cfg Config) (llms.Model, error) {
if cfg.IsOllama() {
return ollamallm.New(
ollamallm.WithModel(cfg.OllamaModel),
ollamallm.WithServerURL(cfg.OllamaBaseURL),
)
}

opts := []openai.Option{
openai.WithToken(cfg.OpenAIAPIKey),
openai.WithModel(cfg.OpenAIModel),
}
if cfg.OpenAIBaseURL != "" {
opts = append(opts, openai.WithBaseURL(cfg.OpenAIBaseURL))
}

return openai.New(opts...)
}

Prompt Engineering 是关键。不同的转换类型需要不同的 prompt 模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
case "mindmap":
return `你是一位资深的信息架构师和知识管理专家。
请将【文本内容】提炼并转换为 Mermaid.js 的 mindmap 格式。

# 样式规范:
1. 中心主题:root((内容))
2. 主要分支:(内容)
3. 细节节点:[内容]

# 严格规范:
- 严禁使用 graph, LR, --> 等字符
- 节点内容 10 字以内
- 只输出代码块,不解释

来源:{sources}
`

注意这里的 prompt 设计:明确的输出格式要求,加上反面示例("严禁"),能有效减少 LLM 输出格式不稳定的问题。

3. PPT 生成

这是比较复杂的 feature。需要两个步骤:

第一步:生成大纲

用 Gemini Flash 生成 PPT 大纲,每页包含:

  • 叙事目标(这张幻灯片要讲什么)
  • 关键内容(标题、要点)
  • 视觉元素(需要什么图)
  • 布局(怎么排版)

第二步:解析和生成图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func (a *Agent) ParsePPTSlides(content string) []Slide {
// 1. 提取风格指南
styleStart := strings.Index(content, "<STYLE_INSTRUCTIONS>")
styleEnd := strings.Index(content, "</STYLE_INSTRUCTIONS>")

// 2. 按幻灯片分割(支持多种标记)
re := regexp.MustCompile(`(?m)^(?:\s*#{1,6}\s*)?(?:Slide|幻灯片)\s*\d+`)
indices := re.FindAllStringIndex(content, -1)

// 3. 验证每张幻灯片是否包含必需字段
if strings.Contains(lower, "叙事目标") || strings.Contains(lower, "关键内容") {
slides = append(slides, Slide{Style: style, Content: slideContent})
}
}

然后为每张幻灯片调用 Gemini Pro Image 生成图片:

1
2
3
4
5
for i, slide := range slides {
prompt := fmt.Sprintf("Style: %s\n\nSlide Content: %s", slides[0].Style, slide.Content)
imagePath, err := s.agent.GenerateImage(ctx, "gemini-3-pro-image-preview", prompt)
slideURLs = append(slideURLs, "/uploads/"+filepath.Base(imagePath))
}

4. 信息图生成

信息图的核心是让 LLM 把文本内容"翻译"成视觉描述,然后把描述作为 prompt 喂给图像模型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
case "infograph":
return `# Role
你是一位世界顶级的数据可视化设计师和信息图专家。

# Task
阅读所附文本,设计一张信息图。不要进行总结,
而是描述这张图应该长什么样。你的输出将被直接用作图像生成的 prompt。

# Design Guidelines
1. 核心信息提炼:找出最重要的 3-5 个数据点
2. 视觉隐喻:用形象的比喻(如网络安全用"盾牌和锁")
3. 布局结构:明确定义图的结构
4. 文本限制:极简,只保留标题和关键数据
5. 风格:插画或手绘感

# Output Format
Start with "Infographic illustration created in a soft, hand-drawn digital art style..."
[描述整体布局和背景风格]
[详细描述主要视觉元素]
...
`

这个 prompt 设计的要点是:明确告诉 LLM 它的输出会被用作另一个 prompt,这样 LLM 就会更注意输出的结构化和可用性。

5. 思维导图

思维导图的实现最简单,核心是生成 Mermaid.js 的语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
case "mindmap":
return `将文本转换为 Mermaid.js mindmap 格式。

# 样式规范:
root((中心主题)) # 圆圈
(主要分支) # 圆角矩形
[细节节点] # 矩形

# 严格规范:
- 仅限 mindmap 语法
- 节点内容 10 字以内
- 严禁包含引号
`

前端用 Mermaid.js 自动渲染:

1
2
import mermaid from 'https://s4.zstatic.net/ajax/libs/mermaid/11.4.0/mermaid.min.js';
mermaid.initialize({ startOnLoad: true });

数据流

本地运行

1
2
3
4
5
6
7
8
9
10
11
12
git clone https://github.com/smallnest/notex.git
cd notex
go mod tidy

# 使用 OpenAI
export OPENAI_API_KEY=your_key
go run . -server

# 或使用 Ollama(本地模型)
export OLLAMA_BASE_URL=http://localhost:11434
export OLLAMA_MODEL=qwen2.5:7b
go run . -server

Docker 部署

1
docker-compose up

环境变量

变量 说明 默认值
OPENAI_API_KEY OpenAI API 密钥 -
OPENAI_BASE_URL 自定义 API 地址 -
OPENAI_MODEL 模型名称 gpt-4o-mini
OLLAMA_BASE_URL Ollama 地址 -
OLLAMA_MODEL Ollama 模型 -
GOOGLE_API_KEY Gemini API(PPT/信息图) -
SERVER_PORT 服务端口 8080

扩展性

代码结构支持几种扩展方式:

1. 添加新的转换类型

agent.gogetTransformationPrompt 添加新 case:

1
2
case "new_type":
return `你的 prompt 模板...`

2. 支持新的 LLM

LangChainGo 支持多种模型,只需在 createLLM 添加新的分支。

3. 接入向量数据库

VectorStore 目前是内存实现,可以替换成 Qdrant、Milvus 等。

4. 添加新的文档格式

vector.goneedsMarkitdown 添加新的文件扩展名。

代码量和学习价值

项目核心代码大约 2000 行左右,适合学习:

  1. RAG 的完整实现:从文档处理到检索到生成
  2. Prompt Engineering:如何设计稳定的 prompt
  3. Go Web 开发:Gin 框架、SQLite、并发处理
  4. 前后端分离:单页应用 + REST API
  5. LLM 应用架构:如何组织一个 AI 应用的代码

如果你想学习如何构建 AI 应用,或者想找一个 NotebookLM 的替代方案,这个项目可以作为一个起点。

总结

Notex 不是什么高大上的项目,代码也写得朴素。但它解决了实际问题:让你在本地使用 AI 处理文档,数据不外泄。

核心功能就几个:

  • 文档问答(RAG)
  • 多种内容转换(摘要、FAQ、大纲等)
  • 视觉内容生成(PPT、信息图、思维导图)

技术选型务实地选择了 Go 和原生 JS,没有过多的依赖。部署简单,维护成本低。

如果你感兴趣,可以看看代码,提提 PR,或者直接 fork 改成你自己的工具。


项目地址: https://github.com/smallnest/notex

欢迎 Star、Issue、PR。