分类目录归档:技术

跟电脑或是软件开发技术相关的文章

开了个新坑:写一份Dify的教程

这周一的时候我把Dify搭建知识库+对接微信公众号的服务文章发出去之后就开始着手准备写一个Dify使用教程。

这一计划酝酿了一段时间了,自从加入了dify官方拉的群,里面有些人提了很多非程序员遇到的问题,而且我看了一天dify官方教程,都写得比较简单;有很多需要编程知识的内容默认读者知道,但是会让人有些云里雾里摸不着头脑。

官方也放出过一些视频教程,案例很的内容很丰富,不过过程比较简单,讲得也不详细,我觉得更像是一种宣传片。当我深入去试用的时候会发现很多问题,一个官方分享的工作流我要花一天的时间才能消化掉并基本跑通。这些所有的因素都会导致作为一个新手,会遇到很多问题但是又无法得到很好的解答,本着先解决自己痛点的原则,我觉得需要一份教程,而这份教程没办法从外界取得,那就只能自己来写了。

学习的一个很好的方法就是费曼学习法,也就是自己学一遍,然后教给别人,能教会别人的话才证明你掌握了,所以能写出一个能让人看懂的教程就是我真正学会了的证明。

在一年多前,我就跟朋友讨论过,觉得做一个教程是很有价值的,但是我一直没有着手去写,一来是因为自己痛点不够,二来是过不了自己心理的关,觉得这些知识只要在网上挪索一下肯定都能找到。

这两点我现在有了再深的体会:

第一:之前很多的学习并没有记录下来,而且学习得也不够深入,在脑海里总有一种自己学会了的错觉,以为学过,做过一些小的尝试就是掌握了,其实想深一层自己只是浅尝辄止并没有深入掌握;其次自己的学习也不够系统,没办法做到举一反三触类旁通。

第二:小看了时间成本,就算是自己能在网络上搜索到一些教程,但是不能保证找到的是高质量的内容,我遇到过很多的教程都是抄别人的,并没有自己实践过,而且所说的内容正确性无法保证。一个知识点是有上下文或是前提条件的,如果前提条件不同,那你操作的结果就会不同,就会遇到很多报错,浪费很多时间。

再有一个就是很多作者没有用户思维,一个功能为什么这样设计,思路是什么,根本没有讲,就只是讲一个操作一个知识点。如果我的教程能通过一个个例子,把设计思路、功能讲解、后续拓展都讲清楚,那将会大大地降低时间的浪费。

一个好的教程你买的不是知识,你买的是自己的时间,自己去到处搜索,各种试错之后沮丧的心情,为什么别人正确自己有报错的焦燥。

写教程还有一个好处就是它可以做为个人原创的作品去售卖,这是一个把自己的时间多次售卖的好的方式,我可以把它发布到各个平台,利用网络销售的方法去把自己的时间和知识变现。我还可以把我的知识交给别人分销,别人可以在销售我的课程来赚到钱,一举三得。

说了这么多,我做了什么呢?

我周一的时候就去申请的小报童的专栏,然后周二的时候审核通过了,我开始为这个专栏做准备。

一个专栏要考虑的东西有很多,包括专栏的名字、内容简介、目标人群、更新频率、定价等等。我还要准备一个宣传落地页,这个页面的文案需要去设计,还可能需要一个封面。

我打算在三个平台上同时更新这个教程,分别是小报童、微信公众号、知识星球。

小报童可能有很多人没听说过,它是一个鼓励付费专栏的平台,支持买断制和订阅制,目的是为了让作者可以专心创作高质量内容,不用为了广告变现面去追热点写吸引眼球的内容。另一个原因是它支持分销功能,可以让别人帮我卖教程来赚钱,不会把别人帮我宣传当作理所当然的事,能谈钱就不要谈感情了,谈感情伤钱不是?

知识星球上发布是因为我去年创建的知识星球没有很好地运营,感觉有点亏欠之前的球友,我把这个教程在上面更新算是一份补偿吧。

公众号付费合集是因为上面两个渠道我暂时没发现他们支持视频,公众号是支持视频的,有一些内容我需要用视频的方式才能更好地传达,我就可以在公众号上发。

