2026/4/18 17:23:09
网站建设
项目流程
网站群发软文软件,凡科网做的网站能直接用吗,培训机构推广,手工制作灯笼简单又漂亮Coze#xff08;扣子#xff09;Agent 插件 参考#xff1a;Coze 官方文档 Agent 插件、插件介绍。 一、插件是什么#xff1f;#xff08;一句话#xff09;
插件#xff08;Plugin#xff09; 智能体可调用的一组工具#xff08;Tools / APIs#xff09;集合…Coze扣子Agent 插件参考Coze 官方文档 Agent 插件、插件介绍。一、插件是什么一句话插件Plugin 智能体可调用的一组工具Tools / APIs集合用于把“模型会说”升级为“系统能做”参考插件介绍。二、插件的作用为什么要用2.1 插件在智能体体系中的位置需要外部能力用户问题智能体/工作流插件/工具外部系统/API/数据源回复/卡片/动作2.2 常见作用与收益表格作用解决什么问题典型例子直接收益对接外部系统模型无法直接访问业务系统CRM/工单/订单查询让回答“有数据可依”执行动作让智能体能“办事”创建工单、发通知、审批少一轮沟通直接落地结构化输出输出可渲染的结构如卡片列表卡片、详情卡片可读性强、可交互复用能力一个能力多处使用同一插件供多个智能体降低重复开发成本三、插件类型围绕你要的 3 个核心点官方文档中常见插件分类/创建方式较多这里按“落地视角”聚焦三类插件的作用上面已讲可托管部署的代码插件无授权插件并给一条“名言式”提醒四、可托管部署的代码插件Code Plugin4.1 这类插件解决什么你只写业务代码平台负责运行与托管不需要你自己买服务器、配环境、做部署实践总结见WayToAGI使用 Coze IDE 创建插件。4.2 工作方式从“写代码”到“上线”在 Coze IDE 编写代码定义工具入参/出参 Schema本地/在线调试发布插件版本智能体绑定插件工作流/对话调用工具平台托管执行并返回 JSON4.3 关键特性精简但覆盖能力点说明注意事项重要托管运行代码由平台托管执行超时/资源限制要按平台规则控制多语言常见常见为 Node.js / Python以 Coze IDE 支持为准见实践文依赖管理可添加第三方依赖依赖包大小有上限例如 250MB见插件介绍返回结构化 JSON工具输出用于下游节点/卡片必须稳定 Schema避免“字段飘”4.4 官方限制做决策用以下是官方文档中“插件/工具”相关的常见限制示例不同版本/套餐会变动以官方为准限制项示例值参考自定义插件 QPS50插件介绍依赖包总大小250MB插件介绍每个插件工具数100插件介绍五、无授权插件No-Auth Plugin 一句名言5.1 什么是“无授权”无授权插件指调用时不需要 OAuth / Secret / Token 等认证流程直接请求并返回结果实践归纳见️创建扣子插件从零到上线、WayToAGI使用 Coze IDE 创建插件。5.2 适用场景场景为什么适合无授权例子公共信息查询数据本来就是公开的一句名言、公开节假日、公开百科摘要内部测试/原型快速验证链路临时接口、Mock 数据5.3 风险与边界重点加粗风险点说明建议接口可被滥用无鉴权更易被刷设频控、加缓存、加白名单不可访问敏感数据无授权不等于无风险一律避免把私有数据放在无授权接口合规与条款公共数据也可能有版权/协议明确数据来源与可用范围5.4 一句名言用于提醒团队“没有授权的接口只有两种结局被滥用或被下线。”这句是工程实践中的“提醒语”用于强调边界与风险控制。六、哪些场景该选“代码插件 / 无授权插件”需求推荐原因需要业务逻辑、清洗、聚合、多接口编排✅代码插件逻辑可控、可测试、可维护只是拉取公开数据、无需身份✅无授权插件上手快、链路短需要用户身份代用户操作✅ OAuth/授权类插件合规且可审计七、快速检查清单上线前 2 分钟自检插件工具的入参/出参 Schema 固定且可回归测试代码插件考虑超时、重试、限流、缓存、降级无授权插件确认不包含敏感数据并做好频控/缓存目标渠道豆包/飞书等验证输出文本/卡片表现一致发布后跑一遍典型问题集Top 20可托管部署的代码插件-示例创建插件云侧插件 - 在 Coze IDE 中创建添加插件工具使用写一段python 代码 查询天气申请高德 mapkey1. 申请入口高德地图开放平台https://lbs.amap.com/控制台https://console.amap.com/2. 申请步骤通用步骤操作说明1打开高德开放平台并登录没有账号先注册2进入控制台https://console.amap.com/3进入应用管理/我的应用不同界面名称略有差异4创建应用填写应用名称、用途等5在应用下添加 Key选择平台类型Web/服务端/Android/iOS 等6配置安全项服务端建议配IP 白名单Web 端建议配Referer 白名单7保存并复制 Key这就是你代码里要用的AMAP_KEY3. Key 类型怎么选最常见你要做什么建议 Key 类型备注Python/后端调用天气 APIWeb 服务 API Key服务端配 IP 白名单更安全前端网页直接加载 JS 地图JavaScript API Key配域名/Referer 白名单移动端 SDK 集成Android/iOS Key绑定包名/Bundle ID4. 在本地配置AMAP_KEY4.1 macOS / zsh推荐临时生效仅当前终端exportAMAP_KEY你的Keypython3 gdrn.py永久生效写入~/.zshrcechoexport AMAP_KEY你的Key~/.zshrcsource~/.zshrc4.2 WindowsPowerShell$env:AMAP_KEY你的Keypython gdrn.py5. 安全注意事项务必看不要把 Key 直接写进代码并提交到仓库尤其是公开仓库服务端 Key 建议配置 IP 白名单减少被盗刷风险如果 Key 泄露到控制台删除/禁用旧 Key再创建新 Key6. 相关文档高德开放平台https://lbs.amap.com/控制台https://console.amap.com/用ai 写 python 代码 高德天气查询无第三方依赖版本 使用方法 1) 先设置环境变量 AMAP_KEY高德 Key export AMAP_KEY你的Key 2) 运行 python3 gdrn.py importjsonimportosimportsslfrom urllib.errorimportURLErrorfrom urllib.parseimporturlencodefrom urllib.requestimporturlopen,RequestAMAP_KEYos.getenv(AMAP_KEY)# 从环境变量读取避免把Key写进代码 def_build_ssl_context()-ssl.SSLContext: 构建 SSL 上下文。 说明部分 macOS / Homebrew Python 环境可能出现 SSLCertVerificationError找不到 CA 证书链。 这里会尝试常见 CA bundle 路径实在不行可通过 环境变量 AMAP_SSL_INSECURE1 临时跳过证书校验不推荐生产环境。 ifos.getenv(AMAP_SSL_INSECURE)1:returnssl._create_unverified_context()# noqa:SLF001仅兜底 candidates[os.getenv(SSL_CERT_FILE),/etc/ssl/cert.pem,/etc/ssl/certs/ca-certificates.crt,/opt/homebrew/etc/ca-certificates/cert.pem,/opt/homebrew/etc/openssl3/cert.pem,/usr/local/etc/openssl3/cert.pem,]forcafile in candidates:ifcafile and os.path.exists(cafile):returnssl.create_default_context(cafilecafile)returnssl.create_default_context()def_get_json(url:str,params:dict)-dict:GET 请求并返回 JSON带 SSL 兼容处理 qs urlencode(params) req Request(f{url}?{qs}, headers{User-Agent: python/urllib}) ctx _build_ssl_context() try: with urlopen(req, timeout10, contextctx) as resp: return json.loads(resp.read().decode(utf-8)) except ssl.SSLCertVerificationError as e: raise RuntimeError( HTTPS 证书校验失败SSLCertVerificationError。\n 解决方案二选一\n 1) 推荐为 Python 配置 CA 证书。\n - 可尝试设置环境变量 SSL_CERT_FILE 指向系统证书例如\n export SSL_CERT_FILE/etc/ssl/cert.pem\n 2) 临时跳过证书校验不推荐生产环境\n - export AMAP_SSL_INSECURE1\n f\n原始错误{e} ) from e except URLError as e: raise RuntimeError(f网络请求失败{e}) from e def geocode(city_name: str) - str: 把城市名转成 adcode更稳定 if not AMAP_KEY: raise RuntimeError(请先设置环境变量 AMAP_KEY) url https://restapi.amap.com/v3/geocode/geo data _get_json(url, {key: AMAP_KEY, address: city_name}) if data.get(status) ! 1 or not data.get(geocodes): raise RuntimeError(f地理编码失败{data}) return data[geocodes][0][adcode] def get_weather(city_name: str, forecast: bool False) - dict: 查询实况/预报天气forecastFalse实况True预报 adcodegeocode(city_name)urlhttps://restapi.amap.com/v3/weather/weatherInfoparams{key:AMAP_KEY,city:adcode,extensions:allifforecastelsebase,}data_get_json(url,params)ifdata.get(status)!1:raiseRuntimeError(f天气查询失败{data})returndataif__name____main__:# 示例查询杭州实况ifnot AMAP_KEY:raiseSystemExit(请先设置环境变量 AMAP_KEY例如export AMAP_KEY你的Key)print(get_weather(杭州,forecastFalse))# 示例查询杭州预报 #print(get_weather(杭州,forecastTrue))用cursor 生成一段coze 能用的代码到时候再拷到coze 插件平台 。from runtimeimportArgsfrom typings.get_api_result.get_api_resultimportInput,Output Each file needs to export a function named handler. This function is the entrance to the Tool. Parameters: args: parameters of the entry function. args.input - input parameters, you can get test input value by args.input.xxx. args.logger - logger instance used to print logs, injected by runtime. Remember to fill in input/output in Metadata, it helps LLM to recognize and use tool. Return: The return data of the function, which should match the declared output parameters. importjsonimportosimportsslfrom urllib.errorimportURLErrorfrom urllib.parseimporturlencodefrom urllib.requestimportRequest,urlopen AMAP_KEYsk-xxxxdef_build_ssl_context()-ssl.SSLContext: 构建 SSL 上下文兼容部分环境证书链缺失问题。 - 默认使用系统 CA - 兜底尝试常见 CA bundle 路径 - 应急设置 AMAP_SSL_INSECURE1 跳过校验不推荐生产 ifos.getenv(AMAP_SSL_INSECURE)1:returnssl._create_unverified_context()# noqa:SLF001仅兜底 candidates[os.getenv(SSL_CERT_FILE),/etc/ssl/cert.pem,# macOS 常见/etc/ssl/certs/ca-certificates.crt,#Debian/Ubuntu常见/opt/homebrew/etc/openssl3/cert.pem,#Homebrew可能存在/usr/local/etc/openssl3/cert.pem,#Intelmac可能存在]forcafile in candidates:ifcafile and os.path.exists(cafile):returnssl.create_default_context(cafilecafile)returnssl.create_default_context()def_get_json(url:str,params:dict)-dict:qsurlencode(params)reqRequest(f{url}?{qs},headers{User-Agent:coze-plugin/urllib})ctx_build_ssl_context()try:withurlopen(req,timeout10,contextctx)as resp:returnjson.loads(resp.read().decode(utf-8))exceptssl.SSLCertVerificationErroras e:raiseRuntimeError(HTTPS 证书校验失败SSLCertVerificationError。可尝试\n1)export SSL_CERT_FILE/etc/ssl/cert.pem\n2) 临时跳过校验不推荐生产export AMAP_SSL_INSECURE1\nf原始错误{e})from e exceptURLErroras e:raiseRuntimeError(f网络请求失败{e})from e defgeocode(city_name:str)-str:城市名-adcode if not AMAP_KEY: raise RuntimeError(未配置环境变量 AMAP_KEY高德 Key) data _get_json( https://restapi.amap.com/v3/geocode/geo, {key: AMAP_KEY, address: city_name}, ) if data.get(status) ! 1 or not data.get(geocodes): raise RuntimeError(f地理编码失败{data}) return data[geocodes][0][adcode] def get_weather(city_name: str, forecast: bool False) - dict: 查询实况/预报天气forecastFalse实况True预报 adcode geocode(city_name) data _get_json( https://restapi.amap.com/v3/weather/weatherInfo, {key: AMAP_KEY, city: adcode, extensions: all if forecast else base}, ) if data.get(status) ! 1: raise RuntimeError(f天气查询失败{data}) return data def _get_input(args: Args[Input], name: str, defaultNone): 兼容 pydantic/dataclass/dict 的取值方式 inpgetattr(args,input,None)ifinp isNone:returndefaultifisinstance(inp,dict):returninp.get(name,default)returngetattr(inp,name,default)def_format_weather_message(weather_data:dict,forecast:bool)-str:ifnot forecast:lives(weather_data or{}).get(lives)or[]ifnot lives:returnf未查询到实况数据{weather_data}wlives[0]return(f{w.get(province,)}{w.get(city,)}\nf天气{w.get(weather,-)}\nf温度{w.get(temperature,-)}℃\nf湿度{w.get(humidity,-)}%\nf风{w.get(winddirection,-)} {w.get(windpower,-)}\nf发布时间{w.get(reporttime,-)})# 预报高德通常返回 forecasts-casts forecasts(weather_data or{}).get(forecasts)or[]ifnot forecasts:returnf未查询到预报数据{weather_data}f0forecasts[0]castsf0.get(casts)or[]ifnot casts:returnf未查询到预报明细{weather_data}lines[f{f0.get(province,)}{f0.get(city,)} 预报{f0.get(reporttime,-)}]forc in casts[:3]:lines.append(f{c.get(date,-)} {c.get(week,-)}f{c.get(dayweather,-)} {c.get(daytemp,-)}℃/f{c.get(nighttemp,-)}℃f{c.get(daywind,-)}{c.get(daypower,-)})return\n.join(lines)defhandler(args:Args[Input])-Output:# 入参约定按你的 metadata 为准这里做兼容city/forecast city_get_input(args,city,杭州)forecastbool(_get_input(args,forecast,False))try:dataget_weather(str(city),forecastforecast)msg_format_weather_message(data,forecastforecast)# 注意Output目前模板只有 message 字段为避免 schema 不匹配这里只返回 messagereturn{message:msg}exceptExceptionas e:ifhasattr(args,logger)and args.logger:args.logger.error(fweather tool error: {e})return{message:f查询失败{e}}发布代码这里需要注意尽量不要涉及到个人信息 。新建插件进行测试选择刚刚自己创建的插件开始测试发布插件即可使用。无授权插件云侧插件 - 基于已有服务创建上面的插件URL 截图错了后缀不要加 /调用这个接口开始测试 因为这个接口是无参数的因此这里就不设置参数了。这个url 是怎样来的呢 https://api.apiopen.top/docs 访问这个网站选择这个url,之前的url 有问题我换一个吧。 https://api.apiopen.top/api/images配置输出参数无授权插件开始测试插件中添加刚刚创建的无授权插件开始测试授权插件以这个为例https://api.apiopen.top/swagger/index.html#/%E8%AE%A4%E8%AF%81/post_api_auth_login点击try out ,得到tokencoze 中配置授权插件参数配置发送邮件收取邮件参考链接Agent 插件官方插件介绍官方WayToAGI使用 Coze IDE 创建插件️创建扣子插件从零到上线