Semantic Kernel × MCP:智能体的上下文增强探索
Semantic Kernel × MCP:智能体的上下文增强探索 本文深入探讨了 MCP(模型上下文协议),由 Anthropic 设计的开放协议,它如同 AI 领域的 USB 接口,旨在通过统一接口解决大模型连接不同数据源和工具的问题。文章详细介绍了 MCP 的架构、核心角色、工作原理以及如何与 Semantic Kernel 集成,为 .NET 开发者提供高效接入社区 MCP 服务器的方法,减少重复性平台对接工作。此外,还展示了 MCP 在操作浏览器、访问文件系统等场景中的应用效果,并探讨了其局限性及未来发展方向。在 AI 技术快速发展的背景下,MCP 的出现为实现 AI 模型的 “万物互联” 提供了可能,值得开发者关注与探索。
基于 K-Means 聚类分析实现人脸照片的快速分类
基于 K-Means 聚类分析实现人脸照片的快速分类 本文介绍了使用 K-Means 聚类算法对人脸照片进行自动分类的方法,解决了 “脸盲症” 问题。通过 Dlib 提取人脸特征向量,并利用 Scikit-Learn 的 K-Means 聚类分析,能够快速将大量人脸照片按人物进行分类。文章详细讲解了 K-Means 算法的原理、K 值确定方法,以及如何使用 PCA 降维和 Matplotlib 可视化聚类结果。该技术方案帮助用户高效地整理和管理照片,避免了人工分类的繁琐过程。尽管 K-Means 算法简单高效,但其对簇数和初始中心的选择较为敏感,可能不适用于噪声数据和非凸形簇,建议在实际应用中结合 DBSCAN 等算法以提高聚类效果。
容器技术驱动下的代码沙箱实践与思考
容器技术驱动下的代码沙箱实践与思考 本文探讨了容器技术在代码沙箱实践中的应用与思考。作者尝试复刻 OpenAI 的 Canvas 功能,并比较了 Canvas 与 Claude 的 Artifacts 在编程和写作领域的侧重点。文章强调了代码解释器在 AI 生成代码并执行代码中的重要性,并通过 Semantic Kernel 的 Code Interpreter 插件展示了其扩展 LLM 能力边界的潜力。同时,讨论了现有 Code Interpreter 的隔离性问题,并提出了基于容器技术的解决方案,详细描述了创建隔离代码沙箱的过程和遇到的挑战。最后,文章展望了代码沙箱在 AI 编程领域的重要性,并提出了通过 Jupyter 实现代码可视化的想法。
温故而知新:后端通用查询方案的再思考
温故而知新:后端通用查询方案的再思考 本文探讨了后端通用查询方案的实现和优化。作者从 Gridify 库获得启发,提出了一种基于泛型和接口的查询方案,实现了灵活的分页和过滤功能。文章详细介绍了方案的实现细节,包括 QueryParameter 类的设计、IQueryableFilter 接口的应用,以及如何通过自定义 IModelBinder 来兼容不同的参数传递格式,改变 ASP.NET Core 默认的模型绑定行为。文章强调了在 AI 时代,程序员应该关注复杂问题的解决和生产关系的改善,而不仅仅是简单的代码生成。
浅议 CancellationToken 在前后端协同取消场景中的应用
浅议 CancellationToken 在前后端协同取消场景中的应用 本文深入探讨了在生成式AI领域中,前后端协同取消机制的重要性和实现方式。作者首先回顾了流式传输技术,然后通过 .NET 中的 CancellationToken 和 CancellationTokenSource 的使用示例,展示了如何在异步编程模型中处理任务取消请求。文章进一步分析了在 Web 服务中,如何通过 HttpContext.RequestAborted 属性感知客户端的取消请求,并给出了具体的代码示例。最后,作者讨论了在实际开发中,如何优化取消机制的实现,以提高代码的效率和可维护性。
Semantic Kernel 视角下的 Text2SQL 实践与思考
Semantic Kernel 视角下的 Text2SQL 实践与思考 本文深入探讨了人工智能领域的最新进展,特别是大型语言模型(LLMs)的应用及其与检索增强生成(RAG)技术的结合。文章首先引用《诗经》中的名句,比喻技术的快速发展,随后讨论了 Agent 的概念,强调了其规划、记忆和工具使用的能力。作者分享了对市场上主流 Agent 产品的体验,并提出了对大模型动态规划任务的信念。文中还介绍了 Text2SQL 技术,展示了如何将自然语言转化为 SQL 语句,以及这一技术如何帮助大模型与关系型数据库连接。最后,作者反思了技术进步对人类社会的影响,特别是在效率提升与人类幸福感之间的关系。
关于 ChatGPT 的流式传输,你需要知道的一切
关于 ChatGPT 的流式传输,你需要知道的一切 本文深入探讨了生成式 AI 产品如 ChatGPT 的流式输出效果,阐释了其目的在于减少用户等待时间,而非简单模仿人类行为。文章详细介绍了 Server-Sent Events(SSE)技术在实现流式传输中的应用,并通过代码示例展示了服务端配置和客户端数据接收的方法。同时,讨论了 WebSocket 技术作为 SSE 的替代方案,强调了在 AI 应用开发中实现流式传输的重要性。此外,文中还介绍了 .NET 中的 IAsyncEnumerable 接口,并讨论了在生成式 AI 中实现取消/停止生成功能的挑战,提出了基于 WebSocket 的双向通信机制来解决这一问题。最后,文章总结了流式传输在 AI 与人类交互中的重要性,并提出了对 AI 智能本质的思考。
RAG 的是与非、Rewrite 和 Rerank
RAG 的是与非、Rewrite 和 Rerank 本文深入探讨了文化团体的形成及其对个体认知的影响,同时对社交媒体中的信息筛选和定义问题提出了批判。文章进一步分析了 AI 大型语言模型(LLM)的最新发展,特别是 Meta 的 Llama3 和微软的 Phi-3模型,以及它们在信息检索和生成中的应用。重点介绍了RAG(Retrieval-Augmented Generation)模型中的Rewrite 和 Rerank技术,展示了如何通过这些技术提升AI在处理复杂查询时的性能。通过实际的 Python 代码示例和 LangChain 库的应用,作者详细说明了Rewrite 和 Rerank 的实现方法,并通过案例展示了它们在提高检索多样性和准确性方面的显著效果。文章最后强调了RAG模型中检索(Retrieval)的核心地位,并讨论了文理科思维方式的差异及其对行动的影响。
使用 EFCore 和 PostgreSQL 实现向量存储及检索
使用 EFCore 和 PostgreSQL 实现向量存储及检索 本文探讨了如何使用 EFCore 和 PostgreSQL 实现向量存储和检索,以及如何利用 PostgreSQL 进行全文检索。文章首先介绍了向量数据库的市场需求和发展趋势,然后详细说明了 PostgreSQL 的 pgvector 插件的使用方法,包括创建表、插入数据、查询向量以及建立索引等。接着,文章讨论了如何将 pgvector 与 EFCore 集成,并提供了相应的代码示例。最后,文章还探讨了 PostgreSQL 的全文检索功能,包括使用中文分词器 pg_jieba 来增强中文检索效果,并分享了作者在构建知识库时的实践经验和思考。
基于 LLaMA 和 LangChain 实践本地 AI 知识库
基于 LLaMA 和 LangChain 实践本地 AI 知识库 本文讨论了人工智能领域的最新发展,主要围绕着基于 Transformer 和 MoE 架构的多模态模型 Gemini 1.5 Pro,以及 OpenAI 推出的支持从文字生成视频的模型 Sora。文章提到通用人工智能(AGI)的实现正在加速,指出 AI 应用落地的主要实践围绕大模型微调、提示词工程和知识增强展开。在介绍 LangChain 中的知识库构建过程中,涉及Loader、Splitter、Embeddings 和 VectorStore 等步骤。此外,还讨论了 RAG 和 GPTs 在实践中的应用,以及LangChain 中的 Chain 概念,以及如何将其与大语言模型和知识库结合以实现 Q&A 和 对话式检索。文章最后呼吁关注LangChain 的最新发展和替代品 AutoChain、Embedchain。
使用 llama.cpp 在本地部署 AI 大模型的一次尝试
使用 llama.cpp 在本地部署 AI 大模型的一次尝试 2023 年被誉为 AIGC 元年,随着技术浪潮,人们开始对人工智能的发展产生担忧。文章介绍了使用 llama.cpp 在本地部署AI大模型的过程,包括编译、量化和模型下载。通过对不同模型的体验,展示了其运行效果和评估。最后,将 ChatGPT-Next-Web 与 llama.cpp 结合,展示了本地部署 AI 大模型的潜力。整体讲述了私有化部署AI大模型的重要性和实践过程。
如何为 Git 配置多个 SSH Key
如何为 Git 配置多个 SSH Key 电视剧《繁花》中的情节展示了汪小姐和宝总之间的关系,以“排骨是排骨,年糕是年糕”来表达分道扬镳后的境况。文章讨论了人们需要亲密关系和界限感,类比工作与生活的关系。针对程序员如何为 Git 配置多个 SSH Key,介绍了生成 SSH Key、配置文件和添加公钥的步骤,以及在不同平台上验证和使用的方法,最后提及了在 SourceTree 中配置多个 SSH Key 可能带来的身份混淆问题和解决建议。
C# 使用 LibUsbDotNet 实现 USB 设备检测
C# 使用 LibUsbDotNet 实现 USB 设备检测 本文讨论了工作中围绕硬件展开的问题,以及尝试解决"简单"问题的经历。作者分享了在程序中集成某厂商硬件时遇到的挑战,并介绍了使用 WMI 和 LibUsbDotNet 库来检测和处理 USB 设备的方法。描述了如何通过硬件 ID 判断 USB 设备连接状态,并展示了通过 WMI 监听 USB 设备插入和拔出事件的实现。最终强调了编程的本质是不断照顾程序中的问题,以及对代码中的冗余部分进行反思。
基于 C# 实现样式与数据分离的打印方案
基于 C# 实现样式与数据分离的打印方案 这篇文章讨论了作者在忙碌工作生活中对打印技术和样式与数据分离的探索。作者提到了使用PrintDocument进行打印的基本思路和代码实现,以及尝试通过HTML模板来实现样式与数据分离的方案。作者还介绍了利用WebView2组件将HTML转换为图片或PDF文件,以及探讨了使用浏览器自带打印方案和RDLC报表设计的方法。最后,作者总结了这篇文章内容的零散性和对打印技术的看法。
基于 SVG 的图形交互方案实践
基于 SVG 的图形交互方案实践 数字大屏趋势中人们追求花里胡哨的外观,虽有多元素、多种类、多媒介,却仍未脱离中国式报表宿命。随着数字大屏发展到物联网和工业互联网领域,对数字大屏交互的需求不断增加,提到了使用HTML5图片热区特性和SVG实现交互的思路。通过示例展示了基于SVG的交互逻辑,比较了SVG和HTML5热区的优劣,认为SVG更友好且较为理想,但在实际应用中还需克服非技术挑战,如设计师适应矢量图格式等问题。文章指出处理拖拽、缩放、旋转等操作时会面临挑战。