我会把所有教程相关的素材都保留起来,当时机成熟的时候我可能还会出一份视频版的教程,这样就实现了一鱼多吃了,我真是个天才,哈哈……

最后我说一下这个专栏:

名字:Dify从入门到实践:智能时代一步到位。

定价:199(推广期会有折扣,打骨折)

面向人群:入门级别,非编程人员也能看懂,同时兼顾内容深度,有些内容需要有编程基础才能更好地理解。

更新频率:第周更新至少一篇。

数量:至少50篇文章。

教程内容:不会是搬运官方文档的教程,而是官方文档的补充,官方文档里说得不够详细的地方我会用具体的案例来讲解并给到案例中的源码,让读者可以亲手实践。

大概目录

  • Dify的安装
  • 大模型结合
  • Dify+大模型创建实用的智能体
  • RAG知识库系统的搭建
  • RAG知识库的运用实战
  • 工作流模块知识点:
  • 文本写作工作流、
  • agnet智能体设计、
  • 节点详解:
    • 开始
    • 结束
    • 直接回复
    • LLM
    • 知识检索
    • 问题分类
    • 条件分支
    • 代码执行
    • 模板替换
    • 变量聚合
    • 变量赋值
    • 迭代
    • 参数提取
    • HTTP请求
    • 工具的使用(DALL-E3绘画、AIPPT、代码解释器、钉钉发送群消息、生成二维码、飞书、飞书多维表格、企业微信发送群消息、图表生成、Trello相关操作)
    • 发布
    • 标注
    • 监测

在讲解这些知识点的过程中我会注重案例教会,力求通过实用案例来讲解这些知识点,让读者能触类旁通,至少收获一个实用的案例,成为自己的一个趁手工具,达到学有所用。

我还用AI生成了一个教程的封面图,我从众多的图片中选取了文章开头这张

如果你对我的这个教程有兴趣的话欢迎关注我的后续更新或是加我微信:

验证信息请填:dify教程

8-19今天就只写了一篇公众号文章并发表了

从昨天中午开始,我把想法写到effie里,然后让AI帮我写文章结构,然后我再把这个改进后的想法放到chatgpt 4、cluade中去让他们帮我写结构,写文章获得了一些灵感和建议之后开始码字,到昨天晚上初稿基本完成。

今天一上午就开始把文字从effie搬到公众号后台里排版,做图片、做视频、找图片素材,然后再排版、改错别字等等。

终于在下午四点左右发表出去了,可能这篇文章永远都没有很完美的写法,但是发出去比烂在编辑器里好。

文章发出去之后有几个人加了我微信,有一些之前就加了微信的好友过来询问服务,他想定制开发一些工作流,应用到他们的游戏上面去。他们的游戏在使用AI这件事上只用到了SD和MJ来生成一些图片,在核心的地方应用不多。

他想把智能客服+语音对话加到游戏里去,还想把GM功能加上去,还有就是加上一个能提供情绪价值的聊天机器人。其实这些功能都能实现,但是要实现到什么样的效果就不一定了,目前我测试下来的话还是会有一些不稳定的回复,这可能跟所选的大模型接口有关,也有可能跟我写的提示词有关。反正我的信心不太够,特别是把它作为一个生产环境去提供服务,特别是游戏这类高并发的服务,我是没有信心。

不过功能是可以实现的,只是不能完全依赖于Dify+大模型,游戏本身也有很多的接口需要提供,也许不一定有比编程实现的效果好,但是能拥抱并尝试AI终归是好事。

今天大家都在等黑神话。悟空的发布,朋友圈上都是它的话题。从古至今都有一条通用的道理:

踏上取经路 比抵达灵山更重要

完成比完美更重要

重要的是先上路

所以想太多没用,要先上路,先发布,再改进。

去参加cocos开发者大会

今天下午是老蔡喵组织的cocos开发者大会的日子,我昨天晚上就跟老婆说过这个安排了。早上起床的时候想睡一下懒觉的,因为会议开始时间是下午两点,我估计是吃过午饭就要出门了;一早八点左右醒来,听到外面有下大雨的声音,起床上个厕所之后又在床上赖到了九点才去厨房煮了一层的饺子当早餐。

