恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

opencode:开源终端AI编程助手的配置与实战全解析

  • 首页
  • 资讯中心
  • /
  • opencode:开源终端AI编程助手的配置与实战全解析

相关资讯

dsh-launcher:DeepSeek Harness 的一站式启动与诊断工具 2026/9/8 23:42:54
用CD74HC4067扩展ADC采集的完整实战:电路、代码与调试坑 2026/9/8 23:42:54
Generative AI 应用安全指南:基于 Microsoft generative-ai-for-beginners 开源课程的安全编码实践 2026/9/8 23:42:54

最新资讯

SpringBoot+Vue+AI图书管理系统:从数据库到部署全流程实战
CEF、Electron、Tauri深度对比:桌面端跨平台框架选型指南
SpringBoot+Vue图书管理系统:从CRUD到AI智能全栈实战
基于MATLAB的BDS-3 B1C/B2a软件无线电接收机设计与实现
PHP镜像克隆网站源码v4.0:整站备份与部署实战解析
网站权威性如何决定自然排名?SEO优化底层逻辑与实操指南

今日推荐

基于MongoDB的图书管理系统:数据建模与Spring Boot+Vue实战
Claude Code安装配置全攻略:从零开始用上终端AI编程助手
tmux 会话管理与终端复用:AI 编程工作流的调度中枢实战

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

opencode:开源终端AI编程助手的配置与实战全解析

