From 58268e6f82ed622110d35d5479979a2df8e67a56 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Thu, 2 Jul 2026 12:58:18 +0800 Subject: [PATCH] f --- content/_meta.js | 6 +- content/concepts/_meta.js | 3 + content/concepts/overview.mdx | 74 ++ content/faq.mdx | 126 ++- content/getting-started.mdx | 76 +- content/guides/_meta.js | 7 +- content/guides/api_keys.mdx | 45 +- content/guides/billing.mdx | 43 + content/guides/console.mdx | 41 +- content/guides/http_api.mdx | 95 ++ content/guides/openai_compatible.mdx | 99 ++ content/guides/streaming.mdx | 6 +- content/index.mdx | 1160 +------------------- content/integrations/_meta.js | 7 + content/integrations/claude_code.mdx | 56 + content/integrations/cline.mdx | 33 + content/integrations/continue.mdx | 39 + content/integrations/cursor.mdx | 50 + content/integrations/overview.mdx | 39 + content/legal/_meta.js | 4 + content/legal/privacy.mdx | 73 ++ content/legal/user-agreement.mdx | 74 ++ content/models/_meta.js | 5 - content/models/claude.mdx | 42 - content/models/deepseek.mdx | 32 - content/models/openai.mdx | 62 -- e2e/smoke.spec.ts | 55 +- playwright.config.ts | 2 +- public/qrcode.jpg | Bin 0 -> 165257 bytes src/app/(site)/news/[slug]/page.tsx | 31 +- src/app/(site)/page.tsx | 2 + src/app/sitemap.ts | 12 + src/components/home-floating-consult.tsx | 75 ++ src/components/intelligent-report-grid.tsx | 46 +- src/components/model-library-card.tsx | 7 +- src/components/news-list-card.tsx | 23 +- src/components/section-contact.tsx | 65 +- src/components/site-footer.tsx | 17 +- src/components/skill-example-content.tsx | 36 +- src/components/wechat-qr-dialog.tsx | 75 ++ src/content/model-catalog.ts | 33 +- src/content/news-articles.ts | 183 ++- src/content/site.ts | 225 ++-- src/content/skills.ts | 34 +- src/lib/docs-nav.ts | 34 +- src/lib/site-metadata.ts | 9 +- src/styles/components.css | 112 ++ 47 files changed, 1679 insertions(+), 1694 deletions(-) create mode 100644 content/concepts/_meta.js create mode 100644 content/concepts/overview.mdx create mode 100644 content/guides/billing.mdx create mode 100644 content/guides/http_api.mdx create mode 100644 content/guides/openai_compatible.mdx create mode 100644 content/integrations/_meta.js create mode 100644 content/integrations/claude_code.mdx create mode 100644 content/integrations/cline.mdx create mode 100644 content/integrations/continue.mdx create mode 100644 content/integrations/cursor.mdx create mode 100644 content/integrations/overview.mdx create mode 100644 content/legal/_meta.js create mode 100644 content/legal/privacy.mdx create mode 100644 content/legal/user-agreement.mdx delete mode 100644 content/models/_meta.js delete mode 100644 content/models/claude.mdx delete mode 100644 content/models/deepseek.mdx delete mode 100644 content/models/openai.mdx create mode 100644 public/qrcode.jpg create mode 100644 src/components/home-floating-consult.tsx create mode 100644 src/components/wechat-qr-dialog.tsx diff --git a/content/_meta.js b/content/_meta.js index 4f19837..8333746 100644 --- a/content/_meta.js +++ b/content/_meta.js @@ -1,7 +1,9 @@ export default { index: "文档中心", "getting-started": "快速开始", - models: "AI 模型接入", - guides: "使用指南", + integrations: "工具接入", + guides: "开发指南", + concepts: "核心概念", faq: "常见问题", + legal: "法律条款", }; diff --git a/content/concepts/_meta.js b/content/concepts/_meta.js new file mode 100644 index 0000000..badee25 --- /dev/null +++ b/content/concepts/_meta.js @@ -0,0 +1,3 @@ +export default { + overview: "核心概念", +}; diff --git a/content/concepts/overview.mdx b/content/concepts/overview.mdx new file mode 100644 index 0000000..93306ce --- /dev/null +++ b/content/concepts/overview.mdx @@ -0,0 +1,74 @@ +--- +title: 核心概念 +sidebarTitle: 核心概念 +description: Token、上下文窗口、模型 ID 与计费 +--- + +# 核心概念 + +理解以下概念,有助于控制成本、避免超长报错,并正确对接 [HTTP API](/docs/guides/http_api) 与 [OpenAI SDK](/docs/guides/openai_compatible)。 + +## Token 与 usage + +**Token** 是模型处理文本的基本单位,可粗略理解为「字 / 词」的切分片段。不同模型分词方式不同,**中文、英文、数字、符号** 的 token 数未必与字符数 1:1 对应。 + +每次成功的 Chat Completions 响应(非流式)通常包含 `usage` 字段,例如: + +```json +"usage": { + "prompt_tokens": 100, + "completion_tokens": 200, + "total_tokens": 300 +} +``` + +- **prompt_tokens**:输入侧(含 `messages` 与部分系统开销) +- **completion_tokens**:模型生成内容 +- 控制台 **使用记录** 与 **费用账单** 按平台计价规则据此扣费 + +流式调用结束后,也可能在最后一个 chunk 或汇总接口中提供 usage,以实际返回为准。 + +## 上下文窗口 + +**上下文窗口** 指单次请求中,模型能处理的 **最大 token 总量**(通常包括用户输入、历史多轮、模型输出;部分推理模型还包含中间推理 token)。 + +若对话过长: + +1. **超出部分可能被截断**,导致模型「忘记」 earlier 内容 +2. 可能直接返回参数或长度类错误 + +**建议:** + +- 在 [模型广场](https://console.haiyushuke.com/models) 查看各模型上下文上限 +- 长文档场景优先选用 **长上下文** 模型,或做分段摘要 + RAG +- 多模态输入(图片、音频等)常有 **更严格的输入限制**,以模型说明为准 + +## 模型 ID + +**模型 ID** 是 API 中 `model` 字段的字符串,是调用时的唯一标识。 + +- 必须从 **控制台模型广场** 复制,勿臆造或沿用其他平台的名称 +- API Key 可配置 **可用模型** 子集;请求未授权的 ID 会失败 +- 厂商升级版本时 ID 可能变化(如 `glm-5` → `glm-5.1`),需关注控制台公告 + +详见 [工具接入概览](/docs/integrations/overview) 与控制台 **模型广场**。 + +## API Key 与控制台登录 + +- **API Key**:用于 `Authorization: Bearer`,调用 **网关 API** +- **控制台 JWT / Session**:仅用于登录 **console.haiyushuke.com** 管理资源 + +二者不可混用。Key 泄露风险高,须 [妥善保管](/docs/guides/api_keys)。 + +## 余额与扣费 + +调用前账户需有足够 **余额**(预付费模式)。扣费一般发生在请求成功并完成计量之后;余额不足时返回 **402** / `INSUFFICIENT_BALANCE`。见 [计费与财务](/docs/guides/billing)。 + +## 统一网关 + +海宇数科 **统一网关** 对上游多厂商做路由与计量:您面对的是一个 Base URL 与一套 Key 体系,底层模型由平台调度至对应供应商。因此文档与控制台以 **海宇模型 ID** 为准,而非各厂商原站产品名。 + +## 延伸阅读 + +- [快速开始](/docs/getting-started) +- [常见问题](/docs/faq) diff --git a/content/faq.mdx b/content/faq.mdx index bd77501..aa45a9f 100644 --- a/content/faq.mdx +++ b/content/faq.mdx @@ -1,32 +1,128 @@ --- title: 常见问题 -description: 接入与使用中的常见问题解答 +description: 接入、账号、计费与错误排查 --- # 常见问题 -## 返回 401 Unauthorized +## 账号与实名认证 -- 检查 `Authorization: Bearer` 后是否有多余空格 -- 确认 Key 未被禁用、未过期 -- 确认请求发往正确的 Base URL +### 为什么无法创建 API Key 或充值? -## 返回 429 Too Many Requests +创建 API Key、使用体验中心、充值与查看完整财务信息前,需先在 **账户中心 → 实名认证** 完成认证。若页面提示「请先完成实名认证」,按指引提交材料即可。 -表示触发 **限流**。请降低并发、实现指数退避重试,或联系商务提升配额。 +### 个人认证和企业认证有什么区别? -## 模型不存在 / model_not_found +- **个人认证**:满足个人开发者试调用、在线充值与 API 接入。 +- **企业认证**:满足企业对公结算、发票与合规要求;**对公转账充值** 仅企业认证用户可用。 -模型 ID 拼写错误或账号未开通该模型。请在 **模型广场** 复制准确 ID。 +### 实名核验次数有限制吗? -## 如何对账? +个人/企业/法人相关核验接口有 **每日次数上限**(如单日 10 次)。若提示「今日核验次数已达上限」,请次日再试或联系客服。 -控制台 **账单** 模块可按日查看调用量与费用;企业客户可申请导出明细与发票。 +### 如何修改登录密码? -## 是否支持私有化部署? +**账户中心 → 账号设置** 中通过手机号验证修改密码;忘记密码可在登录页使用 **忘记密码** 流程。 -企业方案支持专有云与私有化,请通过官网 [联系我们](/#contact) 获取方案与 POC 安排。 +--- -## 文档有错误怎么办? +## 接入与 API -文档随产品迭代更新;若发现过时信息,请通过控制台反馈或邮件联系技术支持。 +### Base URL 和路径是什么? + +- Base URL:`https://api.haiyushuke.com/v1` +- 对话补全:`POST /chat/completions` +- 鉴权:`Authorization: Bearer ` + +与 OpenAI 官方 SDK 兼容时,仅需修改 `apiKey` 与 `baseURL`。详见 [OpenAI SDK 兼容](/docs/guides/openai_compatible) 与 [核心概念 · Token](/docs/concepts/overview#token-与-usage)。 + +### 返回 401 Unauthorized + +- 确认 Header 为 `Bearer `,Bearer 与 Key 之间有一个空格 +- Key 是否已 **禁用** 或 **过期** +- 是否误用了控制台登录 JWT 代替 API Key +- 请求是否发往正确的网关域名 + +### 返回 403 Forbidden + +常见原因: + +- 未完成实名认证却访问受限能力(控制台内功能) +- API Key 绑定的 **模型列表** 不包含当前请求的 `model` +- **IP 白名单** 未包含调用方出口 IP + +### 返回 402 / 余额不足还能调用吗? + +不能。业务码一般为 `INSUFFICIENT_BALANCE`,表示账户余额不足以完成扣费。请在 **财务 → 账户充值** 充值,或在 **通知管理** 中设置余额告警。 + +### 返回 429 Too Many Requests + +表示触发 **限流**(网关或上游)。请降低并发、对可重试错误做指数退避,或联系商务提升配额。 + +### 模型不存在 / model_not_found + +- 检查 `model` 字符串是否与 **模型广场** 中的 ID 完全一致(区分大小写与后缀) +- 确认该 Key 的 **可用模型** 范围是否包含此模型 +- 新模型上线后若不可用,刷新模型列表或联系支持确认开通状态 + +### 流式调用没有输出或中途断开 + +- 请求体需设置 `"stream": true` +- 客户端需持续读取 SSE,并处理网络超时与代理缓冲 +- 详见 [流式调用](/docs/guides/streaming) + +### 能否在前端网页直接调用 API? + +**不建议。** API Key 会暴露在浏览器中。请由后端服务器持有 Key 并转发请求。 + +--- + +## 计费与账单 + +### 如何计费? + +通常按模型的 **输入 token** 与 **输出 token** 单价从余额扣减;部分多模态模型按分辨率或时长分档,以模型广场说明为准。 + +### 如何对账? + +- **使用记录**:按次查看模型、用量与费用 +- **费用账单**:按月汇总 +- 企业客户如需定制导出,请 [联系我们](/#contact) + +### 如何开发票? + +**财务 → 发票开具**(需实名认证)。按页面选择已结清账单并填写开票信息;具体规则以控制台为准。 + +### 充值未到账怎么办? + +在 **充值明细** 查看订单状态;在线支付可能存在几分钟延迟。长时间未到账请保留订单号并联系客服。 + +--- + +## 控制台与产品 + +### 控制台「开发文档」在哪里? + +侧栏 **开发文档**、模型卡片 **接入文档**、底部 **常见问题** 均跳转至官网 **文档中心**(本站 `/docs`)。 + +### 智能报告和 Agent 技能如何接入? + +官网 [智能报告](/reports) 与 [Agent 技能](/agents) 介绍场景与示例;Skill 安装能力持续开放,可关注控制台与官网公告。 + +### 是否支持私有化部署? + +企业方案支持专有云与私有化部署,请通过 [联系我们](/#contact) 获取方案与 POC 安排。 + +--- + +## 其他 + +### 文档有错误或过时怎么办? + +文档随产品迭代更新。若与控制台展示不一致,以控制台为准,并欢迎通过客服或 main@haiyushuke.cn 反馈。 + +### 如何获取技术支持? + +- 控制台侧栏 **在线客服** +- 官网 [联系我们](/#contact) +- 邮件 main@haiyushuke.cn diff --git a/content/getting-started.mdx b/content/getting-started.mdx index 8ae6dea..585a6dd 100644 --- a/content/getting-started.mdx +++ b/content/getting-started.mdx @@ -1,44 +1,88 @@ --- title: 快速开始 -description: 五分钟完成 API Key 创建与首次调用 +description: 注册、环境配置、API Key 与首次调用 --- # 快速开始 -按以下步骤即可在海宇数科平台完成首次模型调用。 +本指南对应开放平台常见的「分钟级接入」流程(参见 [智谱 · 快速开始](https://docs.bigmodel.cn/cn/guide/start/introduction) 类文档结构),步骤以 **海宇数科控制台与网关** 为准。 ## 1. 注册并登录控制台 -访问 [控制台](https://console.haiyushuke.com),使用企业邮箱或手机号完成注册。首次登录建议完成实名/企业认证(若你方环境要求)。 +访问 [控制台](https://console.haiyushuke.com),使用手机号注册并登录。 -## 2. 创建 API Key +## 2. 完成实名认证 -1. 进入 **设置 → API Key** -2. 点击 **创建密钥**,填写名称(如 `prod-backend`) -3. 复制密钥并妥善保存(仅展示一次) +创建 **API Key**、使用 **体验中心**、**账户充值** 与查看完整 **财务** 信息前,需完成实名认证: -## 3. 选择模型与端点 +1. 侧栏 **账户中心 → 实名认证** +2. 按页面指引提交个人或企业认证材料 +3. 认证通过后,上述功能即可正常使用 -在 **模型广场** 或 **接入文档** 中确认: +企业用户若需 **对公转账充值**,须完成 **企业认证**。 -- 模型 ID(如 `gpt-4o-mini`、`deepseek-chat`) -- 兼容协议(一般为 OpenAI Chat Completions) +## 3. 配置开发环境(可选) -## 4. 发起测试请求 +在集成代码的机器上设置环境变量,避免硬编码 Key: + +```bash +export HAIYUSHUKE_API_KEY="你的密钥" +export HAIYUSHUKE_BASE_URL="https://api.haiyushuke.com/v1" +``` + +SDK 安装: + +```bash +# Node.js +npm install openai + +# Python +pip install openai +``` + +详见 [OpenAI SDK 兼容](/docs/guides/openai_compatible)。 + +## 4. 为账户充值(可选) + +预付费环境下,请进入 **财务 → 账户充值** 完成充值后再调用 API。 + +## 5. 创建 API Key + +1. 侧栏 **API Key** → **创建** +2. 填写名称(如 `dev-backend`) +3. 可选:可用模型、额度、过期时间、IP 白名单 +4. **立即复制并保存** 完整密钥(仅展示一次) + +## 6. 选择模型 ID + +在控制台 **模型广场** 确认 `model` ID;也可在 **体验中心** 试调用后再写入代码。IDE 配置见 [工具接入概览](/docs/integrations/overview)。 + +## 7. 发起测试请求 + +**HTTP(curl):** ```bash curl https://api.haiyushuke.com/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ - "model": "gpt-4o-mini", + "model": "deepseek-chat", "messages": [{"role": "user", "content": "你好,请用一句话介绍海宇数科"}] }' ``` -成功时响应 JSON 中包含 `choices[0].message.content`。 +成功时 JSON 含 `choices[0].message.content` 与 `usage`。接口细节见 [HTTP API](/docs/guides/http_api)。 + +## 8. 核对用量 + +在 **财务 → 使用记录** 查看 token 与费用;理解 **Token** 含义见 [核心概念](/docs/concepts/overview)。 ## 下一步 -- 按厂商阅读 [OpenAI 接入](/docs/models/openai)、[Claude 接入](/docs/models/claude) -- 了解 [流式调用](/docs/guides/streaming) 与 [API Key 管理](/docs/guides/api_keys) +| 目标 | 文档 | +| --- | --- | +| 用 SDK 接入 | [OpenAI SDK 兼容](/docs/guides/openai_compatible) | +| 流式 UI | [流式调用](/docs/guides/streaming) | +| 配置 IDE | [Cursor](/docs/integrations/cursor)、[Claude Code](/docs/integrations/claude_code) 等 | +| 运维与计费 | [API Key](/docs/guides/api_keys)、[计费与财务](/docs/guides/billing) | +| 排错 | [常见问题](/docs/faq) | diff --git a/content/guides/_meta.js b/content/guides/_meta.js index 3016f80..3f6966c 100644 --- a/content/guides/_meta.js +++ b/content/guides/_meta.js @@ -1,5 +1,8 @@ export default { - console: "???", + http_api: "HTTP API", + openai_compatible: "OpenAI 兼容 SDK", + console: "控制台", api_keys: "API Key", - streaming: "????", + streaming: "流式调用", + billing: "计费与财务", }; diff --git a/content/guides/api_keys.mdx b/content/guides/api_keys.mdx index adc833e..dd0ed0c 100644 --- a/content/guides/api_keys.mdx +++ b/content/guides/api_keys.mdx @@ -1,26 +1,55 @@ --- title: API Key 管理 sidebarTitle: API Key -description: 创建、轮换与权限最佳实践 +description: 创建、轮换、额度与白名单最佳实践 --- # API Key 管理 +在控制台侧栏 **API Key** 中管理所有调用凭证。创建与管理前需完成 **实名认证**。 + ## 创建 -控制台 → **设置 → API Key** → **创建**。建议命名包含环境与用途,例如 `prod-report-agent`。 +1. 点击 **创建** +2. 填写名称(建议包含环境与用途,如 `prod-report-agent`) +3. 可选配置: + - **可用模型**:限制该 Key 只能调用指定模型 + - **额度上限 / 剩余额度**:控制总消耗 + - **过期时间**:到期后 Key 自动失效 + - **IP 白名单**:仅允许 listed IP 调用(留空表示不限制,生产环境建议配置) + +创建成功后请 **立即复制并保存** 完整密钥;之后列表仅显示脱敏前缀。 + +## 鉴权方式 + +HTTP 请求头: + +```http +Authorization: Bearer <你的 API Key> +Content-Type: application/json +``` + +OpenAI SDK 中将该 Key 设为 `apiKey`,`baseURL` 设为 `https://api.haiyushuke.com/v1`(见 [OpenAI 兼容 SDK](/docs/guides/openai_compatible))。 ## 存储 -- 使用环境变量:`HAIYUSHUKE_API_KEY` -- 密钥管理系统(KMS / Vault)中保存,勿提交至 Git +- 环境变量:如 `HAIYUSHUKE_API_KEY` +- 密钥管理系统(KMS / Vault),勿提交至 Git 或镜像层 ## 轮换流程 -1. 创建新 Key -2. 在应用配置中灰度切换 -3. 确认流量稳定后禁用旧 Key +1. 创建新 Key(可先绑定相同模型与 IP 策略) +2. 在应用配置中灰度切换 +3. 观察 **使用记录** 确认旧 Key 无流量后 **禁用** 旧 Key ## 泄露应急 -若 Key 已泄露:立即 **禁用** 该 Key → 新建 → 排查仓库与 CI 日志是否残留。 +1. 控制台中 **禁用** 泄露的 Key +2. 新建 Key 并更新部署 +3. 检查 Git 历史、CI 日志、前端 bundle 是否残留 +4. 若曾未设 IP 白名单,建议新 Key 启用白名单 + +## 相关文档 + +- [快速开始](/docs/getting-started) +- [常见问题:401 与 Key](/docs/faq#返回-401-unauthorized) diff --git a/content/guides/billing.mdx b/content/guides/billing.mdx new file mode 100644 index 0000000..2b1695e --- /dev/null +++ b/content/guides/billing.mdx @@ -0,0 +1,43 @@ +--- +title: 计费与财务 +sidebarTitle: 计费与财务 +description: 充值、账单、使用记录与发票说明 +--- + +# 计费与财务 + +模型调用按 **输入 token / 输出 token**(或模型广场标注的计价单位)从账户 **余额** 扣费。请在控制台 **财务** 菜单中查看与充值。 + +## 模块说明 + +| 菜单 | 作用 | +| --- | --- | +| 财务总览 | 当前余额、近期消耗与快捷入口 | +| 账户充值 | 在线充值(需先完成实名认证) | +| 充值明细 | 充值订单与到账状态 | +| 费用账单 | 按月汇总模型与相关服务费用 | +| 使用记录 | 单次调用的模型、用量与扣费明细 | +| 发票开具 | 对已结清账单申请增值税发票(需实名认证) | + +## 计费逻辑(概要) + +1. 发起 API 或体验中心调用前,账户需有足够余额。 +2. 请求成功后,系统按模型定价与实际上下 token 用量记账。 +3. 余额不足时,网关可能返回 **402 Payment Required**(业务码 `INSUFFICIENT_BALANCE`),请先 [账户充值](https://console.haiyushuke.com/finance/recharge)。 + +具体单价以 **模型广场** 各模型卡片为准;促销或「特惠」模型以控制台标注为准。 + +## 余额告警 + +在 **账户中心 → 通知管理** 中可配置余额阈值与通知方式,避免生产流量因余额耗尽中断。 + +## 对账建议 + +- 日常:用 **使用记录** 按模型、时间筛选,与业务日志中的 request id 对照。 +- 月度:导出或查看 **费用账单**,与财务系统对账。 +- 企业客户:如需明细导出、合同价或专票流程,请通过 [联系我们](/#contact) 联系商务。 + +## 相关文档 + +- [控制台使用指南](/docs/guides/console) +- [常见问题:余额与账单](/docs/faq#余额不足还能调用吗) diff --git a/content/guides/console.mdx b/content/guides/console.mdx index 8f68ebf..baca5a0 100644 --- a/content/guides/console.mdx +++ b/content/guides/console.mdx @@ -8,23 +8,38 @@ description: 控制台主要功能与导航说明 控制台地址:[https://console.haiyushuke.com](https://console.haiyushuke.com) -## 主要模块 +## 侧栏模块 -1. **概览**:用量、余额与近期调用趋势 -2. **模型广场**:浏览可用模型、定价与能力说明 -3. **API Key**:创建、轮换、禁用密钥 -4. **调用日志**(若已开通):按时间筛选请求与错误 -5. **账单**:充值、发票与明细导出 +| 模块 | 说明 | +| --- | --- | +| 数据看板 | 用量与账户概览(持续完善中) | +| 模型广场 | 浏览国内模型、价格、能力标签;复制模型 ID;**接入文档** 跳转官网 [工具接入](/docs/integrations/overview) | +| 体验中心 | 登录且实名认证后,在线对话试调用 | +| API Key | 创建与管理调用凭证、额度与 IP 白名单 | +| 开发文档 | 跳转至官网 [文档中心](/docs) | +| 财务 | 总览、充值、充值明细、账单、使用记录、发票 | +| 账户中心 | 账号设置、实名认证、通知管理 | + +侧栏底部 **常见问题** 同样跳转至官网文档 [FAQ](/docs/faq);**在线客服** 打开企业微信客服。 ## 推荐工作流 -1. 创建 API Key -2. 在模型广场选择目标模型 -3. 使用 SDK 或 cURL 完成联调 -4. 在概览与调用日志中核对用量 +1. 完成 **实名认证** +2. **账户充值**(若账户需预付费) +3. 在 **模型广场** 选定模型,在 **体验中心** 验证效果 +4. 在 **API Key** 创建密钥并限制模型范围 +5. 在 Cursor 等工具或业务服务中配置 `baseURL` 与 Key,见 [工具接入概览](/docs/integrations/overview) +6. 在 **使用记录** / **费用账单** 中核对用量 ## 权限与安全 -- 为不同环境(开发 / 预发 / 生产)使用不同 Key -- 定期轮换 Key;泄露后立即 **禁用** 并新建 -- 生产环境勿将 Key 写入前端 bundle +- 开发、预发、生产使用 **不同 API Key**,便于泄露时单独轮换 +- 生产环境勿将 Key 写入前端静态资源或公开仓库 +- 为 Key 配置 **IP 白名单** 可降低密钥泄露风险 +- Key 泄露后:立即 **禁用** → 新建 Key → 排查 CI 与日志是否残留 + +## 相关文档 + +- [API Key 管理](/docs/guides/api_keys) +- [计费与财务](/docs/guides/billing) +- [工具接入概览](/docs/integrations/overview) diff --git a/content/guides/http_api.mdx b/content/guides/http_api.mdx new file mode 100644 index 0000000..61fbe98 --- /dev/null +++ b/content/guides/http_api.mdx @@ -0,0 +1,95 @@ +--- +title: HTTP API 调用 +sidebarTitle: HTTP API +description: RESTful Chat Completions 接口说明 +--- + +# HTTP API 调用 + +海宇数科网关提供与 OpenAI 兼容的 **RESTful HTTP API**,适用于任意编程语言、curl、API 网关或服务 mesh,无需安装专用 SDK。 + +## 基本信息 + +| 项目 | 值 | +| --- | --- | +| Base URL | `https://api.haiyushuke.com/v1` | +| 对话补全 | `POST /chat/completions` | +| Content-Type | `application/json` | +| 鉴权 | `Authorization: Bearer ` | + +API Key 在控制台 **API Key** 创建;详见 [API Key 管理](/docs/guides/api_keys)。 + +## 请求示例 + +```bash +curl https://api.haiyushuke.com/v1/chat/completions \ + -H "Authorization: Bearer YOUR_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "deepseek-chat", + "messages": [ + {"role": "system", "content": "你是简洁的企业助手。"}, + {"role": "user", "content": "什么是 Token?"} + ], + "temperature": 0.7, + "max_tokens": 1024 + }' +``` + +## 请求体常用字段 + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `model` | string | **必填**。控制台模型广场中的 ID | +| `messages` | array | **必填**。`role`:`system` / `user` / `assistant` | +| `temperature` | number | 可选,采样随机性,常见 0–2 | +| `max_tokens` | integer | 可选,限制本次最大生成 token | +| `stream` | boolean | 可选,`true` 时返回 SSE,见 [流式调用](/docs/guides/streaming) | + +部分模型支持更多参数(如 `top_p`、`stop` 等),与 OpenAI 兼容子集一致;不支持的字段可能被忽略或返回参数错误。 + +## 响应结构(非流式) + +成功时 HTTP **200**,JSON 主体包含: + +- `id`:请求标识 +- `choices[].message.content`:模型回复文本 +- `usage`:token 统计,用于对账,见 [核心概念](/docs/concepts/overview#token-与-usage) + +```json +{ + "choices": [ + { + "message": { "role": "assistant", "content": "..." }, + "finish_reason": "stop" + } + ], + "usage": { + "prompt_tokens": 12, + "completion_tokens": 48, + "total_tokens": 60 + } +} +``` + +## 错误与 HTTP 状态码 + +| 状态 | 常见原因 | +| --- | --- | +| 401 | Key 无效、过期、禁用或 Authorization 格式错误 | +| 402 | 账户余额不足(`INSUFFICIENT_BALANCE`) | +| 403 | Key 无该模型权限、IP 不在白名单等 | +| 429 | 限流,需退避重试 | +| 4xx/5xx | 参数错误、模型不存在或上游异常,见响应 body 中的 `message` / `code` | + +更多排查见 [常见问题](/docs/faq)。 + +## 流式响应 + +设置 `"stream": true` 后,响应为 **SSE** 增量块,格式与 OpenAI 流式兼容。客户端须持续读取直至 `[DONE]`,并处理断线重试。 + +## 下一步 + +- [OpenAI SDK 兼容](/docs/guides/openai_compatible) +- [快速开始](/docs/getting-started) +- [工具接入概览](/docs/integrations/overview)(Cursor、Claude Code 等) diff --git a/content/guides/openai_compatible.mdx b/content/guides/openai_compatible.mdx new file mode 100644 index 0000000..6bea9dc --- /dev/null +++ b/content/guides/openai_compatible.mdx @@ -0,0 +1,99 @@ +--- +title: OpenAI 兼容 SDK +sidebarTitle: OpenAI 兼容 SDK +description: 使用 OpenAI 官方 SDK 对接海宇数科网关(协议兼容,模型为国内 ID) +--- + +# OpenAI SDK 兼容 + +若您已有基于 **OpenAI 官方 SDK** 的应用,迁移到海宇数科通常只需两步: + +1. 将 `baseURL`(或 `base_url`)改为 `https://api.haiyushuke.com/v1` +2. 将 `apiKey` 改为在海宇控制台创建的 **API Key** + +协议兼容 **Chat Completions**(`client.chat.completions.create`),便于零学习成本切换。 + +## 环境变量(推荐) + +```bash +# Linux / macOS +export HAIYUSHUKE_API_KEY="sk-..." +export HAIYUSHUKE_BASE_URL="https://api.haiyushuke.com/v1" +``` + +```powershell +# Windows PowerShell +$env:HAIYUSHUKE_API_KEY="sk-..." +$env:HAIYUSHUKE_BASE_URL="https://api.haiyushuke.com/v1" +``` + +## Node.js + +安装依赖: + +```bash +npm install openai +``` + +```ts +import OpenAI from "openai"; + +const client = new OpenAI({ + apiKey: process.env.HAIYUSHUKE_API_KEY, + baseURL: process.env.HAIYUSHUKE_BASE_URL ?? "https://api.haiyushuke.com/v1", +}); + +const completion = await client.chat.completions.create({ + model: "deepseek-chat", + messages: [{ role: "user", content: "Hello" }], +}); + +console.log(completion.choices[0]?.message?.content); +``` + +## Python + +安装依赖: + +```bash +pip install openai +``` + +```python +import os +from openai import OpenAI + +client = OpenAI( + api_key=os.environ["HAIYUSHUKE_API_KEY"], + base_url=os.environ.get("HAIYUSHUKE_BASE_URL", "https://api.haiyushuke.com/v1"), +) + +resp = client.chat.completions.create( + model="deepseek-chat", + messages=[{"role": "user", "content": "Hello"}], +) +print(resp.choices[0].message.content) +``` + +## 流式 + +与 OpenAI 相同,设置 `stream=True` / `stream: true`,详见 [流式调用](/docs/guides/streaming)。 + +## LangChain 等框架 + +在 LangChain 中配置自定义 `baseURL` 与 API Key 即可指向海宇网关(具体类名随 LangChain 版本而异,原则与上文一致)。模型名填控制台 **模型 ID**。 + +## 与直连 OpenAI 的差异 + +| 项目 | 说明 | +| --- | --- | +| 模型名 | 使用海宇 **模型广场 ID**,非 OpenAI 原站名称(若不同) | +| 账号与计费 | 海宇控制台余额与 **使用记录**,与 OpenAI 账单无关 | +| 能力边界 | 以各模型在海宇侧实际上线能力为准(工具调用、多模态等) | +| 密钥 | 必须使用 **API Key**,不能使用控制台登录 JWT | + +## 相关文档 + +- [HTTP API 调用](/docs/guides/http_api) +- [工具接入概览](/docs/integrations/overview) +- [API Key 管理](/docs/guides/api_keys) diff --git a/content/guides/streaming.mdx b/content/guides/streaming.mdx index a6a8c8b..6957bb6 100644 --- a/content/guides/streaming.mdx +++ b/content/guides/streaming.mdx @@ -6,7 +6,7 @@ description: SSE 流式输出接入说明 # 流式调用 -在请求体中设置 `"stream": true`,服务端以 SSE 形式返回增量内容。 +在请求体中设置 `"stream": true`,服务端以 SSE 形式返回增量内容。协议与 OpenAI 流式兼容;HTTP 基础见 [HTTP API](/docs/guides/http_api)。 ## cURL @@ -14,14 +14,14 @@ description: SSE 流式输出接入说明 curl https://api.haiyushuke.com/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ - -d '{"model":"gpt-4o-mini","stream":true,"messages":[{"role":"user","content":"写一首四句诗"}]}' + -d '{"model":"deepseek-chat","stream":true,"messages":[{"role":"user","content":"写一首四句诗"}]}' ``` ## OpenAI SDK(Node) ```ts const stream = await client.chat.completions.create({ - model: "gpt-4o-mini", + model: "deepseek-chat", stream: true, messages: [{ role: "user", content: "你好" }], }); diff --git a/content/index.mdx b/content/index.mdx index 405ed61..e8e0da8 100644 --- a/content/index.mdx +++ b/content/index.mdx @@ -1,1126 +1,66 @@ --- title: 文档中心 -description: 海宇数科大模型服务接入与使用文档 +description: 海宇数科一站式大模型 API 与智能报告开发文档 --- -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 +# 平台介绍 -## 文档结构 +海宇数科面向企业与开发者,提供 **国内大模型统一网关**、**控制台自助接入** 与 **智能报告 / Agent 技能** 能力。网关采用 **OpenAI 兼容** HTTP 协议,便于接入 Cursor、Claude Code 等编程工具及自有业务服务。 -| 模块 | 说明 | +> 本站文档按「了解平台 → 选国内模型 → 接工具 / 写代码 → 运维计费」组织;**不提供** GPT、Claude 等海外原厂模型。 + +## 平台优势 + +| 能力 | 说明 | | --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | +| **国内模型矩阵** | DeepSeek、智谱 GLM、通义、Kimi、MiniMax、豆包等,在 **模型广场** 统一展示价格、能力与模型 ID | +| **OpenAI 兼容协议** | `POST /v1/chat/completions`;改 `baseURL` 与 API Key 即可对接多数 SDK 与 IDE | +| **工具接入** | [Cursor](/docs/integrations/cursor)、[Claude Code](/docs/integrations/claude_code)、[Continue](/docs/integrations/continue)、[Cline](/docs/integrations/cline) 等配置说明 | +| **控制台闭环** | 体验中心、API Key、使用记录、账单、发票与余额告警 | +| **企业场景** | [智能报告](/reports)、[Agent 技能](/agents) | + +## 查看模型 + +- **官网 [模型广场](/models)**:对外展示目录 +- **控制台 [模型广场](https://console.haiyushuke.com/models)**:复制 **模型 ID**、查看计价与能力 + +`model` 请求参数须与控制台 ID **完全一致**(例如 `deepseek-chat`、`glm-5.1`,以实际上线为准)。 + +## 极速体验 + +1. 登录 [控制台](https://console.haiyushuke.com) → **实名认证** +2. **体验中心** 选择国内模型试调用 +3. 创建 **API Key**,按 [工具接入概览](/docs/integrations/overview) 或 [快速开始](/docs/getting-started) 配置客户端 + +## 快速开始 + +[快速开始](/docs/getting-started):注册、Key、首次 HTTP 调用、核对使用记录。 + +## 接入方式 + +| 类型 | 文档 | +| --- | --- | +| IDE / 编程助手 | [工具接入概览](/docs/integrations/overview) → Cursor、Claude Code 等 | +| HTTP / SDK | [HTTP API](/docs/guides/http_api)、[OpenAI 兼容 SDK](/docs/guides/openai_compatible)、[流式调用](/docs/guides/streaming) | +| 运维 | [控制台](/docs/guides/console)、[API Key](/docs/guides/api_keys)、[计费与财务](/docs/guides/billing) | + +## 核心概念 + +[Token、上下文与模型 ID](/docs/concepts/overview) ## 服务地址 -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | +| 用途 | 地址 | | --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | +| 控制台 | [https://console.haiyushuke.com](https://console.haiyushuke.com) | +| API Base URL | `https://api.haiyushuke.com/v1` | -## 服务地址 +## 推荐阅读路径 -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 +1. [快速开始](/docs/getting-started) → [Cursor 接入](/docs/integrations/cursor) +2. 业务后端:[HTTP API](/docs/guides/http_api) → [计费与财务](/docs/guides/billing) +3. 排错:[常见问题](/docs/faq) ## 需要帮助? -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 - -欢迎查阅海宇数科大模型服务的技术文档。本站面向开发者与集成方,涵盖账号与密钥、各模型接入方式、控制台使用说明以及常见问题。 - -## 文档结构 - -| 模块 | 说明 | -| --- | --- | -| [快速开始](/docs/getting-started) | 注册、创建 API Key、发起第一次请求 | -| [AI 模型接入](/docs/models/openai) | 按厂商查看 Base URL、鉴权与示例 | -| [使用指南](/docs/guides/console) | 控制台、密钥管理与流式调用 | -| [常见问题](/docs/faq) | 计费、限流、错误码与排查 | - -## 服务地址 - -- **控制台**:`https://console.haiyushuke.com` -- **OpenAI 兼容 API**(示例):`https://api.haiyushuke.com/v1` - -> 实际网关域名以控制台「接入信息」页展示为准;下文示例中的域名请替换为你的环境配置。 - -## 需要帮助? - -产品咨询与技术支持可通过官网 [联系我们](/#contact) 或控制台工单入口提交。 +[常见问题](/docs/faq) · [用户协议](/docs/legal/user-agreement) · [隐私政策](/docs/legal/privacy) · [联系我们](/#contact) · [企业微信客服](https://work.weixin.qq.com/kfid/kfc1f8fc41acaca0895) diff --git a/content/integrations/_meta.js b/content/integrations/_meta.js new file mode 100644 index 0000000..82c631d --- /dev/null +++ b/content/integrations/_meta.js @@ -0,0 +1,7 @@ +export default { + overview: "接入概览", + cursor: "Cursor", + claude_code: "Claude Code", + continue: "Continue", + cline: "Cline", +}; diff --git a/content/integrations/claude_code.mdx b/content/integrations/claude_code.mdx new file mode 100644 index 0000000..5f565c0 --- /dev/null +++ b/content/integrations/claude_code.mdx @@ -0,0 +1,56 @@ +--- +title: Claude Code 接入 +sidebarTitle: Claude Code +description: 在 Claude Code CLI 中对接自定义 API(OpenAI 兼容) +--- + +# Claude Code 接入 + +**Claude Code** 是面向终端的 AI 编程助手。不同版本对「自定义后端」的支持方式可能不同;海宇数科网关当前对外主要提供 **OpenAI Chat Completions 兼容** 接口(`https://api.haiyushuke.com/v1`),**不提供** Anthropic 海外 Claude 原厂模型。 + +若你的 Claude Code 版本支持 **OpenAI 兼容 Base URL** 或可在配置中指定 OpenAI 风格端点,可按下列方式接入;若仅支持 Anthropic 原生 API,则需改用 [Cursor](/docs/integrations/cursor)、[Continue](/docs/integrations/continue) 等工具,或通过业务后端自行调用 [HTTP API](/docs/guides/http_api)。 + +## 前置条件 + +- 控制台已 **实名认证**,已创建 **API Key** +- 已在 **模型广场** 选定国内模型 ID(勿填海外 `claude-*` 名称) + +## 配置思路(OpenAI 兼容) + +在 Claude Code 的环境变量或配置文件中(以官方文档为准),尝试设置与海宇网关等价的 OpenAI 兼容项,例如: + +```bash +# 示例:名称以 Claude Code 当前版本文档为准 +export OPENAI_API_KEY="YOUR_HAIYUSHUKE_API_KEY" +export OPENAI_BASE_URL="https://api.haiyushuke.com/v1" +``` + +将 **模型名** 设为控制台模型 ID,例如: + +```bash +# 示例模型 ID,请替换为模型广场实际值 +export ANTHROPIC_MODEL="deepseek-chat" +``` + +> 部分 CLI 仍使用 `ANTHROPIC_*` 前缀命名环境变量,但后端实际走的是您配置的 Base URL;请以 Claude Code 官方说明为准,并确认其请求是否落在 `/v1/chat/completions` 兼容路径上。 + +## 验证 + +1. 在控制台 **体验中心** 用同一模型 ID 发送一条消息 +2. 在 Claude Code 中发起简单任务(如解释一个本地文件) +3. 在 **财务 → 使用记录** 查看是否产生对应调用 + +## 故障排查 + +| 现象 | 建议 | +| --- | --- | +| 401 | 检查 API Key、是否误用登录 token | +| 403 | Key 未授权该模型 ID,或 IP 白名单限制 | +| 402 | 余额不足,前往充值 | +| 协议不匹配 | 换用 Cursor / Continue,或直接用 HTTP/SDK 集成 | + +## 相关文档 + +- [工具接入概览](/docs/integrations/overview) +- [Cursor 接入](/docs/integrations/cursor) +- [常见问题](/docs/faq) diff --git a/content/integrations/cline.mdx b/content/integrations/cline.mdx new file mode 100644 index 0000000..8d16e0b --- /dev/null +++ b/content/integrations/cline.mdx @@ -0,0 +1,33 @@ +--- +title: Cline 接入 +sidebarTitle: Cline +description: 在 VS Code 的 Cline 扩展中使用海宇 OpenAI 兼容 API +--- + +# Cline 接入 + +[Cline](https://github.com/cline/cline)(原 Claude Dev)是 VS Code 中的自主编程扩展,支持通过 **OpenAI 兼容 API** 使用自定义模型。 + +## 前置条件 + +- 控制台创建 **API Key**,并确认可用模型包含目标 ID + +## 配置步骤 + +1. 打开 VS Code → Cline 侧边栏 → **Settings**(设置) +2. 选择 API Provider 为 **OpenAI Compatible** / **OpenAI**(以扩展当前版本为准) +3. 填写: + - **Base URL**:`https://api.haiyushuke.com/v1` + - **API Key**:海宇 API Key + - **Model ID**:模型广场中的 ID(如 `glm-5.1`、`deepseek-chat` 等) +4. 保存并新建任务测试 + +## 注意 + +- 扩展界面若默认展示海外模型名称,请 **手动改为** 控制台国内模型 ID。 +- 复杂 Agent 任务消耗 token 较多,请关注 [计费与财务](/docs/guides/billing) 与余额告警。 + +## 相关文档 + +- [Cursor 接入](/docs/integrations/cursor) +- [工具接入概览](/docs/integrations/overview) diff --git a/content/integrations/continue.mdx b/content/integrations/continue.mdx new file mode 100644 index 0000000..f88f23f --- /dev/null +++ b/content/integrations/continue.mdx @@ -0,0 +1,39 @@ +--- +title: Continue 接入 +sidebarTitle: Continue +description: 在 VS Code / JetBrains 的 Continue 插件中使用海宇 API +--- + +# Continue 接入 + +[Continue](https://continue.dev) 是 VS Code、JetBrains 等 IDE 中的开源 AI 编程插件,支持配置 **OpenAI 兼容** 模型提供商。 + +## 前置条件 + +- 海宇控制台 **API Key** 与国内模型 ID(见 [模型广场](https://console.haiyushuke.com/models)) + +## 配置示例 + +在 Continue 配置文件 `config.yaml`(或旧版 `config.json`)中增加自定义 OpenAI 兼容提供商,例如: + +```yaml +models: + - name: Haiyu DeepSeek + provider: openai + model: deepseek-chat + apiKey: YOUR_HAIYUSHUKE_API_KEY + apiBase: https://api.haiyushuke.com/v1 +``` + +请将 `model` 替换为你在模型广场复制的 **准确 ID**;可配置多个条目对应不同模型。 + +## 注意 + +- `apiBase` 需包含 `/v1` 前缀,与海宇网关一致。 +- 不要使用未在海宇上线的海外模型 ID。 +- Key 勿写入公开仓库;本地 config 建议加入 `.gitignore`。 + +## 相关文档 + +- [工具接入概览](/docs/integrations/overview) +- [OpenAI 兼容 SDK](/docs/guides/openai_compatible) diff --git a/content/integrations/cursor.mdx b/content/integrations/cursor.mdx new file mode 100644 index 0000000..dd270a0 --- /dev/null +++ b/content/integrations/cursor.mdx @@ -0,0 +1,50 @@ +--- +title: Cursor 接入 +sidebarTitle: Cursor +description: 在 Cursor 中配置海宇数科 API 与国内模型 +--- + +# Cursor 接入 + +[Cursor](https://cursor.com) 支持使用 **OpenAI 兼容** 自定义接口。将 Base URL 指向海宇数科网关后,可在 Cursor 中选择控制台已上线的 **国内模型 ID** 进行补全与对话。 + +## 前置条件 + +1. 登录 [控制台](https://console.haiyushuke.com),完成 **实名认证** +2. 在 **API Key** 创建密钥,并确认 Key 的 **可用模型** 包含你要用的模型 ID +3. 在 **模型广场** 复制目标模型 ID(例如 `deepseek-chat`、`glm-5.1` 等,以实际列表为准) + +## 配置步骤 + +1. 打开 Cursor → **Settings**(设置) +2. 进入 **Models** 或 **OpenAI API** 相关区域(版本不同菜单名可能略有差异) +3. 填写: + - **OpenAI API Key**:海宇控制台创建的 API Key + - **Override OpenAI Base URL**(或 Custom OpenAI Endpoint):`https://api.haiyushuke.com/v1` +4. 在模型列表中添加 **自定义模型名**,名称必须与模型广场 **模型 ID 完全一致** +5. 保存后在新对话中选择该模型进行测试 + +## 示例(settings.json 片段) + +若你通过 `settings.json` 管理配置,可参考(键名以 Cursor 当前版本为准): + +```json +{ + "openai.apiKey": "YOUR_HAIYUSHUKE_API_KEY", + "openai.baseUrl": "https://api.haiyushuke.com/v1" +} +``` + +自定义模型请在 Cursor 的 Models 界面添加,ID 使用控制台复制的字符串。 + +## 使用建议 + +- **不要** 使用 `gpt-4o`、`claude-sonnet` 等海外模型名;平台未提供这些模型。 +- 生产环境 Key 不要提交到 Git;可配合 Key 的 **IP 白名单**。 +- 若补全无响应,先在 **体验中心** 用同一模型 ID 验证,再查 [常见问题](/docs/faq)。 + +## 相关文档 + +- [工具接入概览](/docs/integrations/overview) +- [API Key 管理](/docs/guides/api_keys) +- [计费与财务](/docs/guides/billing) diff --git a/content/integrations/overview.mdx b/content/integrations/overview.mdx new file mode 100644 index 0000000..f38efd7 --- /dev/null +++ b/content/integrations/overview.mdx @@ -0,0 +1,39 @@ +--- +title: 工具接入概览 +sidebarTitle: 接入概览 +description: 在 Cursor、Claude Code 等客户端中使用海宇数科 API +--- + +# 工具接入概览 + +海宇数科提供 **OpenAI 兼容** 的 `https://api.haiyushuke.com/v1` 网关。多数支持「自定义 OpenAI Base URL + API Key」的 IDE / 编程助手,均可指向海宇,并在请求中使用控制台 **模型广场** 里的 **国内模型 ID**(如 DeepSeek、智谱 GLM、通义、Kimi、MiniMax 等)。 + +> 当前平台 **不提供** OpenAI GPT、Anthropic Claude 等海外原厂模型;请勿在文档或客户端中填写 `gpt-*`、`claude-*` 等海外 ID,一律以 [控制台模型广场](https://console.haiyushuke.com/models) 为准。 + +## 接入三要素 + +| 项 | 值 | +| --- | --- | +| API Base URL | `https://api.haiyushuke.com/v1` | +| API Key | 控制台 **API Key** 中创建(非登录密码) | +| Model | 模型广场复制的 **模型 ID** | + +创建 Key、实名认证与充值说明见 [快速开始](/docs/getting-started)、[API Key 管理](/docs/guides/api_keys)。 + +## 按工具查看 + +| 工具 | 文档 | 说明 | +| --- | --- | --- | +| Cursor | [Cursor 接入](/docs/integrations/cursor) | 覆盖 OpenAI Base URL,适合日常编码 | +| Claude Code | [Claude Code 接入](/docs/integrations/claude_code) | CLI 助手,需确认客户端协议与网关兼容 | +| Continue | [Continue 接入](/docs/integrations/continue) | VS Code / JetBrains 插件 | +| Cline | [Cline 接入](/docs/integrations/cline) | VS Code 自主编程扩展 | + +## 通用 HTTP / SDK + +不通过 IDE 而由业务服务调用时,请阅 [HTTP API](/docs/guides/http_api)、[OpenAI 兼容 SDK](/docs/guides/openai_compatible)。 + +## 常见问题 + +- Key 无效、402 余额不足、403 模型未授权:见 [常见问题](/docs/faq) +- Token 与上下文:见 [核心概念](/docs/concepts/overview) diff --git a/content/legal/_meta.js b/content/legal/_meta.js new file mode 100644 index 0000000..354fdce --- /dev/null +++ b/content/legal/_meta.js @@ -0,0 +1,4 @@ +export default { + "user-agreement": "用户协议", + privacy: "隐私政策", +}; diff --git a/content/legal/privacy.mdx b/content/legal/privacy.mdx new file mode 100644 index 0000000..0735966 --- /dev/null +++ b/content/legal/privacy.mdx @@ -0,0 +1,73 @@ +--- +title: 隐私政策 +description: 海宇数科 AI 模型控制台个人信息保护政策 +--- + +# 隐私政策 + +**更新日期:2026 年 6 月 28 日** + +**海宇数科(广东横琴)科技有限公司**(以下简称「我们」)重视您的个人信息保护。本政策说明您在使用**海宇数科 AI 模型控制台**(以下简称「本平台」)时,我们如何收集、使用、存储、共享与保护您的个人信息,以及您享有的权利。 + +请您在使用注册、登录、模型调用、充值、实名认证等功能前仔细阅读本政策。您使用本平台即表示您理解并同意我们按本政策处理相关信息;若您不同意,请停止使用并可联系我们咨询。 + +## 一、我们收集的信息 + +- **账户信息**:手机号码、邮箱、登录密码(加密存储)、昵称或您主动填写的资料。 +- **身份与认证信息**:个人实名或企业认证所需的姓名、证件信息、企业名称、统一社会信用代码、营业执照影像、法人及联系人信息等(以您提交的认证材料为准)。 +- **交易与用量信息**:充值记录、账单、发票抬头、API 调用量、模型名称、时间戳及与计费相关的日志。 +- **设备与日志信息**:IP 地址、浏览器类型、访问时间、操作日志、错误日志,用于安全风控、故障排查与统计分析。 +- **您主动提交的内容**:在线体验中的对话内容、您上传用于业务处理的文件或文本(若功能开放),以及您通过客服渠道提供的反馈。 + +## 二、我们如何使用信息 + +- 为您提供注册登录、短信验证、模型 API 鉴权、用量统计、账单与开票、企业认证审核等核心功能。 +- 保障账户与 API 密钥安全,识别异常登录、滥用调用或欺诈行为,并进行必要的风险提示或处置。 +- 改进产品体验、分析聚合后的使用趋势,以及向您发送与服务相关的通知(如安全提醒、政策更新、账单通知)。 +- 履行法律法规规定的义务,配合有权机关依法提出的要求。 + +## 三、Cookie 与同类技术 + +我们可能使用 Cookie、本地存储或类似技术维持登录状态、记住偏好并统计访问量。您可通过浏览器设置管理 Cookie,但关闭后部分功能可能无法正常使用。 + +## 四、信息的共享、委托处理与公开披露 + +我们不会出售您的个人信息。仅在以下情形共享或委托处理:为实现功能所必需的云服务、短信、支付、实名核验等合作方(我们要求其遵守保密与安全义务);法律法规要求或经您明确同意;为保护您、我们或其他用户的生命财产安全所必需。 + +企业认证、支付结果等可能涉及向监管或税务合规所需的合作方传输必要字段,范围以完成该业务所必需为限。 + +未经您同意,我们不会公开披露您的个人信息,法律强制要求的情况除外。 + +## 五、信息的存储与跨境 + +我们在中华人民共和国境内存储个人信息,存储期限为实现本政策目的所必需的最短时间,或法律法规要求的留存期限。超出期限后我们将删除或匿名化处理。 + +若未来因业务需要向境外提供个人信息,我们将依法履行安全评估、标准合同或征得您的单独同意等义务,并更新本政策。 + +## 六、您的权利 + +您有权访问、更正、删除您的个人信息,撤回同意、注销账户,以及获取个人信息副本(法律法规另有规定的除外)。 + +您可通过控制台「账户设置」、认证页面或联系客服行使上述权利。我们将在验证身份后合理期限内答复。 + +若您认为我们处理个人信息的行为损害您的合法权益,可向网信、电信等主管部门投诉或举报,或依法提起诉讼。 + +## 七、未成年人保护 + +本平台主要面向企业用户与具有完全民事行为能力的成年人。若您为未成年人,请在监护人指导下阅读本政策并使用服务;我们不会主动面向未成年人提供定向营销。 + +## 八、安全措施 + +我们采用访问控制、传输加密、密钥分级管理、日志审计等技术和管理措施保护您的信息。尽管已尽合理努力,互联网环境仍存在风险,请您妥善保管账户与 API 密钥。 + +## 九、政策更新 + +我们可能适时修订本政策,修订版本将公布于文档中心并更新生效日期。重大变更我们将通过显著方式提示;若您继续使用,即表示接受更新后的政策。相关服务条款见 [用户协议](/docs/legal/user-agreement)。 + +## 十、联系我们 + +如您对本政策或个人信息处理有任何疑问、意见或投诉,请通过 [控制台在线客服](https://work.weixin.qq.com/kfid/kfc1f8fc41acaca0895) 或邮件 [main@haiyushuke.cn](mailto:main@haiyushuke.cn) 联系我们。 + +个人信息保护负责人联系渠道同上。 + +海宇数科(广东横琴)科技有限公司 diff --git a/content/legal/user-agreement.mdx b/content/legal/user-agreement.mdx new file mode 100644 index 0000000..a7a80b7 --- /dev/null +++ b/content/legal/user-agreement.mdx @@ -0,0 +1,74 @@ +--- +title: 用户协议 +description: 海宇数科 AI 模型控制台用户服务协议 +--- + +# 用户协议 + +**更新日期:2026 年 6 月 28 日** + +欢迎使用**海宇数科 AI 模型控制台**(以下简称「本平台」或「控制台」)。本协议由您与**海宇数科(广东横琴)科技有限公司**(以下简称「我们」)订立。 + +请您在注册、登录或使用本平台提供的模型接入、在线体验、API 密钥、账户充值与账单等服务前,仔细阅读并充分理解本协议。您点击同意、完成注册或实际使用服务,即视为您已接受本协议全部条款。 + +## 一、服务说明 + +本平台面向企业用户与开发者,提供大语言模型及多模态模型的统一接入、控制台在线体验、API 调用、用量与账单管理、企业实名认证等功能。具体可用模型、计费方式与功能以 [控制台](https://console.haiyushuke.com) 页面及本 [文档中心](/docs) 公示为准。 + +我们有权根据业务需要调整模型列表、价格、接口形态或功能模块,并将通过控制台公告、站内通知或文档中心等方式告知;若调整对您已生效的订单或权益产生重大影响,我们将依法或依约另行说明。 + +## 二、账户注册与安全 + +您应使用真实、合法、有效的手机号或邮箱注册账户,并妥善保管登录密码、短信验证码及 API 密钥。账户下的全部操作视为您的行为,您须对因保管不善导致的损失自行承担责任。 + +您不得冒用他人身份注册、批量注册恶意账户、转让或出借账户。发现账户被盗用或异常使用时,请立即联系我们并修改密码、轮换 API 密钥。 + +为符合监管要求及保障交易安全,我们可能要求您完成个人或企业实名认证;未完成认证时,部分功能(如开票、部分模型或更高额度)可能受限。详见 [常见问题 · 实名认证](/docs/faq#账号与实名认证)。 + +## 三、使用规范 + +您在使用模型 API、在线体验或相关工具时,应遵守中华人民共和国法律法规及公序良俗,不得利用本平台生成、传播违法信息,不得从事欺诈、侵权、干扰网络安全、未经授权的数据抓取或其他损害我们或第三方合法权益的行为。 + +您向模型提交的提示词、上传的内容及通过 API 输出的结果,其合法性、权利归属由您负责。您应确保已获得必要授权,不得输入国家秘密、他人个人信息或商业秘密等依法禁止或未经授权处理的内容。 + +您不得对本平台进行反向工程、绕过鉴权、压测攻击、滥用接口频率,不得将 API 密钥嵌入公开客户端或向不可信第三方泄露。Key 管理要求见 [API Key 管理](/docs/guides/api_keys)。 + +## 四、费用与支付 + +本平台部分服务为有偿服务。您充值或消费产生的费用、计费单位、扣费顺序及发票规则以控制台「费用中心」及 [计费与财务](/docs/guides/billing) 说明为准。 + +通过第三方支付完成的充值,除法律另有规定外,虚拟余额或已消耗用量一般不支持无理由退款;错误充值或系统异常扣费,您可凭凭证联系我们核实处理。 + +## 五、知识产权 + +本平台软件、界面设计、文档、商标及我们提供的模型服务相关权利归我们或相应权利人所有。未经书面许可,您不得复制、修改、传播或用于本协议以外的商业目的。 + +在法律法规允许的范围内,您对依法享有权利的输入内容保留相应权利;对于模型输出,您可在遵守本协议及模型 / provider 使用政策的前提下用于约定场景。若输出涉及第三方权利,您应自行评估并承担合规责任。 + +## 六、隐私保护 + +我们处理个人信息的方式详见 [隐私政策](/docs/legal/privacy)。该政策为本协议的重要组成部分,与本协议具有同等法律效力。 + +## 七、免责声明与责任限制 + +模型输出由人工智能自动生成,可能存在不准确、不完整或过时的情况,不构成专业意见(包括但不限于法律、医疗、财务建议)。您应自行判断并承担使用后果。 + +因不可抗力、网络故障、第三方服务中断、您自身设备或操作原因导致的服务不可用或数据丢失,我们在法律允许范围内不承担责任;我们将尽力维护服务稳定与安全。 + +在法律允许的最大范围内,我们对您因使用本平台产生的间接损失、预期利润损失等不承担责任;我们的总赔偿责任以您就相关争议服务在过去十二个月内已向我们支付的费用为上限(如无付费则为零),法律另有强制性规定的除外。 + +## 八、协议变更与终止 + +我们可修订本协议,修订后将公布于本平台、文档中心并注明生效日期。若您不同意修订内容,应停止使用并申请注销账户;继续使用视为接受修订。 + +若您严重违反本协议,我们有权暂停或终止向您提供服务、冻结账户余额或依法向主管部门报告。您可随时停止使用并申请注销账户;注销后我们将依法删除或匿名化处理您的个人信息,法律法规另有要求的除外。 + +## 九、法律适用与争议解决 + +本协议的订立、执行与解释适用中华人民共和国大陆地区法律。因本协议产生的争议,双方应友好协商;协商不成的,提交我们住所地有管辖权的人民法院诉讼解决。 + +## 十、联系我们 + +如您对本协议有疑问,请通过 [控制台在线客服](https://work.weixin.qq.com/kfid/kfc1f8fc41acaca0895) 或发送邮件至 [main@haiyushuke.cn](mailto:main@haiyushuke.cn) 与我们联系。 + +海宇数科(广东横琴)科技有限公司 diff --git a/content/models/_meta.js b/content/models/_meta.js deleted file mode 100644 index 802d050..0000000 --- a/content/models/_meta.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - openai: "OpenAI", - claude: "Claude (Anthropic)", - deepseek: "DeepSeek", -}; diff --git a/content/models/claude.mdx b/content/models/claude.mdx deleted file mode 100644 index b19655a..0000000 --- a/content/models/claude.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Claude 接入 -sidebarTitle: Claude -description: Anthropic Claude 系列模型接入说明 ---- - -# Claude (Anthropic) 接入 - -Claude 模型可通过 **OpenAI 兼容接口** 或 **Anthropic Messages API** 接入(以控制台开通能力为准)。 - -## OpenAI 兼容方式(推荐迁移) - -```bash -curl https://api.haiyushuke.com/v1/chat/completions \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{ - "model": "claude-sonnet-4-20250514", - "messages": [{"role": "user", "content": "总结以下三点:安全、成本、延迟"}] - }' -``` - -将 `model` 替换为控制台提供的 Claude 模型 ID。 - -## 系统提示与多轮对话 - -与 OpenAI 相同,使用 `messages` 数组: - -```json -{ - "model": "claude-sonnet-4-20250514", - "messages": [ - { "role": "system", "content": "你是企业知识库助手,回答需简洁。" }, - { "role": "user", "content": "什么是 RAG?" } - ] -} -``` - -## 注意事项 - -- 部分 Claude 特性(如扩展思考、工具调用)需使用对应 API 形态,请参考控制台该模型的「能力标签」。 -- 长上下文模型请留意单次请求的 `max_tokens` 与账单中的输入 token 统计。 diff --git a/content/models/deepseek.mdx b/content/models/deepseek.mdx deleted file mode 100644 index 6210e49..0000000 --- a/content/models/deepseek.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: DeepSeek 接入 -sidebarTitle: DeepSeek -description: DeepSeek 系列模型接入说明 ---- - -# DeepSeek 接入 - -DeepSeek 模型通过统一网关暴露,协议为 **OpenAI Chat Completions 兼容**。 - -## 示例 - -```bash -curl https://api.haiyushuke.com/v1/chat/completions \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{ - "model": "deepseek-chat", - "messages": [{"role": "user", "content": "用列表说明大模型网关的三项优势"}] - }' -``` - -## 模型选择建议 - -| 场景 | 建议 | -| --- | --- | -| 通用对话 / 代码 | `deepseek-chat` | -| 复杂推理(若已开通) | 控制台标注的 Reasoner 类模型 ID | - -## 与 OpenAI SDK 共用配置 - -仅需修改 `model` 字段,无需更换 SDK;`baseURL` 与 API Key 与 [OpenAI 接入](/docs/models/openai) 相同。 diff --git a/content/models/openai.mdx b/content/models/openai.mdx deleted file mode 100644 index 6b37acb..0000000 --- a/content/models/openai.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: OpenAI 接入 -sidebarTitle: OpenAI -description: 通过 OpenAI 兼容协议接入 GPT 系列模型 ---- - -# OpenAI 兼容接入 - -海宇数科对 OpenAI 官方 SDK 及 HTTP API 提供兼容层,便于现有应用零改造迁移。 - -## 端点 - -| 项目 | 值 | -| --- | --- | -| Base URL | `https://api.haiyushuke.com/v1` | -| Chat Completions | `POST /chat/completions` | -| 鉴权 | `Authorization: Bearer ` | - -## Node.js(官方 SDK) - -```ts -import OpenAI from "openai"; - -const client = new OpenAI({ - apiKey: process.env.HAIYUSHUKE_API_KEY, - baseURL: "https://api.haiyushuke.com/v1", -}); - -const completion = await client.chat.completions.create({ - model: "gpt-4o-mini", - messages: [{ role: "user", content: "Hello" }], -}); - -console.log(completion.choices[0]?.message?.content); -``` - -## Python - -```python -from openai import OpenAI - -client = OpenAI( - api_key="YOUR_API_KEY", - base_url="https://api.haiyushuke.com/v1", -) - -resp = client.chat.completions.create( - model="gpt-4o-mini", - messages=[{"role": "user", "content": "Hello"}], -) -print(resp.choices[0].message.content) -``` - -## 常用参数 - -- `temperature`:0–2,控制随机性 -- `max_tokens`:最大生成 token -- `stream: true`:开启流式,见 [流式调用](/docs/guides/streaming) - -## 模型 ID - -请在控制台 **模型广场** 查看当前可用 ID;名称可能随供应商更新,以控制台为准。 diff --git a/e2e/smoke.spec.ts b/e2e/smoke.spec.ts index a3239a1..2023aa4 100644 --- a/e2e/smoke.spec.ts +++ b/e2e/smoke.spec.ts @@ -16,17 +16,35 @@ test.describe("站点冒烟", () => { /智能报告/, ); await expect(page.locator("#reports")).toBeVisible(); - await expect(page.getByText("KYB 企业核验")).toBeVisible(); + await expect(page.getByText("企业综合风险报告")).toBeVisible(); const exampleBtn = page .locator("#reports") .getByRole("button", { name: "查看智能体报告示例" }) .first(); await exampleBtn.scrollIntoViewIfNeeded(); - await exampleBtn.click(); - await expect(page.getByRole("dialog")).toBeVisible(); - await expect(page.getByRole("dialog")).toContainText("核验结论"); + await exampleBtn.click({ force: true }); + await expect(page.locator(".report-example-overlay")).toBeVisible({ + timeout: 10_000, + }); + await expect(page.locator(".report-example-overlay")).toContainText( + "敬请期待", + ); + await page + .locator(".report-example-overlay") + .getByRole("button", { name: "关闭" }) + .click(); + await expect(page.locator(".report-example-overlay")).toHaveCount(0); await expect(page.locator("#models")).toBeVisible(); + const businessConsult = page.getByRole("button", { name: "商务咨询" }); + await businessConsult.scrollIntoViewIfNeeded(); + await expect(businessConsult).toBeVisible(); + await businessConsult.click(); + await expect( + page.getByRole("dialog", { name: "商务咨询" }), + ).toContainText("扫描二维码"); + await page.getByRole("button", { name: "关闭" }).click(); + const squareLink = page.getByRole("link", { name: "模型广场" }).first(); await squareLink.click(); await expect(page).toHaveURL(/\/models$/); @@ -41,12 +59,12 @@ test.describe("站点冒烟", () => { "AI 新闻资讯", ); await page - .getByRole("link", { name: "智能报告模板库 2.0 发布" }) + .getByRole("link", { name: "用户协议与隐私政策正式发布" }) .first() .click(); - await expect(page).toHaveURL(/\/news\/report-templates-2/); + await expect(page).toHaveURL(/\/news\/legal-policies-published/); await expect(page.getByRole("heading", { level: 1 })).toContainText( - "智能报告模板库 2.0 发布", + "用户协议与隐私政策正式发布", ); expect( @@ -83,12 +101,27 @@ test.describe("站点冒烟", () => { ), ).toBeVisible({ timeout: 15_000 }); await expect(page.getByRole("link", { name: "快速开始" }).first()).toBeVisible(); - await page.getByRole("link", { name: "OpenAI" }).first().click(); - await expect(page).toHaveURL(/\/docs\/models\/openai/); + await page.getByRole("link", { name: "Cursor" }).first().click(); + await expect(page).toHaveURL(/\/docs\/integrations\/cursor/); await expect(page.locator(".docs-prose h1, .docs-prose h2").first()).toContainText( - "OpenAI", + "Cursor", ); - await expect(page.getByText("chat/completions")).toBeVisible(); + await expect(page.getByText("api.haiyushuke.com")).toBeVisible(); + }); + + test("文档中心法律条款页可访问", async ({ page }) => { + const agreement = await page.goto("/docs/legal/user-agreement", { + waitUntil: "domcontentloaded", + }); + expect(agreement?.ok()).toBeTruthy(); + await expect(page.locator(".docs-prose h1").first()).toContainText("用户协议"); + await expect(page.locator(".docs-prose")).toContainText("服务说明"); + + const privacy = await page.goto("/docs/legal/privacy", { + waitUntil: "domcontentloaded", + }); + expect(privacy?.ok()).toBeTruthy(); + await expect(page.locator(".docs-prose h1").first()).toContainText("隐私政策"); }); test("全局样式编译通过(无 Turbopack CSS 报错页)", async ({ page }) => { diff --git a/playwright.config.ts b/playwright.config.ts index 9799fc3..525d6bd 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,6 +1,6 @@ import { defineConfig, devices } from "@playwright/test"; -const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? "http://127.0.0.1:3000"; +const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? "http://localhost:3000"; export default defineConfig({ testDir: "./e2e", diff --git a/public/qrcode.jpg b/public/qrcode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f317cee576aa5b5c8779ae5e0248bec8c2fa32eb GIT binary patch literal 165257 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�_<3_#HYTvVo?o+KAvNdcrNqw{r& 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 literal 0 HcmV?d00001 diff --git a/src/app/(site)/news/[slug]/page.tsx b/src/app/(site)/news/[slug]/page.tsx index b850697..340ddc9 100644 --- a/src/app/(site)/news/[slug]/page.tsx +++ b/src/app/(site)/news/[slug]/page.tsx @@ -7,7 +7,9 @@ import { NewsCoverImage } from "@/components/news-cover-image"; import { getAllNewsSlugs, getNewsBySlug, + newsArticleHasCover, } from "@/content/news-articles"; +import { site } from "@/content/site"; import { articleMetadata, newsArticleJsonLd, @@ -29,13 +31,20 @@ export async function generateMetadata({ if (!article) { return { title: "文章未找到", robots: { index: false, follow: false } }; } + const coverImage = newsArticleHasCover(article) + ? article.image + : site.brandAssets.logo; + const coverAlt = newsArticleHasCover(article) + ? (article.imageAlt ?? article.title) + : site.brandAssets.logoAlt; + return articleMetadata({ title: article.title, description: article.summary, path: `/news/${slug}`, publishedTime: `${article.date}T08:00:00+08:00`, - imagePath: article.image, - imageAlt: article.imageAlt, + imagePath: coverImage, + imageAlt: coverAlt, }); } @@ -58,14 +67,16 @@ export default async function NewsDetailPage({ params }: PageProps) { ← 返回资讯列表 -

