Nam-Dub

有用且仅此有 | 无用但不无趣

人工智障

AI带来的三重危机以及对未来的信心

关于人工智能,有这么一则寓言:一辆加速的列车,一经抵达就远远地把人甩在身后。 幸运的是,列车似乎已经抵达,并没有把人甩在身后。因此,我们只需要回答好三个问题: * 列车是否仍在加速? * 应该上车吗? * 怎么上车? 上一篇文章《构建人工智能应用的底层逻辑》展望了下AI应用的前景,然而现实的反馈是:应用很难落地。这同时指向了上述三个问题。 这篇文章将尝试回答头两个问题,对于第三个问题,也许将来有更多实践分享。 列车是否仍在加速? 这个问题尚未在技术上得到很好的解答。从历史的角度却很容易找到线索,只需观察两条曲线。 第一条曲线代表了对AI的投资和研究以及能力随时间的变化 A Critical Historic Overview of Artificial Intelligence: Issues, Challenges, Opportunities and Threats InfoQ:2023 中国人工智能成熟度模型报告 中间有波峰和波谷,说明人工智能也有退潮期,如果贸然跟风,也可能踩坑(后面再谈论这个)。但总体
11 min read
人工智障

构建人工智能应用的底层逻辑

大语言模型是个黑盒,GPT-4 在早期版本中就如真人一般,而大量使用之后又不禁怀疑:它真的理解了对话吗? AI也许是以我们不同的方式理解,之所以表现相似,是因为神经网络是一种模拟,人脑也是神经网络,正如我们搞不明白人脑怎么冒出意识那样,模型的生成过程也无法解释。 Stephen Wolfram 提出了叫做计算不可约和计算等价性的思想,用在AI上来说,要弄明白为什么模型输出那些内容,就得做不少于它参数量的运算,这就叫不可约,而它输出的结果,人脑也能产生,某种程度上就叫等价,所以至少对于非研究者而言,不必纠结于原理是什么,只需从外部测试这个盒子的能力,重点在于应用。 宇宙中有大把未知的存在,存在即合理,假设我们将存在和可能的存在都当作一种意义,就有了意义空间,从这个出发点可以推断出很多东西。 一点浅见! 我以为意义是一种主观判定因果关系的方式,例如,小路上散步,一阵小风,不是朝这儿吹就是朝那儿吹,吹到树身上,种子飘到别处生根发芽了,吹到人身上,引起一阵惬意,这就是意义,它们的意义是在人身上体现的,所以: * 意义是一种组合,来源可能并不相干; * 意义是基于判
7 min read
人工智障

FastGPT & Dify 应用案例及工作流开发总结

AI+Workflow是当前比较流行的Agent应用开发方式,本博客之前重点对比了:Dify vs FastGPT两个开源项目,也演示了Coze的案例,本文继续分享这两款产品的开发实践,借此对拖控件编排工作流这种低代码开发方式进行阶段性总结,读者顺便也能体会到它们之间的差异。 特别强调的是,这几款产品迭代得很快,文章仅作参考而非为了评价它们的优劣。同样优秀开源项目还有:bisheng(支持autogen和lanchain)和 ragflow(提供更丰富的RAG方式)等,你如果了解 langchain 的话,它也有 workflow 的开发方式可供选择。 言归正传! 图形界面仍然是我们大部分用户首选的人机交互方式,例如,下图是我用FastGPT实现的一个下载器前端: 目前AI在实现智能生成UI、自动提参的交互能力上还比较弱,一方面,开发应用需要先对图形界面(GUI)进行布置,这受限于平台自身提供的UI组件;另一方面,AI更广泛的应用场景是作为其他软件的辅助形式,所谓副驾驶,例如代码编辑器中的插件,聊天软件中的机器人,而软件是各自独立的,多数软件接入第三方AI的形式
13 min read
砖工技术

给 Matrix Synapse 添加中文搜索

Matrix很好很强大,一般服务端都用Synapse,支持的协议最完善,然而它的中文搜索很难用,原因在于PostgreSQL未能正确的给中文分词。另一个服务端项目dendrite 支持CJK (中日韩)分词,也只是略好一些,并且那个项目开发也几乎停滞了。 开源IM软件中原生支持中文搜索的有Mattermost,我参考它给Synapse开发了一个方案,具体的做法是 使用 Zhparser 插件版 Postgres,给数据表添加一个字段,改少量Synapse代码。通过文件映射的方式,尽可能减少后期维护成本。
8 min read
人工智障

Coze平台AI聊天机器人的搭建案例

