智能助手网
标签聚合 IP

/tag/IP

linux.do · 2026-04-18 23:02:59+08:00 · tech

Azure的公共IP只允许创建静态IP,静态IP又不在azure for student的额度上,然后扣你余额。 Azure学生包 创建机器默认静态IP 改为动态IP可避免扣费 开发调优 默认配置下来就是静态ip,两台机器一年下来 这100刀基本上就搭进去了 已经创建的虚拟机无法从静态改为动态,只能删机重建 创建时ip要选择基本层,然后才能选择动态ip,不重启应该不会变 [image] 我创建时SKU只有标准,也就改不了动态IP。 好在我之前建了一个有公共IP的虚拟机,又建了一个虚拟网络。我把新老虚拟机都搭载到了虚拟网络上,用老虚拟机访问新虚拟机,同区域间的流量传输不收费。 :新虚拟机如果选择密钥认证,密钥要放在老虚拟上。 只不过这样虚拟机似乎访问不了网络,所以我让老虚拟机做NAT,转发新虚拟机的流量。 首先把老虚拟机的入站端口打开,让新虚拟机的流量能进入老虚拟机。 两台机器都要搭载到一个虚拟网络,但子网不能相同。设定两台机器在子网的静态IP,假设老机器是10.0.0.5,新机器是10.0.1.7。 老虚拟机的网络接口打开“启用 IP 转发”。为新虚拟机建立资源“路由表”,绑定新机器的子网,下一个跃点类型设为VirtualAppliance,下一个IP跃点设为老机器子网IP,即10.0.0.5。 老机器确认出口网卡 ip -br addr 一般是eth0。 老机器启用内核转发 echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-azure-nat.conf sudo sysctl --system 配置NAT规则 sudo iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE sudo iptables -A FORWARD -s 10.0.1.0/24 -o eth0 -j ACCEPT sudo iptables -A FORWARD -d 10.0.1.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i eth0 -j ACCEPT 持久化规则 sudo apt update sudo apt install -y iptables-persistent sudo netfilter-persistent save 然后新机器就可以正常上网了。最后在老机器配置反向代理,就可以通过老机器访问新机器的服务了。 这套方案要确保老机器正常运行,否则两个机器一起down,特别是内存,azure for student免费的机器只有1G内存,最好提前添加交换区。 1 个帖子 - 1 位参与者 阅读完整话题

www.ithome.com · 2026-04-18 22:37:05+08:00 · tech

IT之家 4 月 18 日消息,据科技媒体 TechCrunch 昨天报道,支付服务提供商 Stripe 曾在几年前试图收购 Airwallex 空中云汇,但最终并未成交。 据报道,Airwallex 创始人 Jack Zhang 当年 34 岁,创业三年半。他有一天受邀前往 Stripe CEO 帕特里克 · 科里森(Patrick Collison)位于硅谷的豪宅。 当时科里森提出以 12 亿美元(IT之家注:现汇率约合 82.01 亿元人民币)收购 Airwallex,并认为这次交易“回报非凡”。Jack Zhang 听了,也动摇了。 他在旧金山徘徊两周心神不宁 , 一度答应了收购 。 但随后他飞回了万里之外的家,并认真思考自己为何要创办 Airwallex:“公司当时正在以 100 倍速度增长,我才刚体会到创业有多么爽,这才是我的梦想”。 同时,两位联合创始人坚决反对出售。 并且 Jack Zhang 回到办公室后看着白板上的愿景 , 最终还是推掉了收购 。 事实证明,这名创始人的决定相当有远见。如今 Airwallex 年收入超 13 亿美元(现汇率约合 88.84 亿元人民币),同比增长 85%,年交易额更是接近 3000 亿美元(现汇率约合 2.05 万亿元人民币)。 据悉,Jack Zhang 成长于青岛,15 岁独自前往澳大利亚墨尔本求学。他刚下飞机时几乎不会说英语,寄宿在他人家中。家庭经济崩溃后, 他同时调酒、洗碗、加油、农场摘柠檬,在打四份工的情况下完成了墨尔本大学计算机学位 。 毕业后他在澳大利亚一家投行里写交易代码,虽然收入不错,但他并不满足。创立 Airwallex 之前,他曾搞过杂志、房地产、进出口贸易、汉堡连锁店等 10 种生意。 不过真正的灵感源于一次咖啡店创业。他当时试图向巴西、印尼、危地马拉等国家的咖啡豆供应商付款,资金经常会被中转银行拦截、风控,有时候得好几周才能退回。这让他开始研究中转银行体系和 SWIFT,以及如何构建自己的全球支付网络。 如今 Airwallex 已在 50 个市场持有近 90 张金融牌照。Jack Zhang 估计,Stripe 最多只有一半。并且这些牌照十分难拿,光是日本就花了七年。 拿这么多牌照的意义在于控制资金流。例如在日本,Stripe 只能处理支付并立即转出资金,而 Airwallex 可以在系统内留存资金,从而提供开立账户、发卡和消费等完整服务。 外汇方面,美国商户如果用 Airwallex 处理澳元交易,可避免 2%-3% 的汇兑费用,并直接用当地余额支付工资或广告费用。 如今,Airwallex 已经和 Stripe 成了正面竞争对手,两家公司都在加速国际化扩张。

