news 2026/10/20 21:05:42

小程序地址解析实战:云函数+腾讯云API标准化收货地址

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小程序地址解析实战:云函数+腾讯云API标准化收货地址

简介:面向小程序开发者的收货地址智能解析示例,基于腾讯云API将非标准快递地址自动识别并解析为省、市、区等结构化字段。项目完整覆盖API接入、HMAC-SHA1签名、Base64编码、请求构造到响应处理等关键流程,可作为微信小程序调用腾讯云地址解析服务的入门参考,也适用于电商、物流场景的地址标准化。压缩包共18个文件,以6个JS、5个JSON、3个WXSS、2个WXML为主;代码按pages、logs、utils等目录划分,JS文件对应sha1.js、base64.js、util.js等签名与工具模块,JSON负责页面和项目配置,WXML/WXSS完成界面结构及样式,整体仅16KB,结构清晰紧凑易读。目前已有8239人浏览学习。借助该示例可快速看到从地址输入到省市区输出的完整实现,掌握如何生成合法签名并解析返回结果;项目保留了尚未完成的确认按钮逻辑,尤其适合在现有代码基础上继续完善交互,加深对小程序API调用与前后端协作的理解。

1. 项目定位:把一句「乱写」的收货地址变成省市区+详情字段

做电商小程序的朋友应该都遇到过这种用户:收货地址填的是「张三 138xxxx 广东省深圳市南山区科技园路8号」——已经是好写的了,还有人写「深圳南山科技园8号」「广东省南山科技园路8号」,省市区全靠客服脑补,后台按省市区筛选订单时就是一场灾难。这个项目 AddressParseTest 解决的正是这件事:小程序里输入一段原始地址文本,后端通过腾讯云API自动解析出省份、城市、区县、乡镇和详细地址,返回标准化结构,前端直接回填表单。它不是演示级Demo,而是把输入清洗、API鉴权、结果兜底、前端回填整条链路都打通了的完整实现,适合做电商、快递、表单类小程序,或者任何需要用户填收货地址的场景。跑通之后你能把它当成一块积木,接进自己的下单流程里。

2. 架构设计:一次地址解析从输入到返回的完整链路

这个项目不是单文件脚本,而是「小程序前端 + 云函数 + 腾讯云API」三段式结构。前端只负责采集原始文本和展示结果,业务判断全部放在云函数里,API凭据也锁在云函数环境变量中。这样做的直接好处是:小程序端代码被拿到后拿不到任何密钥,换地址解析服务商时只需要改云函数一个文件。

2.1 目录结构:三个模块各管什么

项目解压后目录结构如下,我按「前端入口、云函数逻辑、部署配置」三层来解释它:

AddressParseTest/ ├── miniprogram/ # 小程序前端 │ ├── pages/ │ │ └── parse/ │ │ ├── index.wxml # 输入框 + 结果展示区域 │ │ ├── index.wxss # 页面样式 │ │ └── index.js # 解析按钮事件、调用云函数、回填表单 │ └── app.js # 全局配置,云环境ID在这里声明 ├── cloudfunctions/ │ └── parseAddress/ # 地址解析云函数 │ ├── index.js # 云函数入口:接收地址、调API、结果归一化 │ ├── package.json # 依赖 tencentcloud-sdk-nodejs │ └── config.json # 云函数基础配置(超时时间、内存等) └── README.md # 部署步骤与参数说明

miniprogram 是微信小程序原生工程,页面只有一个 parse 页,核心逻辑就三件事——清洗输入、调云函数、展示解析结果。cloudfunctions 是云端逻辑,parseAddress 云函数是唯一跟腾讯云API打交道的地方。注意 config.json 里只放云函数运行配置,不放密钥明文,SecretId/SecretKey 在云开发控制台的环境变量里填,这样整个项目压缩包被分享出去也不会泄露凭据。

2.2 调用链路:从前端输入到腾讯云API返回

完整链路一共六步,每一步都对应一个明确的文件和函数:

用户在小程序 index.wxml 的文本域输入原始地址 → index.js 的 handleParse() 用本地正则把文本清洗成 { name, phone, address } 三段 → 调 wx.cloud.callFunction({ name: 'parseAddress', data: { address } }) → 云函数 parseAddress/index.js 收到 event.address,构造腾讯云NLP客户端并发起地址识别请求 → 腾讯云API返回结构化字段 Province/City/District/Town/AddressDetail → 云函数归一化后返回 { province, city, district, detail },前端拿到后回填到收货地址表单的四个字段里。