大语言模型问世一年半,出现了越来越多有意思的东西,例如可以在聊天中触发一些UI互动,让大模型使用第三方工具,执行一些自动化工作流,使用低代码开发Agent 代理最近也非常火热,扣子(Coze)是其中优秀的平台,本次,我尝试在coze.cn搭建应用,看看目前主流平台的 AI 智能体开发方式,能不能替代前后端,能不能落地,具体会碰到什么问题?顺便也看看国产大模型表现如何。 我首先想到一种需求,了解开源领域的朋友们都知道,Github是开源项目的主要集中地,我们大抵是通过标星(stars)来关注一个仓库,长时间下来,stars数量已经有几百个乃至上千个之多了,这带来一个问题,我们关注一个项目通常不会细致的研究它的文档和代码,只大致了解了它的用处,过后可能也就忘了。当我们实际需要某种工具时,又常常想不起来,只能借助传统的搜索,包括GitHub自己的搜索功能,这效率有点低,经常就搜不到,因为开源项目的描述和我们关键词并不一定匹配。诚然,现在的大模型基本上都会爬取GitHub上的数据,但实际测试发现,它并不是真的“记住了”什么知识,并不能当作信息搜索引擎来用,要命的是,它还会一本正经的瞎编乱造
17 min read
人工智障

Dify VS FastGPT —— 两个出色的整合大模型应用的开源项目

在基于大语言模型 API 的生态上,有那么几种类型的应用解决不同的痛点: 1. 使用最广泛的是网页或软件在API上套壳,方便有网络障碍和弹性需要的用户; 2. 检索增强生成(RAG),适用于垂直和私有化数据领域; 3. 结合第三方软件,包括 SaaS 平台、本地工具,扩展模型的能力; 4. 低代码拖控件调度工作流,降低个性化定制的门槛; 5. 统一API接管,应对各家模型如雨后春笋般发布的场景。 而 langgenius/dify 和 labring/FastGPT 将以上功能集于一身,是开源AI项目中的佼佼者,类似的项目还有 Bisheng 和 TaskingAI(国外的新起之秀)等。综合体验下来,我选择 Dify 和 FastGPT 的社区版作为其中代表进行比较, 这两个应用也是我使用最多的,在不同服务器上都部署过,以下评价并非严谨的测试,仅作为主观使用感受总结。 安装和运行环境: Dify
7 min read
人工智障

AI的轻应用开发只是热闹一时

这篇文章写于2024年1月15日,现在分享到博客上来。 我自己也开发过GPT,对话数超过10k,评分4.5,算排名靠近,不过我也早早取消了Plus订阅,改用API了,那对我来说更好用。 GPT是OpenAI推出的定制版ChatGPT,有点类似于微信小程序。定制门槛很低,最简单的直接在聊天框上提需求,构建器会自动帮你创建好,然后还可以分享到商店来赚取收益。 在这篇文章中,我得出几个结论,如果您有不同的看法,欢迎探讨。 1. GPT应用真正能落地的场景很有限 这个结论也同样适用于国内AI平台。 为了理解这点,我们需要回顾一下Prompt和Agent,即提示工程和智能体代理。 简单来说,大语言模型根据前文生成后文,而Prompt就是利用模型的这一特性预设某些提示以规范输出,例如角色扮演,Agent的骨干也是Prompt,通过特殊的提示让模型能够与外部服务及私有数据结合起来,更加垂直化。 提示和代理提供了无限的想象空间,大模型如同压缩了世界知识的宝藏,提示词如同密钥,有什么样的钥匙就能开出什么样的宝石。而代理将自然语言赋予了创造的魔力,如同咒语般从石头
6 min read
Ghost

Ghost进阶系列:填坑总结

更新时间:2023年3月5日20点32分 除非 Ghost 有你不可替代的功能需求,或者喜欢上手高难度,否则我建议你放弃。 备份和更新 Docker 版不支持完整的 Ghost CLI,例如通过命令行进行备份,备份参考文档:如何重新安装幽灵。 Docker容器更新办法: 一种方式是通过 Watchtower 自动更新,比较省事,但是可能会出问题,博客掉线了可能都不知道。 另一种方式是手动更新: * 初始搭建时选择 ghost:latest 这个名称的镜像。 * 更新只需重新下载,镜像同名但是最新版本,新镜像将会替换旧镜像。 * 然后将正在运行的 Ghost 容器复制一份。 * 关闭旧容器并删除旧容器上的端口映射。 * 启动新镜像的容器并选择复制旧容器的设置和数据,重新映射端口。 * 博客已经运行在新容器上,数据没有损失。 * 运行一段时间后再决定是否删除旧容器和镜像。这种更新方式比较安全。 扩展阅读:如何更新群晖Synology的Docker容器_哔哩哔哩_bilibili 问题1:每次系统重启或容器更新时 Ghost
4 min read
曲线救国:用谷歌语音助理唤起必应聊天
砖工技术

曲线救国:用谷歌语音助理唤起必应聊天

现在手机上的 Bing 应用 已支持 AI 聊天,并且可以语音对话。 声音还行,识别率也高,即便偶尔口误或者识别出错别字,也基本上能够返回正确的回答。 不过,Bing 还无法像 Siri、小爱那样在待机状态下用语音唤醒,也许未来微软会重新上线像曾经的 Cortana 那样的智能助理,但目前只能通过点击桌面上的图标打开。 有没有办法直接用口令唤醒呢? 经尝试,我在 Android 手机上成功用 Google Assitant 和 Tasker 呼出 Bing Chat Voice 并连续对话。 本文只演示安卓设备上的操作,比较简单,欢迎探讨实现更复杂的功能,或者更直接的操作。理论上苹果 IOS 上的快捷指令也能实现 Siri 和 Bing 的联动,期待看到相关的教程。 前提:需要一部无障碍使用 Google 三件套的安卓设备,
12 min read
替代 ChatGPT,用 Notion AI 和 Bing Chat 写文稿
砖工技术

替代 ChatGPT,用 Notion AI 和 Bing Chat 写文稿

Notion 简介 Notion 是一款功能强大的云端笔记软件,可以让用户创建各种类型的文档、表格、数据库、任务清单、日程安排等。Notion 支持多人协作,可以轻松地与团队成员共享和编辑文档。Notion 支持块引用和 API,这让它拥有丰富灵活的能力,不仅仅用来做笔记,也可以用来做项目管理、任务清单、知识库、财务记账、博客等。 Notion AI 介绍 Notion AI 是 Notion 最新推出的智能写作助手,它利用生成式语言模型自动创建各种文本内容,功能主要包括: * 写作模式:使用不同的模式,例如博客、社交媒体帖子、待办事项、想法等自动生成不同内容。 * 自动建议:Notion AI 可以根据用户输入的文本建议下一步操作,例如添加任务、创建列表、甚至自动完成句子。这种功能可以帮助用户更快地完成文档,从而提高效率。 * 自动摘要:Notion AI
6 min read
自托管

listmonk:优秀的Newsletter自托管工具