+ {newsArticleHasCover(article) ? ( +
+ +
+ ) : null}

{article.tag}

diff --git a/src/app/(site)/page.tsx b/src/app/(site)/page.tsx index 8aecb89..1ab6e5d 100644 --- a/src/app/(site)/page.tsx +++ b/src/app/(site)/page.tsx @@ -8,6 +8,7 @@ import { SectionModels } from "@/components/section-models"; import { SectionEnterprise } from "@/components/section-enterprise"; import { SectionNews } from "@/components/section-news"; import { SectionContact } from "@/components/section-contact"; +import { HomeFloatingConsult } from "@/components/home-floating-consult"; import { ScrollReveal, ScrollRevealHero } from "@/components/scroll-reveal"; import { canonicalAbsoluteUrl } from "@/lib/site-url"; @@ -51,6 +52,7 @@ export default function Home() { + ); } diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 3e866cc..e12a684 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -16,6 +16,18 @@ export default function sitemap(): MetadataRoute.Sitemap { "/docs", "/docs/getting-started", "/docs/faq", + "/docs/integrations/overview", + "/docs/integrations/cursor", + "/docs/integrations/claude_code", + "/docs/integrations/continue", + "/docs/integrations/cline", + "/docs/guides/http_api", + "/docs/guides/openai_compatible", + "/docs/guides/console", + "/docs/guides/api_keys", + "/docs/guides/streaming", + "/docs/guides/billing", + "/docs/concepts/overview", ] as const; const staticEntries: MetadataRoute.Sitemap = staticPaths.map((path) => ({ diff --git a/src/components/home-floating-consult.tsx b/src/components/home-floating-consult.tsx new file mode 100644 index 0000000..f3fcedc --- /dev/null +++ b/src/components/home-floating-consult.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { useState } from "react"; +import { site } from "@/content/site"; +import { WechatQrDialog } from "@/components/wechat-qr-dialog"; + +export function HomeFloatingConsult() { + const [qrOpen, setQrOpen] = useState(false); + const { customerService } = site.links; + + return ( + <> +
+ setQrOpen(false)} /> + + ); +} diff --git a/src/components/intelligent-report-grid.tsx b/src/components/intelligent-report-grid.tsx index 5264975..6d93255 100644 --- a/src/components/intelligent-report-grid.tsx +++ b/src/components/intelligent-report-grid.tsx @@ -83,26 +83,32 @@ export function IntelligentReportGrid() {

{active.example.meta}

- {active.example.sections.map((sec) => ( -
-

- {sec.heading} -

- {"body" in sec && sec.body ? ( -

{sec.body}

- ) : null} - {"bullets" in sec && sec.bullets ? ( -
    - {sec.bullets.map((item) => ( -
  • {item}
  • - ))} -
- ) : null} -
- ))} + {"comingSoon" in active.example && active.example.comingSoon ? ( +

+ 敬请期待 +

+ ) : ( + active.example.sections.map((sec) => ( +
+

+ {sec.heading} +

+ {"body" in sec && sec.body ? ( +

{sec.body}

+ ) : null} + {"bullets" in sec && sec.bullets ? ( +
    + {sec.bullets.map((item) => ( +
  • {item}
  • + ))} +
+ ) : null} +
+ )) + )}
+
+ + + + ); +} diff --git a/src/content/model-catalog.ts b/src/content/model-catalog.ts index 6a9d7ca..e96ae44 100644 --- a/src/content/model-catalog.ts +++ b/src/content/model-catalog.ts @@ -18,6 +18,10 @@ export type ModelCatalogItem = { context: string; priceIn: string; priceOut: string; + /** 命中缓存的 prompt 输入价展示文案 */ + priceCacheIn?: string; + /** 缓存创建的 prompt 输入价展示文案 */ + priceCacheCreation?: string; category: ModelCategory; provider: string; priceLabel?: string; @@ -37,6 +41,8 @@ export type ApiModelItem = { type: string; inputPrice?: number; outputPrice?: number; + cacheInputPrice?: number; + cacheCreationPrice?: number; currency?: string; unit?: string; columns?: string[]; @@ -131,10 +137,12 @@ function inferCategory( function formatPricing(api: ApiModelItem): Pick< ModelCatalogItem, - "priceIn" | "priceOut" | "priceLabel" | "pricingNote" + "priceIn" | "priceOut" | "priceCacheIn" | "priceCacheCreation" | "priceLabel" | "pricingNote" > { let priceIn = "—"; let priceOut = "—"; + let priceCacheIn: string | undefined; + let priceCacheCreation: string | undefined; let pricingNote: string | undefined; let priceLabel: string | undefined; @@ -147,8 +155,25 @@ function formatPricing(api: ApiModelItem): Pick< p.outputPrice !== undefined ) { const cur = p.currency ?? "¥"; - priceIn = `${cur}${p.inputPrice.toFixed(2)}`; - priceOut = `${cur}${p.outputPrice.toFixed(2)}`; + const fmt = (n: number) => n.toFixed(6).replace(/\.?0+$/, ""); + priceIn = `${cur}${fmt(p.inputPrice)}`; + priceOut = `${cur}${fmt(p.outputPrice)}`; + const cache = + p.cacheInputPrice != null && p.cacheInputPrice > 0 + ? p.cacheInputPrice + : p.inputPrice; + priceCacheIn = `${cur}${fmt(cache)}`; + const creation = + p.cacheCreationPrice != null && p.cacheCreationPrice > 0 + ? p.cacheCreationPrice + : p.inputPrice; + priceCacheCreation = `${cur}${fmt(creation)}`; + if (p.cacheInputPrice == null || p.cacheInputPrice <= 0) { + pricingNote = "缓存命中价未单独配置时按输入价计费"; + } + if (p.cacheCreationPrice == null || p.cacheCreationPrice <= 0) { + pricingNote = [pricingNote, "缓存创建价未单独配置时按输入价计费"].filter(Boolean).join(";"); + } } else if (p.type === "table" && p.rows && p.columns) { priceLabel = p.unitLabel ?? "价格"; const parts: string[] = []; @@ -163,7 +188,7 @@ function formatPricing(api: ApiModelItem): Pick< pricingNote = parts.length > 0 ? parts.join(" · ") : undefined; } - return { priceIn, priceOut, priceLabel, pricingNote }; + return { priceIn, priceOut, priceCacheIn, priceCacheCreation, priceLabel, pricingNote }; } /** 将后端公开模型列表映射为展示用目录(无静态合并) */ diff --git a/src/content/news-articles.ts b/src/content/news-articles.ts index f67e40a..612fd4e 100644 --- a/src/content/news-articles.ts +++ b/src/content/news-articles.ts @@ -6,145 +6,104 @@ export type NewsArticle = { date: string; author: string; readMinutes: number; - image: string; - imageAlt: string; + /** 封面图;暂不提供时留空 */ + image?: string | null; + imageAlt?: string; paragraphs: string[]; }; export const newsListPage = { eyebrow: "资讯", title: "AI 新闻资讯", - lead: "精选行业动态、模型发布与产品实践,帮助团队保持对 AI 生态的同步认知。", + lead: "海宇数科官网发布的平台能力、文档接入与产品动态,与控制台实际上线能力保持一致。", } as const; -/** 与 public/news/1.webp … 8.webp 一一对应 */ +/** 站内已上线能力与页面的官方说明 */ export const newsArticles: NewsArticle[] = [ + { + slug: "legal-policies-published", + tag: "公告", + title: "用户协议与隐私政策正式发布", + summary: "官网文档中心提供用户协议、隐私政策全文,便于注册与接入前查阅。", + date: "2026-06-25", + author: "海宇数科", + readMinutes: 3, + paragraphs: [ + "《用户协议》与《隐私政策》已在官网文档中心上线,路径分别为 /docs/legal/user-agreement 与 /docs/legal/privacy。", + "协议说明平台提供的大模型网关、控制台、智能报告与 Agent 技能等服务的适用范围、账号义务与变更规则;隐私政策列明实名认证、API 调用与客服沟通等场景下的信息处理方式。", + "注册控制台或接入 API 前,建议团队法务或合规同事完成内部审阅;如有疑问可通过首页「联系我们」或企业微信客服沟通。", + ], + }, + { + slug: "intelligent-report-enterprise-scenarios", + tag: "产品", + title: "大模型智能报告:四类企业场景上线展示", + summary: + "首页与企业 SKILL 广场同步展示企业综合风险、司法涉诉、全量核验与股权结构四类报告能力。", + date: "2026-06-18", + author: "海宇数科产品团队", + readMinutes: 4, + paragraphs: [ + "官网首页「大模型智能报告」区块已更新为企业尽调相关四类场景:企业综合风险报告、企业司法涉诉、企业全量信息核验、企业股权结构全景。", + "智能报告介绍页(/reports)与 Agent 技能页(/agents)保持同一能力叙事,SKILL 广场可查看各技能的在线运行与安装说明;报告示例通道整理中,页面展示「敬请期待」。", + "生产环境任务创建、计费与导出以控制台为准;官网侧重能力说明与接入指引,具体模型 ID 与价格请结合模型广场与控制台目录核对。", + ], + }, { slug: "model-square-launch", tag: "产品", title: "模型广场上线:统一浏览平台可用模型", - summary: "按场景分类查看上下文、能力与参考价格,技术选型一页完成。", - date: "2026-05-20", + summary: "按场景查看国内大模型的上下文、能力与参考价格,便于技术选型。", + date: "2026-06-01", author: "海宇数科产品团队", readMinutes: 3, - image: "/news/1.webp", - imageAlt: "模型广场界面与多模型能力示意", paragraphs: [ - "模型广场页面现已上线,汇总海宇数科自营与接入模型的能力标签、上下文长度与参考单价,方便技术负责人做选型对比。", - "首页「超全模型库」精选三款主力模型,完整目录请访问模型广场。后续将支持按行业筛选与 API 文档跳转。", - "建议结合报告智能体场景模板一起评估:文本推理、报告成稿与多模态可组合调用,避免「单模型包打天下」带来的成本与效果失衡。", + "官网模型广场(/models)已开放,汇总海宇数科网关侧展示的模型名录,包括文本、Agent、多模态、向量、编程等分类标签与参考单价。", + "首页「超全模型库」区块与模型广场数据源一致,便于从品牌站点跳转到完整目录;请求参数中的 model 须与控制台模型 ID 完全一致。", + "复制模型 ID、创建 API Key 与试调用请在控制台完成:console.haiyushuke.com。", ], }, { - slug: "report-templates-2", + slug: "docs-center-launch", tag: "产品", - title: "智能报告模板库 2.0 发布", - summary: "新增制造业与零售行业模板,支持多语言导出。", - date: "2026-05-12", + title: "文档中心上线:快速开始与国内模型接入指南", + summary: "覆盖 OpenAI 兼容 API、Cursor 等 IDE 接入、流式调用与计费说明。", + date: "2026-05-22", author: "海宇数科产品团队", readMinutes: 4, - image: "/news/2.webp", - imageAlt: "智能报告模板与结构化章节预览", paragraphs: [ - "智能报告模板库 2.0 即日起面向全部企业客户开放。本次更新重点补齐制造业产能分析、零售渠道动销解读两类高频场景,模板结构与首页「大模型智能报告」四类智能体输出保持一致,便于从示例一键切换到生产任务。", - "多语言导出支持简体中文、英文与繁体中文三种排版骨架;图表与表格标题将随语言包自动切换。若你已在用 1.x 模板,升级后历史任务无需重配字段映射。", - "建议团队在上线前用 KYB 或供应商筛查场景各跑一条试算任务,确认复核节点与导出样式符合内部合规要求。", + "文档中心(/docs)已上线,按「了解平台 → 选择国内模型 → 接工具 / 写代码 → 运维计费」组织内容。", + "快速开始、HTTP API、OpenAI 兼容 SDK、流式调用、API Key 与控制台使用说明均已提供;集成章节包含 Cursor、Claude Code、Continue、Cline 等配置示例。", + "网关 Base URL 为 https://api.haiyushuke.com/v1;不提供 GPT、Claude 等海外原厂模型,选型请以控制台已上线国内模型为准。", ], }, { - slug: "kyb-batch-export", + slug: "solutions-hub-launch", tag: "产品", - title: "KYB 报告支持批量导出与审计留痕", - summary: "复核结论、证据链与时间戳一并打包,满足银行尽调归档。", + title: "AI Agent 行业解决方案专题上线", + summary: + "企业数字化、新媒体分发、股市投研情报与多平台运营等方案可在官网专题页查看。", + date: "2026-05-15", + author: "海宇数科解决方案", + readMinutes: 3, + paragraphs: [ + "官网「AI Agent 行业解决方案」专题(/solutions)已上线,集中展示通用企业数字化底座与行业智能体方案入口。", + "各方案详情页介绍场景能力标签与典型流程,包括新媒体内容分发、股市投研情报、多平台自动运营等方向;具体项目交付与定制可通过商务咨询沟通。", + "方案页内容与首页解决方案区块一致,便于从首页卡片跳转阅读完整说明。", + ], + }, + { + slug: "agent-skills-and-reports-pages", + tag: "产品", + title: "智能报告与 Agent 技能介绍页开放", + summary: "SKILL 广场、MCP 配置说明与智能体一键安装规划同步展示。", date: "2026-05-08", author: "海宇数科产品团队", - readMinutes: 4, - image: "/news/3.webp", - imageAlt: "KYB 企业核验与批量导出流程示意", + readMinutes: 3, paragraphs: [ - "KYB 企业核验场景新增批量导出:单次任务最多 50 个主体,导出 ZIP 内含 PDF 报告、证据链 JSON 与操作审计日志,满足银行尽调留痕要求。", - "审计日志记录模型版本、工具调用摘要与人工复核人,不可篡改字段由平台侧签名。", - "批量任务仍支持在关键节点暂停复核,避免高风险主体在未确认情况下进入正式档案系统。", - ], - }, - { - slug: "long-context-report-trial", - tag: "模型", - title: "长上下文报告模型开放试用", - summary: "256K 上下文面向超长年报与招股书场景。", - date: "2026-04-28", - author: "海宇数科模型平台", - readMinutes: 5, - image: "/news/4.webp", - imageAlt: "长文档报告模型与上下文能力示意", - paragraphs: [ - "Haiyu-Report-Max 256K 上下文版本进入限量试用。该版本针对年报、招股书与合并报表等超长输入做了分段索引优化,在 IC Memo 与管理层汇报场景中可显著减少人工摘抄时间。", - "试用配额按企业账号发放,默认并发 2 路。价格参考模型广场公示的输入 / 输出单价,试用期间不计入正式账单。", - "若文档含大量扫描页,建议与 Haiyu-Vision-Doc 组合调用:视觉模型先提取表格与段落,再由报告模型成稿。", - ], - }, - { - slug: "finance-shared-services-ai", - tag: "行业", - title: "大模型在财务共享中心的落地观察", - summary: "从试点到规模化的三条路径与常见坑位。", - date: "2026-04-15", - author: "海宇数科行业研究", - readMinutes: 6, - image: "/news/5.webp", - imageAlt: "财务共享与 AI 助手协同办公场景", - paragraphs: [ - "财务共享中心是大模型落地最密集的企业职能之一,但成功率差异主要来自「流程嵌入深度」而非模型选型本身。我们观察到三条可复用路径:制度问答助手、关账说明自动生成、异常凭证解释。", - "试点阶段常见坑位包括:指标口径未与数据中台对齐、输出直接进 ERP 缺少人工节点、以及把通用聊天模型硬用于结构化报告。", - "规模化阶段建议将模型调用纳入统一网关,按场景路由到 Text-Pro 或 Report-Max,并在模型广场查看实时价格与上下文上限。", - ], - }, - { - slug: "report-agent-orchestration", - tag: "实践", - title: "报告智能体编排最佳实践", - summary: "如何在关键节点保留人工审核而不拖慢交付。", - date: "2026-03-30", - author: "海宇数科解决方案", - readMinutes: 5, - image: "/news/6.webp", - imageAlt: "报告智能体三步流程与编排示意", - paragraphs: [ - "报告智能体的一体化流水线已内置模型与工具,但风控场景仍需要在关键节点保留人工审核。推荐在「高风险信号写出后」「导出 PDF 前」设置两个可选暂停点,平均只增加约 3–8 分钟等待。", - "编排上尽量用场景模板驱动,而不是在对话里临时描述输出结构;模板与智能报告卡片一一对应,可减少返工。", - "安装渠道与 IDE 插件形态仍在完善中,官网「一键安装」入口将同步更新。", - ], - }, - { - slug: "multimodal-contract-review", - tag: "行业", - title: "多模态审阅如何缩短合同核验周期", - summary: "扫描件 OCR 与主体风险批注一体化,降低法务重复劳动。", - date: "2026-03-18", - author: "海宇数科行业研究", - readMinutes: 5, - image: "/news/7.webp", - imageAlt: "合同扫描件与多模态风险批注示意", - paragraphs: [ - "法务团队在处理供应商合同时,往往需要在 PDF 扫描件、工商数据和司法风险之间来回切换。Haiyu-Vision-Doc 与合同核验场景模板组合后,可在同一任务流中完成主体状态校验与条款风险提示。", - "试点客户反馈:平均首轮审阅时间从约 45 分钟降至 15 分钟以内,复核节点仍由法务负责人确认后导出。", - "对于含大量表格的附件,建议开启「表格优先解析」选项,避免段落顺序错乱影响批注位置。", - ], - }, - { - slug: "enterprise-rag-knowledge-base", - tag: "实践", - title: "企业制度库 RAG:从问答到可引用报告", - summary: "向量检索 + 报告模型,让制度问答输出带条款出处。", - date: "2026-03-05", - author: "海宇数科解决方案", - readMinutes: 6, - image: "/news/8.webp", - imageAlt: "企业知识库检索与 RAG 问答示意", - paragraphs: [ - "许多企业将 Haiyu-Embed-v2 用于制度库与历史报告片段召回,再交由 Haiyu-Text-Pro 或 Report-Max 生成带引用的答复。相比纯聊天接口,报告模型更易输出结构化章节,便于合规归档。", - "实施时建议按部门拆分知识库权限,并在网关侧记录检索命中片段 ID,以满足内控审计要求。", - "若与报告智能体联用,可将高频问答沉淀为场景模板,减少业务人员重复描述需求。", + "智能报告页(/reports)展示 SKILL 广场、MCP 接入步骤与企业尽调相关技能列表;Agent 技能页(/agents)说明面向小龙虾等智能体的官方 Skill 安装规划。", + "当前 Skill 一键安装通道筹备中,页面以「敬请期待」提示为主;已支持通过文档与 MCP 配置手动接入网关能力。", + "在线运行入口将跳转控制台或后续开放的能力页,请以控制台公告为准。", ], }, ]; @@ -160,3 +119,9 @@ export function getAllNewsSlugs(): string[] { export function getHomeNewsPreview(count = 3): NewsArticle[] { return newsArticles.slice(0, count); } + +export function newsArticleHasCover( + article: Pick, +): article is NewsArticle & { image: string } { + return Boolean(article.image); +} diff --git a/src/content/site.ts b/src/content/site.ts index 23b5fe0..5fe55a2 100644 --- a/src/content/site.ts +++ b/src/content/site.ts @@ -11,6 +11,8 @@ export const site = { }, links: { console: "https://console.haiyushuke.com", + docs: "/docs", + docsFaq: "/docs/faq", customerService: "https://work.weixin.qq.com/kfid/kfc1f8fc41acaca0895", }, @@ -19,14 +21,14 @@ export const site = { title: "联系我们", lead: "产品咨询、技术支持与合作洽谈,可通过以下方式与我们联系。", email: "main@haiyushuke.cn", - phoneDisplay: "+86 15018866168", - phoneTel: "+8615018866168", + phoneDisplay: "+86 17722052522", + phoneTel: "+8617722052522", customerServiceLabel: "在线客服", business: { - title: "扫码咨询", - lead: "扫码加企微,一对一咨询 MCP 接入", - qrImage: "/contact/business-wechat-qr.png", - qrAlt: "企业微信商务洽谈二维码", + title: "商务咨询", + lead: "扫描二维码,添加微信客服", + qrImage: "/qrcode.jpg", + qrAlt: "微信客服二维码", phoneLabel: "电话咨询", }, }, @@ -49,143 +51,71 @@ export const site = { intelligentReport: { eyebrow: "产品", title: "大模型智能报告", - lead: "面向银行、投资、法务与采购等场景,智能体自动完成企业核验与多维尽调,输出带证据链的结构化报告,支持一键查看示例与导出分享。", + lead: "面向企业合规、尽调与经营决策场景,智能体自动完成企业核验与多维分析,输出带证据链的结构化报告,支持一键查看示例与导出分享。", viewExampleLabel: "查看智能体报告示例", reports: [ { - id: "kyb", - audience: "银行 / 金融机构", - title: "KYB 企业核验", - body: "贷款申请提交后,AI 自动核验申请方工商状态、34 类司法风险与关联方异常,识别问题主体立即触发复核标注,将人工尽调从 2 小时压缩至分钟级。", + id: "enterprise-risk", + audience: "企业场景", + title: "企业综合风险报告", + body: "一次任务整合工商登记、经营异常、司法信号与关联方风险,AI 输出综合风险等级、复核建议与证据摘要,帮助团队在合作与准入前快速掌握主体风险全貌。", example: { - title: "KYB 企业核验报告", - meta: "智能体输出 · 示例 · 申请主体:某科技有限公司", - sections: [ - { - heading: "核验结论", - body: "主体存续正常;存在 2 项需复核风险信号,建议进入人工复核队列。", - }, - { - heading: "工商与经营状态", - bullets: [ - "统一社会信用代码登记状态:存续", - "法定代表人近 12 个月无变更", - "经营范围与贷款用途类别匹配", - ], - }, - { - heading: "司法与信用风险(34 类扫描摘要)", - bullets: [ - "无失信被执行人记录", - "关联企业 A 存在 1 条未结商事诉讼(标的 120 万)→ 已标注复核", - "无股权冻结、无限制高消费", - ], - }, - { - heading: "关联方异常", - bullets: [ - "实际控制人对外担任高管的企业 3 家,均非注销/吊销", - "1 家关联方近 90 天新增行政处罚 → 触发复核标注", - ], - }, - ], + comingSoon: true, + title: "企业综合风险报告", + meta: "敬请期待", + sections: [] as { + heading: string; + body?: string; + bullets?: string[]; + }[], }, }, { - id: "ic-memo", - audience: "投资人 / FA", - title: "IC Memo 投资备忘录", - body: "DD 阶段一次对话,AI 并行完成股权穿透、司法诉讼、知识产权与招投标多维扫描,自动输出股权结构图 + 诉讼摘要 + 专利清单,直接用于 IC Memo 撰写。", + id: "enterprise-litigation", + audience: "企业场景", + title: "企业司法涉诉", + body: "自动梳理企业作为当事人涉及的诉讼、执行、限高与失信等公开司法信息,按时间线与案由聚合摘要,便于法务与商务团队评估涉诉暴露与履约影响。", example: { - title: "IC Memo 尽调摘要", - meta: "智能体输出 · 示例 · 标的:某智能制造有限公司", - sections: [ - { - heading: "股权结构(穿透摘要)", - bullets: [ - "控股股东:创始团队持股平台 62%", - "机构股东:A 轮基金 28%,员工期权池 10%", - "无代持、无对赌条款在公开登记信息中披露", - ], - }, - { - heading: "诉讼与合规", - body: "近 3 年作为被告案件 1 起(劳动争议,已结案);无重大环保、安全生产处罚。", - }, - { - heading: "知识产权", - bullets: [ - "发明专利 14 项(其中 9 项已授权)", - "软件著作权 6 项", - "核心商标 3 件,均在有效期内", - ], - }, - { - heading: "招投标与市场", - bullets: [ - "近 12 个月中标金额合计约 4,200 万", - "主要客户行业:汽车零部件、工业自动化", - ], - }, - ], + comingSoon: true, + title: "企业司法涉诉", + meta: "敬请期待", + sections: [] as { + heading: string; + body?: string; + bullets?: string[]; + }[], }, }, { - id: "contract", - audience: "法务 / 律师", - title: "合同核验", - body: "AI 审阅合同文本时同步核验合同双方工商状态、34 类司法风险,营业执照注销、被执行、股权冻结等异常立即生成高风险批注,防范与问题主体签约导致合同无效或履约失败。", + id: "enterprise-verify", + audience: "企业场景", + title: "企业全量信息核验", + body: "以企业完整登记名称为入口,交叉核验工商状态、主要人员、资质证照与关键公开字段一致性,识别注销、吊销与信息冲突等问题主体并标注复核项。", example: { - title: "合同双方核验批注", - meta: "智能体输出 · 示例 · 合同:软件采购框架协议", - sections: [ - { - heading: "甲方(采购方)", - body: "工商存续正常;无司法高风险项。", - }, - { - heading: "乙方(供应方)— 高风险批注", - bullets: [ - "【高风险】登记状态为「注销」→ 建议暂停签署", - "【高风险】法定代表人被列入失信被执行人名单", - "【中风险】股权 30% 处于冻结状态", - ], - }, - { - heading: "条款关联提示", - body: "第 3.2 条交付义务、第 8 条违约责任在乙方主体异常情况下履约风险极高,建议更换主体或要求母公司担保后再签。", - }, - ], + comingSoon: true, + title: "企业全量信息核验", + meta: "敬请期待", + sections: [] as { + heading: string; + body?: string; + bullets?: string[]; + }[], }, }, { - id: "supplier", - audience: "采购 / 供应链", - title: "新供应商快速筛选", - body: "招投标评审前批量核验候选供应商,AI 同步扫描工商合规、失信被执行黑名单与资质证件真实性,3 分钟批量出筛查结论,在评审会召开前帮助采购团队锁定高风险候选方。", + id: "enterprise-equity", + audience: "企业场景", + title: "企业股权结构全景", + body: "多层穿透股权链路与实际控制人,生成结构全景与关键持股节点说明,辅助识别一致行动关系、交叉持股与隐性关联,支撑尽调与治理审查。", example: { - title: "供应商批量筛查结果", - meta: "智能体输出 · 示例 · 批次:2025-Q2 设备采购 8 家候选", - sections: [ - { - heading: "批次结论", - body: "建议进入短名单 4 家;建议剔除 2 家;待补充资质 2 家。", - }, - { - heading: "高风险(建议剔除)", - bullets: [ - "供应商 C:失信被执行人 + 经营异常名录", - "供应商 F:营业执照信息与投标文件不一致", - ], - }, - { - heading: "通过项(节选)", - bullets: [ - "供应商 A、B、D、H:工商、失信、资质证照交叉验证通过", - "供应商 G:ISO9001 证书链验证通过,有效期至 2026-08", - ], - }, - ], + comingSoon: true, + title: "企业股权结构全景", + meta: "敬请期待", + sections: [] as { + heading: string; + body?: string; + bullets?: string[]; + }[], }, }, ], @@ -193,7 +123,7 @@ export const site = { skillMarket: { eyebrow: "产品", title: "SKILL 广场", - lead: "27 个经过真实场景验证的 SKILL,覆盖银行、投资、法务、采购四大客群。配置海宇数科 MCP,3 分钟跑通首份尽调报告。", + lead: "27 个经过真实场景验证的 SKILL,覆盖企业合规、投资、法务、采购等场景。配置海宇数科 MCP,3 分钟跑通首份尽调报告。", howToUse: { eyebrow: "使用指南", title: "怎么使用 SKILL ?", @@ -238,7 +168,7 @@ export const site = { }, categories: [ { id: "all", label: "全部", emoji: "✨" }, - { id: "bank", label: "银行", emoji: "🏦" }, + { id: "bank", label: "企业合规", emoji: "🏢" }, { id: "invest", label: "投资", emoji: "📊" }, { id: "legal", label: "法务", emoji: "⚖️" }, { id: "supply", label: "供应链", emoji: "🔗" }, @@ -249,8 +179,8 @@ export const site = { category: "bank", title: "KYB 企业核验", slug: "/kyb-verification", - body: "银行开户和授信审批前的核心合规工具。输入企业名称,AI 自动完成主体真实性核验、股权结构穿透、34 类司法与经营风险扫描,3 分钟输出符合 FATF / PBOC / CBIRC 标准的合规报告,替代传统客户经理 2-3 小时人工尽调流程。", - exampleId: "kyb", + body: "企业准入与合作伙伴核验的核心工具。输入企业名称,AI 自动完成主体真实性核验、股权结构穿透、34 类司法与经营风险扫描,3 分钟输出结构化合规报告,替代传统人工尽调流程。", + exampleId: "enterprise-verify", }, { id: "ic-memo", @@ -258,7 +188,7 @@ export const site = { title: "IC Memo 投资备忘录", slug: "/ic-memo", body: "PE/VC 投资决策的核心尽调工具。一次对话并行完成目标公司工商登记、多层股权穿透、司法风险、知识产权全维度扫描,直接输出符合投委会要求的标准格式备忘录,传统分析师 2-3 小时工作量压缩至约 3 分钟。", - exampleId: "ic-memo", + exampleId: "enterprise-equity", }, { id: "contract-review", @@ -266,7 +196,7 @@ export const site = { title: "合同核验", slug: "/contract-review", body: "合同审核与主体核验一体化工具。AI 审阅合同文本的同时,自动核验合同双方的工商登记状态、34 类司法与经营风险,营业执照注销、被执行、股权冻结等异常立即生成高风险批注,防范与问题主体签约导致合同无效或履约失败。", - exampleId: "contract", + exampleId: "enterprise-litigation", }, { id: "new-supplier-screening", @@ -274,7 +204,7 @@ export const site = { title: "新供应商快速筛选", slug: "/new-supplier-screening", body: "招投标评审阶段的候选供应商快速筛查工具。对多家候选供应商同步核查工商合规性、失信被执行黑名单状态与资质证件真实性,3 分钟批量出具筛查结论,在评审会召开前帮助采购团队快速排除存在硬性风险的候选方。", - exampleId: "supplier", + exampleId: "enterprise-risk", }, { id: "history-evolution", @@ -309,7 +239,7 @@ export const site = { category: "bank", title: "受益所有人识别", slug: "/ubo-screening", - body: "对公开户、高净值客户尽调与反洗钱日常筛查场景下的受益所有人识别工具。3 分钟自动锁定企业最终受益人,按央行 3 号令 25% 阈值穿透股权链路、查明实控人画像与关联企业网络,输出可直接归档 KYC 系统的合规档案。", + body: "对公开户、高净值客户尽调与反洗钱日常筛查场景下的受益所有人识别工具。3 分钟自动锁定企业最终受益人,按监管阈值穿透股权链路、查明实控人画像与关联企业网络,输出可直接归档 KYC 系统的合规档案。", }, { id: "equity-structure", @@ -328,30 +258,30 @@ export const site = { { id: "credit-due-diligence", category: "bank", - title: "授信尽调报告", + title: "企业尽调底稿报告", slug: "/credit-due-diligence", - body: "信贷审批流程中的企业全维度尽调工具。授信前自动汇总目标企业工商登记、实控人信息、经营异常记录与司法风险状况,输出标准化授信尽调底稿,帮助信贷审批人在放款前全面掌握企业风险画像,支撑有据可查的授信决策。", + body: "合作与准入前的企业全维度尽调工具。自动汇总目标企业工商登记、实控人信息、经营异常记录与司法风险状况,输出标准化尽调底稿,帮助团队在决策前全面掌握企业风险画像。", }, { id: "credit-monitoring", category: "bank", - title: "信贷风险定期监控", + title: "企业风险定期监控", slug: "/credit-monitoring", - body: "贷后管理中对存量借款客户的持续风险监控工具。定期对贷款企业进行风险体检,失信被执行、经营异常登记、法定代表人变更等关键风险信号一旦发生变化即时推送预警,帮助客户经理在风险暴露初期及时采取措施。", + body: "对重点合作企业与存量伙伴的持续风险监控工具。定期对企业进行风险体检,失信被执行、经营异常登记、法定代表人变更等关键风险信号一旦发生变化即时推送预警,帮助团队在风险暴露初期及时采取措施。", }, { id: "litigation-analysis", category: "legal", title: "诉讼风险评估", slug: "/litigation-analysis", - body: "立案前的对手方诉讼风险评估工具。以「企业当前 × 企业历史 × 核心人员」三层穿透扫描对手方,整合裁判文书、立案信息、执行风险、限高/限出境与法代/实控人个人涉诉档案,基于 5-10 年历史数据做时间序列趋势分析,支撑立案、授信、投资决策。", + body: "立案前的对手方诉讼风险评估工具。以「企业当前 × 企业历史 × 核心人员」三层穿透扫描对手方,整合裁判文书、立案信息、执行风险、限高/限出境与法代/实控人个人涉诉档案,基于 5-10 年历史数据做时间序列趋势分析,支撑立案与投资决策。", }, { id: "counterparty-risk", category: "bank", title: "交易对手风险评估", slug: "/counterparty-risk", - body: "贸易融资业务中对交易对手的多维风险评估工具。整合企业进出口信用等级、行政处罚记录、失信被执行情况与经营异常信息,生成综合风险评分,帮助贸易金融团队在开证、议付等关键节点识别潜在违约风险。", + body: "跨境与供应链场景中对交易对手的多维风险评估工具。整合企业进出口合规信息、行政处罚记录、失信被执行情况与经营异常信息,生成综合风险评分,帮助业务团队在开立合同、交付与结算等关键节点识别潜在履约风险。", }, { id: "strip-profile", @@ -372,7 +302,7 @@ export const site = { category: "supply", title: "供应商年度健康体检", slug: "/supplier-annual-check", - body: "供应商年度评审的标准化核查工具。对核心供应商进行全面年度体检,一次性输出经营状态变化、资质证件到期情况、信用记录变更的结构化报告,帮助采购团队在年度供应商评审和续签决策中有充分的数据支撑。", + body: "供应商年度评审的标准化核查工具。对核心供应商进行全面年度体检,一次性输出经营状态变化、资质证件到期情况、合规与失信记录变更的结构化报告,帮助采购团队在年度供应商评审和续签决策中有充分的数据支撑。", }, ], runLabel: "在线运行", @@ -409,7 +339,7 @@ export const site = { }, { name: "挑选 Skill", - desc: "浏览智能报告、KYB、合同核验等技能包与版本说明。", + desc: "浏览智能报告、企业核验、合同核验等技能包与版本说明。", screenTitle: "技能市场", screenHint: "报告 Skill · 尽调 Skill", }, @@ -471,7 +401,7 @@ export const site = { news: { eyebrow: "资讯", title: "AI 新闻资讯", - lead: "精选行业动态、模型发布与产品实践,帮助团队保持对 AI 生态的同步认知。", + lead: "海宇数科产品与平台动态、文档接入与能力更新。", listHref: "/news", previewCount: 4, }, @@ -499,9 +429,12 @@ export const site = { { title: "资源", links: [ + { label: "文档中心", href: "/docs" }, + { label: "常见问题", href: "/docs/faq" }, + { label: "用户协议", href: "/docs/legal/user-agreement" }, + { label: "隐私政策", href: "/docs/legal/privacy" }, { label: "AI 资讯", href: "/news" }, { label: "模型广场", href: "/models" }, - { label: "服务状态", href: "#" }, ], }, { @@ -509,7 +442,7 @@ export const site = { links: [ { label: "在线客服", href: "https://work.weixin.qq.com/kfid/kfc1f8fc41acaca0895" }, { label: "main@haiyushuke.cn", href: "mailto:main@haiyushuke.cn" }, - { label: "+86 15018866168", href: "tel:+8615018866168" }, + { label: "+86 17722052522", href: "tel:+8617722052522" }, ], }, ], diff --git a/src/content/skills.ts b/src/content/skills.ts index 727abdc..00258dd 100644 --- a/src/content/skills.ts +++ b/src/content/skills.ts @@ -41,7 +41,7 @@ export const categoryMeta: Record< SkillCategory, { slug: string; label: string } > = { - bank: { slug: "banking", label: "银行 · 合规风控" }, + bank: { slug: "banking", label: "企业 · 合规风控" }, invest: { slug: "invest", label: "投资 · 尽调" }, legal: { slug: "legal", label: "法务 · 合规" }, supply: { slug: "supply", label: "供应链 · 采购" }, @@ -63,8 +63,8 @@ export const skills: Skill[] = [ category: "bank", title: "KYB 企业核验", slug: "/kyb-verification", - body: "银行开户和授信审批前的核心合规工具。输入企业名称,AI 自动完成主体真实性核验、股权结构穿透、34 类司法与经营风险扫描,3 分钟输出符合 FATF / PBOC / CBIRC 标准的合规报告,替代传统客户经理 2-3 小时人工尽调流程。", - exampleId: "kyb", + body: "企业准入与合作伙伴核验的核心工具。输入企业名称,AI 自动完成主体真实性核验、股权结构穿透、34 类司法与经营风险扫描,3 分钟输出结构化合规报告,替代传统人工尽调流程。", + exampleId: "enterprise-verify", detail: { runSubtitle: "输入企业名称,AI 自动完成 KYB 企业核验", ...sharedRun, @@ -77,7 +77,7 @@ export const skills: Skill[] = [ title: "IC Memo 投资备忘录", slug: "/ic-memo", body: "PE/VC 投资决策的核心尽调工具。一次对话并行完成目标公司工商登记、多层股权穿透、司法风险、知识产权全维度扫描,直接输出符合投委会要求的标准格式备忘录,传统分析师 2-3 小时工作量压缩至约 3 分钟。", - exampleId: "ic-memo", + exampleId: "enterprise-equity", detail: { runSubtitle: "输入目标公司,AI 自动生成 IC Memo 投资备忘录", ...sharedRun, @@ -90,7 +90,7 @@ export const skills: Skill[] = [ title: "合同核验", slug: "/contract-review", body: "合同审核与主体核验一体化工具。AI 审阅合同文本的同时,自动核验合同双方的工商登记状态、34 类司法与经营风险,营业执照注销、被执行、股权冻结等异常立即生成高风险批注,防范与问题主体签约导致合同无效或履约失败。", - exampleId: "contract", + exampleId: "enterprise-litigation", detail: { runSubtitle: "上传合同或输入双方名称,AI 自动核验并批注风险", ...sharedRun, @@ -103,7 +103,7 @@ export const skills: Skill[] = [ title: "新供应商快速筛选", slug: "/new-supplier-screening", body: "招投标评审阶段的候选供应商快速筛查工具。对多家候选供应商同步核查工商合规性、失信被执行黑名单状态与资质证件真实性,3 分钟批量出具筛查结论,在评审会召开前帮助采购团队快速排除存在硬性风险的候选方。", - exampleId: "supplier", + exampleId: "enterprise-risk", detail: { runSubtitle: "批量输入候选供应商,AI 同步筛查并给出结论", ...sharedRun, @@ -197,25 +197,25 @@ export const skills: Skill[] = [ { id: "credit-due-diligence", category: "bank", - title: "授信尽调报告", + title: "企业尽调底稿报告", slug: "/credit-due-diligence", - body: "信贷审批流程中的企业全维度尽调工具。授信前自动汇总目标企业工商登记、实控人信息、经营异常记录与司法风险状况,输出标准化授信尽调底稿,帮助信贷审批人在放款前全面掌握企业风险画像,支撑有据可查的授信决策。", + body: "合作与准入前的企业全维度尽调工具。自动汇总目标企业工商登记、实控人信息、经营异常记录与司法风险状况,输出标准化尽调底稿,帮助团队在决策前全面掌握企业风险画像。", detail: { - runSubtitle: "输入借款企业,AI 汇总风险并输出授信尽调底稿", + runSubtitle: "输入目标企业,AI 汇总风险并输出尽调底稿", ...sharedRun, - installPrompt: sharedInstall("授信尽调报告", "/credit-due-diligence"), + installPrompt: sharedInstall("企业尽调底稿报告", "/credit-due-diligence"), }, }, { id: "credit-monitoring", category: "bank", - title: "信贷风险定期监控", + title: "企业风险定期监控", slug: "/credit-monitoring", - body: "贷后管理中对存量借款客户的持续风险监控工具。定期对贷款企业进行风险体检,失信被执行、经营异常登记、法定代表人变更等关键风险信号一旦发生变化即时推送预警,帮助客户经理在风险暴露初期及时采取措施。", + body: "对重点合作企业与存量伙伴的持续风险监控工具。定期对企业进行风险体检,失信被执行、经营异常登记、法定代表人变更等关键风险信号一旦发生变化即时推送预警,帮助团队在风险暴露初期及时采取措施。", detail: { - runSubtitle: "输入存量借款企业,AI 定期体检并推送风险预警", + runSubtitle: "输入重点合作企业,AI 定期体检并推送风险预警", ...sharedRun, - installPrompt: sharedInstall("信贷风险定期监控", "/credit-monitoring"), + installPrompt: sharedInstall("企业风险定期监控", "/credit-monitoring"), }, }, { @@ -223,7 +223,7 @@ export const skills: Skill[] = [ category: "legal", title: "诉讼风险评估", slug: "/litigation-analysis", - body: "立案前的对手方诉讼风险评估工具。以「企业当前 × 企业历史 × 核心人员」三层穿透扫描对手方,整合裁判文书、立案信息、执行风险、限高/限出境与法代/实控人个人涉诉档案,基于 5-10 年历史数据做时间序列趋势分析,支撑立案、授信、投资决策。", + body: "立案前的对手方诉讼风险评估工具。以「企业当前 × 企业历史 × 核心人员」三层穿透扫描对手方,整合裁判文书、立案信息、执行风险、限高/限出境与法代/实控人个人涉诉档案,基于 5-10 年历史数据做时间序列趋势分析,支撑立案与投资决策。", detail: { runSubtitle: "输入对手方企业,AI 三层穿透扫描并研判诉讼风险", ...sharedRun, @@ -235,7 +235,7 @@ export const skills: Skill[] = [ category: "bank", title: "交易对手风险评估", slug: "/counterparty-risk", - body: "贸易融资业务中对交易对手的多维风险评估工具。整合企业进出口信用等级、行政处罚记录、失信被执行情况与经营异常信息,生成综合风险评分,帮助贸易金融团队在开证、议付等关键节点识别潜在违约风险。", + body: "跨境与供应链场景中对交易对手的多维风险评估工具。整合企业进出口合规信息、行政处罚记录、失信被执行情况与经营异常信息,生成综合风险评分,帮助业务团队在开立合同、交付与结算等关键节点识别潜在履约风险。", detail: { runSubtitle: "输入交易对手,AI 生成综合风险评分", ...sharedRun, @@ -271,7 +271,7 @@ export const skills: Skill[] = [ category: "supply", title: "供应商年度健康体检", slug: "/supplier-annual-check", - body: "供应商年度评审的标准化核查工具。对核心供应商进行全面年度体检,一次性输出经营状态变化、资质证件到期情况、信用记录变更的结构化报告,帮助采购团队在年度供应商评审和续签决策中有充分的数据支撑。", + body: "供应商年度评审的标准化核查工具。对核心供应商进行全面年度体检,一次性输出经营状态变化、资质证件到期情况、合规与失信记录变更的结构化报告,帮助采购团队在年度供应商评审和续签决策中有充分的数据支撑。", detail: { runSubtitle: "输入核心供应商,AI 输出年度健康体检报告", ...sharedRun, diff --git a/src/lib/docs-nav.ts b/src/lib/docs-nav.ts index d45c777..456f678 100644 --- a/src/lib/docs-nav.ts +++ b/src/lib/docs-nav.ts @@ -9,22 +9,40 @@ export const docsNav: DocsNavItem[] = [ { href: "/docs", label: "文档中心" }, { href: "/docs/getting-started", label: "快速开始" }, { - href: "/docs/models/openai", - label: "AI 模型接入", + href: "/docs/integrations/overview", + label: "工具接入", children: [ - { href: "/docs/models/openai", label: "OpenAI" }, - { href: "/docs/models/claude", label: "Claude" }, - { href: "/docs/models/deepseek", label: "DeepSeek" }, + { href: "/docs/integrations/overview", label: "接入概览" }, + { href: "/docs/integrations/cursor", label: "Cursor" }, + { href: "/docs/integrations/claude_code", label: "Claude Code" }, + { href: "/docs/integrations/continue", label: "Continue" }, + { href: "/docs/integrations/cline", label: "Cline" }, ], }, { - href: "/docs/guides/console", - label: "使用指南", + href: "/docs/guides/http_api", + label: "开发指南", children: [ + { href: "/docs/guides/http_api", label: "HTTP API" }, + { href: "/docs/guides/openai_compatible", label: "OpenAI 兼容 SDK" }, + { href: "/docs/guides/streaming", label: "流式调用" }, { href: "/docs/guides/console", label: "控制台" }, { href: "/docs/guides/api_keys", label: "API Key" }, - { href: "/docs/guides/streaming", label: "流式调用" }, + { href: "/docs/guides/billing", label: "计费与财务" }, ], }, + { + href: "/docs/concepts/overview", + label: "核心概念", + children: [{ href: "/docs/concepts/overview", label: "核心概念" }], + }, { href: "/docs/faq", label: "常见问题" }, + { + href: "/docs/legal/user-agreement", + label: "法律条款", + children: [ + { href: "/docs/legal/user-agreement", label: "用户协议" }, + { href: "/docs/legal/privacy", label: "隐私政策" }, + ], + }, ]; diff --git a/src/lib/site-metadata.ts b/src/lib/site-metadata.ts index a43a01d..458c6be 100644 --- a/src/lib/site-metadata.ts +++ b/src/lib/site-metadata.ts @@ -175,10 +175,10 @@ export function newsArticleJsonLd(article: { slug: string; date: string; author: string; - image: string; + image?: string | null; }) { const url = absoluteUrl(`/news/${article.slug}`); - return { + const jsonLd: Record = { "@context": "https://schema.org", "@type": "NewsArticle", headline: article.title, @@ -188,7 +188,6 @@ export function newsArticleJsonLd(article: { "@type": "Organization", name: article.author, }, - image: [absoluteUrl(article.image)], mainEntityOfPage: { "@type": "WebPage", "@id": url }, publisher: { "@type": "Organization", @@ -196,4 +195,8 @@ export function newsArticleJsonLd(article: { url: getSiteUrl().toString(), }, }; + if (article.image) { + jsonLd.image = [absoluteUrl(article.image)]; + } + return jsonLd; } diff --git a/src/styles/components.css b/src/styles/components.css index dea499f..1451265 100644 --- a/src/styles/components.css +++ b/src/styles/components.css @@ -291,6 +291,105 @@ line-height: 1; } + .home-consult-float { + position: fixed; + right: calc(var(--spacing-xl) + var(--spacing-md)); + bottom: calc(var(--spacing-2xl) + var(--spacing-md)); + z-index: 45; + display: flex; + flex-direction: column; + gap: var(--spacing-sm); + pointer-events: none; + } + + @media (width >= 768px) { + .home-consult-float { + right: calc(var(--spacing-2xl) + var(--spacing-xl)); + bottom: calc(var(--spacing-2xl) + var(--spacing-lg)); + } + } + + .home-consult-float__icon { + flex-shrink: 0; + } + + .home-consult-float__btn { + pointer-events: auto; + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--spacing-xs); + min-width: 7.5rem; + padding: var(--spacing-sm) var(--spacing-lg); + border-radius: 999px; + border: none; + font-size: 0.9375rem; + font-weight: 600; + letter-spacing: 0.02em; + text-decoration: none; + cursor: pointer; + box-shadow: 0 8px 24px rgb(20 30 45 / 0.18); + transition: + transform 0.15s ease, + box-shadow 0.15s ease, + background-color 0.15s ease; + } + + .home-consult-float__btn:hover { + transform: translateY(-1px); + box-shadow: 0 12px 28px rgb(20 30 45 / 0.22); + } + + .home-consult-float__btn--primary { + background-color: #006fe4; + color: rgb(255 255 255); + } + + .home-consult-float__btn--primary:hover { + background-color: #005ec4; + color: rgb(255 255 255); + } + + .home-consult-float__btn--secondary { + background-color: var(--color-canvas-elevated); + color: var(--color-ink); + border: 1px solid var(--color-hairline); + } + + .wechat-qr-dialog { + max-width: min(400px, 100%); + } + + .wechat-qr-dialog__body { + padding: var(--spacing-xl) var(--spacing-2xl); + } + + .site-footer-contact-qr__wrap { + width: fit-content; + padding: var(--spacing-sm); + border-radius: var(--radius-sm); + background-color: rgb(255 255 255); + border: 1px solid var(--color-hairline); + line-height: 0; + } + + .site-footer-contact-qr__img { + width: 168px; + height: auto; + display: block; + max-width: 100%; + } + + @media (width >= 1024px) { + .site-footer-columns { + align-items: start; + } + + .site-footer-contact-qr { + max-width: 12.5rem; + } + } + .page-hero__back { transition: color 0.15s ease; } @@ -670,6 +769,19 @@ line-height: 1.7; } + .news-list-card--no-cover .news-list-card__body { + padding: var(--spacing-lg) var(--spacing-2xl) var(--spacing-2xl); + } + + .news-home-preview .news-list-card--no-cover.news-list-card--primary .news-list-card__body, + .news-home-preview .news-list-card--no-cover.news-list-card--secondary .news-list-card__body { + padding: var(--spacing-xl) var(--spacing-2xl); + } + + .news-list-card--no-cover.news-list-card--secondary { + flex-direction: column; + } + .news-list-card { transition: box-shadow 0.2s ease; }