这里有两个设计点值得展开。第一,腾讯云API调用放在云函数而不是小程序端直连,原因是小程序端直连必须把密钥打进代码包,微信审核和供应链安全都过不去。第二,前端清洗和云函数归一化做了职责分离:前端只做「字符串切三段」的粗活,云函数做「API字段转业务字段」的细活,后续想支持 iOS/Android 双端复用,只需要各端写清洗函数,归一化逻辑不动。

链路里最容易被忽略的是超时设置。云函数默认超时3秒,腾讯云地址识别接口平均响应在200-500ms,但国内网络环境偶尔会到1秒以上,加上Node进程冷启动,首次调用可能超过3秒。项目里把云函数超时配到30秒,前端loading组件给用户一个「智能解析中」的等待态,联调时才不会频繁报 Function timed out。

2.3 接口返回结构:字段映射与清洗策略

腾讯云地址识别接口返回的字段和业务表单字段的映射关系如下:

腾讯云API返回字段含义本项目映射目标说明
Province省份province去掉「省」后缀,如「广东省」→「广东」
City城市city去掉「市」后缀,如「深圳市」→「深圳」
District区县district区为空时用 city 兜底
Town乡镇/街道town非必填,原样保留
AddressDetail详细地址detail无值时回退到原始输入

这个表对应第3章的 normalize 逻辑。接口有一个特性:它针对的是纯地址字符串,如果输入里同时带了姓名和手机号,识别效果会变差,所以一定要在调用API之前先把「张三」「13800138000」剥掉。顺序上先后关系是:先清洗,再调API,而不是把原始文本一股脑丢给接口,这是这个项目和我见过很多翻车实现的本质差别。

为什么选腾讯云API而不是直接写本地正则?本地正则只能处理「XX省XX市XX区」的规则文本,遇到「杭州市滨江区」「北京市朝阳区望京SOHO T1」「广东省深圳市南山区科技园路8号」这类省略省会、附带楼宇名的真实文本,正则会越写越长还收不住。腾讯云这类地址识别服务是模型分词加地址库匹配,能识别出「科技园路8号」属于南山区,也认得出「望京SOHO」是楼宇名。代价是每次调用产生费用,所以项目把本地清洗放前面,把API调用放后面,能裁剪的先裁剪。

3. 核心模块拆解:清洗、API调用、结果归一化的三段式实现

3.1 前端输入清洗:把「张三 138xxx 广东省…」切成三段

用户输入的原文本不能直接送进腾讯云API,这是整个项目最容易被跳过的一步。看代码:

// index.js 里的本地清洗函数 function splitAddress(rawText) { // 全角空格转半角,去掉首尾空白 const text = rawText.replace(/[\u3000]/g, ' ').trim() // 手机号支持 138-0013-8000 / 138 0013 8000 这类带分隔符写法 const phoneReg = /1[3-9]\d{9}|\d{3,4}[- ]?\d{7,8}/ const phoneMatch = text.match(phoneReg) const phone = phoneMatch ? phoneMatch[0] : '' // 姓名取手机号左侧结尾的 2~4 个连续中文 const beforePhone = phone ? text.slice(0, phoneMatch.index) : text const nameReg = /[\u4e00-\u9fa5]{2,4}$/ const nameMatch = beforePhone.match(nameReg) const name = nameMatch ? nameMatch[0] : '' // 地址 = 去掉姓名和手机号后剩下的字符串 const address = text .replace(phone, '') .replace(name, '') .replace(/[\s,,。]+/g, '') .trim() return { name, phone, address } }

逻辑说明:手机号正则是「1开头、第二位3-9、共11位数字」,兼容带横杠和空格的分隔写法——很多用户习惯写成138 0013 8000。姓名取的是手机号字段左侧结尾的2-4个汉字,用$锚定字符串结尾,避免把地址里的「浙江省」的「省」字吃进姓名。address 字段把姓名、手机号、逗号句号全部剥掉,剩下的才是干净地址。

这里有个参数细节:姓名正则的{2,4}覆盖绝大多数单姓和复姓,但六个字的少数民族姓名会被截断,如果你面向的地区有这类用户,改成{2,6}。手机号正则的坑在门牌号:地址里出现「13栋201室」这种数字时会被误判成手机号,所以实际项目里我会先判断手机号匹配位置后面跟的是中文姓名还是地址,如果是「13栋」这种数字开头的就不收。这个判断逻辑不复杂,但能少掉三分之一误拆分。

