Langflow中配置Milvus注意事项

若在Langflow中使用Milvus作为Vector DB,则在配置时注意以下几点,很容易出错。

1.字段名称与字段属性必须要与Milvus中定义的匹配。Primary Field Name,Text Field Name与Vector Field Name


如上图对应的Milvus字段定义如下所示(使用Attu工具)

注意:vector字段的类型与长度必须要与Embedding中返回的长度与格式一致,否则会存入失败;另外metric_type要与具体的检索数据格式匹配。

2.若Milvus开启了认证功能,则填写的Connection Password不能只填写Milvus的密码,而应该是username:password格式的组合(若Milvus账号与密码分别为root与Abc123#,则此处填写的值应该为 root:Abc123#)。

《ToB的本质》摘录与感触(1)

“而国内的企业软件仍重度依赖于售前,交付,沟通,驻场等服务,对这些与客户同协同律的工作的依赖,意味着地区壁垒可能通过企业客户而对软件厂商的经营模式产生间接影响。”——软件只是实现客户定制的工具罢(还不错的工具)?

“换句话说,企业软件行业可能少有颠覆性的新机会,现有大厂可以相对安稳地经营下去,持续享受整个市场水涨船高带来的福利。”——企业软件解决的痛点不够痛?

“销售扩张时优先设立地区线,而后考虑行业线,理应具备最佳的性价比。”

“近10年以来,有多少旧人折戟沉沙,就有多少新人奋勇争先。诸多我尊敬的团队,景仰的前辈,未坚持到日出之刻;多少优秀的产品,精致的服务,徘徊在黎明之前。”——创业维艰呢


“稳定且仍在发展的广阔土壤,较低的门槛,专业的需求以及纷杂的壁垒,这“大,专,低,杂”的因素综合在一起,互相作用,共同构成了行业珊瑚礁状的形态特点。”

“这像是企业软件行业存在的市场壁垒,让大资本与巨头食之无味的同时 ,给无数创业者和管理者以穿越周期,安稳栖身的机会。”——无序意味着机会。

“在社会中的其他科技领域增长乏力时,企业软件行业可能以其特殊的结构,稳定的土壤,庞大的需求,较低的门槛,纷杂的市场壁垒,吸引大量科技和工程领域人才进入耕耘。”

“当一个具备标准功能,标准流程的企业软件产品交付给客户时,会同时发生3件事情:客户的认知需要与软件价值达成一致;企业的流程需要与软件支持的流程对齐;旧有的系统需要与新软件完成对接。”——软件开发结束只完成了一小步。


“软件厂商和投资者如果抛开对低利润,难扩张的重交付模式的厌恶,只从市场整体的利弊出发,不带感情色彩来看,或许会发现:可以(或愿意)提供重交付模式,反而是厂商具有的,符合市场需要的竞争优势。”——优势由交付决定??

“发展不是规划出来的,而必须是实践出来的。”

“定制多,交付重,离业务近,却解决了企业的核心问题。”——服务模型(管家式服务)。

“对老旧系统的兼容问题,属于非功能性质的需求,对技术水平和投入的隐性要求很高,会给企业带来极高的成本,且没有经验的人员很难预估其难度。”——骨头上的肉。

“老系统带来的交付难度可作为衡量企业的信息化阶段和步幅的指标,交付难度越低,企业的信息化成熟度可能就越高。”


“中国企业软件的云化趋势是由中小企业(特别是科技企业 )和新兴企业的快速发展带动的。”

“需求是发展的驱动力和方向,但又天然具有一定的模糊性,盲目性,甚至欺骗性。”

“SaaS只能解决产品成本问题,无法绕过软件产生价值的必要步骤。国内大部分企业缺的并非单纯的产品,而是顾问式的,能落地的解决方案。”——有多少清晰的认知到?

spring-oauth-client v2.0.0发布,OAuth2.1客户端参考实现

spring-oauth-client 发布了v2.0.0版本,全面支持OAuth2.1协议的各类grant_type(如 device_code),对应不久前发布的 sping-oauth-server v3.0.0版本功能。

此版本升级更新的主要内容如下:

  1. 底层安全架构升级:jdk 升级 17 (相比 jdk8 性能与稳定性有大提升), spring6.x, springboot3.x, thymeleaf 替换 servlet/jsp
  2. 增加支持OAuth2.1协议中的 device_code 与 jwt-bearer 两种实现(同时弃用了旧的grant_type,如password),并提供相应的工具类
  3. 构建产物由war换成jar,更便捷
  4. 界面使用说明按OAuth2.1协议进行更新,更友好理解
  5. 日志框架升级,由logback替换旧的log4j

v2.0.0版本链接:https://gitee.com/mkk/spring-oauth-client/tree/2.0.0/

【转】SAAS软件-ToB 破局之道

一篇把中国企业软件真正的困局、现况和我实践的破局之道串起来讲完。

有未知,就有预知。有预知,就有无知。

我们回到现实。中国 SaaS 的基本市场情况,我叫它“捡烟屁股”。

在两三年前,美股 SaaS 还没如此规模的、成批量的爆发,该领域国际资本还未外溢到中国,大部分 ToB 人只能徘徊在中国经济主体之外,捡着中国经济发展的缝隙,寻找客户,像在捡别人抽剩下的烟。

SaaS 产品通用性根植于目标市场中实践和流程的通用性,不能凭空编造而来。

而在中国企业中,由于通用行业范式的缺失,市场竞争机制的不透明、甚至不可控制、无法预测,市场主体的经营管理模式千奇百怪,行业和区域间沟壑纵深。由此得出推论:中国的企业软件模式,必然体现为“主干小、四肢大”的“向日葵模式”

以竞争为核心的市场,天天看的都是对手,打的是情报战。以客户为核心的市场,眼光才能看向客户,打的是服务牌。只有后者,才会行业有长久效益,也才有持久增长的基础。

而对于发展中国家而言,最高效的办法,其实就是最土的办法:抄作业。然而,如果抄个答案,没理解过程,无法推一反三,必然在中国这片迥乎不同的土壤中,无法得以应用。必须把信息拆开揉碎,消化掉,变成自己的养分,并因地制宜地创造最佳方案。这种“既有方案分析、拆解、组合、应用”的思路,和发达国家的“探索创新”模式,对资源、人员、理念的要求完全不同,也不应追求相同。

产品经年累月积累的那剩余 80% 的功能,就只为满足剩余 20% 客户中的一小部分。很多产品能力,我扪心自问,没有信心哪怕 2% 的客户能够使用到,但为了“未来可能出现的需求情况”,仍然会做到主线版本中。这和纯粹做交付和服务比起来,毕竟有产品在,肯定要更好。但距离理想仍然很遥远:这是偷懒的做法,给了自己在“做产品”的虚假预期,得以获取心理慰藉,其实还是在做交付,只是把交付做进了产品。

原文链接:https://mp.weixin.qq.com/s/DltDGK5BCjnwW-n1V2OElQ

寻找“身体-生活-工作”的平衡

在各个焦虑的场景里,更多的忘记了是什么在支撑着你走到今天,走过时日。

是身体。在节奏越来越快越来越紧急的生活中,生活为了工作,工作为了生活,是吧?有几分道理。我们熬夜,我们深度工作许久,总还是觉得年轻身体能抗的了。

没有善待的身体,需要在各个之间寻找一个平衡,加上身体这一要素。

如果说工作太苦,需要更多的生活,那给更多的生活时,身体就更好或更健康了,不见得。不工作的时日就是生活,而生活的时光中就让身体更好了,不见得。

这逻辑关系对否?

不能因为工作了10+小时就是在伤身体,而躺在沙发上一天玩手机不工作就是在善待身体了。许多的逻辑不能用时长来看待,只能算着是一个潜在的因素罢了。

阿里的“认真生活,快乐工作”需要每个人自身去考评,很难有标准的依据去平衡。

如何善待身体?定期体检(一年一次),周期性的坚持锻炼(最好以周为单位,每次1小时以上),睡足8小时。

如何过好生活?没有一个标准的答案,心态好,积极向上,开开心心,有人有事有意义就行啦。

工作中多喝水,多走动(每天1万步),多上厕所。特别是IT行业,要寻找到自己的平衡之术,才能在坚持多年后的工作中有点点成绩,且还有个不错的身体。跨掉的不会是工作,也不会是生活,唯有你的身体会跨掉。

平凡人做非凡事,非凡人做非凡事。其实平凡人就干平凡事。工作的核心要把难的事变成平凡人也能干,还能干好;而不是总希望平凡人去干非凡事,或一个人去干几人的事,往往事与愿违,半斤八两。

IT人经常所说的996,但又有许多人坚持了多年的996而继续着,坚持每个周两次锻炼,篮球足球或游泳,当身体锻炼舒展后,在一周5天多的工作中变得紧绑,而又在下一个周末的锻炼变得舒展,周期性地循环着十几年;但凡有点小的成绩出来之时皆是多少个小周期的循环着坚持着。

价值皆在工作中体现,而不是说你价值多少后才去证明,那往往是证明不了的。没有哪公司会对你说:给你支付100万/年的福利,你去给做出100万的价值回报公司。弄反了的人。

身体里装着你的灵魂你的思考你的邪恶你的世界,还有整个宇宙的奥秘。400KM以上速度的撞击身体,瞬间灰飞烟灭成气态,比如MU5735。

OIDC中JWK,JWKS的介绍与使用

JWKS全称为 JSON Web Key Set,是指多个JWK组合在一起的一种格式(详见 https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-5 );

JWK全称是JSON Web Key,其标准协议链接:https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41

JWK在OIDC中的主要作用是为JWT(id_token)提供加密密钥,用于加密/解密或签名/验签,是JSON格式的数据。

综上所说,掌握了如何生成JWK,再按照JWKS协议的要求组合起来即可。根据使用不同的加密算法,各种算法的JWK展示内容会有些区别,一个使用RSA算法的JWK格式的数据如下,使用jose4j生成:

{
  "kty": "RSA",
  "kid": "myoidc-keyid",
  "use": "sig",
  "alg": "RS256",
  "n": "xMNL1jDatbHWGDH_H9GZbb2R4Ck2ga-lfE6wJnno_MfqJibSqkiLTZ7P06woJFxzB0WDu2PBe-ptRNoJhEnkzL8c1mgbGOdPVCsaaDm-POGZ3gnWGcyzyuJ9s9km41Rlan3TuuC3HIniY4bmyQAZ-SLwrFk7Bfa91ui4F9S5RvM",
  "e": "AQAB",
  "d": "q73XDM65p8vgll_VUn2NUPcdQ65VUB7y76xzHjJchX8tRj2utUj6pjaPKi_jHdG_6UHouIBa2oEE_QrfMaOZ2wA6LgYPXT_a296LKoOtKKRUlgob_leHxn0FJxLOXtEHgMqDgtMQ1-eFipsFgriip94dmcLEWW3YVK_y5JwJrnE",
  "p": "7OqN19bEbMb9cr9zA98QQq9LOgvQfq5-nOvzwMsubqMosHxViRnivFz2-3LpusK7u2XEG5EljqUxZrf4lgeVmw",
  "q": "1Jy9ksoLuQ5tuc4docgLaXQWqf3iaTm3iC07AA4v9jHzvnkewWFS_PUPPcra4475Dew-y7oIENaRBMijrrWViQ",
  "dp": "HBEdhLh4xLo-RF3R7l96uauyqcnEhX1-mnCJjAmGEq1ZoK7aI0fhyJbq25cdgXaYbvb7aJilbmS7mYOp-3wiiQ",
  "dq": "NRMLn-EgHAomCgQSEZjGgISiQ71FD8-AqVXhLJpeDq9ZkWra6ptJBCyIqXxCOBwwv_EBnAnMiaeGfBM6CRr7QQ",
  "qi": "VCdAeu4h25X_kM69Netc3SKPo5P-1VjeSHz0Ko0QuSMF0INc6H2yi7hZgZuYANVaTF1Ipf6lWfHBLpuRGh3lXw"
}

JWK数据的格式具体可参见 https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4

主要属性:kty(Key类型),use(两个可选值:sig or enc),alg(具体的算法),kid(Key的唯一标识id)

 

有了JWK数据,只需要按照JWKS的格式组装成对应的JSON数据即可,以上面的JWK组装的JWKS数据如下:

{
  "keys": [
    {
      "p": "7OqN19bEbMb9cr9zA98QQq9LOgvQfq5-nOvzwMsubqMosHxViRnivFz2-3LpusK7u2XEG5EljqUxZrf4lgeVmw",
      "kty": "RSA",
      "q": "1Jy9ksoLuQ5tuc4docgLaXQWqf3iaTm3iC07AA4v9jHzvnkewWFS_PUPPcra4475Dew-y7oIENaRBMijrrWViQ",
      "d": "q73XDM65p8vgll_VUn2NUPcdQ65VUB7y76xzHjJchX8tRj2utUj6pjaPKi_jHdG_6UHouIBa2oEE_QrfMaOZ2wA6LgYPXT_a296LKoOtKKRUlgob_leHxn0FJxLOXtEHgMqDgtMQ1-eFipsFgriip94dmcLEWW3YVK_y5JwJrnE",
      "e": "AQAB",
      "use": "sig",
      "kid": "myoidc-keyid",
      "qi": "VCdAeu4h25X_kM69Netc3SKPo5P-1VjeSHz0Ko0QuSMF0INc6H2yi7hZgZuYANVaTF1Ipf6lWfHBLpuRGh3lXw",
      "dp": "HBEdhLh4xLo-RF3R7l96uauyqcnEhX1-mnCJjAmGEq1ZoK7aI0fhyJbq25cdgXaYbvb7aJilbmS7mYOp-3wiiQ",
      "alg": "RS256",
      "dq": "NRMLn-EgHAomCgQSEZjGgISiQ71FD8-AqVXhLJpeDq9ZkWra6ptJBCyIqXxCOBwwv_EBnAnMiaeGfBM6CRr7QQ",
      "n": "xMNL1jDatbHWGDH_H9GZbb2R4Ck2ga-lfE6wJnno_MfqJibSqkiLTZ7P06woJFxzB0WDu2PBe-ptRNoJhEnkzL8c1mgbGOdPVCsaaDm-POGZ3gnWGcyzyuJ9s9km41Rlan3TuuC3HIniY4bmyQAZ-SLwrFk7Bfa91ui4F9S5RvM"
    }
  ]
}

以上的JWK,JWKS的示例的完整代码(JAVA实现)可在此查看 https://gitee.com/mkk/MyOIDC/blob/master/myoidc-server/src/test/java/myoidc/server/infrastructure/JWKSTest.java。代码中还包括除RSA外,ECC,OCT的示例实现。

 

JWK本身未定义一种新的加密算法或变种,只是定义一种JSON格式的数据展示(更符合互联网传输),其底层实现依旧依赖PKI体系的技术,如x509,公钥/私钥体系。在其协议介绍中能更好地体现出来。

20200920160628

 

如果是使用非JAVA语言,也可以使用对应的PKI技术生成JWK,如openssl;

一个使用JDK自带的 keytool 工具生成的示例如下:

keytool -genkeypair -alias oidc-demo -validity 180 -keyalg RSA -keypass oidc-demo -keystore oidc-demo.jks -storepass oidc-demo

命令输入后依次填写DN的各类信息,即可生成 oidc-demo.jks文件,密码为 oidc-demo,文件中有私钥公钥等信息。

若需要导出为 x509格式数据,使用keytool命令:

keytool -exportcert -keystore oidc-demo.jks -rfc -file oidc-demo.cer -alias oidc-demo

输入密码后生成的 oidc-demo.cer文件为x509格式。