MoreRSS

site iconDevTang | 唐巧修改

iOS开发,孵化了 小猿搜题 和 小猿口算。斑马智能硬件业务负责人,带领团队研发的产品累计出货量超过 400 万台。著有《iOS 开发进阶》。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

DevTang | 唐巧的 RSS 预览

理解 MCP -读《这就是 MCP》

2025-10-21 08:36:13

一、序言

最近读完了一本讲解 MCP 实现原理的书:《这就是 MCP》,它帮助我更好地理解了 MCP,以下是一些笔记。

二、什么是 MCP

MCP 的全称是 Model Context Protocol,之所以叫这个名字,是因为它可以成为大模型调用外部工具的协议,让大模型能够补充自己的上下文(即 Context)。

在没有 MCP 之前,每个大模型都在为自己扩展调用外部工具的能力,最常见的能力就是调用搜索引擎。但是这就会造成一个麻烦:每个大模型都需要自己开发一遍调用工具(重复造轮子),而且由于协议不开放,第三方开发者无法为大模型提供更多工具。

在有了 MCP 之后,整个开发流程变成了:

  • 大模型都适配 MCP 协议
  • 各种工具都适配 MCP 协议

这样,一个新的工具出来,立刻可以为所有大模型可用,而一个新的大模型也可以立刻调用市面上公开的 MCP(下图)。

有人把这个比作 “AI 时代的 HTTP 协议”,我是比较认同的。

三、MCP 的实现细节

3.1 角色

不同于 HTTP协议的浏览器 / 服务器(B/S)架构,MCP 的协议多了一个 “主机” 的角色,一共包含三个角色,分别是:主机,客户端,服务器。

主机:创建和管理多个客户端。负责鉴权相关工作。负责多个客户端内容的聚合,

客户端:一个客户端是一个进程,负责与对应的 MCP 服务器交互数据,管理会话的状态。

服务器:为客户端提供服务。可以部署成本地服务或远程服务。

3.2 协议

MCP 使用 JSON-RPC 作为客户端与服务器通信的基础。

当服务器部署在本地的时候,它允许客户端用 stdio 的方式来传输 JSON 编码的数据。

当服务器部署在远程的时候,它使用 HTTP 来传输 JSON。

鉴权方面, 基于 stdio 传输实现的服务器直接从环境变量中读取授权凭证,而基于 HTTP 协议的服务器,基于 OAuth 2.1 实现授权。

四、如何开发 MCP

开发 SDK:MCP 支持任意语言开发 MCP 服务器,我们可以使用官方提供的 SDK 快速生成代码框架。

调试工具:官方提供的调试工具名为 MCP Inspector,用它连接对应 MCP 之后就可以在面板中调试功能。

发布 MCP:我们可以把开发好的服务发布到 MCP 市场上面供开发者检索到。

MCP 市场。市面上比较有名的市场包括:

五、MCP 的问题

MCP 发布才一年时间,所以还有很多细节未来需要完善,包括:

  • 协议对多模态内容支持不够友好
  • 鉴权机制不完善,很多 MCP 服务还未支持 25 年 3 月引入的 OAuth 鉴权协议
  • 安全防护能力弱。攻击者可以构造恶意的 MCP 服务来诱导用户执行恶意命令,从而实现信息窃取,执行恶意命令等攻击。

以上。

理解大语言模型 - 读《图解 DeepSeek 技术》

2025-10-06 22:06:51

最近收到图灵编辑刘美英老师赠送的《图解 DeepSeek 技术》,全书只有不到 100 页,而且配套了大量插画,让原本让人生畏的大语言模型底层技术,变得不那么难懂。

本书非常适合对于大语言模型零基础的读者,作为入门书籍。以下是我的一些笔记。

缩放定律(Scaling law)

深度学习的底层原理其实缺乏科学论证,最终只能用“涌现”这种现象来描述我们观察到的实验结果。这个实验结果就是:当我们提高模型规模的时候,模型的表现也会越来越好。

于是,我们通过三个要素来提升模型的规模,分别是:参数量、数据量和计算量(如下图)