清洗完以后,name 和 phone 直接填进表单,address 才作为参数传给云函数。这一步做完,腾讯云API的识别准确率能明显提升,因为接口拿到的不再是混着人名和11位数字的乱串。

3.2 云函数侧的API调用与鉴权

云函数是项目里最核心的一个文件,密钥从环境变量读取,接口调用用官方SDK,业务返回统一带 code 字段:

// cloudfunctions/parseAddress/index.js const tencentcloud = require('tencentcloud-sdk-nodejs') const NlpClient = tencentcloud.nlp.v20190408.Client // 密钥从云函数环境变量读取,不写死在代码里 const SECRET_ID = process.env.TENCENT_SECRET_ID const SECRET_KEY = process.env.TENCENT_SECRET_KEY const REGION = process.env.REGION || 'ap-guangzhou' exports.main = async (event) => { const { address } = event if (!address) { return { code: 400, msg: 'address is required' } } // 构造腾讯云NLP客户端,SDK内部处理TC3-HMAC-SHA256签名 const client = new NlpClient({ credential: { secretId: SECRET_ID, secretKey: SECRET_KEY, }, region: REGION, profile: { httpProfile: { endpoint: 'nlp.tencentcloudapi.com' }, }, }) try { // 地址识别接口,接口名以控制台API Explorer开通的服务为准 const resp = await client.TextParseAddress({ Text: address }) const data = resp.Data || {} return { code: 0, data: { province: data.Province || '', city: data.City || '', district: data.District || '', town: data.Town || '', detail: data.AddressDetail || data.Street || '', }, } } catch (err) { // 捕获腾讯云侧错误码,方便云函数日志排查 return { code: err.code || 500, msg: err.message || 'parse error' } } }

逻辑说明:构造 NlpClient 时传的 credential 是云函数环境变量里读出来的密钥,region 决定 HTTPS 请求落在哪个地域机房,默认 ap-guangzhou(华南地区),如果你的业务部署在华东或华北,改成 ap-shanghai、ap-beijing 即可,SDK 会自动切换接入点。profile.httpProfile.endpoint 指定了接口域名,减少SDK默认的通用入口跳转,能省一次 DNS 解析时间,对冷启动性能有一点帮助。

TextParseAddress 是地址识别类接口的名字,不同产品线也可能叫 ParseAddress,所以我在注释里标了「以控制台API Explorer为准」。你在部署时先到腾讯云控制台的API Explorer里搜「地址识别」,把接口名和返回样例对一遍再填进代码,能避免签名通过但接口不存在的问题。

云函数里我把返回值统一成{ code: 0, data: {...} }的格式,前端拿到后不用关心腾讯云原始的Province.District嵌套结构。异常情况把腾讯云的错误码透传出来,这样小程序端弹错、云函数日志查错,上下看到的错误信息是同一个,排查效率高很多。

3.3 结果归一化:区级缺失与后缀问题

腾讯云返回的 Province 可能是「广东省」也可能是「广东」,District 有时是空字符串,这些不一致直接在云函数里归一化,前端省事:

// 归一化函数:去掉省市区后缀,缺区用市兜底 function normalize(respData, rawAddress) { const province = stripSuffix(respData.Province, '省') const city = stripSuffix(respData.City, '市') const district = stripSuffix(respData.District, '区') // 区级为空时,用市级兜底,source 字段标记本次结果来源 if (!district && city) { return { province, city, district: city, // 用市代替区,保证三级联动不崩 detail: respData.AddressDetail || rawAddress, source: 'city-fallback', } } return { province, city, district, detail: respData.AddressDetail || rawAddress, source: 'api', } } function stripSuffix(str, suffix) { if (str && str.endsWith(suffix)) return str.slice(0, -1) return str }

逻辑说明:省市区字段有的返回带「省」「市」「区」后缀,有的不带,统一去掉后缀让前端存库更规整。district 为空时把 city 顶上去,这是前端三级联动组件最容易崩的一处——省市区三个下拉如果区为空,组件直接渲染不出来。source 字段记录本次结果走的是 API 正常识别还是兜底逻辑,线上排查时能用来统计 API 的有效覆盖率。

参数说明:stripSuffix 只处理「省」「市」「区」单字后缀,对「内蒙古自治区」这种双字后缀会误伤,把所有「自治区」截成「自治」两个字。我一般会在调用它之前先判断一下结尾是不是「自治区」。另外 detail 字段优先取接口返回的 AddressDetail,如果为空就回退到原始地址文本,保证前端详细地址框永远有内容,不会白屏。

这段归一化还有一个隐藏作用:入库的数据格式统一了。电商后台按省筛选订单时,「广东」和「广东省」如果混着存,SQL 的 GROUP BY 会拆出两组数据,导报表时特别难受。项目在云函数这一层把格式收齐,后面做任何统计都不用在查询条件里写 OR。

4. 避坑与排查:地址解析上线后最容易踩的五个坑

4.1 签名鉴权失败:AuthFailure 一直报

现象:云函数一调用就抛TencentCloudSDKException: code: AuthFailure.SignatureFailure,换了密钥也报错。

原因:我第一次实现时为了省依赖,自己手写了TC3-HMAC-SHA256签名,签名请求头的 Date 字段用了本地时区(GMT+8),而腾讯云API校验时按UTC时间处理,时间差一整个时区,每次请求都过不了签名。另一个隐蔽原因是 SecretKey 从文件复制时带了换行符,终端里看不出来。

解决:换成直接用tencentcloud-sdk-nodejs的 Client 构造,SDK内部自己处理签名,不再手工拼。如果确实要手写签名(比如换语言),时间头统一用new Date().toISOString()转出来的UTC格式,并且把最终生成的 Authorization 头打印出来和文档逐段对照。这是这个项目让我记住的一句话:能调SDK就别自己造轮子,手搓签名的时间够跑通三个接口。

4.2 密钥硬编码:密钥被提交进仓库

现象:代码评审时发现 index.js 里直接写了const secretKey = 'xxxxxxxx',而且整个项目准备打包分享出去。

原因:为了本地联调方便,直接把密钥拷进代码,想着「回头再改」,结果忘了。

解决:全部移到云函数环境变量,通过process.env.TENCENT_SECRET_ID读取。密钥用子账号的,只授权NLP相关读权限,不要用主账号密钥。如果密钥已经提交到git历史,除了删掉还要去控制台重置密钥,因为历史提交里的记录删不掉。这个项目给的 config.json 里只放变量名占位,不放明文,就是让我们养成这个习惯。

4.3 短地址返回缺区县:前端联动组件崩掉

现象:用户填「北京」,接口返回 Province=北京、City=北京,District 是空字符串。前端省市区三级联动组件拿不到「区」,直接渲染不出选项,用户也没法保存地址。

原因:地址识别依赖完整地址文本,短地址本身信息不足,接口不强行补区,返回空是合理行为。

解决:云函数归一化时区缺失用 city 顶替,前端不需要知道后端做了什么补救。同时前端这边允许区一级为空,用户手动在详细地址里补充,也能提交成功。source 字段这时就派上用场——日志里统计 source='city-fallback' 的比例,如果超过20%,说明你的用户群体里有大量短地址习惯,可以考虑在输入框加一个省市区二次选择组件让用户补选。

4.4 冷启动超时:第一次调用总超3秒

现象:小程序里第一次点「解析」,loading转了三秒直接报Function timed out,第二次再点就正常。

原因:云函数实例冷启动要加载Node运行时和SDK,本身需要1-2秒,加上地址识别接口的耗时,正好卡在默认3秒超时线附近。

解决:云函数配置里把超时时间调到30秒。前端捕获到超时错误后自动重试一次,用户感知上只是loading多转一小会儿。针对高频场景,我给云函数加了一个定时触发器,每5分钟调一次空解析做预热,冷启动率降了大概七成。这个项目里超时配置是云函数的默认设置,太容易忽略,换到别的云函数项目同样适用。

4.5 接口费用失控:联调一早上额度被刷光

现象:联调一个上午,顺手填了几十次地址,查看账单发现调了600多次,免费额度快见底了,后面开始按量计费。

原因:每次输入都触发接口调用,联调时反复改文本、点按钮,消耗被严重低估。

解决:前端按钮加500ms防抖,连续点击只发一次请求。云函数内存一个Map做最近100条结果的缓存,相同文本直接返回,不重复调API。本地准备一批测试地址放在JSON文件里,用Node脚本批量跑,不再用小程序手点。第二天调完看云监控的调用量,基本能控制在几十次级别。