上午就是在电脑前研究lyson发的dify新教程中度过的,中午等老婆做好饭吃完都快一点半了,匆忙换了身衣服出门了,出门时还在下雨,虽然不大。我是从APM去的,地点在正佳万豪酒店,还没出地铁就收到电信的张哲的信息,说他已经到了,现场很多人。我终于是没能赶在两点前签到,但是我还是拿到了签到小礼物:一个水杯、一个小电风扇和一个袋子。

我在最后一排的左边角落找到了张哲,然后没多久将来科技的刘总和他们的技术负责人也过来了,我伸手招他们过来坐我右边。然后没多久我的合伙人唐老师也过来了。

第一个出场分享的就是老蔡喵,主要是分享小游戏和AI的内容,有部分是他之前就分享过的,有些是他之前发给我的PPT里有的,更新了一半的内容,他的演讲还是比较流畅的,但是案例不多,没有办法给人耳目一新的感觉;可能是因为我对他比较熟悉,有过多次合作的原因吧。

接着是minigame的昊总,分享了他们的minigame和他们的云服务,还有SDK业务,主打的就是帮小游戏出海赚钱,提供一站式服务。现在小游戏出海的主要形式是APP载体,不像国内有微信、抖音等的小程序运行环境。

出海主要是去往高付费人群:美国。

然后是google的游戏新业务拓展经理,一个喉咙不舒服的女生分享。可能她最近被感染了,所以喉咙发声有点抖,我听着都替她感觉到不舒服。我得到一个信息是:中国的小游戏开发者在世界范围内是占绝对领先优势的,无论是数量、质量、创意等等。现在海外的市场还比较早期,小游戏创业者出海是个很不错的选择。大部分的出海游戏都是混合变现的模式。

接着是因为要赶飞机要早点分享的TG基金会的生态增长负责人kenny,TG是一个用户快10亿的社交软件,是由俄罗斯团队开发,他们对商业化的事情不擅长,更擅长于做创新型的技术产品,有很多人已经在TG上玩出了很多花样,虽然现在TG的月活才四千万用户,游戏的渗透率也还很低,但是增长速度很快,有一个猫题材的游戏已经过千万的用户了,PPT上分享出来的才两百多万用户,也就是说短短几个月的时间用户已经增长了好几倍。同时TG还支持了区块链钱包的支付,可以说TG的生态基座已经基本建设起来了,接下来就是往里面去填充内容了。陈总他们也是TG生态合作的入驻公司之一,而且得到了孵化基金会的支持,可以说在TG平台上也是有很多的可能性,一片蓝海。

茶歇时间我找到了之前在微信上联系上的用AI做特效,还有用AI画游戏UI界面的祥云同学,我们聊了很多游戏的业务,有很多的见解都是一拍即合,这得益于我在游戏公司多年的工作经验,这种东西是别人抄不走的。接下来我们会进一步去合作,走出一条有自己特色的路子,短短二十五分钟是不够我们聊的,我们后会还在微信上聊了不少,后续会有进一步的合作。惊喜的是他后面还抽中了本次会议的最大奖:一台华为平板电脑。

最后是三七的林信均的分享,分享的内容比较高屋建瓴,没有一定年限的开发没办法找到共鸣。其实三七还是挺开放的,在很多的技术会议中都有他们的员工出来分享的环节。最后问问题的时候刚好问到三七之前分享过的用AI来做codereview的问题,刚好我能帮他回答一下,因为技术中心的技术和研发的技术是很少共通的,所以他不知道很正常;然后我在群里把杨杰写的那篇技术文章分享出来了。令大家感到震惊的是今天的会场有很多三七的员工参加,老蔡喵惊呼:我们被三七包围了。

这次会议的奖品准备得挺充分的,每次演讲嘉宾说完之后都会抽两个奖,然后提问的人也会送礼,我看到送的cocos背包还挺好看的,好想要一个。