更新时间:2023年8月16日06点59分 Ghost大概是最佳的Newsletter[1]自托管方案,但一来它的学习与搭建成本比较高(参考我的#Ghost 系列博文),二来在Newsletter方面也有诸多限制:不支持SMTP,只支持Mailgun的API。 假设你拥有可用于批量投递的企业邮箱(从知名品牌服务商那儿获取的个人邮箱和非独立公网环境下自建的邮箱并不适合用来发送批量邮件——这应该成为常识),希望进行Newsletter形式的内容创作,Listmonk可以用作Ghost的补充工具。或者你并不需要一个博客,而是将listmonk单独使用——提供给访客一个简单的订阅表单,文章不发布于网站,只从邮件推送,此外也支持短信、手机通知,这个demo可以体验完整的功能,这里主要介绍如何安装。 官方文档介绍的是用docker-compose安装,默认配置也将安装Postgres DB,Postgres是必须的,许多Docker项目都依赖Postgres数据库,我建议独立安装,让许多服务连接同一个容器,安装教程参考postgres - Official Image | Docke
4 min read
砖工技术

Docker版PostgreSQL升级迁移(慎用Watchtower更新基础服务)

Docker容器更新是个麻烦事,我的话因为大部分服务只有自己在用,也做了数据持久化和备份,就用Watchtower一键更新,这样做很方便但也可能会产生问题,因为有些项目版本迭代会导致配置、数据以及网络环境不兼容,我碰到过的就有:Alist从V2升级到V3导致配置重置;一个更新失败导致后续所有的容器丢失(大坑,建议还是一个一个更新而不是全部一起更新)等等。这次又作死更新了postgres,发现大版本已经从14升级到15了,提示数据库不兼容: PostgreSQL database files are incompatible with server. 迁移方式 官方支持的方式: 1. pg_dump或pg_dumpall,这种方式将数据库转储为一个sql文件,在新旧数据集导出和导入,缺点是速度较慢,迁移多个数据库比较麻烦,似乎也不支持非文本数据,我没有测验过,参考教程1、教程2; 2. pg_upgrade,此种方式不需要中间文件转储,速度较快,但是除了要复制数据文件,还要手动复制容器中
6 min read
Ghost

Ghost进阶:存储库和编辑器

更新时间:2022年10月22日15点37分 存储库的选择 Ghost编辑器默认将图片上传在本地content/images文件夹,支持第三方存储库,已提供的适配器包括Http-Store 、WebDAV、GitHub、Amazon S3、七牛云、又拍云、阿里云 OSS、Azure 云存储等,其中有些可能不兼容Ghost 4.0及以后版本。另外可以自己开发适配器——Docker部署的话,需要重新封装镜像,这为升级带来不便。 默认的本地存储库有许多缺点: * 尽管图片作为静态内容,可以用CDN缓存,但是和文章在同一个源站还是会占用比较大的上行带宽和流量; * Ghost对隐私的保护是不够的,照片通常会带有包含地理位置等隐私信息的元数据,虽然博文默认加载的是压缩和删除过元数据的照片,但是原始照片也保存在本地存储库中,可以以某种方式访问到; * Ghost没有图片管理界面,删除只能在文件夹中进行,不管博客前端是否加密、文章是否发布,上传的图片可通过直链公开访问的,因此,Ghost可以当作一个简单的图床,但最好不要把它当作个人日记本上传私密照片。 手动压缩图片和删
4 min read
自托管

使用C2 Object Storage作为图床

C2 Object Storage是群晖提供的云存储服务,有15G/月的免费额度(存储空间与流量),付费计划也相当实惠,大陆地区可直接访问北美和欧洲两个数据中心,实测下载速度可达5M/s左右,这两个数据中心的额度是彼此独立的,如果你拥有群晖账号,则可以一键开通C2并在这两个区域任意切换,Synology 知识中心-C2 Object Storage可以找到有关安装与使用的说明。 C2 Object Storage兼容大部分S3 API,在我看来,比较大的缺憾是不支持网站设定(文件直链,即链接域名不可自定义,并且是动态生成的:以Endpoint+有效期签名的形式)和CORS(跨站资源共享),不过,有办法解决这些问题,至少作为图床来说是足够的。 这得益于Alist这款开源文件列表托管程序,它可以将阿里云盘、OneDrive、蓝奏云、FTP、AWS S3、WebDAV、百度网盘、夸克网盘、一刻相册等个人网盘、对象存储服务OSS转为Web目录和WebDAV,并支持将其中的文件跨域直链,前提是你拥有一台24小时运行的服务器,并用Docker的方式部署它,部署的教程参考官方文档即可。
5 min read
自托管

自建邮局一年后的经验之谈

近日,一则“某国外老哥关闭自我托管了23年的邮箱,转而向大厂投降”的新闻[1]引起热议。 说的是电子邮局大厂(Outlook、Gmail等)会屏蔽家庭宽带的 IP 地址,有些甚至会屏蔽一些独立公网 IP,自托管的邮箱向这些主流邮箱投送邮件,要么被拒收,要么被当作垃圾邮件,由于大部分人使用这些邮件服务商,这让自托管变得困难。 我也使用自托管邮箱,早先检查DNSBL数据库发现,的确我源服务器的IP总是在个别垃圾电邮黑名单里,通常家庭宽带运营商(ISP)默认将分配给家庭用户的公网IP都列入政策封锁列表(PBL)中,实测至少Outlook会屏蔽直接从我源服务器发出的邮件,QQ邮箱倒是来者不拒。 如果你需要使用自己的域名邮箱,一种方式是使用阿里云、Zoho之类的企业邮,有免费的,功能受到限制,需要提交一些个人信息,使用一段时间后容易收到一些广告邮件等等缺点,更重要的是:数据并不掌握在自己手里。因此,如有可能,邮箱当然还是自建的好。 自建邮局并非不可行,有避免被主流邮箱屏蔽的方法:使用中继主机。我开通了Amazon SES(主用)和Mailgun(备用)
6 min read
Ghost

Ghost进阶: 一些依赖项的配置

更新时间:2022年9月15日13点40分 配置方式 如果没有自定义配置Ghost将使用默认配置,自定义配置:config.development.json和 config.production.json,这两个文件分别应用于开发和生产运行环境,默认在环境变量中指定: NODE_ENV=production(or development) Docker部署的容器直接映射配置文件在本地,方便修改,修改后重启才能生效。这两个文件在容器中的路径是: /var/lib/ghost/config.production.json /var/lib/ghost/config.development.json 环境变量也可以替换默认配置中的选项,嵌套配置选项使用两个下划线分隔,例如: admin__url=domain 对应: "admin": { "url": "domain"
4 min read
自托管

解决群晖 Vaultwarden WebSocket的问题

更新时间:2023年7月29日00点30分 Vaultwarden可以在服务端与客户端实时同步,通过持久的WebSocket连接实现[1],因此仅限于浏览器插件和桌面软件,移动端的同步则需要在APP上手动刷新。 v1.29.0 升级说明 Vaultwarden 升级到 v1.29.0以上版本后 WebSocket 通过 Rocket 连接(默认启用),将不再需要单独的端口。旧的实现在v1.29.0中仍然可用,但这将在未来被删除。 可以在配置文件“.env”中“WEBSOCKET_ENABLED=false”关闭旧的 WebSocket 连接。 Nginx反代仍然需要设置Upgrade、Connection。以下配置方式Vaultwarden不再需要,不过可以作为群晖自定义Nginx配置的示例。 配置步骤 想要启用WebSocket通知,首先在.env或环境变量中设置字段:WEBSOCKET_ENABLED=true,如果通过Dcoker 桥接,将WEBSOCKET_PORT端口映射到外部环境(
7 min read
Ghost

Ghost进阶:邮箱配置避雷

更新时间:2022年8月28日00点02分 发送邮件类型 Ghost站点产生两种邮件类型,一种是通过SMTP发送的事务性邮件,用于会员注册/登录确认、管理员密码重置等;另一种是通过API发送的批量型邮件,用于Newsletter新闻通讯:文章批量推送到订阅会员的邮箱。目前批量邮箱仅支持Mailgun的API,尽管官方表示后续将提供更多接入,但这是一个长期以来就有的需求,恐怕短时间内不会得到开发。 如果要用Mailgun以外的邮箱发批量邮件,只能结合Zapier或自己开发外件,这里有一个例子,需要许多额外的工作。 为什么不能用SMTP发送批量邮件? 首先一般邮箱服务商有限制,不允许用户同时发送大量邮件;另一方面大多数收件人的邮箱也会过滤从未知域名、未知IP发送的大量邮件,甚至包括合法的电子邮件服务提供商,一经检测大量发送,会被当作垃圾邮件,并将IP拉入黑名单。这是一种保护措施。 Mailgun开通过程中遇到的问题 Mailgun是一家提供发送、接收和跟踪电子邮件的服务商,每个月有发送1000封的免费额度,我在注册过程中碰到一些问题: 1. Mai
5 min read
Ghost

Ghost进阶: Cloudflare相关

更新时间:2022年9月6日23点56分 图片无法跨域 关闭"Scrape Shield-Hotlink"保护(防止站外链接指向您的图像。)否则NewsLetter无法显示文章中的图片。 用Cloudflare Web Analytics Cloudflare 有一个功能全面的网站分析(Web Analytics)面板,如果你的域名托管在Cloudflare,则会自动进行访问统计,不需要在网站中植入脚本;否则,需要一段Cloudflare提供的JavaScript代码,可以在Ghost-Sttings-Code injection中引入,实测会被浏览器AdBlocker广告过滤插件会拦截,因此,如果域名不在Cloudflare解析,推荐用自托管的站点统计工具umami(Demo),好处是可以统计所有时段而不仅限于一个月,其他与Cloudflare相差无几。 用Cloudflare CDN Cloudflare的免费CDN只提供中国大陆以外的,大陆区访问延迟过高(响应200ms)左右,有时候还比较拥堵,当然对于自娱自乐个站来说,这些并不是考虑的重点。
6 min read
砖工技术

OpenPGP上手指南

久闻中本聪[1]用PGP对邮件签名,这让他保持匿名交流的同时避免身份被伪造,其背后是一种称之为OpenPGP的协议,这是什么?除了给邮件加密和签名,还有哪些用途? 简要介绍 简而言之Phil Zimmermann在1991年创造了PGP程序,然后1997年开发它的团队提出了OpenPGP协议,随后成为通用标准,任何符合这一标准的程序也被称作OpenPGP,相互兼容,其中常见的有PGP、GnuPG、OpenPGP.js等。 OpenPGP使用了对称和非对称加密,具体支持的对称算法(如AES)和非对称算法(如RSA、ECDSA)目前都没有破解的可能。对称加密和解密用的是同一个密钥,密钥如何安全传输和保存是个问题;非对称方式则是一对密钥,可以用公钥加密然后用私钥解密,或者私钥加密,公钥解密。公钥和私钥数学上等价,公钥可以公开,私钥自己保存。对称加密的性能(速度)要优于非对称加密,OpenPGP标准是以非对称方式加解密"对称加密的钥匙"[2]: 以邮件为例,实现两种功能: 1. 邮件加密,A发送加密邮件给B,过程首先随机生成对称加密的钥匙,加密明文内容,
11 min read