如何开发AI-Agent?

参考文章:

前言

2025年,底层大模型的快速发展,AI Agent 和 MCP类工具爆发式增长, 编程领域(或软件开发)正在经历一场新的范式转变

正如很多关键的科技革命一样,需要一段时间的渐变过程。我们以为未来还很遥远,其实未来已来。

软件开发范式简史

https://github.com/humanlayer/12-factor-agents/blob/main/content/brief-history-of-software.md

60年前,
xx

20年前, 用编程语言编写确定的处理逻辑

10~15年前, 2012左右 , 在系统中加入了机器学习(Machine Learning), 对数据进行分类处理。

xx

现在, LLM+Agent, 给出一个目标和一些限定规则(提示词+外部工具), 让AI自己去完成。

由LLM自己决定解决问题的路径:

Agent开发的基本要素

  • 要素2: 掌控你提示词

    • 不要将你的系统提示词交给框架,而是要自己掌握,这样可以随时优化调整
  • 要素3: 掌控上下文窗口

    • 在任何时候,给LLM的输入包含 “到目前为止已经发生的” 和 “接下来要做哪一部?”
    • 上下文包括:
      • 提示词
      • 文档或外部数据(RAG)
      • 过去的状态,工具调用,工具调用结果,其他历史信息
      • 历史消息(记忆)

MCP大语言模型交互协议

Model Context Protocol (MCP)

官方文档: https://modelcontextprotocol.io/introduction

入门教程: https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide

什么是MCP?

模型上下文协议(MCP)是一个创新的开源协议,它重新定义了大语言模型(LLM)与外部世界的互动方式。MCP 提供了一种标准化方法,使任意大语言模型能够轻松连接各种数据源和工具,实现信息的无缝访问和处理。MCP 就像是 AI 应用程序的 USB-C 接口,为 AI 模型提供了一种标准化的方式来连接不同的数据源和工具。

MCP 有以下几个核心功能:

  • Resources 资源
  • Prompts 提示词(模板), 用于给客户端提供提示词模板
  • Tools 工具
  • Sampling 采样
  • Roots 根目录
  • Transports 传输层
    • stdio 用于本地
      • 通过 uvx 或 npx 跑一个本地服务供mcp客户端(也是大模型客户端)调用
    • streamable http 最新的
    • http + sse : 已废弃,老的mcp依然使用

MCP客户端:

  • Claude App (要翻墙)
  • Cusor
  • Vscode
  • Cherry Studio

mcp的资源

目前 MCP 非常火爆,很多开发者参与:

MCP的工作原理

关于mcp工作过程 https://zhuanlan.zhihu.com/p/29001189476

  • 1, 用户使用客户端(如 Cursor, Cherry Studio), 并指定开启的mcp工具,并向大模型提出问题
  • 2, 客户端将问题发大模型,同时附带上可使用的mcp工具列表
  • 3, 如果大模型需要调用mcp工具获取外部数据,大模型会中断并返回需要调用的工具列表, 并包含一个中断原因: tool_call; 如果不需要调用工具,则直接返回结果
  • 4, 客户端根据大模型返回的工具列表,调用相应的mcp工具, 获取外部数据
  • 5, 客户端将获取到的数据,传递给大模型
  • 6, 大模型根据获取到的数据,继续处理问题
  • 7, 大模型返回结果
  • 8, 客户端将结果返回给用户

MCP server 开发

官方文档: https://modelcontextprotocol.io/introduction
Python SDK: https://github.com/modelcontextprotocol/python-sdk

支持 Python, Typescript, Java …

这里以 Python 为例, 用 uv创建一个项目

如果没有安装 uv, 请先安装 uv: https://docs.astral.sh/uv/getting-started/installation/

1
2
3
4
5
6
7
8
uv init mcp-server-demo

cd mcp-server-demo

uv add "mcp[cli]"

source .venv/bin/activate