我对“涌现”的理解:这个世界上很多事情都是从量变到质变,大模型“涌现”出来的智能,再一次体现了这种自然界常见的现象。比如:

  • 水在温度上升的时候,形态一直是液态,直到上升了 100 度,就开始沸腾,转化为气态。
  • 股市,前期积累的泡沫越来越大,最后泡沫破灭的时候,就会一下子跌特别多。

我对缩放定律的理解:缩放定律在自然界中也非常常见,很多变化不是线性的,而是幂律(power law)的。比如:

  • 财富的集中度。在美国前 10% 的人持有超过 90% 的财富。
  • 公司的营收排名。排名每上升一名,营收可能是下一名的 2 倍。
  • 明星或达人的收入。关注度每上升一位,收入可能翻翻。
  • 28 原理。决定一件事情的最主要的 20% 因素,占据了 80% 的权重。

深度思考

缩放定律把大家的精力都集中在堆参数量和堆算力上,但是研究人员发现,如果让模型在输出答案的过程中进行“长思考”,答案会变得显著得好。于是,除了在训练阶段发力外,我们通过让模型在生成答案时消耗更多资源,来提升答案的质量。这就是现在变得普遍的“深度思考”模式(如下图)。

在我的理解下,深度思考模式类似于《思考快与慢》一书中提到的人类的慢思考。人类大多数时候,是用直觉来决策的,因为这样效率最高,而且直觉通常来源于大量的经验(预训练),通常情况下是对的。但是,对于一些重大的决策,人类就会启动慢思考(深度思考),会花大量的时间和精力来论证自己的想法是否正确,以保证重大决策的质量。

蒸馏(Distill)

DeepSeek-R1 是一个拥有 6710 亿个参数的庞大模型,这使得部署和使用它都需要强大的硬件支持。但是 DeepSeek 创新性的开创了将自己的推理能力蒸馏到别的小模型(比如 Qwen-32B)上的方法。

具体来说,研究团队用 DeepSeek 当老师模型,让 Qwen 当学生模型。当两个模型接收到相同的提示词后,均需要输出一个词元概率分布。在训练过程中,学生模型需要紧密跟随老师模型的分布特征(如下图)。

以上过程在 80 万个样本的训练下,这些小模型学会了 DeepSeek 的思维方式,与蒸馏前相比,能力有大幅的提升。

在我的理解下,这也非常类似人类的“师徒学习模式”。我在计算机行业,我们行业的毕业生刚进企业的时候,都会有一个导师(mentor)进行一对一指导。最终帮助我们这些职场小白快速融入行业,写出高质量的代码。

以上。

但斌投资札记-读《时间的玫瑰》

2025-10-06 20:00:26

想读一些价值投资者的书,于是就找到了这本但斌的《时间的玫瑰》。这是一本写于 2018 年的书,现在已经过了 7 年。当年的很多论断,随着时间的检验会更有意思。以下是一些读书感悟。

买入价格很重要

我们常说,买股票需要关注三点:好公司,好管理,好价格。在好价格这件事情上,但斌给我们举了一个例子,也是他自己血泪教训。

但斌说:如果你在 2007 年的高点买入茅台,那么需要 2016 年(9 年后)才能解套。中间还会经历两次 60% 的下跌。所以,即便是大家公认的好公司,如果你的买入价格不对,也是有很大的风险。

关注行业周期

但斌的这本书写在 7 年前,在 7 前年,有一些行业龙头公司是被价值投资者普遍认同的,比如房地产行业的万科,以及教育行业的好未来,但斌在书中多次提到这两家公司。但是我们现在来看这两家公司,就会发现两家公司都经历了价值毁灭的过程,他们都从最高点回撤了超过 80% 。

万科股价:

好未来股价:

回撤的背后,是房地产行业和教育行业整体的低迷带来的。即便是三好学生,如果在一个下坡路的行业,也是做不出什么好成绩的。

关注行业的周期,关注政策的变化,在合适的时候卖出,这也是《股票大作手操盘术》中我很认同的趋势投资观点,在本书中,我再次感受到趋势投资的重要性。

从分歧中学习

但斌在书中提到他参加伯克希尔股东大会的一段记录:一个来自旧金山的 17 岁少年问:成为一个好的投资者的最好方法是什么?

巴菲特回答说:尽可能多地阅读。你要把各种思想装进你的脑子里,随着时间的推移,分辨出哪些是合理的。一旦你做到这样了,你就该下水实践了。

我对此也有很强的认同。学习的第一步是尽量吸收信息,而阅读是一个很好地吸收高质量信息的渠道。当然,我也认为与人交流讨论,以及观察现场同样重要,这都是获得信息多样性的重要手段。

有了信息之后,通过思考和实践来分辨信息,最终把有效的信息沉淀下来,就能成为自己的宝贵经验。

我对获取信息的方法最近还有一个新的感悟,就是“反对性”的意见相对重要,因为人会自我强化自己的观点,所以对于反对观点容易忽视。这个时候,我们应该刻意去找反对性意见,在理解反对性意见的基础上,去解释为什么观点不一样。

反对意见在投资上,也代表着市场的分歧,如果我们能够理解正反两边的观点的同时,又能够看到未来正反观点的分歧消除点,那么就可能获得巨大的收益。

之前我想要获得分歧意见非常难,因为表达反对意见通常让人感觉尴尬。现在我有一个技巧:我会问大模型,让他帮我系统性地总结反对意见以及论证理由,这对我来说非常好用,分享给大家。

以上。

投机与趋势投资 - 读《股票大作手操盘术》

2025-09-17 21:27:01

上个月见了一个老朋友:代码家。和代码家聊天的时候,他提到了趋势交易,他还推荐了《股票大作手操盘术》

该书的核心思想就是做趋势交易。具体做法是:在形成趋势前观望,在趋势确定建立后顺着趋势做空或做多,在趋势快要结束时,提前补仓或卖出。

我觉得该思想同样适用于长线操作:每家公司都有上升期和平稳期以及下降期。在公司上升期的时候加仓,平稳期的后期卖出,避免下降期的戴维斯双杀,会是非常重要的。

举例来说:

  • 房地产公司的上升期投资,相关的股票,即便是恒大,也涨很多。只要你在合适的地方卖出,你就不会亏。

  • 很多互联网公司的企业,在互联网泡沫期的估值很高。比如微博,哔哩哔哩,陌陌,包括粉笔公考,猿辅导。只要你在合适的地方卖出,也可以吃到很多的时代红利。但是如果你一直秉持长期持有,就可能不挣钱或者只挣很少的钱。

以下是微博的股价走势,现在的价格(12)比发行价(20)还低,但它曾经涨了 5 倍多。

以下是哔哩哔哩的股价走势,如果你买在高点,那么会亏 80%。

以上两个公司就是典型的“互联网”红利公司,在互联网红利期拥有巨大的股价泡沫,在红利结束的时候,股价回归理性。

我感觉趋势投资不是做短线的投机,而是把握时代的大势。做时代周期(5 年左右)的波段,抓时代红利企业,但是又很冷静,知道自己是投机,能看到卖出下车的时间点。

我们如果能够在互联网红利期,提前买入微博和哔哩哔哩这样的高用户量的产品。在红利结束前卖掉。我们假设卖在离最高点回撤 50% 的地方,也会有 2-4 倍的收益,整个持股周期在 2-3 年。

但说起来容易,执行起来还是挺困难的。比如下面是陌陌的走势,2014 年上市,2017 年股价才开始上涨,2018, 2019年均在年中大幅上涨,之后又回到 2017 年的价格。再之后就一路下跌,现在的价格是发行价的一半。

此书对我最大的价值,就是对价值投资与时代红利周期有了挂钩,之后在思考和判断公司的时候,除了思考价值层面的事情外,更应该思考时代的变化与周期。

以上。

信息爆炸时代,付费信息才是最好的过滤器

2025-08-31 17:46:40

“免费的午餐往往是最贵的。为知识付费,是投资自己的认知能力,是这个时代每个人都应该认真考虑的选择。

前几天刷抖音,看到一个财经博主在讲”普通人如何实现财富自由”,视频里充满了夸张的表情和煽动性的文案。视频末尾,他推荐了一个”0元理财训练营”,声称能教你”三个月内资产翻倍”。

我想起了自己订阅《财新》时的犹豫。为什么我们对免费的低质量内容习以为常,却对高质量的付费内容如此吝啬?

这个信息爆炸的时代,我们真的需要为知识付费。

免费内容的陷阱

质量之殇

免费的内容最大的问题,就是它根本就不免费。

当我们在抖音上看到那些”三招教你理财”、”这样做就能年入百万”的短视频时,我们以为自己没有付出成本。但事实上,我们付出的是注意力,付出的是判断力,付出的是被误导的风险。

这些内容利用了人性中最原始的弱点:贪婪和猎奇。它们用夸张的标题吸引眼球,用简化的逻辑迎合认知懒惰,最终的目的不是传播知识,而是引流变现。

我记得罗振宇在《逻辑思维》中说过:”免费是世界上最昂贵的东西”。当时不理解,现在想想,免费内容的真实成本往往比付费内容更高,只是这个成本被巧妙地隐藏了。

注意力的谋杀

短视频平台更可怕的地方在于,它们正在系统性地破坏我们的专注力。

抖音上的财经内容,往往用夸张的配音、快节奏的剪辑,以及故意制造的冲突感来抓取注意力。”震惊!这家公司竟然…”、”你绝对想不到的赚钱方式”,这样的文案充斥着整个平台。

长期消费这样的内容,就像吃快餐一样,看似填饱了肚子,实际上营养不良。我们的大脑习惯了这种高刺激、低思考的信息输入方式,逐渐失去了深度阅读和独立思考的能力。

更要命的是,算法推荐让我们陷入信息茧房。平台为了让用户停留更长时间,会推送用户喜欢的内容,而不是用户需要的内容。结果是,重要的时政新闻、深度的社会分析被娱乐化的内容所淹没。

广告的毒药

隐藏的商业动机

最近几年,我观察到一个现象:几乎所有的免费财经内容,最终都指向商业变现。

公众号上那些分析经济形势的文章,看似专业,细读之后会发现,作者往往会推荐某个理财产品或者某个投资平台。文章的逻辑链条是这样的:经济形势不好 → 需要理财 → 推荐我的产品。

抖音上更直接。那些所谓的”财经大V”,视频内容是免费的,但最终目标是让你扫码进群,然后推销各种理财课程、股票软件,甚至是可疑的投资项目。

这种商业模式本身没有问题,但它扭曲了内容的客观性。当内容创作者的收入来源是推广费而不是内容质量本身时,内容质量必然会让位于商业转化。

算法的偏见

算法推荐进一步加剧了这个问题。

算法关心的是用户停留时间和点击率,而不是信息的准确性和重要性。一条耸人听闻的假新闻往往比一篇严谨的深度报道有更高的传播率。

结果是什么?真正重要的政治、经济、社会议题被娱乐化、碎片化的内容所遮蔽。当所有人都在关注某个网红的恋情时,有多少人知道最新的货币政策调整?当大家都在讨论某个段子时,有几个人了解正在发生的地缘政治变化?

这不是危言耸听。信息质量的下降最终会影响整个社会的决策质量。

付费的价值

面对这样的信息环境,我选择了用钱投票。

我的付费清单

去年开始,我陆续为以下内容付费:

  • 《财新》杂志:每年几百块钱,但能获得相对客观、深度的财经报道
  • 财经类每日新闻:每天需要花 1 块钱,信息密度高,没有广告干扰
  • 《三联生活周刊》:优质的长篇报道,帮我理解复杂的社会现象
  • 小宇宙上的访谈节目:深度对话,远比短视频更有营养
  • 请一些行业专家咨询,事后发微信红包感谢

付费内容的优势

付费内容最大的优势在于,它的商业模式相对纯粹。

当我为《财新》的内容付费时,我就是《财新》的客户。《财新》需要对我的钱负责,需要提供有价值的内容来留住我。这种直接的商业关系,比那种”免费内容+广告变现”的模式要健康得多。

付费内容的第二个优势是质量控制。

以《三联生活周刊》为例,它的记者往往需要花费数月时间来调查一个选题,采访几十个相关人员,查阅大量资料,最终呈现出一篇万字长文。这样的内容制作成本很高,只有付费模式才能支撑这样的投入。

而免费的自媒体内容呢?往往是一个人坐在电脑前,花几个小时搜集网上的资料,拼凑出一篇文章。质量的差距是显而易见的。

一点反思

诚然,付费内容也不是万能的。