5. 运行与联调:下载项目后从零跑通的四个步骤

5.1 开通腾讯云API并准备最小权限密钥

先在腾讯云控制台搜索「地址识别」,找到对应产品并开通。然后在「访问管理 → 用户 → 新建子用户」创建一个只授权地址识别相关读权限的账号,拿到 SecretId 和 SecretKey。这一步建议不要用主账号密钥,子账号密钥泄露了可以单独吊销,不影响其他业务。

打开API Explorer,在线调试里选「地址识别」接口,输入一个测试地址,看返回的 JSON 是不是包含 Province、City、District、AddressDetail 这些字段。顺手记一下接口名和字段名,和项目代码里的对应关系核对一遍。在线调试能过,再进代码,能省掉后面一整轮的排错时间。

5.2 配置云函数环境变量并上传代码

用微信开发者工具导入 miniprogram 目录,在 project.config.json 里确认云函数目录指向 cloudfunctions。右键 parseAddress 文件夹,选择「上传并部署:云端安装依赖」,SDK 会在云端安装,不用本地装 node_modules。

部署成功后到云开发控制台 → 云函数 → parseAddress → 配置 → 环境变量,填入:

环境变量名说明示例值
TENCENT_SECRET_ID子账号密钥IDAKIDxxxxx
TENCENT_SECRET_KEY子账号密钥Keyxxxxxx
REGION腾讯云API地域ap-guangzhou

填完点保存并重新部署一次,环境变量才会生效。然后到 app.js 里确认云环境ID是你自己的环境ID,不是项目里占位的。

5.3 先跑Node脚本验证接口连通性

上小程序之前,先在本机跑一个简单的Node脚本,确认密钥、接口、网络都通:

// test.js 本地连调脚本,不依赖小程序 const tencentcloud = require('tencentcloud-sdk-nodejs') const NlpClient = tencentcloud.nlp.v20190408.Client const client = new NlpClient({ credential: { secretId: process.env.SECRET_ID, secretKey: process.env.SECRET_KEY, }, region: 'ap-guangzhou', }) async function main() { const cases = [ '张三 13800138000 广东省深圳市南山区科技园路8号', '李四 13900139000 北京市朝阳区望京SOHO T1', ] for (const text of cases) { const resp = await client.TextParseAddress({ Text: text }) console.log(JSON.stringify(resp.Data, null, 2)) } } main().catch((err) => console.error(err))

运行前先export SECRET_ID=xxx SECRET_KEY=xxx,再node test.js。看到类似下面的输出就说明链路通了:

{ "Province": "广东省", "City": "深圳市", "District": "南山区", "AddressDetail": "科技园路8号" }

这一步真的很推荐先做。云函数日志查起来没有本地终端方便,密钥、接口名、网络三个变量先在本地验证完,上云后只剩环境变量和权限两个变量,翻车概率小很多。

5.4 小程序端联调与真机预览

回到微信开发者工具,在 parse 页面的输入框填一条测试地址,点「智能解析」,正常情况下表单的省市区四个字段会被自动填充。打开云函数日志,能看到每次调用返回的 code 和耗时。

真机预览时注意:手机网络和模拟器不一样,接口耗时可能更长,确认云函数超时已经调到30秒。还有一点体验上的细节:解析完成之前,详细地址字段先填回原始文本,避免用户看到空白;解析成功后再替换成标准化的详细地址。用户体感是「先给结果再优化」,不会觉得页面卡住。

6. 二次开发方向:缓存、批量导入与本地兜底

项目跑通只是第一步,把它接进真实业务时,下面三个方向几乎是必做的。

6.1 加一层缓存:同地址第二单不再花一次API

用户在同一个收货地址反复下单很常见,相同文本每次都调API属于浪费。云函数里加一个内存缓存,几行代码的事:

const cache = new Map() const MAX_CACHE = 100 function getCached(text) { return cache.get(text) } function setCache(text, result) { if (cache.size >= MAX_CACHE) { // 简单淘汰:清掉最早插入的一半 const keys = [...cache.keys()].slice(0, MAX_CACHE / 2) keys.forEach((k) => cache.delete(k)) } cache.set(text, result) }

内存缓存适合单实例场景,云函数如果有多个并发实例,每个实例各自缓存,命中率一般。想要更高的命中率,可以把结果写进云开发数据库,按文本hash查,但会引入一次数据库读的延迟,我一般只在批量导入场景用数据库缓存。

6.2 批量导入场景:Excel地址表并发解析

商家后台会有老客地址导入的需求,几千行地址逐条调API,需要控制并发,别把接口打死。用一个小并发池:

const rows = getExcelRows() // 从Excel读出的地址数组 const CONCURRENCY = 5 // 同时最多5个请求 let index = 0 async function worker() { while (index < rows.length) { const row = rows[index++] try { const res = await parseAddress(row.address) row.result = res } catch (err) { row.result = { code: err.code, msg: err.message } } } } await Promise.all( Array.from({ length: CONCURRENCY }, () => worker()) ) // 写回Excel,带结果导出

并发数5到10是腾讯云API比较舒服的区间,太高容易触发限流。每行解析前先过一遍6.3的本地兜底,明显是规则文本的地址直接用本地正则出结果,API只留给难啃的。

6.3 本地正则兜底:API评分低时的最后防线

腾讯云接口偶尔对极度不规范的文本返回空字段,比如用户只填「科技园8号」,没有省市区。这时让接口返回空给用户,体验很差。我的做法是:接口结果全空时,用本地关键词切一遍,把「省」「市」「区」「县」作为分隔符拆出前置字段,拆不出来的挂在详细地址里,至少保证 province 不为空。

从那以后我每次做这类接入型功能,都强制走一遍「先清洗 → 再API → 补全字段 → 加缓存」四步流程,大部分线上问题都在这个流程里被提前堵住,而不是等用户来反馈。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 21:05:39

BES2500串口烧录全攻略:从接线参数到量产产测避坑指南

简介&#xff1a;恒玄BES系列串口烧录工具是专为恒玄科技BES蓝牙芯片&#xff08;如BES2500&#xff09;设计的Windows平台烧写软件&#xff0c;面向物联网、无线音频、智能穿戴等领域的嵌入式开发与维护人员&#xff0c;用于固件升级、代码调试、参数配置和日志排查。压缩包共…

作者头像 李华
网站建设 2026/10/20 21:05:39

聚合支付系统源码:金融级资金网关的六层架构与生产落地指南

简介&#xff1a;这是一套面向Web开发与支付系统学习者的全开源聚合支付平台源码&#xff0c;适用于希望深入理解代收代付业务逻辑、支付通道对接及前端工程化实践的中高级开发者。资源采用纯手工编写的DIVCSS架构&#xff0c;代码精简无冗余&#xff0c;支持自适应布局与SEO优…

作者头像 李华
网站建设 2026/10/20 21:03:46

边缘AI视频分析七步闭环:从USB摄像头到本地报警实战

1. 项目概述&#xff1a;这不是一个“视频监控安装指南”&#xff0c;而是一套可复现的端到端智能感知闭环“rebucca”这个词在公开技术文档、主流开源平台和标准协议库中均无官方定义——它不是ONVIF、不是RTSP服务器名、不是某个知名AI推理框架的子模块&#xff0c;也不是某家…

作者头像 李华
网站建设 2026/10/20 21:03:28

周期切换有向图下一般线性系统的自适应分布式观测器设计

看到“周期切换下基于有向图的一类自适应分布式观测器设计与实现——对一般线性领导系统的有效自适应算法”这个题目&#xff0c;第一反应是&#xff1a;这不是那种套个矩阵就能跑通演示的“仿真作业”&#xff0c;而是多智能体协同控制里非常硬核的一类问题。好在这个方向的应…

作者头像 李华
网站建设 2026/10/20 21:03:08

技能不是清单:从单点能力到组合技能的进阶路径

1. 技能不是清单&#xff1a;先搞明白什么才算真正掌握一项技能我见过太多人把“技能”理解成一份待办清单&#xff1a;列了二十几项&#xff0c;摄影、Python、英语、健身、演讲……每一项都报过课、买过书、收藏过一堆帖子&#xff0c;半年后回头一看&#xff0c;没一项能拿得…

作者头像 李华
网站建设 2026/10/20 21:02:24

Claude Code token压缩阈值怎么调?96万改40万省三成

我前几天盯着 Claude Code 的 token 用量统计发呆&#xff1a;一个周跑下来&#xff0c;光这个工具烧掉的上下文额度&#xff0c;比我预想的多了快一倍。后来看到有人在聊“默认聊到 96 万 token 才压缩&#xff0c;改到 40 万周额度能省近三成”&#xff0c;第一反应是“96 万…

作者头像 李华