这次面基的人挺多的,有之前在微信上加过但是还没有见到的人,也有之前菲音老同事,一些在群默默潜水的人,还有新认识的三七的员工。其实做技术的人挺单纯的,而且开放包容,一种纯粹的感觉。

会议结束之后老蔡喵叫上我上楼去吃饭,饭局中跟当天的分享嘉宾进行了深入的交流,我默默记下了很多大佬们的高维度观点,例如:有些公司不愿意升维去跟厉害的对手竞争,就在自己的圈子内做到头部,好好地吃这部分红利就好。就正如修仙的明明境界已经足以飞升,但是却压制修为不飞升一样,因为一旦飞升了,自己就是上界的新手村菜鸟了,不如留在下界当老大爽,哈哈……

我们还是要多走出去跟外界交流,只有不断地吸取外界的信息,路子才能越走越宽,呆在家里跟自己较劲是很难想到出路的。

mac book pro M1安装mojo问题处理

这两天收到了mojo的邮件,说是支持mac系统了,不过只支持arm芯片,还不支持interl芯片的,刚好我的M1就是受支持的,赶紧第一时间去安装尝尝鲜。

因为我的电脑是从intel版本的系统迁移过来的,所以经常遇到各种问题,像这次我就遇到了问题没能解决,在经过一两次失败之后,今天下午下定决定一定要安装上mojo。于是就有了这篇博客记录。下面我来说一下怎么安装上的:

在终端下安装,终端是勾上了“使用Rosetta打开”的,执行以下命令:

curl https://get.modular.com | sh - && \
modular auth mut_d2fc41f5d81f46a6a8c242f8e572f9d7

报以下的错误:

Sorry, modular is not currently supported on Intel based Macs. Please visit https://www.modular.com/mojo to learn about supported platforms. You can also build and run a Mojo container by following instructions at https://github.com/modularml/mojo

按报错应该是说不支持intel芯片的版本,那应该就是勾上“使用Rosetta打开”就是相当于intel芯片的版本。于是我把这个勾选去掉,再继续执行

curl https://get.modular.com | sh - && \
modular auth mut_d2fc41f5d81f46a6a8c242f8e572f9d7

然后报错换了:

Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!

Please create a new installation in /opt/homebrew using one of the

"Alternative Installs" from:

  https://docs.brew.sh/Installation

You can migrate your previously installed formula list with:

  brew bundle dump

在网上查到一个方法是说执行以下命令:

bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 

于是执行之后看一下最后的提示:

Warning: /opt/homebrew/bin is not in your PATH.

  Instructions on how to configure your shell for Homebrew

  can be found in the 'Next steps' section below.

=> Next steps:

- Run these two commands in your terminal to add Homebrew to your PATH:

    (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/ydb/.zprofile

    eval "$(/opt/homebrew/bin/brew shellenv)"

- Run brew help to get started

- Further documentation:

    https://docs.brew.sh

按提示在命令行中执行:

(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/ydb/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"

回车之后再去安装,竟然神奇地好了。可以正常安装了

继续执行:

modular install mojo

输出安装成功提示:

🔥 Mojo installed! 🔥

Mojo's Python virtual environment created at /Users/ydb/.modular/pkg/packages.modular.com_mojo/venv

Now run the following commands if you are using bash:

echo 'export MODULAR_HOME="/Users/ydb/.modular"' >> ~/.bashrc

echo 'export PATH="/Users/ydb/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc

source ~/.bashrc

If you are using ZSH, run the following commands:

echo 'export MODULAR_HOME="/Users/ydb/.modular"' >> ~/.zshrc

echo 'export PATH="/Users/ydb/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc

Then enter 'mojo' to start the Mojo REPL.

For tool help, enter 'mojo --help'.

For more docs, see https://docs.modular.com/mojo.

再按提示执行:

echo 'export MODULAR_HOME="/Users/ydb/.modular"' >> ~/.zshrc

echo 'export PATH="/Users/ydb/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc

然后就测试

mojo --help 

最后出来安装成功之后的提示。到此就成功安装上了,希望这个经验能帮到遇到相同问题的朋友,遇到问题不要无脑复制命令执行,看一下执行命令后的提示,按提示操作一般能解决问题。

brew updte出错解决方法记录

今天上午看到一个推说要brew更新,于是我也终于想起来要为安装的应用更新一下版本,于是我就在屏幕上输入了

brew update

但是却跑出来一个报错:

fatal: couldn't find remote ref refs/heads/master

Error: Fetching /usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart failed!

Error: Some taps failed to update!

The following taps can not read their remote branches:

  dart-lang/dart

This is happening because the remote branch was renamed or deleted.

Reset taps to point to the correct remote branches by running `brew tap --repair`

按提示应该是dart出了问题,访问不到git的地址了,于是先是做了修复:brew tap --repair,但是失败了。报下面的错:

fatal: couldn't find remote ref refs/heads/master

Error: Failure while executing; `git -C /usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart fetch origin` exited with 128.

虽然搜索到说是因为之前的电脑安装的是intel版的应用,现在是M1版的,可能不兼容,要打开终端的一个设置之类的,但是做了之后还是一样的问题。所以我就想应该重装就好,但是第一次在没有删除的前提下直接安装,是安装了最新版,但是更新brew的时候还是报一样的错,所以应该就是要先删除原来安装的版本才可以,于是想到它是用tap安装的,于是看了一下tap的用法,里面有一个untap的选项,于是就按这个来:

1、brew tap

2、找到dart的软件名:dart-lang/dart

3、brew untap dart-lang/dart

4、brew tap dart-lang/dart 

5、brew install dart

至此就重新安装了dart了,重试了一下brew update,已经正常更新,dart也已经更新到最新版了。于是我就可以继续去搞我的记单词应用了^_^

reboot and select proper boot device的第二种解决方法

今天下午,我看windows的右下角有一个升级的小图标,就点进去看了一下,需要重启,但是我不想正在工作被打断,就选择了晚上十点的时候间重启。一切都很正常,但是在我打开一个网页的时候,突然蓝屏了,然后自动重启,重启之后就出现了这个画面

看到这样的报错,我一点也不慌,看字面意思就是找不到启动盘。我轻车熟路地打开BIOS设置界面,查看启动盘的设置,结果没有问题。想想也知道是没有问题,刚才还好好地,突然啪一声就没有了快乐源泉;我只不过是为了确定硬盘有没有被正确被识别。因为没有闻到烧焦的味道,那硬盘应该是没坏的。网上的那些可以搜索到的解决方法都没有用,试过之后重启了几次,我开始担心硬盘的逻辑分区是不是坏了,我的数据要恢复的话需求好多时间。于是问了一下见多识广的网管,看他有没有遇到过这种问题。

很快他就回复了个方法:

直接把电源拔了,等一分钟之后再插回去开机!

我按这个方法去做了,插上电源开机,熟悉的开机画面又回来了

最后还是要升级更新系统,又重启两次之后正常回到系统里面。windows还是老样子,这也是我为什么不喜欢windows的原因,不过工作原因无法用苹果电脑没办法了。能解决就好,暂时就不去深究它为什么会有这样的故障了,知道的可以留言告诉我一声,非常感谢。

解决更新插件失败的问题

今天打开wordpress后台想看看有没有可以实现像微博这样的插件,然后就看到有两个插件有更新,于是我顺手就点一下更新,一阵请求过后给我抛出一个错误:“更新失败:因为我们不能复制一些文件,升级未被安装。这通常是因为存在不一致的文件权限”

于是我就打开google一顿搜,无非就是把相关的几个文件夹的权限改为755

chmod -R 755 plugins

chmod -R 755 themes

chmod -R 755 uploads

chmod -R 755 upgrade

就这几个命令,一下子就输入完了,然后再试,报错依旧,于是我就打开相关的插件目录plugins,看到那两个插件的文件名前面的拥有者是root,这两个是下载文件之后直接上传来安装的,不是在线安装的。估计就是这个拥有者的问题了,把这两个改为

chown -R www:www wpjam*

然后再去更新插件,搞定!就是这个问题了。