创建一个 add_server.py, 代码:

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
# server.py
from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a personalized greeting"""
return f"Hello, {name}!"


if __name__ == "__main__":
# Start the server
mcp.run(transport="streamable-http")

调试 MCP server:

  • 测试/调试MCP程序, 启动2个终端

  • 在一个终端运行 mcp 服务, streamable-http 默认监听 8000 端口 和 mcp端点 python add_server.py

  • 在另外一个终端中, 启动一个测试客户端 mcp dev add_server.py

  • 浏览器打开 http://127.0.0.1:6274

  • Transport 选择 streamable-http

  • URL 填入 http://localhost:8000/mcp

  • 点击 Connect, 可以看到连接成功

  • 然后点击 Tools, 点击 List Tools 列出所有的工具

  • 点击 add 进行测试, 输入 ab 的值, 点击 Run Tool, 可以看到返回结果

在客户端使用 MCP server

在 Cherry Studio 中使用上面的 add MCP server

在 Cherry Studio 中选择支持工具调用的大模型(带工具icon的模型)

在对话中,开启我们刚才添加的 my_test_add工具:

因为我们这个add工具过于简单,如果直接问大模型 100 + 3 等于多少,模型会直接返回结果,而不会调用我们添加的 add 工具 , 因此,我们这里需要换种方式提问,以便大模型能够调用我们添加的 add 工具

可见, 大模型调用了我们添加的 add 工具,并返回了正确结果

Zig和Nim对比

https://www.javaassignmenthelp.com/blog/zig-vs-nim/

Zig vs Nim

Feature Zig Nim
Type System A strong, static type system. A powerful static and dynamic type system.
Syntax C-like syntax with simplicity in mind. Python-like syntax with flexibility.
Memory Management Manual memory management with safety checks. Garbage collection with optional manual memory management.
Concurrency Concurrency primitives for multithreading. Lightweight async/await-based concurrency and parallelism support.
Compilation Time Very fast compilation. Fast compilation due to its focus on incremental builds.
Error Handling Uses error sets and comptime. Exception-based error handling.
Metaprogramming Powerful metaprogramming capabilities. Advanced metaprogramming and macros.
Community Support Growing community with active development. Active and supportive community.
Learning Curve Moderate learning curve. Relatively easy to learn and use.
Performance Emphasizes performance optimization. Nim generates performant code.
Platform Support Supports major platforms including Windows, macOS, and Linux. Cross-platform support and easy integration with C libraries.
Package Management Built-in package manager. Nimble package manager with a wide range of libraries.
Documentation Decent documentation. Well-documented with extensive examples.
Popularity Growing in popularity. Increasing popularity in the programming community.

Nim vs Rust

https://www.javaassignmenthelp.com/blog/nim-vs-rust/

Feature Nim Rust
Performance Impressive, compiles to C code High performance, zero-cost abstractions
Ease of Learning Beginner-friendly, Python-like syntax Steeper learning curve
Memory Safety Garbage collection Ownership and borrowing system
Concurrency Support Basic support for concurrency Strong support with ownership system
Community Size Smaller but tight-knit community Large and vibrant community
Libraries and Ecosystem Growing ecosystem Extensive ecosystem with many libraries
Use Cases Web dev, game dev, scripting Systems programming, web servers, OS
Compile Times Faster compile times Longer compile times for some projects
Long-Term Maintenance Suitable for various projects Strong focus on long-term stability
Legacy Code Integration Easier integration with C libraries Challenges with certain low-level libs

知道创宇研发技能表

https://github.com/knownsec/RD_Checklist

通用技能

公司与个人

  • 公司是盈利性组织
  • 个人和公司必须双赢
  • 在认同公司理念且能够给公司创造足够价值的基础上,为个人发展而工作

Who am I

黑客是守正出奇且具备创造力的群体

守正出奇

  • 这条正道/底线得坚守
  • 但如果太过正就迂腐了,为了搞定任务有时得出奇招

创造力

  • 一个没有创造力的人是多么的可怜,对于团队来说也是一种耻辱
  • 本技能表的本质目的只有一个:引导你拥有足够的创造力

黑客也可以是一种思维方式

我们需要对得起名片上的那个头衔:工程师、研究员

牛人姿态

  • 即使现在不是牛人,也得具备这样的姿态
  • 没有一定扎实内功与远见的人很少有这样的姿态
  • 拥有不将就的做事风格,迟早是牛人

如何做事

方法论

  • 完成一件事有好几条途径,优秀的人的途径最短
  • 任务拆分很容易得出做事的方法论
  • 好的「方法论」会让你具备更强的「创造力」!
    • 时刻问自己:「是否具备创造力?」

任务拆分

成长过程会经历:能力越大、责任越大、事情越多

思路

  • 拆分细化为多个点
  • 排好优先级

任务四象限,决定优先级

  • 紧急重要
    • 赶紧搞定
  • 重要不紧急
    • 时刻保持关注,以免沦为「紧急重要」
  • 紧急不重要
    • 少少益善,学会拒绝
  • 不紧急不重要
    • 靠自律

SMART 原则

  • S:任务是否明确
    • 不明确的任务搞起来就是浪费生命
  • M:任务是否可度量
    • 不可度量如何体现价值?
  • A:任务是否可搞定
    • 搞不定就不应该接,接就得有魄力搞定
  • R:任务的相关性如何
    • 决定了任务的价值,相关性越高越能体现价值,比如这个任务搞定了能让团队获得公司、客户等更大的认可
  • T:任务的时间
    • Timeline:任务时间轴,什么时间点需要搞定什么
    • Deadline:任务的最后期限,做评估时最好提前,因为总会有各种意外或拖延本性
    • Timeline
      上一些很关键的时间点我们可以称为里程碑,搞定每个里程碑应该庆祝下

自己欠缺什么,立马发现

是否需要寻求帮助,谁能帮你,自己单干?

团队

士气第一

  • 当你有团队时,分配与调度好任务很关键
    • 做得好是真并发
    • 做不好会死锁

沟通、反馈与责任

  • 一个无沟通能力的人,要么是天才,要么是不可爱的人,不过天才也就寥寥无几而已,你并不是
  • 反馈要及时
    • 避免出问题不反馈,影响进度
    • 方式
      • 正式的:邮件
      • 临时的:微信等即时通信
      • 着急的:给个电话
  • 工作有大小,责任心无大小
  • 周报的透明
    • 意义:大家互相了解工作与心得,有利于自己的判断与成长
      • 观察是一种很重要的技能
      • 不是单纯的给领导汇报工作
    • 周报需体现本周工作总结、下周工作计划、心得/问题/建议(我们叫唧唧歪歪)
    • 周报可以很好体现一个人的
      • 总结能力
      • 计划能力
      • 分享能力
        • 想象下:一个人从来没有心得/问题/建议的沉淀或反馈,这个人是一个相对封闭的人,在团队作战中很难达到默契
        • 当然,这种分享能力远不仅仅是在周报这种形式里

团队意识

  • 很多人都说自己具备足够好的团队意识,但是有些人却并不是这样
    • 举个小例子:一个 10 人团队约定早上 10 点开会,而你迟到了 10
      分钟,对于团队来说你浪费了整个团队 100 分钟(10 人 * 10
      分钟)的生命。有些人无羞愧之心要么是意识不到这点,要么这个团队的风气就是这样...
  • 团队意识是建立在互相信任的基础上
  • "尺有所短,寸有所长" 是一个优秀的团队必须要达成的共识
  • Leader 最关键,优秀的 Leader 一定会有个优秀团队
    • 兵熊熊一个
    • 将熊熊一窝
  • 如何拥有个优秀的团队是一个复杂的话题

成长

新事物的敏感性

  • 保持好奇心
  • 不要局限在自己的圈子,适当跨界吸收灵感
  • 订阅国内外优秀博客/资源
  • 选择性参与一些必要的会议,听必要的主题,讨论必要的话题

关于知识

  • 好记性不如烂笔头,勤做笔记所带来的收益远超你想象
  • 尽快尽早的将自己的知识形成系统化认知,会达到事半功倍的效果
  • 对知识的渴望程度决定了前进动力的大小
  • 当知识很廉价地摆在你面前,你反而不会珍惜
  • 对知识保持敬畏之心

关于信息获取

  • 拓宽自己获取信息的渠道,但不要陷入低信噪比的泥潭
  • 信息筛选
    • 与你相关性如何?
    • 整体可信度多高?
    • 有效信息量多少?
  • 处理并重新组织为你自己的理解

不要让自己成为矫情/浮夸的人

和比你厉害的人在一起,和一流的人工作

  • 指点往往是精华
  • 杜绝笨蛋爆炸
    • 二流的人招进来的人不太可能是一流的
    • 久而久之一个团队就笨蛋爆炸了

思考

  • 批判性思考
  • 解构与系统化思考
  • 换位思考
    • 对于一个团队来说,这点太关键

提问的智慧

  • 遇到问题先独立思考,尝试独立解决,尽最大努力后再提问
  • 很多技术,明天就会过时,如果你掌握的是学习方法,那你还有下一个机会,如果你掌握的仅仅是这个技术本身,你就没有机会了。
  • 提问时,礼貌很关键(对知识的敬畏),清晰表达很关键
  • 解决后,分享出来帮助更多需要帮助的人

小事心态

  • 越基础的事越关键,越需要细心
  • 不要一味盲目追求「高级感」,而忽视「小事」/「简单事」/「基础事」
  • 基础不牢、地动山摇
  • 小事做不好,别提大事

无论是个人还是团队的成长都需要不断沉淀知识,没有沉淀根基不稳

完成的定义

比如写个 POC

  1. 搞懂了目标 Web 应用漏洞的原理
  2. 熟练运用 Python 各相关模块与机制
  3. 熟练了解了 HTTP 协议
    • HTTP 请求
    • HTTP 响应
  4. 代码写得够规范,让人看起来就是爽
  5. 程序经过足够的测试
    • 黑盒测试
    • 白盒测试
  6. 及时反馈进度
    • 我遇到困难了
    • 我搞定了
  7. 更新相关文档,沉淀

熟练的定义

比如熟练 SQL 注入

  • SQL 语句这门”语言”能脱离文档顺手写出
  • 主流数据库的 SQL 特有函数、存储过程、机制我都了如指掌
    • MySQL
    • PostgreSQL
    • ...
  • 牛逼的工具我不仅用的顺其自然,源码还读过几遍,我能修改
    • pocsuite3
    • sqlmap
    • metasploit
    • nmap
    • ...
  • 我具备创造性,而不仅仅是跟在大牛身后
    • 研究出了几个不错的技巧
    • 发了几篇不错的 Paper
    • 对外会议/沙龙等进行了几次分享
    • 写出了自己的相关工具,爽
  • 我实战了 N 回,遇到了很多奇葩环境,我有足够的信心绕过
  • 以上这些之后,这才叫熟练!其他同理

好书推荐

推荐理由

  • 打通任督二脉的书,怎能不看?
    • 但,尽信书不如无书
  • 任何科学研究最终必须至少到哲学层面,触碰到上帝的脚
  • 具体技术类书籍请见「专业技能」相关部分

鸡汤类

UNIX 编程艺术

极客的思维哲学

  • 使用简洁的接口拼合简单的部件
  • 清晰胜于机巧
  • 设计时考虑拼接组合
  • 策略同机制分离,接口同引擎分离
  • 设计要简洁,复杂度能低则低
  • 除非确无它法,不要编写庞大的程序
  • 设计要可见,以便审查和调试
  • 健壮源于透明与简洁
  • 把知识叠入数据以求逻辑质朴而健壮
  • 接口设计避免标新立异
  • 如果一个程序没什么好说的,就保持沉默
  • 出现异常时,马上退出并给出足量错误信息
  • 宁花机器一分,不花程序员一秒
  • 避免手工hack,尽量编写程序去生成程序
  • 雕琢前先得有原型,跑之前先学会走
  • 决不相信所谓”不二法门”的断言
  • 设计着眼未来,未来总比预想快

黑客与画家

印象深刻:设计者的品味

  • 好设计是简单的设计
    • 抓住本质
  • 好设计是永不过时的设计
    • 如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已
  • 好设计是解决主要问题的设计
  • 好设计是启发性的设计
  • 好设计通常是有点趣味性的设计
  • 好设计是艰苦的设计
  • 好设计是看似容易的设计
  • 好设计是对称的设计
  • 好设计是模仿大自然的设计
  • 好设计是一种再设计
  • 好设计是能够复制的设计
  • 好设计往往是奇特的设计
  • 好设计是成批出现的
  • 好设计常常是大胆的设计

浪潮之巅

感受 IT 帝国的崛起与没落,我们现在站在又一个互联网浪潮之巅

代码2.0 - 网络空间中的法律

网络不是法外之地

洁癖类

  • 重构
  • 代码整洁之道
  • 代码大全 2

敏捷类

  • Rework中文版
    • 37signals 团队的敏捷经验
  • 高效程序员的 45 个习惯

产品类

  • 人人都是产品经理
  • 结网

神书

  • 自私的基因
  • 失控

...

  • Copyrights © 2021-2025 youngqqcn

请我喝杯咖啡吧~