老AI人面对MCP、Skills等新名词

7 阅读11分钟

算法不远,AI就在身边。下面是算法服务生活时间,我是主持人TF男孩。

最近圈里天天刷 Agent、Skills、MCP。名词换得比季节快,我还在自己的工程路径上凿井:数据自己标,模型自己训,脚本自己焊。我从 RNN 一路走到 LLM,重新训练过LLM ,改造过 YOLO 。这不,用本地 OCR 加 Qwen 加 Python,游戏都能自动打。我玩一个游戏,每打一个新地图需要升5级,懒得打,还想看新地图。也没钱找代练,就自己写了一个脚本,模拟鼠标点击操作。每一步都是毫秒级。

c.gif

照这个技术看,底子还行,还算硬。但是偏偏自己看招聘启事发慌:是不是跟不上时代了?那些个MCP、Skills好学吗?我还能找到新工作吗?

我先给自己吃一颗定心丸,也给跟我一路的人吃一颗。底子没有过时。过时的,往往只是交付方式。看完效果,名词会自己掉下来。

先看效果,别急着听名词。找 NPC、点对话框、瞄准稻草人王、消失后再去找 NPC——这是我桌上那条流水线,眼睛、脑子、手都在转。不是演示文稿里的智能体,是能在 Windows 桌面上真点下去的程序。

听着很新。看着很潮。其实啊,我写这套挂机的时候,已经在 Agent 门口站了好几年。差的不是数学,是一张插头,再加一本用到才翻的手册。

一、圈里在喊的,到底是什么

大模型现在不太像聊天窗口了。更像操作系统的内核:算力在,指令集在,可它自己既没有鼠标,也没有我这行当的 SOP。

flowchart LR
  llm[LLM内核]
  loop[循环和规划]
  tools[Tool_MCP手脚]
  skill[SKILL手册]
  llm --> loop
  loop --> tools
  skill --> loop

Agent,就是给内核配上三样东西:循环、规划、手脚。丢给它一个宏观目标,它拆任务、调工具、报错了再试,直到活干完或者承认干不完。不是问一句答一句。我以前那个自动打游戏,本质上就是一个简易的硬编码 Agent——状态写在 if 里,工具焊在同一个 while True 里。圈里流行的,是把「焊死」改成「可插拔」。

Skills,别被英文吓到。它不是新权重,不是新损失函数。它就是一个文件夹,核心是一份 SKILL.md:这技能叫什么、什么时候用、步骤怎么走、失败了怎么办。亮点叫渐进式加载:平时 AI 只瞟一眼目录上的短描述,真遇到相关活,再把详细手册读进来。以前为了教模型做一件复杂的事,几千字提示词全塞系统提示里,又贵又容易把模型灌迷糊。现在把人类的行业经验打包成模块,用到再翻。跟修电器先看目录、对上型号再翻那一章,是一个道理。听着很正式,其实就这么几行:

---
name: scarecrow-king
description: 对话框里选挑战稻草人王。打架瞄准不要用。
---
# SOP
点最像「开战」且含稻草人王的一行。
没有挑战项就 Esc。禁止把 FIGHTING 交给大模型。

顺手提一句 MCP。它不是新模型。我把它理解成工具的 USB 口:截图、识别、点击,按同一套契约暴露出去。Cursor 也好,我自己的 Agent 也好,插上就能调。协议而已。同一只手,加个装饰器就挂出去了:

@mcp.tool()
def click_xy(x: int, y: int) -> dict:
    """点击屏幕坐标。DRY_RUN 时只记日志。"""
    return click(x, y)

所以那两样好学吗?对我这种训过 GLM、写过 OCR、自己转过状态机的人来说,是窗户纸。求职需不需要?需要的是能讲清楚,并且手上有一个真转过圈的项目;不需要的是把框架名词背成喜鹊。市面上不少人会画架构图,未必能让键鼠在游戏窗里点准。我若能把两头接上,反而稀缺。

二、原来那个项目,到底焊在哪

我拿自己这条传奇单机挂机开刀。活很具体:找 NPC,打开对话,认出「稻草人王」那一行并点下去,然后盯着怪物按技能,没了再去找 NPC。周而复始。

眼睛是现成的。桌面截窗口,YOLO 认三类东西:NPC、对话框、稻草人。对话框里的字交给本地 OCR。手也是现成的,键鼠模拟,点中心、按快捷键。脑子呢?脑子是一张状态表:找人、点对话、打架。看到对话框里出现固定那几个字,就进入战斗;看不到稻草人了,就算击杀成功。