《财新》有时也会有立场偏见,《三联》有时也会有不够深入的报道。付费不能保证内容的完美,但它至少能保证内容制作者的基本动机是提供有价值的信息,而不是引流变现。

另外,并不是所有人都有条件为信息付费。这涉及到信息公平的问题,也是整个社会需要思考的问题。

但至少对于有条件的人来说,为高质量内容付费,不仅是为了获得更好的信息,也是在用消费选择来支持优质内容的生产,推动整个信息生态的良性发展。

结语

这是一个最好的时代,也是一个最坏的时代。

说它是最好的时代,是因为获取信息从来没有像现在这样便利。说它是最坏的时代,是因为信息质量从来没有像现在这样参差不齐。

在这样的环境下,为知识付费不是一种消费,而是一种投资。投资自己的认知能力,投资自己的判断力,投资自己的未来。

毕竟,在这个瞬息万变的时代里,唯一不变的就是变化本身。而应对变化的最好方式,就是保持持续学习的能力。

免费的午餐往往是最贵的。为知识付费,是这个时代每个人都应该认真考虑的选择。

GESP 202506 5级真题「奖品兑换」题解

2025-07-01 22:29:46

题目描述

分析

此题首先是不能暴力枚举的,因为 n 和 m 最大情况下是 10^9,这个数据规模,暴力枚举肯定会超时。

然后我们可能想到贪心,但实际可落地的贪心的策略总是有特殊情况。

最后,假如我们可以检查一个答案是否可行,我们就可以用二分答案+判定的方法求解。

二分还有一个要求,就是答案是单调递增的。我们可以想像,随着兑换券的递增,如果限定 n 的值不变,那 m 的值肯定是递增的。所以此题符合单调递增的条件。

解法

那么,对于一个可能的答案 k,我们怎么检查答案是否可行呢?

  • 我们先把 n 和 m 排序,让 n 是较大者,a 和 b 排序,让 a 是较大者
  • 对于一份奖品,可以是 n-a, m-b 来获得,也可以是 n-b, m-a 来获得,我们让 d=a-b
  • 因为 a 是较大者,所以当更换兑换方式的时候,n 的值从n-a变成了n-b,相对来说,增加了 d,m 的值减少了 d

所以:

  • 我们可以先用第一个兑换方法,把 k 个奖品换成 c1=a*k 张课堂优秀券, c2=b*k 张作业优秀券
  • 如果 c1 <=n, c2 <= m 那这个答案 k 显然就是可以的。
  • 但如果 c1 > n,我们可以想到,把超额出来的兑换换成第二个兑换方法

具体如何换呢?

  • 我们先计算超额的值,为 c1-n
  • 每次兑换可以让这个值少 d,所以需要换 r=(c1-n)/d (向上取整)r=(c1-n+d-1)/d
  • 经过如上的兑换,c1 的值减少了 d*r,c2 的值增加了 d*r

最后需要注意,因为 a*k 的范围可能超过 int,所以需要把计算过程都用 long long 来保存。

总结

此题考查了:

  • 二分+判定的解法
  • 向上取整的写法
  • 数据范围的预估
  • 时间复杂度的预估

这还是非常综合的一道题。对于没想到二分的学生,也可以用贪心或者暴力枚举骗到不少分(估计 10-15 分),所以此题也有相当的区分度,各种能力的学生都可以拿到部分分数。

详细代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
* Author: Tang Qiao
*/
#include <bits/stdc++.h>
using namespace std;

long long n, m, a, b, d, ans;

bool test(long long k) {
long long c1 = a*k;
long long c2 = b*k;
if (c1 > n) {
long long r = (c1 - n + d - 1) / d;
c1 -= r*d;
c2 += r*d;
}
if (c1 <= n && c2 <=m) return true;
else return false;
}

int main() {
ios::sync_with_stdio(0);
cin >> n >> m >> a >> b;
if (n < m) swap(n, m);
if (a < b) swap(a, b);
d = a - b;
long long l = 0;
long long r = n;
while (l <= r) {
long long m = (l+r)/2;
if (test(m)) {
ans = max(ans, m);
l = m+1;
} else {
r = m-1;
}
}
cout << ans << endl;
return 0;
}