发布时间:2026/9/8 23:42:54
opencode:开源终端AI编程助手的配置与实战全解析 1. 项目概述与核心认知1.1 opencode 到底是一款什么样的工具先说结论opencode 是一个开源的 AI 编程助手以终端命令行工具为主要形态和 Claude Code、Codex 这类产品属于同一个赛道但又有自己的差异化定位。我在实际用了两三周之后最大的感受是它把开放这件事做到了骨子里——你可以自由切换底层模型也可以给它扩各种能力甚至改它的行为逻辑而不像某些全家桶产品那样把接口封闭得死死的。对于刚接触的朋友可以把 opencode 理解成一个住在终端里的 AI 结对程序员你给它一个任务它会自己读代码、查文档、改文件、执行命令然后把改动结果整理给你看。和 ChatGPT 那种对话问答不一样opencode 的核心目标是直接帮你干活而不是告诉你该怎么干。那它解决了什么问题说白了现在写代码这件事里真正消耗精力的往往不是敲键盘而是上下文切换——从IDE切到浏览器查资料从文档切到终端试命令思路一断就是好几分钟。opencode 把理解需求、检索代码、生成改动、运行验证这条链路都串在了同一个会话里等于把你的工作台搬进了一个能自主行动的智能终端。这篇文章适合谁想给 VS Code 或 IDEA 装个 AI 助手但不想被厂商锁定的开发者、已经在用 Claude Code 或 Codex 想换个更开放方案的折腾型选手、还有刚听说 opencode 想搞清楚它到底能干什么的观望者。我会从安装讲到配置从模型接入讲到工具链联动最后把常见的坑和排查思路也一并交代清楚。1.2 选型对比opencode 和 Claude Code、Codex、PI 到底选哪个既然标题里有opencode codex claude code、opencode codex pi 哪个 agent 好用这类热搜说明很多人都在纠结这个问题。我索性把这个对比讲透免得大家一个个去试。维度opencodeClaude CodeCodexPI开源程度完全开源社区活跃闭源但提供 CLI部分开源开源模型自由度高可自由配置多种模型主要绑定自家模型绑定 OpenAI 模型较高生态扩展支持 Skills、MCP、LSP支持插件相对封闭一般终端体验TUI 界面交互丰富终端内对话终端内对话终端内对话上手成本中低配置灵活低开箱即用低低我的真实感受是这样如果你追求开箱即用、少折腾Claude Code 确实顺手但它绑定的是 Anthropic 模型遇到区域不开放或者账号门槛问题时会很被动。Codex 同理绑定 OpenAI 生态。而 opencode 的模型自由度高你可以用自己的 API Key 接各种模型甚至接一些免费档位这一点对预算敏感的开发者非常友好。说到免费模型这也是很多人搜 opencode 时最关心的点之一。opencode 本身不生产模型它是模型的调度层。你完全可以把它接到国内可以直接访问的免费模型接口上比如某些开源模型的公共网关、或者云厂商的免费额度。具体怎么配我在后面模型接入那节会详细写。2. 安装与环境准备2.1 两种主流安装方式npm 和 Goopencode 的官方推荐安装方式有两种npm 和 Go。我在新机器上试过好几轮两种方式各有一批忠实用户这里把细节都摊开讲。先说 npm 方式这是最省事的一条路。环境里只要装了 Node.js 18 或更高版本直接跑npm install -g opencode-ai装完之后在终端输入opencode --version验证。如果输出版本号说明安装成功。不过这里就要提到一个非常高频的问题也就是热搜里那条无法将opencode项识别为 cmdlet、函数、脚本文件或可运行程序的名。这主要发生在 Windows 的 PowerShell 里原因通常是 npm 全局安装目录没有加入系统的 PATH 环境变量。解决办法也很直接先跑npm config get prefix查看 npm 全局目录比如输出是C:\Users\你的用户名\AppData\Roaming\npm然后把这个路径手动加到系统环境变量 PATH 里。加完之后重开一个 PowerShell 窗口再执行opencode就不会报错了。再说 Go 方式。如果你机器上已经装了 Go 1.22 或更高版本用 go install 安装也很方便go install github.com/sst/opencodelatest这种方式适合本来就在搞 Go 开发的朋友安装包就是一个编译好的二进制文件不依赖 Node 运行时启动速度更快资源占用也更小。装完之后opencode命令会出现在$(go env GOPATH)/bin目录下同样需要确保这个目录在 PATH 里。我自己更倾向于 Go 版本因为 NPM 装出来的包在升级时偶尔会遇到权限问题而 Go 的二进制文件更干净。不过如果你只是临时体验NPM 版本五分钟就能跑起来完全没有心理负担。2.2 Shell 补全和其他环境要点很多人不知道的是opencode 内置了 Shell 补全功能。这玩意儿在终端里飞快输入命令的时候特别有用尤其配合长参数时能节省不少时间。安装完成后跑一次opencode completion zsh ~/.zshrc如果用的是 bash那就生成到.bashrc里用 fish 的生成到~/.config/fish/completions/。生成完之后记得source一下对应的配置文件。另外opencode 的 TUI终端界面在 Windows 上默认用的可能是 PowerShell 或 Windows Terminal。实测下来 Windows Terminal PowerShell 7 的组合体验最稳定老版本 PowerShell 5 偶尔会有渲染问题。macOS 用户建议直接用系统自带的 Terminal 或 iTerm2Linux 下用 GNOME Terminal 或 Konsole 都没毛病。还有一个容易踩坑的点是环境变量。opencode 会读取ANTHROPIC_API_KEY、OPENAI_API_KEY这类通用变量如果你同时配了多个服务的 Key它会有自己的优先级逻辑。第一次启动前建议先理清自己想用哪个模型服务别让环境变量互相打架。3. 模型接入与核心配置3.1 免费模型接入实操不求人也能跑起来现在重点说说大家都关注的免费模型接入问题。opencode 支持 OpenAI 兼容接口协议这意味着任何提供 OpenAI 风格接口的模型服务商都可以接入其中不少支持免费额度或免费档位。配置方式有两种一是通过环境变量适合快速体验二是写在配置文件里适合长期使用。以某个提供免费额度的模型服务为例环境变量方式export OPENAI_API_KEY你的免费key export OPENAI_BASE_URLhttps://api.某服务商.com/v1然后启动 opencode在模型选择界面输入模型名称回车就能跑起来。如果希望配置固化下来就在~/.config/opencode/opencode.json里写入 provider 配置。具体格式我会在下一节讲但原理就是告诉 opencode我这个模型服务商的接口地址是什么、密钥是什么、模型叫什么名字。这里要特别提醒所谓免费模型通常有频率限制和上下文长度限制。我试过一个免费档模型单次会话最多处理 8K 上下文稍微大一点的代码库它就失忆了。所以免费模型适合用来写脚本、写单元测试、做代码解释这类轻量任务真要重构一个大型模块还是得靠付费模型的上下文窗口。另外很多朋友遇到过 this model is not available in your country 这个报错。这其实是模型服务商自身的区域限制策略如果你的 IP 或账号所在区域不在开放范围内服务端直接拒绝请求。遇到这个提示我的建议是别硬刚直接在配置文件里把模型切换成同一个服务商提供的其他可用模型或者换一个没有区域限制的服务商这才是最省时的出路。3.2 opencode.json 配置文件实战opencode 的配置体系是我比较欣赏的部分。它设计成全局配置 项目配置两层全局配置放在用户目录下项目配置可以放在项目根目录的.opencode/opencode.json后者会覆盖前者的同名项。这正好对应了热搜里opencode linux 修改 json和opencode 配置的诉求。一个最简配置长这样{ $schema: https://opencode.ai/config.json, provider: { apiKey: env:OPENAI_API_KEY, baseURL: https://api.example.com/v1 }, model: gpt-4o-mini, theme: opencode }这里的$schema字段很实用在 VS Code 里编辑 JSON 时能获得自动补全和字段校验强烈建议保留。env:OPENAI_API_KEY的写法是让 opencode 从环境变量读取密钥这样不会把敏感信息写死在配置里适合把配置文件提交到 Git 仓库。多模型切换也是很多人在热搜里提到的需求。opencode 支持一个 provider 里配多个模型也支持把不同 provider 混在一起{ provider: { openai: { apiKey: env:OPENAI_API_KEY }, anthropic: { apiKey: env:ANTHROPIC_API_KEY } } }然后在运行时按CtrlK快速切换 provider 和 model这是我在终端里用得最多的快捷键之一比打开配置文件改字段直观多了。3.3 Skills 机制给 AI 写操作手册opencode skills 和 opencode oh-my-claudecode 这两个热搜词其实都指向 opencode 的高级玩法——Skills 技能机制。你可以把 Skills 理解成喂给 AI 的专属操作手册。默认情况下模型只知道通用编程知识但你的项目可能有自己的构建命令、代码规范、部署流程这些信息如果每次都要在对话里重新描述效率很低。Skills 可以把这些沉淀下来当 AI 遇到相关场景时自动加载。Skill 本质上是一个 JSON 文件加上可选的脚本放在项目根目录.opencode/skills/下。一个简单的示例{ name: project-build, description: 了解本项目构建命令和产物目录, instructions: 本项目使用 pnpm 构建执行 pnpm build 生成 dist 目录构建产物会被输出到 dist/client 和 dist/server 两个子目录。 }把这个文件存为.opencode/skills/project-build/skill.json之后你在对话里问构建一下或者dist 目录怎么生成的opencode 就会自动加载这个 Skill给出的答案就有了项目上下文。至于热搜里的 oh-my-claudecode这是一个终端美化框架可以理解成给 opencode 界面换主题、加状态栏组件、配置自定义快捷键。装上之后终端里的 opencode 会好看不少信息密度也更高。如果界面默认样式用得腻了值得一试。3.4 Memory 功能与记忆配置opencode memory 这个关键词在开发圈里讨论度不低。这个功能解决的是AI 跨会话失忆的痛点——默认情况下你退出 opencode 再重新启动它对你的项目一无所知所有上下文都清零。Memory 功能的原理是在对话进程中AI 可以决定把某些重要信息写入记忆文件下次会话启动时优先加载这些记忆。我在实际项目里的用法是每完成一个重要模块就让 opencode 记录下该模块的文件位置、核心函数入口、涉及的数据结构。这样下次会话一开始它就能快速回忆起项目状态不用我重新解释一遍。配置记忆的指令很简单在对话里直接说记住用户中心模块的入口文件在 app/controller/user.js核心方法是 getUserInfo即可。opencode 会把这句话结构化地写入记忆文件。你也可以手动维护~/.config/opencode/memory.json直接编辑对应条目。不过有一点要提醒记忆文件不是无限大的随着内容堆积它会越来越长既拖慢加载速度也可能让模型抓不住重点。我一般每隔一两周就清理一次只保留当前阶段真正重要的信息这样记忆的精准度反而更高。4. 工具链联动与多端使用4.1 VS Code 插件与 JetBrains 插件怎么选搜 opencode vscode、vscode opencode 插件、opencode jetbrains idea 插件、idea opencode 插件 的朋友多半是习惯了 IDE 工作流。这里说清楚opencode 官方确实提供了 VS Code 插件和 JetBrains 全家桶插件但它们的定位不是再装一个对话框而是把终端里的 opencode 会话搬到 IDE 里。VS Code 插件的安装方式是在扩展市场搜 opencode 直接装装完后左侧会出现一个 opencode 面板功能上相当于嵌了一个终端界面在 IDE 里。这个形态最大的好处是上下文共享——你在编辑器里打开的当前文件opencode 会话能直接感知问这个函数是干什么的时它不需要你先文件名引用直接分析当前文件就可以了。JetBrains 插件的情况类似在 IDEA、PyCharm、GoLand 里都能用步骤也是插件市场搜名字安装。我个人的感受是JetBrains 的插件比 VS Code 版稍微轻一点功能没那么全但日常对话和分析代码足够用了。如果你和我一样是重度终端用户也可以完全不装插件直接在 IDE 的终端窗口里跑opencode。这样做的好处是省了 IDE 插件本身的资源占用尤其开大项目时少一个插件就少一分卡顿。到底选哪种取决于你平时是IDE 为主还是终端为主的工作习惯。4.2 桌面版与终端 TUI 的实际体验opencode desktop 和opencode 桌面版 这两个热搜说明不少人不满足于纯终端操作。opencode 桌面版本质上是一个打包了终端界面的桌面应用有原生窗口支持快捷键操作也能显示系统通知。我试过桌面版之后觉得它最适用的场景是长时间跑任务比如让 AI 做大规模重构、批量处理文件你可以把窗口切到后台干别的活任务完成它会发系统通知。而终端 TUI 更适合交互式操作——你一句它一步两边来回验证。但桌面版目前的成熟度还不算太高偶尔会遇到窗口缩放之后界面渲染异常的情况。如果你主要是轻量使用终端 TUI 其实已经完全够用桌面版可以作为备选。毕竟 opencode 的核心价值在能干多少活不在长什么样。4.3 MCP 与 LSP 联动扩展MCP 是 Model Context Protocol 的缩写翻译过来就是模型上下文协议。你可以把它理解成 USB-C 接口——模型通过这个标准接口就能外接各种设备。opencode 支持 MCP 客户端模式意味着它可以接入文件系统、数据库连接器、浏览器调试工具等外部服务。LSPLanguage Server Protocol的联动也是很多人关心的功能。LSP 本来是为编辑器提供代码补全、跳转定义、错误诊断服务的opencode 接入 LSP 之后AI 在阅读和修改代码时就能获得更精确的符号信息而不是纯靠文本猜测。举个实际例子在 TypeScript 项目里LSP 能让 opencode 准确知道某个接口的定义在哪个文件、被哪些地方引用改代码时就不容易改错引用了。LSP 的配置方式是在 opencode 配置文件里添加语言服务器的可执行路径。比如 TypeScript{ lsp: { typescript: { command: typescript-language-server, args: [--stdio] } } }配置完重启 opencode它会自动向 LSP 服务器询问打开文件的相关信息。这个功能对中大型项目尤其有价值建议有条件的都配上。至于opencode 如何使用 LSP这个问题本质就是如何给 opencode 配一个语言服务进程理解了上面的原理操作起来就很顺手。5. 实战流程接手项目到验证前端 Bug5.1 用 opencode 接手一个陌生开发项目搜opencode 接手开发项目的朋友应该是被理解陌生代码库这件事折磨过。这个场景恰恰是 opencode 最能体现价值的地方之一。我在接手一个离职同事留下的 Node.js 项目时实际走了一遍完整流程这里分享出来供参考。第一步启动 opencode 并让它扫描项目结构。第一次对话直接说先浏览一下项目根目录把 package.json、README、主要目录结构梳理一遍告诉我这个项目是干什么的用什么技术栈。opencode 会自己读文件并给出结构化总结。这一步的作用是建立全局认知。第二步让 AI 打通运行链路。继续对话怎么启动这个项目依赖安装命令、环境变量配置、数据库初始化步骤都整理出来。如果项目里有 README 它可以直接读没有的话会去翻package.jsonscripts 和配置文件。这个过程里AI 可能会主动运行命令来验证自己的判断你需要在终端里确认它执行的操作。第三步选择一个具体需求进行试水。比如登录接口的前端页面在哪个文件它提交表单之后调用了哪个 API响应数据怎么处理的 让 opencode 从页面组件一路追踪到 API 调用层。这一步验证了它的代码检索能力同时也能看出它对业务逻辑理解的准确度。整个过程下来我觉得 opencode 在接手陌生项目时的最大优势是它不会像人一样只盯着眼前 200 行代码而是会自主跨文件追查调用链并且把关键结论记在会话里。用熟了之后接手项目的时间成本至少降低一半。5.2 用 Playwright 让 AI 自己验证前端 Bugopencode playwright、opencode playwright 怎么测试前端 bug 是另一个值得细说的高频话题。逻辑很简单opencode 负责分析代码、生成修复方案Playwright 负责把修复结果在真实浏览器里跑一遍。两者结合AI 就从只会改代码升级成了改完还能自己验证。我踩通的流程是这样的先安装依赖确保项目里有 Playwright 相关的库和浏览器内核。然后在 opencode 的 MCP 配置里把 Playwright 的调试服务注册为 MCP Server这样 opencode 就能调用浏览器操作工具。接着给出任务用 Playwright 打开本地开发服务器的首页点击登录按钮填写一组有效的测试账号提交表单检查是否跳转到用户中心。opencode 会调用 Playwright 的浏览器工具按步骤执行点击、填表、跳转断言然后把每一步的实际结果反馈给你。如果发现了 bug——比如点击登录后页面没有反应——它会进一步检查控制台报错或者网络请求定位到具体代码位置然后直接修改。这套流程的实际价值我体验很明显以前改前端 bug改完之后还得手动开浏览器点一遍现在 opencode 可以自动完成这层回归验证而且它还能同时检查多个浏览器的兼容情况。当然Playwright 脚本本身也需要调试第一次跑通可能需要多迭代几轮但只要跑顺了之后整个发现 bug → 修复 → 回归验证的循环就会非常舒服。5.3 项目管理中的 go 订阅与套餐选择很多搜索opencode go、opencode go 套餐、opencode go 订阅模型选择的朋友可能把它当成了一家公司的产品。这里需要澄清一下opencode 本身是开源项目但官方也提供了托管服务 opencode go你可以把它理解成一个免配置的云端模型网关。opencode go 的价值在于不用自己一个个去申请各家模型服务的 API Key也不用自己维护配置文件注册官方账号之后它会提供一个统一入口在这个入口里可以选择多种主流模型按需付费或者用免费档位。但我必须在此说明一点搜索里出现的ccswitch 配置 opencode这类关键词涉及的是网络转发和加速层工具这部分内容涉及第三方网络配置不在本文的讨论范围内我也不建议大家为了某些特定区域的模型服务去折腾复杂的网络设置。更稳妥的做法是选用你所在区域可直接访问的模型服务商或者用 opencode 连接本地部署的模型省心又合规。回到套餐选择如果你只是偶尔用用免费档足够。如果每天高强度使用我建议按量付费档比固定月付档更划算因为有些开发日你可能只写几百行代码按量付费就不会浪费。这里的关键思路是别急着上最贵的套餐先用免费档跑一周统计自己的日均消耗再决定要不要升级。6. 常见问题与排查技巧实录6.1 高频报错速查表下面这些是从我自己的踩坑经历和社区高频帖子里整理出来的报错速查表基本覆盖了热搜里出现的大多数问题报错信息出现原因解决办法无法将opencode项识别为 cmdletnpm 全局目录不在 PATH把 npm prefix 目录加入系统 PATH重开终端Opencode is not recognized...同上Windows 环境变量问题手动添加环境变量或改用 go installThis model is not available in your country模型服务商区域策略限制切换同服务商的其他模型或换支持本地区的服务商Unexpected server error. Check server logsAPI Key 无效或服务端异常检查环境变量里的 Key 是否正确查看 opencode 日志定位具体请求错误Model context length exceeded请求上下文超限换更大上下文的模型或拆分任务不要让上下文无限膨胀遇到报错的时候我建议大家先做一件事用opencode debug或查看日志目录macOS/Linux 在~/.local/share/opencode/log/Windows 在%USERPROFILE%\.local\share\opencode\log\日志里会有每次请求的 URL、参数和响应状态码。90% 的问题通过日志都能定位到根因别一上来就瞎猜。6.2 配置和模型相关的避坑经验配置这块的坑主要集中在三个方面第一个是环境变量优先级问题。opencode 在读取 API Key 时会优先读配置文件中 provider 里显式声明的apiKey然后才是环境变量。如果你在配置文件里写死了旧 Key环境变量里配了新 Key实际生效的还是旧 Key排查半天才发现是这个问题。第二个是 Base URL 的路径问题。很多 OpenAI 兼容接口的地址末尾需要带/v1有些则不需要。这个没法统一只能看服务商的文档。但有个经验法则如果在配置里发现 404 错误大概率是 Base URL 路径不对如果是 401 错误基本是 Key 不对或没有权限。第三个是模型名称必须和服务商实际提供的名称完全一致。有的服务商把同一个模型叫gpt-4o-mini有的叫gpt-4o-mini-2024-07-18多试几次找到正确名称就行。我个人习惯是把所有已配好的 provider 和模型名记录在一个备忘录里新环境搭建时直接照着写省去反复试探的时间。6.3 运行卡顿、崩溃和资源占用问题opencode 在某些时候会出现越用越卡的现象别急着怪工具先检查两件事。第一会话上下文是否已经很长。对话轮次多了上下文会不断膨胀每次请求都要处理这么多 Token卡是正常的。解决方案是开启新会话必要时让 AI 先把关键结论写入 memory再续新对话。第二是否有多个 opencode 进程同时占用资源。终端窗口开多了每个窗口都挂着一个进程内存占用自然上去。用ps -ef | grep opencodeWindows 下用任务管理器检查一下尽量保持只有一个活跃会话。至于崩溃问题我遇到过两次比较典型的一次是 TUI 界面在 SSH 远程连接下渲染异常崩掉解决办法是升级到最新版本另一次是加载超大文件导致内存溢出解决思路是先让 AI 用命令行工具如head、sed只读文件头部信息而不是一次性把整份文件塞进上下文。另外说一句如果你在 Linux 服务器上跑 opencode 但没装中文字体界面里的中文可能会显示成方块。装一下 fonts-noto-cjk 就能解决。这种小细节往往最容易被忽略却在关键时刻浪费大量时间。7. 经验总结与扩展思路我用了 opencode 这段时间最强烈的体会是它把AI 编程助手这件事做成了开放生态而不是逼着用户适应某个封闭工作流。它既可以在终端里当独立工具用也能嵌进 IDE还能通过 Skills、MCP、LSP 不断扩展边界。如果你手里同时有个人项目和团队项目它两层配置的设计能在不同项目之间自动切换模型和上下文这一块体验确实做得到位。最后再分享一个小技巧opencode 支持直接在 TUI 里按?查看所有快捷键。很多人不知道终端里还能按CtrlE打开编辑器来输入多行指令这个在需要给 AI 粘贴大段需求描述时非常方便。后续如果你想让 opencode 在团队内推广可以考虑把项目的代码规范、构建流程、部署步骤都沉淀成 Skills 文件放进 Git 仓库里新成员第一次拉代码就能让 AI 快速了解项目规则这个投入的长期收益是相当可观的。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号