听着很牛,一条链路从像素走到按键。拆开看,感知、决策、执行全焊在同一个循环里。

flowchart TD
    loopNode[whileTrue]
    loopNode --> cap[截图]
    cap --> yolo[YOLO检测]
    yolo --> brain["if找人_elif点对话_elif打架"]
    brain --> hand[键鼠点击]
    hand --> loopNode

换个程序想用这双眼睛,得把类拆开重写。游戏把「挑战稻草人王」改成「前往试炼」,字符串对不上,流水线直接空转按退出。大模型当时也请到了家里,本地 Qwen 能跑,可它只在单元测试里做阅读理解:三个选项选哪个。主循环根本没叫它。内核买回来了,没接上手脚。

旧主循环抽干了,大概是这样。GUI 我略掉了,骨头就这些:

while running:
    img = grab_window()
    objs = yolo(img)  # npc / dialog / scarecrow
    if state == "FIND_NPC":
        click(center(objs["npc"][0]))
        state = "CLICK_DIALOG"
    elif state == "CLICK_DIALOG":
        for line in ocr(crop(objs["dialog"][0])):
            if "稻草人王" in line.text:
                click(line.xy); state = "FIGHTING"; break
        else:
            press("esc"); state = "FIND_NPC"
    elif state == "FIGHTING":
        if objs["scarecrow"]:
            move_to(center(objs["scarecrow"][0])); press("f2")
        else:
            state = "FIND_NPC"  # 认为打完了

这就是很多老工程路径的老实处,也是它的天花板。老实处是快。截图、检测、0.5 秒一刀,中间没有网络、没有「让我想想」。天花板是:流程一变就改源码,能力无法借给别人。

三、改造不换引擎,只换接法

我一听 Agent,也曾动过歪念头:把整条 while True 扔进大模型,每帧截张图问 Qwen 现在点哪。那不叫升级,叫给步枪换上宣纸准星。战斗是 0.05 秒一圈、0.5 秒一刀的活。本地 7B 想一次,往往是秒级。YOLO 已经把稻草人框出来了,再问模型该不该打,纯属耽误事。

正确的改法很土,也因此很稳。我把它叫双速。

flowchart TD
  capture[截图加YOLO]
  subgraph fastLoop [快回路_Python]
    findNpc[FIND_NPC]
    fighting[FIGHTING]
  end
  subgraph slowLoop [慢回路_LLM]
    ocr[OCR选项]
    skill[加载SKILL]
    llm[Qwen工具调用]
    clickOpt[点第几项或Esc]
  end
  capture --> findNpc
  capture --> fighting
  capture --> ocr
  ocr --> skill
  skill --> llm
  llm --> clickOpt

快回路:截图、检测、找人、瞄准。继续 Python,继续 YOLO。这是我原来就会的,别扔。慢回路:只有对话框这种「字可能会变、选项可能变多」的地方,才把 OCR 结果交给模型,让它以工具调用的方式选一行去点,或者判断该按退出。模型能调的手就三只:列出选项、点第几项、按 Esc。它看不见、也调不到「朝怪物放技能」。技能手册里写得明白:打架不准交给大模型。

具体就五层皮,皮都不厚。

第一层,把眼睛和手从窗口程序里拽出来,变成普通函数。找窗、截图、检测、识字、点击。这叫 Tool。没有这一步,后面全是空壳。

第二层,愿意的话,把同一批函数挂到 MCP 上,给外人用的插头。我自己的挂机主循环,同进程直接调就行。

第三层,把「如何刷稻草人王」写成 Skill。文案从「稻草人王」变成「挑战试炼」,我改手册,不必改那行字符串判断。

第四层,才是大家嘴里的 Agent:外置状态、工具调用、循环。循环还是我的循环。模型只在点对话时进场。Ollama 挂了,就按退出回到找人。

第五层,LangGraph 之类,是把同一张状态表画成节点和边。面试能画图,协作能看懂。它不是更快的引擎。日常手感,快回路那个循环就够。

双速跑起来,骨架几乎还是原来的 if,只是点对话那一支出去了:

while True:
    snap = observe()          # 截图 + YOLO
    if state.phase == "FIND_NPC":
        step_find_npc(state, snap)      # 快:点 NPC
    elif state.phase == "CLICK_DIALOG":
        step_dialog(state, snap)        # 慢:OCR 后交给 Qwen
    elif state.phase == "FIGHTING":
        step_fight(state, snap)         # 快:瞄准按键