linux.do · 2026-04-18 22:05:59+08:00 · tech

<script setup> import { ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import request from '@/utils/request'; import { getFiles, getRandomFile, getFileArray } from '@/utils/yangUtils'; const imageSuffix = ['png', 'jpg', 'jpeg']; const videoSuffix = ['mp4', 'avi', 'mov']; const imageNum = ref(0); const videoNum = ref(0); // 获取父级传入的数据 const props = defineProps(["modelValue", "limit", "message", "isDelete", "isAdd"]); // 定义 emits const emit = defineEmits(['update:modelValue']); // const listData = ref(["https://yxdjpw.oss-cn-beijing.aliyuncs.com/uploadDefault/20260417192542-d3ea46.png", "https://yxdjpw.oss-cn-beijing.aliyuncs.com/uploadDefault/20260417194449-bfb1ba.mp4"]); const listData = ref([]) const onSelectFile = async () => { let result; // #ifdef APP || APP-PLUS || MP-WEIXIN || MP-TOUTIAO || MP-LARK || MP-JD || MP-HARMONY || MP-XHS result = await uni.chooseMedia({ count: props.limit || 9, mediaType: ['image', 'video'], sourceType: ['album', 'camera'], maxDuration: '30s' }) // #endif // #ifdef WEB || H5 result = await uni.chooseFile({ count: props.limit || 9, type: 'all', }) // #endif let arr = []; console.log(result); for (let filePath of result.tempFiles) { // 判断文件是否超出10M if (filePath.size > 10 * 1024 * 1024) { uni.showModal({ title: '提示', content: '文件大小不能超过10M!', showCancel: true, }) return; } if (imageSuffix.includes(filePath.name.replaceAll('"', '').split('.').pop()?.toLowerCase())) { imageNum.value++; } else if (videoSuffix.includes(filePath.name.replaceAll('"', '').split('.').pop()?.toLowerCase())) { // 判断之前有没有上传过视频或者图片 if (imageNum.value >= 1 || videoNum.value >= 1) { uni.showModal({ title: '提示', content: '图片和视频不能同时上传,并且视频只能上传一个!', showCancel: true, }) return; } videoNum.value++; } const data = await request("/upload/uploadFile", filePath.path, "post"); arr.push(getFileArray(data)[0]); } listData.value = listData.value.concat(arr); // 将数据返回出去 emit("update:modelValue", listData.value.join(",")); } // 删除 const onDelete = (index) => { // 1. 先拿到要删除的项(必须在 splice 之前拿!) const deletedItem = listData.value[index]; // 2. 判断类型,更新计数 const ext = deletedItem.split('.').pop()?.toLowerCase(); if (imageSuffix.includes(ext)) { imageNum.value--; } else if (videoSuffix.includes(ext)) { videoNum.value--; } // 3. 再删除元素 listData.value.splice(index, 1); // 4. 更新双向绑定 emit("update:modelValue", listData.value.join(",")); } // 查看 const onView = (item) => { } // 类型判断 const isSuffix = () => { return listData.value.some(item => { // 获取后缀(转小写,避免大小写问题) const ext = item.split('.').pop()?.toLowerCase() return videoSuffix.includes(ext) }) } </script> <template> <view> <view class="header"> <view v-if="props.message" class="message">{{ props.message }}</view> <view class="numCount">{{ `${listData.length}/${props.limit || 9}` }}</view> </view> <view class="image-grid" :class="isSuffix() ? 'grid-video' : ''"> <template v-for="(item, index) in listData" :key="index"> <view class="grid-item grid-item-content" :class="isSuffix() ? 'grid-item-video' : ''" @click="onView(item)"> <image v-if="imageSuffix.includes(item.split('.').pop())" class="img" :src="item" mode="aspectFill" /> <video v-else-if="videoSuffix.includes(item.split('.').pop())" class="video" :src="item" /> <view class="grid-item-delete" v-if="(isAdd ?? true)" @click="onDelete(index)"><uni-icons class="icon-delete" type="closeempty" color="#D3D4D6" size="24" /></view> </view> </template> <view class="grid-item icon-add" v-if="(isAdd ?? true) && !isSuffix() && listData.length < (props.limit ?? 9)" @click="onSelectFile()"> <uni-icons type="plusempty" size="60" color="#F1F1F1"></uni-icons> </view> </view> </view> </template> <style lang="scss" scoped> .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20rpx; } .image-grid { display: grid; grid-template-columns: repeat(3, 1fr); /* 一行3个,自动均分 */ gap: 20rpx; /* 格子间距 */ box-sizing: border-box; } .grid-item { width: 240rpx; height: 240rpx; } .grid-video { grid-template-columns: repeat(1, 1fr) !important; } .grid-item-video { width: 100%; height: 400rpx; } .numCount { display: flex; flex-direction: row-reverse; font-size: 26rpx; } .img, .video { width: 100%; height: 100%; } .grid-item-content { position: relative; } .icon-add { background: #FFFFFF; line-height: 240rpx; text-align: center; border: 1rpx solid #EEEEEE; border-radius: 6rpx; } .grid-item-delete { position: absolute; top: 0rpx; right: 0rpx; z-index: 1; } </style> 方法解析 文件后端返回的是 /api/upload/xxx.png getFiles 将图片拼接成正常能访问的 比如 http://域名.com/api/upload/xxx.png getRandomFile 是随机访问 getFileArray 是拼接成数组 limit → 最多上传数量 默认为9 message → 提示 比如请上传视频 可不填 isDelete → 是否可以删除重新上传 默认为true isAdd → 是否可以新增,比如有些地方可以直接回显 比如产品的图片,但是你不想让它显示新增的框 可以为false 默认为true // 文件加载 export const getFiles = (url) => { if (!url) { return ""; } if (url.startsWith("http://") || url.startsWith("https://")) { return cleanString(url); } else { return baseURL + cleanString(url); } }; // 随机加载文件 export const getRandomFile = (url) => { if (!url) { return ""; } const urls = url.split(","); const randomIndex = Math.floor(Math.random() * urls.length); const selectedUrl = urls[randomIndex]; if ( cleanString(selectedUrl).startsWith("http://") || cleanString(selectedUrl).startsWith("https://") ) { return cleanString(selectedUrl); } else { return baseURL + cleanString(selectedUrl); } }; export const getFileArray = (url) => { if (!url) { return []; } let baseUrl = []; url.split(",").forEach((v) => { if ( cleanString(v).startsWith("http://") || cleanString(v).startsWith("https://") ) { baseUrl.push(cleanString(v)); } else { baseUrl.push(baseURL + cleanString(v)); } }); console.log(baseUrl); return baseUrl; }; 请求就是 uni.request的请求 你们按照你们自己的改 当前只支持H5 你们需要的话 我会再更新 如果上传了视频就直接独占一行 并且不能上传其他视频和图片 仿照的是朋友圈 其他页面调用就是 比如文件名叫uploadFile.vue吧 import UpLoadFile from '@/components/uploadFile.vue' // 页面代码 <UpLoadFile v-model="form.media" /> 第一次封装 还有些问题 我会持续更新的 1 个帖子 - 1 位参与者 阅读完整话题

linux.do · 2026-04-18 21:51:34+08:00 · tech

旧闻了 iPhone 用户现在也可以在手机上运行 Google 新发布的 Gemma 4 模型了——是真的在手机上运行,断网也能用的那种。 App Store 直接搜 “Google AI Edge Gallery”。打开 APP 后可以选择下载 E2B 或者 E4B。官方显然推荐大家用 E2B 这个更小也更快的版本。 除了文本对话,还有图片识别、语音对话等,甚至还支持 Skills。但是实测知识是 2025 年 1 月以前的。 推理框架用了 iPhone 的 GPU,运行还是相当流畅的。 大家可以试试,日常处理文本翻译之类的应该绰绰有余。 8 个帖子 - 5 位参与者 阅读完整话题

linux.do · 2026-04-18 20:58:44+08:00 · tech

在 IPO 推进关键阶段,OpenAI 单日流失三位核心高管,包括 Sora 项目负责人 Bill Peebles、AI for Science 副总裁 Kevin Weil 以及企业应用 CTO Srinivas Narayanan,均已公开宣布离职。 此次人事变动伴随业务收缩:Sora 项目被关停,团队转向其他方向;AI 科学工具与研究团队被拆分并入内部项目,整体战略重心转向编程模型(Codex)及核心产品线。此前 GPT-4o 相关团队亦出现人员流动,显示公司正在进行大规模方向调整。 与此同时,公司管理层动荡加剧,包括 AGI 部署负责人、COO、CMO 等多位高管近期处于休假或转岗状态,叠加部分基础设施项目负责人集体流向外部初创公司,内部组织稳定性受到关注。 治理层面,据 WSJ 披露,部分股东正对 CEO Sam Altman 的决策与其个人投资之间的潜在利益冲突表达担忧。相关争议涉及核聚变公司 Helion、脑机接口公司 Merge Labs 以及航天公司 Stoke Space 等项目,这些投资被认为偏离公司核心业务。 知情人士称,部分股东已私下讨论由董事会主席 Bret Taylor 接替 Altman 出任 CEO 的可能性。当前 OpenAI 正冲刺约 8500 亿美元估值 IPO,内部权力结构与战略方向的不确定性,正成为资本市场关注焦点。 值得注意的是,这并非首次管理层危机。早在 2023 年,Altman 曾短暂被董事会罢免后迅速复职,此次高层震荡被市场视为治理矛盾再度浮出水面。 wallstreetcn.com Sora之父跑路!OpenAI一日流失三高管,资本还密谋换掉奥特曼 IPO前夕,OpenAI单日痛失三位核心高管——Sora创始人、AI科学副总裁、企业CTO同日公开辞职,Sora项目就此画上句点。与此同时,华尔街日报曝光奥特曼多次将核聚变、脑机接口等个人投资强推进公司决策,部分股东已私下讨论由董事会主席Bret Taylor取而代之。 4 个帖子 - 3 位参与者 阅读完整话题

linux.do · 2026-04-18 19:51:40+08:00 · tech

model_provider = "cliproxyapi" model = "gpt-5.4" model_reasoning_effort = "xhigh" service_tier = "fast" 上面是我codex 模型配置,我看cpa日志,是不会用gmini和claude的供应商,有啥办法在codex会话里面切换或者让cpa自动切换吗 随便再问一下,cpa里面ai供应商的那个前缀配置怎么用啊 2 个帖子 - 2 位参与者 阅读完整话题

www.ithome.com · 2026-04-18 17:58:03+08:00 · tech

IT之家 4 月 18 日消息,据路透社报道,人工智能芯片制造商 Cerebras Systems 昨天披露美股 IPO(首次公开募股)申请文件, 试图进入公开资本市场挑战 AI 巨头英伟达 。 据报道,Cerebras 曾在去年 10 月申请 IPO,但在完成 10 亿美元(IT之家注:现汇率约合 68.34 亿元人民币)融资后不久撤回了申请。 同时,Cerebras 致力于“走英伟达没走过的路”,旗下 AI 芯片设计避免依赖 HBM 内存。公司致力于布局推理领域,目前已与 OpenAI 达成价值 200 亿美元(现汇率约合 1366.82 亿元人民币)的多年协议,将为 OpenAI 部署 750 兆瓦规模芯片。 此外,Cerebras 计划在纳斯达克上市,股票代码拟定为“CBRS”,此次发行的主要承销商有摩根士丹利、花旗集团、巴克莱和瑞银等。

linux.do · 2026-04-18 15:29:32+08:00 · tech

大家好,最近在折腾一个具身智能比赛 ManipArena,想来求点建议,也看看有没有佬友愿意一起研究。 我现在研一,对具身智能挺感兴趣,但相关背景还比较弱,很多东西都在边做边补。暑假想找一段具身方向的实习,所以也有点焦虑简历上项目不够,想趁这段时间认真做一个能拿得出手的东西。 目前是在做一个具身智能比赛叫ManipArena,我选了 pi0.5 / OpenPI 这条线做 baseline,正在一点点把训练、推理、评测和比赛接口这些链路接起来。后面也打算继续做 LoRA 微调、baseline 对比,以及看看能不能做一些闭环评测。 不过我现在也有一些困惑: 像我这种基础一般的新人,做 ManipArena 这种比赛值不值得投入? 如果目标是找暑假实习,这类项目应该做到什么程度才比较有说服力? 应该优先把整个 pipeline 跑通,还是尽量做一点自己的改进? 有没有人也在看具身、机器人 policy、VLA、OpenPI 这些方向,愿意一起交流或者组队? 如果有前辈愿意提点一下方向、资料或者避坑建议,我会非常感谢。 如果有朋友正好也在做类似的东西,也欢迎直接回帖或者私信我,一起研究。 5 个帖子 - 4 位参与者 阅读完整话题

www.ithome.com · 2026-04-18 12:45:30+08:00 · tech

Apple 产品京东自营旗舰店 4 月大促已开启,iPhone 17 Pro Max 以旧换新至高补贴 1300 元,指定产品享 24 期免息: 点此前往 。 iPhone Air 于去年 10 月 22 日开售,上市起售价为 7999 元。 今日京东自营叠加国补后仅需 5099 元,无需换新等额外操作,本次京东直接降。 此外,若大家所在地区的国补支持京东支付,本次活动还可享 12 期免息分期: 京东 iPhone Air 12+256GB 京东自营 国补后 5099 元 直达链接 iPhone 17 今日也支持 5099 元 +12 期免息哦: 京东 iPhone 17 8+256GB 京东自营 国补后 5099 元 直达链接

linux.do · 2026-04-18 12:03:11+08:00 · tech

昨天,在群里小伙伴的提醒下,我了解到通过反代 Codex 也可以进行图片的生成和编辑了。随即我进行了一番实验,使用 GPT-Image-1.5 成功生成了如下图片: 技术原理:工具调用(Tool Calling) 与 Gemini 使用专用图片模型(如 NanoBanana 系列)的逻辑不同,在 Codex 中,生图功能是通过 调用工具 实现的,并不依赖特定的模型名称。 基于这一特性,我们可以利用 CLIProxyAPI 的 模型别名 配合 Payload 重写 功能,自定义一套专属的“文生图模型”。下面我分享一下自己的配置思路和使用方法,希望能起到抛砖引玉的作用。 PS:下文前提是已经安装配置好 CLIProxyAPI 并添加了 Codex 的 OAuth 凭证。 1. 配置文件修改 在 CLIProxyAPI 的配置文件中添加以下内容。这里我们将 gpt-5.4-mini 映射为不同分辨率的生图模型,并通过 Payload 强制开启 image_generation 工具。 oauth-model-alias: codex: - name: gpt-5.4-mini alias: gpt-image-1024x1024 fork: true - name: gpt-5.4-mini alias: gpt-image-1024x1536 fork: true - name: gpt-5.4-mini alias: gpt-image-1536x1024 fork: true payload: override-raw: - models: - name: gpt-image-1024x1024 protocol: codex params: tools: '[{"type":"image_generation", "size": "1024x1024", "quality": "high", "background": "auto"}]' tool_choice: '{"type": "image_generation"}' - models: - name: gpt-image-1024x1536 protocol: codex params: tools: '[{"type":"image_generation", "size": "1024x1536", "quality": "high", "background": "auto"}]' tool_choice: '{"type": "image_generation"}' - models: - name: gpt-image-1536x1024 protocol: codex params: tools: '[{"type":"image_generation", "size": "1536x1024", "quality": "high", "background": "auto"}]' tool_choice: '{"type": "image_generation"}' 添加完成后,我们就可以直接调用 gpt-image-1024x1024 、 gpt-image-1024x1536 和 gpt-image-1536x1024 这三个自定义模型了。 2. 快速调用脚本 (PowerShell) 由于目前我还未找到好用的生图客户端,我编写了一个简单的 Windows PowerShell 脚本供大家参考。 使用方法: 修改脚本前四行的 apiUrl 、 apiKey 等参数。 将完整脚本粘贴至 PowerShell 窗口运行。 等待约数十秒,即可在当前运行路径下看到生成的图片。 $apiUrl = "https://你的CLIProxyAPI地址/v1/responses" $apiKey = "你的CLIProxyAPI的apikey" $model = "gpt-image-1536x1024" $text = "画一张赛博朋克的香港,要有汉字" $bodyObject = @{ model = $model instructions = "You are a helpful assistant." input = @( @{ type = "message" role = "user" content = @( @{ type = "input_text" text = $text } ) } ) parallel_tool_calls = $true reasoning = @{ effort = "high" summary = "auto" } stream = $true store = $false include = @( "reasoning.encrypted_content" ) } $body = $bodyObject | ConvertTo-Json -Depth 100 -Compress $outBase = "generated" $utf8NoBom = New-Object System.Text.UTF8Encoding($false) $tempBodyFile = Join-Path $env:TEMP ("response-body-" + [guid]::NewGuid().ToString("N") + ".json") [System.IO.File]::WriteAllText($tempBodyFile, $body, $utf8NoBom) try { curl.exe --silent --show-error --no-buffer ` -X POST $apiUrl ` -H "Content-Type: application/json" ` -H "Authorization: Bearer $apiKey" ` --data-binary ("@" + $tempBodyFile) | ForEach-Object -Begin { $eventType = $null $dataLines = [System.Collections.Generic.List[string]]::new() function Save-Bytes { param([string]$Path, [string]$Base64) [System.IO.File]::WriteAllBytes($Path, [Convert]::FromBase64String($Base64)) Write-Host "Saved $Path" } function Save-ImageGenerationCallResult { param([object]$ImageCall) if (-not $ImageCall) { return } if ($ImageCall.type -ne "image_generation_call") { return } if (-not $ImageCall.result) { return } $ext = if ($ImageCall.output_format) { [string]$ImageCall.output_format } else { "png" } $path = Join-Path (Get-Location) "$outBase.$ext" Save-Bytes -Path $path -Base64 ([string]$ImageCall.result) } function ConvertFrom-JsonCompat { param([string]$Json) if ($PSVersionTable.PSVersion.Major -ge 6) { return $Json | ConvertFrom-Json -Depth 100 } return $Json | ConvertFrom-Json } function Flush-SseEvent { param([string]$Type, [System.Collections.Generic.List[string]]$DataLines) if (-not $Type -or $DataLines.Count -eq 0) { return } $json = ($DataLines -join "`n").Trim() if (-not $json -or $json -eq "[DONE]") { return } try { $obj = ConvertFrom-JsonCompat -Json $json } catch { return } switch ($Type) { "response.output_item.done" { Save-ImageGenerationCallResult -ImageCall $obj.item } "response.completed" { $imageCall = @( $obj.response.output | Where-Object { $_.type -eq "image_generation_call" -and $_.result } ) | Select-Object -First 1 Save-ImageGenerationCallResult -ImageCall $imageCall } } } } -Process { $line = [string]$_ if ($line.StartsWith("event:")) { if ($eventType -or $dataLines.Count -gt 0) { Flush-SseEvent -Type $eventType -DataLines $dataLines $dataLines = [System.Collections.Generic.List[string]]::new() } $eventType = $line.Substring(6).Trim() return } if ($line.StartsWith("data:")) { $dataLines.Add($line.Substring(5).TrimStart()) return } if ([string]::IsNullOrWhiteSpace($line)) { Flush-SseEvent -Type $eventType -DataLines $dataLines $eventType = $null $dataLines = [System.Collections.Generic.List[string]]::new() } } -End { Flush-SseEvent -Type $eventType -DataLines $dataLines } } finally { if (Test-Path -LiteralPath $tempBodyFile) { Remove-Item -LiteralPath $tempBodyFile -Force } } 相关资源 如需了解更详细的参数调整可以参考 OpenAI 官方文档 5 个帖子 - 4 位参与者 阅读完整话题