Python Agent 开发速通清单
目录一、环境与工程对应 Maven/Gradle二、基础语法和 Java 不同的 7 个坑速查对照表1. 缩进即作用域没有 {}2. 变量是引用但不可变类型行为像值类3. 没有 / for(i0;i a 4. 字符串f-string 取代 String.format5. 字典 HashMap但语法是字面量6. 函数是一等公民可当参数传类似 Java 8 lambda7. 真值判断空容器、0、None 都是 False三、面向对象和 Java OO 的对照类与构造器私有没有真正的 private呼应你上一个问题接口 / 抽象类继承支持多继承 MRO四、类型系统dataclass 和 Pydanticagent 开发核心dataclass —— 对应 Java record轻量、快Pydantic —— 对应 Java record 校验agent 开发首选五、异常与资源管理try-with-resources → with 语句异常体系六、异步async/await对应 CompletableFuture / WebFlux七、装饰器对应 Java 注解 AOP八、Agent 核心一次完整的最小可用示例九、生态地图别全学按需挑前言约定每条都给 Java 对照 能跑的示例。你只需抓住和 Java 不一样的地方相同的地方直接跳过。一、环境与工程对应 Maven/GradleJava 概念Python 对应说明JDKPython 解释器用 3.10agent 生态最低要求Maven/Gradleuv 或 poetry别用裸pip依赖管理会乱pom.xmlpyproject.toml依赖与项目元信息都在这.m2本地仓库虚拟环境.venv每个项目隔离依赖Maven CentralPyPIuv add anthropic最快上手推荐 uv# 安装 uv一次 pip install uv # 建项目 uv init my-agent cd my-agent uv add anthropic # 类似 mvn install 写 pom uv run python main.py # 在隔离环境里跑关键差异Python 没有编译期类型检查。类型注解x: int只是提示运行时不校验。要真校验得靠 Pydantic下面会讲。二、基础语法和 Java 不同的 7 个坑速查对照表对象Python 规范示例Java 对比变量、函数snake_case蛇形user_nameuserName驼峰类PascalCase大驼峰ChatAgent一样常量UPPER_SNAKEMAX_RETRY一样模块文件lowercase/lower_with_underscoreagent_utils.py—包目录lowercase短、无下划线myagent全小写私有成员前缀__internal无约定俗成名字冲突/强制私有前缀____private—类型变量T/TypeVar单大写T,T_coT⚠️最大的坑Java 习惯用camelCase写变量名userNamePython 一律snake_caseuser_name。IDE 会标黄。1. 缩进即作用域没有{}# Java: if (x 0) { ... } # Python: 靠缩进 def check(x): if x 0: print(正数) # 4 空格缩进 在 if 内 print(总会执行) # 不缩进 if 外2. 变量是引用但不可变类型行为像值类a [1, 2, 3] b a # b 和 a 指向同一个 list类似 Java 引用 b.append(4) print(a) # [1, 2, 3, 4] —— a 也变了 # 想要副本 b a.copy() # 浅拷贝 b a[:] # 等价写法3. 没有/for(i0;in;i)# Java: for (int i 0; i 3; i) for i in range(3): print(i) # 0, 1, 2 # 遍历集合Java: for (String s : list) for item in [a, b, c]: print(item)4. 字符串f-string 取代String.formatname agent count 3 # Java: String.format(Hello %s, count%d, name, count) print(fHello {name}, count{count}) # f-string最常用 print(f{count:03d}) # 003格式化5. 字典 HashMap但语法是字面量# Java: MapString, Integer map new HashMap(); d {a: 1, b: 2} d[c] 3 print(d.get(z, 0)) # 不存在返回默认值 0类似 getOrDefault6. 函数是一等公民可当参数传类似 Java 8 lambda# Java: list.stream().map(x - x * 2).collect(...) nums [1, 2, 3] doubled [x * 2 for x in nums] # 列表推导最 Pythonic doubled list(map(lambda x: x * 2, nums)) # 也能这么写但不推荐7. 真值判断空容器、0、None 都是False# Java: if (list ! null !list.isEmpty()) lst [] if lst: # 非空为真无需判空 print(有元素) if not lst: print(空) # 打印这个三、面向对象和 Java OO 的对照类与构造器# Java: # public class User { # private String name; private int age; # public User(String name, int age) { ... } # } class User: def __init__(self, name: str, age: int): # 构造器self this self.name name self.age age u User(bot, 3) print(u.name)self必须显式写第一个参数Java 的this是隐式的。这是新手最容易忘的。私有没有真正的private呼应你上一个问题class Agent: def __init__(self): self.name bot # public self._config {} # 约定私有单下划线 self.__secret key # 名称改写双下划线→ 实际叫 _Agent__secret # 没有 private 关键字全靠约定。你上一题的报错就是这个。接口 / 抽象类from abc import ABC, abstractmethod # Java: interface Tool { String run(String input); } class Tool(ABC): # ABC Abstract Base Class abstractmethod def run(self, input: str) - str: ... class SearchTool(Tool): def run(self, input: str) - str: # 必须实现 return fsearching {input}还有更轻的 Protocol结构化类型类似 TypeScript interface / Go 接口不要求显式继承——agent 框架里很常见from typing import Protocol class ToolLike(Protocol): def run(self, input: str) - str: ... # 只定义形状不继承也能匹配继承支持多继承 MROclass Base: def greet(self): return base class Mixin: def log(self): print(logged) class Agent(Base, Mixin): # 多继承Java 不支持 pass a Agent() a.greet() # base a.log() # logged四、类型系统dataclass和Pydanticagent 开发核心Agent 开发要大量定义消息结构 / 工具参数 / API 响应。Java 用 record / POJOPython 用这两个。dataclass —— 对应 Java record轻量、快from dataclasses import dataclass # Java: public record User(String name, int age) {} dataclass class User: name: str age: int 18 # 默认值 u User(bot) print(u) # User(namebot, age18) —— 自动 __repr__Pydantic —— 对应 Java record 校验agent 开发首选from pydantic import BaseModel, Field class ToolArgs(BaseModel): query: str Field(..., min_length1, max_length100) limit: int Field(10, ge1, le50) # ge大于等于le小于等于 # 自动校验 报错运行时真正校验这是和 dataclass 的关键区别 args ToolArgs(queryhello, limit5) print(args.model_dump()) # {query: hello, limit: 5} # ToolArgs(query) # ❌ 校验失败抛 ValidationError # ToolArgs(queryx, limit0) # ❌ limit 必须 1为什么 agent 开发离不开 Pydantic LLM 返回的是 JSON你要把它映射成 Python 对象并校验。几乎所有 agent 框架LangChain、Anthropic SDK 的结构化输出底层都是 Pydantic。五、异常与资源管理try-with-resources →with语句# Java: # try (var br new BufferedReader(new FileReader(f.txt))) { ... } with open(data.txt, r, encodingutf-8) as f: # 退出 with 自动关闭 content f.read() # 这里 f 已关闭无需 finally异常体系# Java: try { ... } catch (IOException e) { ... } finally { ... } try: result 10 / 0 except ZeroDivisionError as e: # 捕获具体异常 print(f除零: {e}) except (ValueError, TypeError): # 多个异常一起捕获 print(类型错误) except Exception as e: # 兜底类似 catch Throwable print(f其他: {e}) else: print(无异常时执行) finally: print(总执行)Python 异常不要求声明或捕获没有 checked exception。这更灵活但也意味着你得主动列出可能出错的点不能靠编译器提醒。六、异步async/await对应 CompletableFuture / WebFluxAgent 经常要并发调多个工具或 LLM异步是必修。import asyncio import anthropic # Java CompletableFuture: # CompletableFuture.supplyAsync(() - callA()) # .thenCombine(CompletableFuture.supplyAsync(() - callB()), ...) async def call_llm(prompt: str) - str: client anthropic.AsyncAnthropic() # 异步客户端 resp await client.messages.create( # await 阻塞等待不占线程 modelclaude-opus-5, max_tokens1024, messages[{role: user, content: prompt}], ) return resp.content[0].text async def main(): # 并发执行多个类似 CompletableFuture.allOf results await asyncio.gather( call_llm(写一句诗), call_llm(写一句歌词), ) print(results) asyncio.run(main()) # 启动事件循环入口必须这么调三条铁律async def定义的函数必须用await调用不能直接call()。await只能在async def内部。事件循环入口脚本顶层用asyncio.run(main())。七、装饰器对应 Java 注解 AOPPython 装饰器是真正的函数包装不像 Java 注解只是标记。import time from functools import wraps # Java AOP Around 思路在方法前后插逻辑 def log_time(func): wraps(func) def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) print(f{func.__name__} 耗时 {time.time()-start:.2f}s) return result return wrapper log_time # 等价于 search log_time(search) def search(q): time.sleep(0.5) return f结果: {q} search(hello) # 打印: search 耗时 0.50sAgent 框架大量用装饰器注册工具例如 Anthropic SDK 的beta_tool。把它理解成声明这个函数是个工具 自动生成参数 schema。八、Agent 核心一次完整的最小可用示例下面用 Anthropic 官方 SDK 做一个带工具调用的 agent loop——这是 agent 开发的本质LLM 决定调什么工具 → 你执行 → 把结果喂回去 → 循环直到完成。# pip install anthropic import anthropic client anthropic.Anthropic() # 读 ANTHROPIC_API_KEY 环境变量 # 1) 定义工具LLM 看得懂的函数签名 tools [{ name: get_weather, description: 查询某城市天气, input_schema: { type: object, properties: { city: {type: string, description: 城市名}, }, required: [city], }, }] # 2) 实际执行工具的 Python 函数 def get_weather(city: str) - str: # 真实场景里这里调天气 API return f{city} 今天 25°C 晴 # 3) Agent 主循环 def run_agent(user_input: str): messages [{role: user, content: user_input}] while True: # agent loop resp client.messages.create( modelclaude-opus-5, max_tokens1024, toolstools, messagesmessages, ) # 4) LLM 想调工具 → stop_reason tool_use if resp.stop_reason tool_use: # 把 assistant 这轮含 tool_use 块加回历史 messages.append({role: assistant, content: resp.content}) # 执行所有被请求的工具把结果作为 user 消息回传 tool_results [] for block in resp.content: if block.type tool_use: result get_weather(**block.input) # ** 解包字典为参数 tool_results.append({ type: tool_result, tool_use_id: block.id, content: result, }) messages.append({role: user, content: tool_results}) # 继续 while让 LLM 看到工具结果后决定下一步 else: # 5) 不再需要工具 → end_turn输出最终回答 for block in resp.content: if block.type text: print(block.text) return run_agent(北京天气怎么样)这段就是 agent 的全部内核。不管框架多花哨本质都是这个while循环。理解了它LangChain / LangGraph / Anthropic Tool Runner 都只是这个循环的不同封装。九、生态地图别全学按需挑层工具类比何时用LLM SDKanthropic直接调 API最底层、最可控先掌握这个Agent 框架LangGraph工作流引擎多步骤、带状态的复杂 agentAgent 框架LangChainSpring 全家桶功能多但重不建议入门Web 框架FastAPISpring Boot把 agent 包成 HTTP 服务数据校验PydanticBean Validation必学FastAPI/agent 都依赖它包管理uvMaven必学测试pytestJUnit语法最简assert即测试

相关新闻

原神抽卡分析工具 genshin-wish-export:5分钟完成祈愿数据导出与本地备份

原神抽卡分析工具 genshin-wish-export:5分钟完成祈愿数据导出与本地备份

原神抽卡分析工具 genshin-wish-export:5分钟完成祈愿数据导出与本地备份 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export genshin-wish-expor…

2026/8/24 16:31:00 阅读更多 →
3 分钟搞定 Scroll Reverser:macOS 鼠标与触控板滚动方向独立设置完整指南

3 分钟搞定 Scroll Reverser:macOS 鼠标与触控板滚动方向独立设置完整指南

3 分钟搞定 Scroll Reverser:macOS 鼠标与触控板滚动方向独立设置完整指南 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你有没有遇到过这种情况:触控板…

2026/8/24 16:31:00 阅读更多 →
AdGuard Home 部署与配置优化完整指南:3 个关键点让家庭网络去广告、解析更快

AdGuard Home 部署与配置优化完整指南:3 个关键点让家庭网络去广告、解析更快

AdGuard Home 部署与配置优化完整指南:3 个关键点让家庭网络去广告、解析更快 【免费下载链接】AdGuardHome Network-wide ads & trackers blocking DNS server 项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome 这是一份面向新手的 AdGuard Ho…

2026/8/24 16:30:00 阅读更多 →

最新新闻

恶霸鲁尼崩溃修复指南:3 条路径快速解决 Windows 10 闪退

恶霸鲁尼崩溃修复指南:3 条路径快速解决 Windows 10 闪退

恶霸鲁尼崩溃修复指南:3 条路径快速解决 Windows 10 闪退 【免费下载链接】SilentPatchBully SilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10) 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully Windows 10 上玩《恶霸鲁尼:奖…