慢回路里,模型返回的不是「请点击左边那个」,而是调函数。这叫 tool calling,形状就这一点:

client.chat.completions.create(
    model="qwen2.5-coder:7b",
    messages=messages,  # 里面塞了 SKILL.md 正文
    tools=[{
        "type": "function",
        "function": {
            "name": "click_option",
            "parameters": {"type": "object",
                "properties": {"index": {"type": "integer"}},
                "required": ["index"]},
        },
    }],
)

运行时把 tool_calls 执行掉,点第几项或按 Esc,再把结果填回去。改造完成,打怪的手感应当还在。变的是进战前那一下:以前 OCR 对上字立刻点,现在可能要等模型想一秒到几秒。一轮刷怪里对话框只出现一次,打架仍占大头。我换来的是:选项改名、多出「离开」「活动」,流水线还有机会选对。快的地方继续快,该慢的地方才慢——这才叫架构,不叫把所有齿轮都换成金的。

四、商场卖水,和小卖部卖水

新模式不是一切都好。好不好,主要看项目规模。布置是否恰当,比是不是今年流行更重要。

街边小卖部卖水,柜台伸手就够。进货三箱,回头客叫得出老板小名。非要按大型商场来:扶梯、导视牌、消防分区、会员中台。水还是那瓶水,开张前三个月都在对接系统。这不是先进,这是把小生意按大规范砸贵了。

反过来,要开连锁,十个店员,水、饮料、关东煮一起卖,还要和总部对库存。还只用一个抽屉收钱,账对不清,新人上手全靠口口相传。这不是朴素,这是拒绝长大。

我的旧挂机像小卖部。快,稳,出了问题我知道在哪一行。代价是:只有这一个程序能用这双手;文案一变就得改源码;我和招聘市场上的「Agent 工程师」对不上话,尽管我比很多人更会干活。客人只有一个,SKU 只有三瓶水,这样开店很香。

我这套新接法,像给小店装了一排标准货架和一本店员手册。对话框抗变一点,工具能借给别人,故事能讲给面试官听。代价也清楚:目录变多,概念变多,进战前可能顿一下。若需求永远是「这三个字不变、这条流水线不增加」,上全套 Agent,等于小卖部按商场消防规范装修——能过验收,卖水未必更快。客流上来了,店员换了三茬,还不做导视,也不写手册,那是另一头的错。

还有一笔账,很多人不好意思说。MCP、Skill、图编排,都是工程规范,不是精度魔法。YOLO 框漂了,OCR 认错字,键鼠点偏了,换再新的协议也救不回来。内核再强,摄像头糊成一团,操作系统也帮不了忙。老板们往往不缺名词,缺的是能在脏环境里把闭环跑住的人。高端技术投入也多。两块钱一打的一次性手套,能解决某个特定场景,就先用手套。

五、不追新,也不装看不见

求职要不要 Agent 和 Skills?要能讲,更要能指着一个项目说:哪些是快回路,为什么打架不过模型;哪些是慢回路,Skill 解决的是文案和例外;MCP 是插头,主循环可以不走插头。这样讲,比报三个框架名像人。只会调 API、没碰过检测和桌面自动化的人,缺的恰恰是我手上已经有的那部分。

好学吗?路径很短。会写函数,就会 Tool。会写 README,就会 Skill。对着 OpenAI 的接口发过消息,tool calling 只是让返回值从散文变成「调哪个函数、参数是什么」。图编排可以后放。先把对话框从字符串匹配里解放出来,就完成了最关键的那一跳。

不要盲目追求新事物。一条永远不会变的死流程,while True 加状态表,仍然是优解。不要固守老思维。流程开始分叉、文案开始漂、能力开始要借给第二个程序,还把所有智慧写死在一个类里,那是在用 2018 年的焊法应对 2026 年的接口。窗户纸该捅就捅。无菌手术台不是用来开瓶装水的。布置恰当,小卖部也体面;布置不当,商场也只是贵。

我自己的取舍很简单。打怪的手,留在老路上。认字选路的脑,换成手册加模型。旧窗口程序还留着,对照着用。新的不推翻旧的,旧的也不嘲笑新的。谁合适谁上。技术是手套,场景才是手。手套可以换,手别砍。

好了,这期的AI生活有妙招就到这里。咱们下棋见……下期见。

我是爱生活、爱技术的TF男孩。