2026/8/24 18:09:09 阅读更多 →
Stretchly休息提醒HTML定制:改3个文件换掉默认提醒弹窗

Stretchly休息提醒HTML定制:改3个文件换掉默认提醒弹窗

Stretchly休息提醒HTML定制:改3个文件换掉默认提醒弹窗 【免费下载链接】stretchly The break time reminder app 项目地址: https://gitcode.com/gh_mirrors/st/stretchly 默认的休息提醒弹窗只有一行提示文案和倒计时。如果你想换提示语、字体或配色&#…

2026/8/24 18:09:09 阅读更多 →
BERT实战故障诊断手册:从Tokenizer到ONNX部署避坑指南

BERT实战故障诊断手册:从Tokenizer到ONNX部署避坑指南

1. 这不是一篇“科普文”,而是一份BERT实操者的手写笔记 你点开这篇文章,大概率不是为了背诵“BERT是Bidirectional Encoder Representations from Transformers的缩写”这种教科书定义。你可能刚在项目里被下游任务准确率卡住,调试了三天发现…

2026/8/24 18:09:09 阅读更多 →
恶霸鲁尼崩溃修复指南:3 步解决 Windows 10 闪退与音乐课卡死

恶霸鲁尼崩溃修复指南:3 步解决 Windows 10 闪退与音乐课卡死

恶霸鲁尼崩溃修复指南:3 步解决 Windows 10 闪退与音乐课卡死 【免费下载链接】SilentPatchBully SilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10) 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully 刚进校门口画面…

2026/8/24 18:09:09 阅读更多 →
微信小程序自定义导航栏开发指南:从原理到实战封装

微信小程序自定义导航栏开发指南:从原理到实战封装

1. 项目概述:为什么我们需要自定义顶部导航?做微信小程序开发的朋友,估计都遇到过这样的场景:产品经理拿着设计稿过来,指着那个顶部导航栏说,“这里,我们要做成渐变色的,还要加个返回…

2026/8/24 18:09:09 阅读更多 →
WRC2026核心“留形”技术:从概念到代码实现智能体记忆系统

WRC2026核心“留形”技术:从概念到代码实现智能体记忆系统

最近在技术圈里,一个名为“WRC2026大考场”的项目悄然走红。乍一看标题,很多人会以为这又是一个关于机器人或AI竞赛的新闻。但点进去才发现,它的核心并非赛事本身,而是一个名为“留形”的技术概念,并且其“含量”高得惊…

2026/8/24 18:08:09 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →