# Credit 包订购及使用协议 Source: https://platform.stepfun.com/docs/zh/agreement/enterprise-credit-agreement **最新版本生效日期:2026 年 8 月 10 日** 本《企业套餐订购及使用协议》(以下简称“**本协议**”)由购买和使用 StepFun 开放平台企业套餐的企业客户(以下简称“**您**”)与上海阶跃星辰智能科技股份有限公司(以下简称“**公司**”或“**我们**”)共同订立。 您已与我们另行签署订购企业套餐服务的框架合同或其他合作协议(以下简称“**框架合同**”)。本协议适用于您通过 StepFun 开放平台(以下简称“**平台**”)购买企业套餐服务,获得及使用 Credit 以及管理您的企业认证账户、项目、企业成员和 API Key 等相关活动(以下简称“**本服务**”)。 **您确认并保证,代表您注册并完成企业认证,管理企业认证账户的操作人员已获得您合法、充分且有效的授权,有权代表您签署本协议、购买企业套餐服务、支付费用、邀请和管理企业成员、配置项目及成员权限和 Credit 额度,并实施企业认证账户管理所需的其他操作。该等操作人员通过该等完成企业认证的账户实施的签署、购买、付款、确认、配置及授权等行为均视为您的行为,对您具有法律约束力。您不得以操作人员未经内部审批、超越内部权限或违反内部管理制度为由否认相关行为的效力。该等操作人员授权发生变更或终止的,您应及时完成权限变更或通知我们,否则由此产生的责任由您自行承担。** **上述操作人员通过点击勾选或同意等方式确认本协议并提交购买订单,即视为您已阅读、理解并同意接受本协议的全部约定。本协议内容包括本协议正文以及平台已发布或后续依法更新并向您合理展示或通知的,与本服务相关的套餐说明、价格及计费规则、Credit 计量及消耗规则、功能说明和操作指引等(统称“服务规则”)。上述内容构成本协议不可分割的组成部分,与本协议具有同等法律效力。** **请您在订购及使用本服务前,务必仔细阅读并充分理解本协议内容,特别是涉及免除或者减轻我们责任、排除或限制您的权利等与您有重大利害关系的条款。该等条款将以加粗等形式特别提示您注意,请您重点阅读。** ## 一、企业套餐的购买及服务 1. 您授权的操作人员在完成账户注册和企业认证后,可以在平台上选择输入购买金额,并按照页面展示的交易条件提交订单。**相关订单自我们收到全部款项后生效**,我们将按照订单展示的数量,将相应额度的 Credit 计入您的企业认证账户名下。**您应及时核实订单信息及对应的 Credit 到账情况,如有异议,应在付款后【三】个工作日内向我们提出。** 2. **您可购买的企业套餐金额及对应的 Credit 数量,以操作人员提交订单时平台页面展示的信息为准。不同购买金额及不同企业客户可能适用不同的阶梯折扣或其他优惠,具体以框架合同约定及订单提交时的页面展示为准。具体订单的购买金额、实际获得的 Credit 数量、有效期及支付状态等,以订单页面展示及平台系统记录为准。** 3. **您与我们签署的框架合同到期后,您可购买的企业套餐金额、适用的阶梯折扣及其他优惠等可能相应调整,具体以届时双方约定及平台页面展示为准。** 4. 您完成购买后,可获得对应的 Credit 用量,并使用企业项目管理、成员管理、权限及额度配置、API Key 管理、用量查询等配套功能,具体服务内容以平台实际提供及页面展示为准。**我们可根据产品升级、技术调整、运营安排或安全合规等原因对配套功能进行更新、优化或调整。如相关调整对您已购买的企业套餐的主要服务内容产生重大不利影响,我们将通过合理方式提前通知您。** 5. 您应通过我们指定的官方渠道完成支付。**因使用非官方渠道造成的支付失败、资金损失或其他风险,由您自行承担。同时,我们有权视情况暂停或终止相关服务、冻结账户余额或限制账号使用。因第三方支付平台故障导致的支付延迟或异常,我们将协助处理,但不对第三方原因造成的损失承担责任。** ## 二、服务使用规则 1. 您完成订单付款后,可获得相应数量的 Credit,Credit 仅作为平台计费单位,不属于货币、电子货币、虚拟货币、预付卡或其他具有法定支付功能的财产凭证。您调用平台任意模型 API 接口,使用相应模型服务时,用量将换算为 Credit 进行计算和扣减。**Credit 与相应模型用量的换算规则、有效期、扣减顺序以及不同模型的计费规则等以平台服务规则的说明为准。** 2. **除框架合同或本协议另有约定、我们存在计费错误或法律法规另有规定外,Credit 到账后不得兑换现金、转让至其他账户。有效期届满后,未使用的 Credit 将自动清零并失效,不得恢复、延期、兑换现金或要求退款,双方另有书面约定的除外。** 3. \*\*您应当自行关注 Credit 有效期并合理安排使用,Credit 不足时,我们有权暂停或终止向您提供服务。\*\*Credit 使用完毕后,应由您的操作人员提交订单并手动重新进行购买。除双方另有约定外,我们暂不提供自动扣款或自动续费服务。 4. 我们可能根据务合作、促销活动或客户服务安排向企业客户赠送一定数量的 Credit。赠送 Credit 的数量、使用范围、有效期、扣减顺序及其他限制,以订单页面、活动规则或平台展示为准。 5. 您授权的操作人员可以通过平台查询企业客户名下的 Credit 余额、组织用量、项目情况、成员情况及 API 调用数据等。其他企业成员仅能在其权限范围内查询相关数据。**平台展示的实时数据可能存在合理延迟,最终 Credit 用量以平台计费系统记录为准。您对调用量或 Credit 扣减存在异议的,应当在相关调用发生后【五】个工作日内提出,并提供必要的订单及调用信息以便我们进行核实。** 6. 您授权的操作人员可代表您邀请企业成员加入您的企业组织,\*\*操作人员和企业成员可以在平台创建和使用 API Key,所产生的 API 调用及 Credit 消耗均计入企业客户账户,从企业客户已购买的 Credit 用量中予以扣减。\*\*操作人员可以配置项目 Credit 上限以及项目内成员的 Credit 上限等,项目或成员达到额度上限后,相关 API 调用服务可能被限制或暂停。 ## 三、服务使用规范 1. 您可通过平台账户或者其他我们允许的方式订购企业套餐,您订购的企业套餐仅限于您以及您授权的操作人员、企业成员使用,您应妥善保管账户、密码、API Key 等认证信息。**除我们另有明确许可外,您不得以任何形式将订购的服务全部或部分出售、转让、出借、出租、分许可、转授权或以其他方式提供给任何第三方使用**,否则,我们有权采取限制、暂停或终止服务等措施。 2. 您不得通过欺诈、虚假交易、利用系统漏洞、规避计费规则或其他违法违规、不正当方式获取或使用 Credit。**若发现上述情形,我们有权撤销或收回相关 Credit、要求您补足相应费用,并视情况限制、暂停或终止相关服务,由此造成的责任和损失由您自行承担。** 3. 您订购企业套餐后,将获得相应数量的 Credit。Credit 仅作为计算和扣减 API 服务用量的计量单位,不具有货币、储值或兑换价值。**API 服务的具体使用方式、可用模型、调用限制和其他使用要求,以平台另行展示的服务规则为准。您应当依法、合规、审慎使用 API 服务,并对您授权的操作人员、企业成员及您的最终用户的使用行为承担责任。** 4. **您自行负责对您的操作人员和企业成员进行内部授权、权限管理和使用监督。您应当及时移除离职、转岗或不再需要使用本服务的成员,并及时停用或删除相关 API Key。因企业客户内部授权瑕疵、权限配置不当、未及时移除成员、账户或 API Key 保管不善导致的 Credit 消耗、数据泄露或其他损失,由企业客户自行承担。** 5. **您在购买和使用本服务时,应遵守适用的法律法规、监管规定及国家标准,包括但不限于《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》《生成式人工智能服务管理暂行办法》《互联网信息服务深度合成管理规定》《互联网信息服务算法推荐管理规定》《人工智能生成合成内容标识办法》等,并遵守平台发布的用户协议、隐私政策、服务规则及相关通知。您不得将本服务用于任何违法违规、违背公序良俗或侵害他人合法权益的活动。若您违反前述约定,我们有权视情形限制、暂停或终止相关服务,已支付费用原则上不予退还。** ## 四、暂停、中断与终止 1. **在下列任一情形下,我们可暂停、中止、限制或终止全部或部分企业套餐及 API 调用服务的使用:** (1)Credit 额度不足或已全部失效; (2)您违反本协议、服务规则、平台其他协议或适用法律法规; (3)您的使用行为触发平台的安全、风控、反欺诈或反滥用机制; (4)您存在未支付费用、支付失败、退款争议、拒付或账户异常; (5)平台进行系统维护、升级、迁移、修复故障或资源调整且经事前合理通知; (6)法律法规、监管要求、司法或行政机关要求; (7)其他平台有合理理由认为需要采取措施的情形。 2. **服务暂停、中断或终止后,您可能无法继续访问或使用相关功能、历史记录、配置、任务状态等,在法律允许的范围内我们对此不承担责任。** ## 五、出口管制与经济制裁 **您在购买和使用本服务时,应遵守适用的出口管制、经济制裁及其他贸易合规法律法规,不得将本服务、Credit、API Key 或相关技术用于受限制的国家或地区、主体、最终用户或最终用途,亦不得以规避相关限制为目的进行转让、提供或使用。若我们有合理理由认为相关购买或使用行为可能违反前述规定,有权要求您提供必要的合规说明或证明,并可限制、暂停或终止相关服务。** ## 六、违约责任 1. **如您违反本协议、框架合同或平台服务规则,我们有权根据违约情形采取警告、限制账户权限、暂停 Credit 使用、撤销或收回不当取得的 Credit、要求补足费用、暂停或终止服务等措施。因您的违约行为导致服务被暂停或终止的,已支付费用原则上不予退还。** 2. **因您、您授权的操作人员或其他企业成员的操作、授权、权限配置、账户管理不当,或者通过违法违规、不正当方式获取或使用 Credit、API 服务,导致我们或任何第三方遭受损失、索赔、处罚或其他责任的,您应承担相应责任,并赔偿我们因此遭受的实际损失。** 3. **本协议未约定的违约责任及责任限制,按照框架合同、平台服务规则的约定执行。** ## 七、责任限制 **因不可抗力、第三方服务原因或其他非平台原因导致的服务中断、延迟、异常、数据丢失、调用失败、功能受限或其他损失,我们在法律允许的最大范围内不承担责任。前述第三方包括但不限于网络运营商、云服务商、支付机构、第三方应用/工具/插件提供方等。** ## 八、未成年人消费提醒 **本服务主要面向成年人提供。未成年人原则上不得购买或以其他方式消费本服务**。我们有权根据适用法律法规、监管要求或平台服务规则,对未成年人使用、购买或消费本服务采取限制、拒绝、暂停或其他管理措施。 ## 九、协议更新 **我们有权根据产品变化、业务安排、法律法规、监管要求或运营需要对本协议进行更新。更新后的协议可通过页面公示、弹窗提示、站内通知、电子邮件或其他合理方式向您展示。协议更新后,如您继续使用本服务,视为您接受更新后的协议内容,如您不同意更新内容,可停止使用相关服务并及时与我们联系。** ## 十、其他 1. **本协议自您的操作人员代表您通过点击勾选或同意等方式确认本协议并提交订单时成立,并自我们收到相应订单全部款项之日起就该笔订单生效。** 2. 本协议未约定事项,按照框架合同及其他平台服务规则执行。 3. **本协议的法律适用及争议解决,按照框架合同约定执行。如您与我们未签署框架合同,或框架合同未对法律适用及争议解决作出约定,本协议的订立、生效、履行、解释及争议解决均适用中华人民共和国大陆地区法律。因本协议产生或与本协议有关的任何争议,双方应先行协商解决,协商不成的,任何一方均可向公司住所地有管辖权的人民法院提起诉讼。** # 开放平台管理规则及公约 Source: https://platform.stepfun.com/docs/zh/agreement/management-rules-and-conventions 尊敬的用户: 依据《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》、《互联网信息服务管理办法》、《生成式人工智能服务管理暂行办法》、《互联网用户账号信息管理规定》、《网络信息内容生态治理规定》、《网站平台受理处置涉企网络侵权信息举报工作规范》等法律、行政法规、规章的规定,对于您注册使用StepFun开放平台、AI Studio平台及相关服务(以下简称“**本服务**”)的行为,我们制定了如下管理规则和公约(以下简称“**本规则**”),请您仔细阅读并认真遵守,与我们共创一个文明的网络环境。 **一、我们倡导** 1\. 积极履行信息安全义务,遵守相关法律法规政策。不得使用本服务进行非法活动或发布违法内容,不得利用本服务侵犯他人正当权益或谋取不正当利益。 2\. 理解人工智能服务的局限性,它不具备情感、观点或自主意识,它所生成的内容可能不准确,请谨慎参考它所生成的内容,注意核实和验证您或第三方从本服务中获得的信息,特别是涉及重要决策和敏感问题的情况下。 3\. 尊重隐私并注意保护数据安全,遵守本规则、用户协议、隐私政策和相关规定,不要在使用本服务的过程中,输入、分享任何敏感个人信息或其他未经授权的信息。 4\. 积极分享您的反馈与建议,帮助我们共同改善本服务的功能和用户体验。如果您发现任何问题、错误或改进的机会,或遇到任何违反用户协议和/或本规则的行为,请及时与我们联系。 **二、我们禁止及不欢迎** **(一)您在注册、使用账号信息及使用本服务的过程中,应当遵守法律法规,遵循公序良俗,诚实信用,不得损害国家安全、社会公共利益或者他人合法权益。禁止利用本服务进行任何形式危害国家及社会安全的行为,包括且不限于:** 1\. 假冒、仿冒、捏造政党、党政军机关、企事业单位、人民团体和社会组织的名称、标识等; 2\. 假冒、仿冒、捏造国家(地区)、国际组织的名称、标识等; 3\. 假冒、仿冒、捏造新闻网站、报刊社、广播电视机构、通讯社等新闻媒体的名称、标识等,或者擅自使用“新闻”、“报道”等具有新闻属性的名称、标识等; 4\. 假冒、仿冒、恶意关联国家行政区域、机构所在地、标志性建筑物等重要空间的地理名称、标识等; 5\. 以损害公共利益或者谋取不正当利益等为目的,故意夹带二维码、网址、邮箱、联系方式等,或者使用同音、谐音、相近的文字、数字、符号和字母等; 6\. 含有名不副实、夸大其词等可能使公众受骗或者产生误解的内容; 7\. 制作、复制、发布含有下列内容的违法信息: (1) 反对宪法所确定的基本原则的; (2) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; (3) 损害国家荣誉和利益的; (4) 歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖像、名誉、荣誉的; (5) 宣扬恐怖主义、极端主义或者煽动实施恐怖活动、极端主义活动的; (6) 煽动民族仇恨、民族歧视,破坏民族团结的; (7) 破坏国家宗教政策,宣扬邪教和封建迷信的; (8) 散布谣言,扰乱经济秩序和社会秩序的; (9) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的; (10) 侮辱或者诽谤他人,侵害他人名誉、隐私和其他合法权益的; (11) 法律、行政法规禁止的其他内容。 8\. 制作、复制、发布含有下列内容的不良信息: (1) 使用夸张标题,内容与标题严重不符的; (2) 炒作绯闻、丑闻、劣迹等的; (3) 不当评述自然灾害、重大事故等灾难的; (4) 带有性暗示、性挑逗等易使人产生性联想的; (5) 展现血腥、惊悚、残忍等致人身心不适的; (6) 煽动人群歧视、地域歧视等的; (7) 宣扬低俗、庸俗、媚俗内容的; (8) 可能引发未成年人模仿不安全行为和违反社会公德行为、诱导未成年人不良嗜好等的; (9) 其他对网络生态造成不良影响的内容。 (二)您在使用本服务过程中,不得采用任何技术手段删除、篡改、隐匿生成内容中的标识。 三、您在使用本服务的过程中,不得实施侮辱、诽谤、威胁、散布谣言以及侵犯他人隐私等违法行为,不得制作、复制、发布混淆企业主体身份的仿冒性信息、影响公众公正评判的误导性信息、不符合企业客观实际的谣言性信息、贬损丑化企业或企业家的侮辱性信息、侵害企业家个人隐私的泄密性信息以及其他恶意干扰企业正常经营发展的信息,不得损害他人和其他企业主体的合法权益。如您使用本服务的过程中发现前述违法违规以及不良信息,您可以向我们投诉、举报。 四、**您申请注册相关账号信息,我们有权对您进行基于移动电话号码或身份证件号码等方式的真实身份信息认证,您不提供真实身份信息,或者冒用他人身份信息进行虚假注册的,我们有权不为您提供相关服务**。个人用户注册、使用账号信息,含有职业信息的,应当与个人真实职业信息相一致。机构用户注册、使用账号信息,应当与机构名称、标识等相一致,与机构性质、经营范围和所属行业类型等相符合。 五、**我们将采取措施适时核验存量账号信息,若发现您的账号信息不符合法律、行政法规、规章或本规则要求的,将暂停向您提供服务并通知您限期改正;拒不改正的,我们将终止向您提供服务。** 六、我们有权建立互联网用户账号信用管理体系,将您的账号信息相关信用评价作为账号信用管理的重要参考指标,并据以向您提供相应服务。 七、**如果您在注册、使用账号以及在您使用本服务的过程中,出现违反法律、行政法规、规章或本规则规定的行为,我们有权根据本规则及您签署的用户协议的约定采取预先警示、拒绝发布、立即停止传输信息、删除信息内容、短期禁止发布内容、限制账号部分或者全部功能直至终止提供服务、永久关闭账号等措施。** 八、本规则自公布之日起执行。我们也将随着产品生态的健康发展,不断完善与更新本规则。若您在使用本服务过程中发现任何您认为可能违反本规则的内容,可直接通过本服务相关页面展示的路径进行反馈,或通过[platform@stepfun.com](mailto:platform@stepfun.com)联系我们。 # Step Plan 付费服务协议 Source: https://platform.stepfun.com/docs/zh/agreement/step-plan **最新版本生效日期:2026年5月25日** 欢迎您使用Step Plan付费服务(“**本服务**”)。本《Step Plan付费服务协议》(“**本协议**”)由您与上海阶跃星辰智能科技股份有限公司(以下简称“**公司**”或“**我们**”)、就您在StepFun开放平台(“**平台**”)中付费订阅相关AI模型服务时所订立。 **本协议项下的Step Plan付费服务相关约定,不仅包括本协议正文内容,还包括平台上已经发布或将来不时发布、更新的与该等服务有关的产品介绍、套餐说明、订阅说明、价格及计费规则、额度和速率限制规则、功能说明、开发文档、帮助中心内容、操作指引、公告、通知及其他规则文件(统称“服务规则”)。上述内容构成本协议不可分割的组成部分,与本协议具有同等法律效力。** **请您在订阅本服务前,务必仔细阅读并充分理解本协议内容,特别是涉及免除或者减轻我们责任、排除或限制您的权利等与您有重大利害关系的条款。该等条款将以加粗等形式特别提示您注意,请您重点阅读。您通过勾选/点击确认、支付费用、开通或实际使用付费服务的,即视为您已阅读、理解并同意受本协议及全部服务规则的约束。** **如您以企业用户身份或其他代表企业、机构的身份接受本协议,开通、订阅或使用本服务,您声明并保证您已获得该企业或机构的合法、充分且持续有效的授权,有权代表其接受本协议并作出与订阅、使用本服务相关的操作;如您不具备前述授权,我们有权拒绝或终止向相关账户提供服务,由此产生的责任及损失由您及/或相关企业、机构自行承担。** 本协议是《StepFun平台用户协议》《StepFun平台隐私政策》的重要组成部分;如本协议与前述文件约定不一致,就订阅付费服务相关事项以本协议为准。 ## 1. 订阅内容与服务 1. 我们向用户提供不同档位的订阅套餐,各套餐在功能范围、可用模型、使用限额、速率限制、并发能力、上下文长度、工具调用权限等方面可能存在差异,具体以您订阅页面展示为准。**您注册、登录平台账户,在平台订阅页面选择具体套餐并完成支付,即视为您开通了相关付费服务,可使用订阅套餐中的相关权益**。您所获得的付费服务的有效期限及所包含的权益范围,以订阅页面展示的服务规则说明为准。请您在购买前充分了解相关服务规则并妥善保留相关凭证。 2. **您知悉并同意,我们可能基于产品演进、模型升级、系统维护、商业安排、成本变化、第三方政策调整、安全风控或合规要求等原因,对订阅套餐的名称、价格、计费方式、功能范围、支持模型/应用、限额规则、速率限制或其他服务内容进行调整。我们将就前述调整通过公告、通知或以其他合理方式向用户进行说明。如该等调整将对价格、核心功能或限额等产生重大不利影响,原则上将自后续计费周期起生效,但法律法规、监管要求或安全处置需要立即调整的除外。如您在调整生效后继续使用/未取消订阅套餐的,视为同意调整后的服务规则。** 3. **您理解并同意,不同模型或不同能力对应的资源消耗、响应速度、配额消耗和速率限制等可能存在差异,如您的已订阅套餐开始支持更高等级模型或高级功能,可能出现响应速度变化、配额消耗加快或适用更严格限制等情况,具体以平台届时展示的相关规则和说明为准。我们将在相关页面尽合理努力对前述差异作出说明,您可根据自身需求选择继续使用、调整使用方式或变更套餐。** 4. 在部分场景下,我们支持用户在现有订阅套餐基础上升级或更换订阅套餐。**我们支持的可更新的订阅套餐类型、费用与差价规则以及原套餐项下的权益处置规则等以届时平台相关页面的说明、操作指引或相关文档说明为准。** ## 2. 计费、订阅周期与自动续费 1. 付费服务通常按月度、年度或其他周期计费,具体以订阅页面展示为准。您应按照订阅页面展示的套餐价格、币种、税费规则和计费周期支付相应费用。 2. **在订阅周期届满前,您可在指定界面申请续期。如订阅套餐支持自动续费功能,则在当前订阅周期届满前,除非您已在平台指定页面取消续费,否则我们将按照您已选择的套餐及适用价格自动扣费续订下一周期。请您在订阅前,留意相关的续费规则说明。** 3. **我们可能基于不同订阅套餐的购买方式、用户账户状态、风控需要、库存安排或其他运营管理需要,对各订阅套餐可购买数量进行限制;用户在相应时段内可购买的数量以平台届时页面展示或系统实际允许的数量为准。** 4. **您授权平台或平台指定的支付服务商,按照您绑定的支付方式,根据订阅套餐价格、计费周期等收取相关费用。因余额不足、支付失败、账户异常或支付渠道限制等导致订阅或续费失败的,平台可暂停或终止向您提供相应付费服务。** 5. **您仅可通过我们指定的官方支付渠道完成支付,若您选择非官方支付渠道进行支付,可能导致付费失败,同时可能引发其他损失或风险,若因此造成您或任何第三方利益受损,由您自行处理并承担相应责任,我们不承担任何有关责任,同时我们保留中止或终止您的部分或全部权限、冻结您的账户余额、短期或永久封禁您的账号及/或限制、禁止您使用各项付费服务的权利。** 6. **除适用法律另有规定、公司另有明确承诺或双方另有约定外,已支付的订阅费用不予退还。已开始的计费周期不因您未实际使用、减少使用频率或提前取消而按比例退款,您在有效期内未使用的权益将在到期后自动失效。** ## 3. 付费服务使用规范 1. 您可通过平台账户或者其他我们允许的方式订阅付费服务,订阅的付费服务仅限开通和订阅该服务的账户自行使用,您应妥善保管账户、密码、API Key等认证信息。**除我们另有明确许可外,您不得以任何形式将订阅的付费服务全部或部分出售、转让、出借、出租、分许可、转授权或以其他方式提供给任何第三方使用**,否则,我们有权采取限制、暂停或终止服务等措施。 2. 您理解并确认,**为使用订阅套餐内的相应服务,可能需要您自行负责并完成必要的应用/插件/工具安装、接入、环境配置等操作,确保第三方应用/插件/工具持续可用**,具体可参考平台相关页面的文档说明。 3. 您订阅的付费服务仅限在我们支持或明确说明可适配的接入方式、使用环境、应用、工具或插件中使用(具体以平台页面说明为准)。**未经我们明确许可,您不得通过非官方、未授权或未经说明可适配的工具、插件、接口或其他方式接入、调用或使用订阅的付费服务,因此产生的服务异常、数据丢失、安全风险或其他后果,由您自行承担。** 4. **因您账户保管不善、密钥泄露、设备失窃或您安装、接入的第三方应用/插件/工具的原因导致的付费服务无法使用、资金损失、数据泄露、误操作、资源滥用或其他后果,由您及/或第三方自行承担。** 5. 您理解并同意,您订阅的付费服务可能设置一种或多种技术限制,包括但不限于:请求频率限制;一定周期内的使用限额;每分钟、每小时、每五小时、每日、每周或每月的消息数、请求数、token数、计算量或调用量、总计费金额限制;并发任务数、并发 Agent 数、并发工具调用数限制;上下文长度、输入大小、输出长度、附件大小或文件数量限制;特定模型、特定功能、特定集成方式或特定地区的额外限制等。**请您在订阅付费服务前,务必仔细阅读相关页面的服务规则说明,了解限制规则,自行决策是否订阅付费服务。当您达到适用限制时,我们可视情况采取以下措施:限制新请求、延迟处理、排队执行、暂停相关功能、切换至其他模型、降低服务等级、提示升级套餐或采取其他合理措施。** 6. **您理解并同意,我们可能根据系统负载、资源使用情况、产品策略、安全风控、反滥用机制或合规要求,动态调整速率限制和限额规则,但我们会尽最大努力保障您的合法权益不受损害。您不得通过脚本、代理、令牌轮换、批量注册、逆向接口、异常并发、规避排队机制或其他不正当方式绕过前述限制。** 7. **您在使用订阅的付费服务时,应当遵守《StepFun平台用户协议》《平台管理规则及公约》的相关约定,不得从事任何违反法律法规、监管要求、行业规范或公序良俗的活动。** ## 4. 暂停、中断与终止 1. **在下列任一情形下,我们可暂停、中止、限制或终止全部或部分订阅服务的使用:** (1)您违反本协议、服务规则、平台其他协议或适用法律法规; (2)您的使用行为触发平台的安全、风控、反欺诈或反滥用机制; (3)您存在未支付费用、支付失败、退款争议、拒付或账户异常; (4)平台进行系统维护、升级、迁移、修复故障或资源调整; (5)法律法规、监管要求、司法或行政机关要求; (6)其他平台有合理理由认为需要采取措施的情形。 2. **服务暂停、中断或终止后,您可能无法继续访问相关功能、历史记录、配置、任务状态等,我们对此不承担责任,但法律另有规定的除外。** 3. **您可在平台指定页面取消订阅,取消订阅通常仅影响下一计费周期,当前周期内已生效服务不因此而当然终止。** ## 5. 责任限制 **因不可抗力、第三方服务原因或其他非平台原因导致的服务中断、延迟、异常、数据丢失、调用失败、功能受限或其他损失,我们在法律允许的最大范围内不承担责任。前述第三方服务包括但不限于网络运营商、云服务商、支付机构、第三方应用/工具/插件提供方等。** ## 6. 活动与推广规则 **我们可能在特定推广期、促销期、测试期或其他活动期限内,就部分套餐提供与常规规则不同的价格、套餐内容、限额、功能、适用范围、购买条件或其他优惠安排,具体以届时活动页面、活动规则或相关说明为准。前述活动安排仅在对应活动期限内有效,不构成我们对相同或类似价格、权益、功能或服务条件的长期承诺。活动结束后,相关套餐的价格、套餐内容及适用规则以平台届时正式展示或适用的规则为准。** ## 7. 未成年人消费提醒 **本服务主要面向成年人提供。未成年人原则上不得订阅、购买或以其他方式消费本服务**;如未成年人确需使用本服务,应在其监护人同意并指导下进行。我们有权根据适用法律法规、监管要求或平台规则,对未成年人使用、购买或消费本服务采取限制、拒绝、暂停或其他管理措施。 ## 8. 协议更新 **我们有权根据产品变化、业务安排、法律法规、监管要求或运营需要对本协议进行更新。更新后的协议可通过页面公示、弹窗提示、站内通知、电子邮件或其他合理方式向您展示。协议更新后,如您继续使用订阅服务,视为您接受更新后的协议内容;如您不同意更新内容,应停止使用相关服务并按平台规则取消订阅。** ## 9. 争议解决 **本协议根据中华人民共和国大陆地区法律法规制定,受中华人民共和国大陆地区法律法规管辖。因本协议而发生的任何争议应提交至公司住所地有管辖权的人民法院诉讼解决。** # StepFun 开放平台隐私政策 Source: https://platform.stepfun.com/docs/zh/agreement/userprivacy **最新版本生效日期:2026年9月28日** 欢迎您使用本平台!上海阶跃星辰智能科技股份有限公司(简称“我们”,注册地址为:上海市徐汇区云锦路701号30层)深知个人信息对您的重要性,您的信任对我们非常重要,我们将按照法律法规的规定并参照行业最佳实践保护您的个人信息及隐私安全。 本隐私政策适用于我们通过我们运营的StepFun开放平台、AI Studio平台等形式(本隐私政策中统称“**本平台**”)向您提供的产品和服务,如我们的某一终端、产品与/或服务单独设置了隐私政策的,单独的隐私政策优先于本隐私政策适用。我们制定本隐私政策并特别提示,希望您在使用本平台相关服务前仔细阅读并理解本隐私政策,以便做出适当的选择。**重要内容我们已用加粗形式提示,请特别关注。如涉及敏感个人信息的,我们将进一步通过加下划线的方式提示您关注;同时,提请您注意,敏感个人信息一旦泄露或者非法使用,可能对您的个人权益产生影响(例如人身财产安全受到危害),但我们会按照国家有关法律的规定,采取恰当的安全管理和技术措施维护您的敏感个人信息安全。** **您通过勾选等方式主动确认本隐私政策后,即意味着您已阅读并理解我们的个人信息处理规则,在您使用本平台时,我们将按照本隐私政策的说明处理您的相关个人信息。** 请您注意,为了您能够正常使用本平台,您应当开启或授权网络权限,确保WLAN或移动网络的连接,此举可能产生流量费用,具体费用请咨询当地运营商。如您关闭或不允许我们使用网络权限,您将无法使用本平台。 **本隐私政策旨在帮助您了解以下内容:** 一、我们如何收集和使用相关信息 二、我们如何使用cookie等同类技术 三、我们如何共享、委托处理、转移、公开披露您的个人信息 四、我们如何存储个人信息 五、我们如何保护个人信息的安全 六、管理您的个人信息 七、未成年人条款 八、隐私政策的修订和通知 九、联系我们 十、法律适用及争议解决 十一、定义 ## 一、我们如何收集和使用相关信息 我们会按照如下方式收集您在使用本平台时主动提供的,以及通过自动化手段收集您在使用功能或接受服务过程中产生的信息: **1. 帮助您成为我们的用户** 当您首次使用本平台时,您可以通过**手机号码**创建账号以完成注册,成为我们的用户,我们会通过发送**验证码**的方式来验证您的身份是否有效。后续您可通过输入您注册时的手机号码,并在输入验证码后完成登录以使用本平台相关服务。如果您不提供手机号码及验证码用于注册、登录,我们可能无法为您提供相应服务。 您还可以在本平台绑定**您的电子邮箱**,设置您的**登录密码**,完成后,您可使用该等邮箱、登录密码登录本平台。 您使用本平台服务时,我们还会进一步收集并向您展示您的**头像、昵称**信息,以便向您提供更加个性化的账户服务体验。 **鉴于我们运营的StepFun开放平台及AI Studio平台使用同一套账户体系,您注册StepFun开放平台或AI Studio平台账户后,均可以使用该账户直接登录StepFun开放平台、AI Studio平台,并使用相应服务。** **2. 实名认证服务** 为保障平台及账号安全、核验用户个人或企业身份,并防止恶意注册、不当获取平台权益或其他滥用行为,我们可能根据具体服务场景要求您完成个人实名认证或企业认证。当您进行个人实名认证时,我们需要收集您的**姓名、身份证号码信息**,并将上述信息提供给我们委托的实名认证服务合作方进行身份核验。**认证过程中,您将通过合作方提供的认证页面完成刷脸认证,合作方将直接收集您的人脸信息以及必要的设备及操作环境信息,并结合您的姓名、身份证号码进行身份核验,必要时合作方还可能进一步通过其合作的验证服务商或其他合法保存您身份信息的机构完成核验**。认证完成后,合作方将向我们返回**认证结果信息**;除非另有说明,**我们不会获取或留存合作方在认证过程中采集的人脸信息**。前述信息是为您提供个人实名认证服务的必要信息,如您拒绝我们或合作方收集,我们将无法对您的身份进行核验,进而可能影响您使用本平台提供的相应服务。 若您希望能认证成为企业用户的,还需要提供相应的企业信息,包括公司名称、统一社会信用代码、银行账户信息等,具体以认证页面展示为准。 **3. 智能对话、内容生成及AI助手服务** 您可通过本平台体验我们提供的模型和API能力,在您体验相应服务的过程中,为了向您提供智能对话、内容生成及AI助手服务,进行内容理解、数据分析,以更好地理解您的需求,答复您的问题,生成相关内容,执行您的任务指令,以及便于您对历史对话记录进行管理,我们会收集**您主动输入的信息(包括文字、语音、图片、视频、音频、文本、链接等多种形式)以及服务的输出信息、您的任务指令信息、您设置的模型及参数信息以及您提供的反馈信息**。我们会对上述信息进行分析、计算、搜索,以便于更好地理解您的需求和上下文语境,从而为您提供更具有相关性及更高精准度的信息内容、更准确地执行您的任务指令。在您使用 AI Studio服务时,我们还会记录并向您展示**您上传和模型生成的素材内容**(如图片、文档、表格、音频、网页),以便您可以查阅、管理及复用过往上传和生成的内容。 前述信息是为向您提供智能对话、内容生成及AI助手服务的必要信息,如您拒绝提供,您可能将无法使用我们提供的相应服务。 **4. 个性化能力** 本平台中的部分服务支持您进行个性化管理,例如,我们会根据与您的**对话记录**,总结并形成对您的**相关记忆**(如您的工作习惯、偏好),以便模型参考对您的相关记忆,向您输出更适合您、更符合您需求的回答。您可以随时根据本平台页面操作指引,查看、编辑或删除模型已保存的记忆,您也可以选择关闭记忆功能,我们将不会继续在与您对话时使用对您的相关记忆,您关闭记忆功能不会影响您继续使用我们的其他服务。您还可以进一步向我们提供您的**个人背景信息、您偏好的回复风格信息**,模型会参考该等信息,输出更适合您的回答,我们不会基于该等信息向您进行个性化推送。 **5. 管理服务使用情况** 为了帮助您管理使用本平台提供的相应服务的情况,我们会记录并向您展示**您在StepFun开放平台项下的API接口密钥信息以及创建时间、最近调用时间**;**您在本平台的服务订阅、使用记录及套餐兑换记录**。前述信息为帮助您管理服务相关使用情况的必要信息,如您拒绝我们收集相应信息的,可能导致无法向您展示您的服务使用情况。 **6. 套餐兑换、充值、支付与发票管理** 如您通过支付宝小程序购买套餐并跳转至StepFun开放平台进行兑换,为完成订单与平台账户匹配、套餐兑换及权益发放,我们会从相关购买/支付渠道收集并处理您的**订单信息以及您购买套餐时提供的手机号码、渠道来源标识信息**。上述信息可能由您主动提供、在您使用相关服务过程中产生,或者由支付宝小程序购买页面及支付宝在相关交易发生后向本平台传递。前述信息是为您完成套餐兑换并获得相应权益所必需的信息,如您拒绝提供,我们可能无法为您完成套餐兑换或发放相应权益。此外,我们在第三方购买/支付渠道收集处理您个人信息的具体情况,请以第三方购买/支付渠道界面载明的隐私政策、个人信息处理授权书等实际适用的个人信息处理规则为准。 您可通过充值的方式使用本平台提供的某些服务,为此我们会收集并向您展示**您的充值记录、账户资金及其使用情况。** 本平台相关服务可能需要您支付一定费用后方能使用,具体以本平台相关页面届时展示的信息为准。在您完成费用支付后,我们需要收集并记录您的**费用支付信息及服务使用情况**,以便根据您的付费情况向您开放相关服务。 您可按本平台规则申请开具发票,为此您需要向我们提供相应的**开票信息**。 上述信息为记录您的充值、费用支付情况以向您提供相关服务的必要信息,如您拒绝我们收集相应信息的,可能导致您无法使用相关服务。 **7. 向您进行消息通知** 您知悉并同意,我们可能会通过您在使用本平台的过程中所提供的**联系方式**,向您同时发送一种或多种类型的通知,例如服务使用情况提醒。但请您放心,如您不愿接受这些信息,您可以直接与我们联系进行退订。 **8. 客服服务** 您可以通过本平台中的问题反馈相关界面,填写并向我们提交您对本平台的意见和建议,我们会收集**您填写的反馈信息**。如您希望您的意见和建议得到及时回应,您可以选择留下您的**联系方式**,我们会通过您的联系方式与您进行沟通。 当您与我们联系进行客服咨询、投诉/举报、反馈意见和建议时,为便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会保存您与我们的**通信/通话记录及相关内容(包括账号信息、反馈信息、您为了证明相关事实提供的其他信息、您留下的联系方式)**。前述信息系为向您提供相应服务的必要信息,如您拒绝我们收集,可能导致您无法使用相应服务。 **9. 为您提供运营与安全运行保障** 我们致力于向您提供安全、可信的产品与使用环境,提供优质而可靠的服务与信息是我们的核心目标。为了维护我们服务的正常运行,保护您或其他用户或公众的合法利益免受损失,您在使用本平台时,我们会收集用户的设备信息与日志信息,包括:**您的硬件型号、操作系统版本号、设备标识符、IP地址、WLAN接入点(如SSID,BSSID)、基站、软件版本号、网络接入方式、类型、状态、网络质量数据、网络源地址和目标地址、网络源端口、操作时间和操作类型、使用、服务日志、搜索/分享/收藏记录、设备传感器数据(如加速度传感器)、总体使用情况、性能数据**。 **10. 征得授权同意的例外** **请您理解,在下列情形中,根据法律法规及相关国家标准,我们收集和/或以其他方式处理(包括但不限于存储、使用、加工、传输、提供、公开、删除)您的个人信息不必事先征得您的授权同意:** (1) 为订立、履行个人作为一方当事人的合同所必需,或者按照依法制定的劳动规章制度和依法签订的集体合同实施人力资源管理所必需; (2) 为履行法定职责或者法定义务所必需; (3) 为应对突发公共卫生事件,或者紧急情况下为保护自然人的生命健康和财产安全所必需; (4) 为公共利益实施新闻报道、舆论监督等行为,在合理的范围内处理个人信息; (5) 依照《中华人民共和国个人信息保护法》规定在合理的范围内处理个人自行公开或者其他已经合法公开的个人信息; (6) 法律、行政法规规定的其他情形。 **11. 您个人信息的其他用途** **(1) 我们通过技术手段对您使用本平台相关服务产生的个人信息进行匿名化处理后,可能会使用已经匿名化处理的信息,进行数据分析并可能予以商业化的利用。** **(2) 我们可能会对本平台的使用情况进行统计,并可能会与公众或第三方共享这些统计信息,以展示本平台的整体使用趋势。但这些统计信息不包含您的任何身份识别信息。** **(3) 我们在此特别提醒您,为给您带来更好的产品和服务体验,我们会持续努力改进我们的产品、服务及技术,随之我们可能会不时推出新的或优化后的功能,为此可能需要收集、使用新的个人信息或变更个人信息使用目的或方式。如发生上述情形,我们将通过更新本隐私政策、弹窗、页面提示等方式另行向您详细说明,并重新征得您的同意(根据法律法规规定无需取得您同意的除外)。在此过程中,如果您有任何疑问、意见或建议的,您可通过本隐私政策公布的联系方式与我们联系,我们会尽快为您做出解答。** **12.如您在使用本平台过程中输入、上传的内容包含或涉及第三方的信息(包括但不限于个人信息),在输入这些信息之前,您需确保您的行为已经取得合法的授权,避免泄露他人个人信息,侵犯他人权利。** **13. 权限说明** 在您使用本平台的某些功能或服务时,我们可能会申请调用您的系统权限,以基于该等权限为您提供相应服务。我们不会默认开启您的系统隐私权限,只有经过您的明示授权才会在为实现特定功能或服务时使用,您也可以撤回授权。特别需要指出的是,即使经过您的授权,我们获得了这些敏感权限,也不会在相关功能或服务不需要时而收集您的信息。 **当您使用我们的产品及服务时,具体各项业务功能可能涉及调用的系统权限情况如下:** | | | | - | - | | **权限名称** | **使用场景、目的** | | **麦克风** | 帮助用户完成语音输入、录音 | ## 二、我们如何使用cookie等同类技术 cookie和设备信息标识等同类技术是互联网中普遍使用的技术。当您使用本平台时,我们可能会使用相关技术向您的设备发送一个或多个cookie或匿名标识符,以收集、标识和存储您访问、使用本平台时的信息。我们承诺,不会将cookie用于本隐私政策所述目的之外的任何其他用途。我们使用cookie和同类技术主要为了实现以下功能或服务: **1. 保障产品与服务的安全、高效运转** 我们可能会设置认证与保障安全性的cookie或匿名标识符,使我们确认您是否安全登录本平台,或者是否遇到盗用、欺诈及其他不法行为。这些技术还会帮助我们改进服务效率,提升登录和响应速度。 **2. 帮助您获得更轻松的访问体验** 使用此类技术可以帮助您省去重复您填写个人信息的步骤和流程。 **3. cookie的清除** 大多数浏览器均为用户提供了清除浏览器缓存数据的功能,您可以在浏览器设置功能中进行相应的数据清除操作。如您进行清除,可能因为这些修改,您可能无法使用依赖于cookie且由我们提供的服务或相应功能。 ## 三、我们如何共享、委托处理、转移、公开披露您的个人信息 **1. 共享** 一般情况下,我们不会向其他任何公司、组织和个人提供您的个人信息,若我们需要向第三方共享您的个人信息的,我们将向您告知接收方的名称或者姓名、联系方式、处理目的、处理方式和个人信息的种类,并事先获得您的单独同意(根据法律法规规定无需取得您同意的情形除外)后对外提供您的个人信息,同时根据有关法律履行对外提供个人信息的其他义务。 **2. 委托处理** 我们可能委托授权合作伙伴处理您的个人信息,以便授权合作伙伴代表我们为您提供某些服务或履行职能。我们仅会出于本隐私政策声明的合法、正当、必要、特定、明确的目的委托其处理您的信息,授权合作伙伴只能接触到其履行职责所需信息。对于委托处理个人信息的场景,我们会与受托合作方根据法律规定签署相关处理协议,并对其个人信息使用活动进行监督。**我们将必要信息委托给支持我们业务的合作伙伴处理,这些支持包括受我们委托提供的产品代码和数据的服务器部署以及数据库存储服务、短信发送服务、内容安全审核服务、实名认证服务。** **3. 转移** 随着我们业务的持续发展,我们将有可能进行合并、收购、资产转让,您的个人信息有可能因此而被转移。在发生前述变更时,我们将向您告知继受方的名称或者姓名和联系方式,并按照法律法规及不低于本隐私政策所载明的安全标准要求继受方继续履行个人信息处理者的义务,若继受方变更原先的处理目的、处理方式的,我们将要求继受方重新征得您的授权同意。 **4. 公开** 我们不会公开您的个人信息,除非遵循国家法律法规规定或者获得您的同意。我们公开您的个人信息会采用符合行业内标准的安全保护措施。 **5. 请您理解,根据法律法规的规定,若基于上述第一条第10款中列明的情形,我们需要共享、转移、公开或以其他方式处理您的个人信息的,无须征得您的同意。** ## 四、我们如何存储个人信息 **1. 存储地点** **我们依照法律法规的规定,将在境内运营过程中收集和产生的您的个人信息存储于中华人民共和国境内。目前,我们不会将上述信息传输至境外,如果我们向境外传输,会严格遵守中国的相关法律、监管政策,并会遵循相关国家规定或者征求您的同意。** **2. 存储期限** **我们仅在为提供本平台相关服务之目的所必需的期间内保留您的个人信息**,例如:手机号码:当您使用手机号码注册登录时,我们需要持续保留您的手机号码,以便于向您提供正常的服务、应对您可能的查询和客诉并保障您的账号和系统安全。 如果您注销账户、主动删除个人信息或超出必要的期限后,我们将对您的个人信息进行删除或匿名化处理,但以下情况除外: * 遵从法律法规有关信息留存的要求。 * 出于财务、审计、争议解决等目的需要合理延长期限的。 ## 五、我们如何保护个人信息的安全 1\. 我们非常重视您个人信息的安全,将努力采取合理的安全措施(包括技术方面和管理方面)来保护您的个人信息,防止您提供的个人信息被不当使用或未经授权的情况下被访问、公开披露、使用、修改、损坏、丢失或泄漏。 2\. 我们会使用不低于行业同行的加密技术、匿名化处理及相关合理可行的手段保护您的个人信息,并使用安全保护机制防止您的个人信息遭到恶意攻击。 3\. 我们会建立专门的安全部门、安全管理制度、数据安全流程保障您的个人信息安全。我们采取严格的数据使用和访问制度,确保只有授权人员才可访问您的个人信息,并适时对数据和技术进行安全审计。 **4. 尽管已经采取了上述合理有效措施,并已经遵守了相关法律规定要求的标准,但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全,我们将尽力确保您提供给我们的个人信息的安全性。** **5. 您知悉并理解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。因此,我们强烈建议您采取积极措施保护个人信息的安全,包括但不限于不将自己的账号信息透露给他人。** 6\. 我们会制定应急处理预案,并在发生用户信息安全事件时立即启动应急预案,努力阻止这些安全事件的影响和后果扩大。一旦发生用户信息安全事件(泄露、丢失)后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已经采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施。我们将及时将事件相关情况以推送通知、邮件、信函、短信及相关形式告知您,难以逐一告知时,我们会采取合理、有效的方式发布公告。同时,我们还将按照相关监管部门要求,上报用户信息安全事件的处置情况。 **7. 您一旦离开本平台,浏览或使用其他网站、服务及内容资源,我们将没有能力和直接义务保护您在本平台之外的软件、网站提交的任何个人信息,无论您登录、浏览或使用上述软件、网站是否基于本平台的链接或引导。** ## 六、您如何管理个人信息 我们非常重视您对个人信息的管理,并尽全力保障您对于您个人信息的查阅、复制、转移、更正、补充、删除、撤回同意授权、注销账号、对账户信息的生前安排、解释说明、投诉举报等权利,以使您有能力保障您的隐私和信息安全。 **1. 访问您的个人信息** 您可以在本平台页面查看您的账号信息,并在本平台相关页面查阅您的服务订阅/使用情况、套餐兑换/核销记录、充值及支付记录信息。 如果您希望访问您在使用本平台过程中产生的其他个人信息,可以通过本隐私政策中提供的联系方式与我们联系。 **2. 复制、转移您的个人信息** 您可以在StepFun开放平台复制您的API接口密钥信息,您还可以通过本隐私政策中提供的联系方式联系我们要求复制我们收集存储的您的其他个人信息。 您有权通过本隐私政策中提供的联系方式联系我们要求将您的个人信息转移至您指定的个人信息处理者,符合国家网信部门规定条件的,我们会提供转移的途径。 **3. 更正您的个人信息** 您使用本平台时,可在设置界面自主设置您的头像、昵称信息。 若您发现我们处理的关于您的个人信息有错误时,您有权对错误或不完整的信息作出更正或更新,您可以通过本隐私政策中提供的联系方式随时与我们联系。为保障安全,我们可能在您行使更正权前对您的身份进行验证。 **4. 删除您的个人信息** 在以下情形中,我们会主动删除个人您的个人信息,您也可以通过本隐私政策中提供的联系方式联系我们提出删除个人信息的请求: * 处理目的已实现、无法实现或者为实现处理目的不再必要; * 停止提供产品或者服务,或者保存期限已届满; * 个人撤回同意; * 违反法律、行政法规或者违反约定处理个人信息; * 法律、行政法规规定的其他情形。 法律、行政法规规定的保存期限未届满,或者删除个人信息从技术上难以实现的,我们会停止除存储和采取必要的安全保护措施之外的处理。 **5. 改变或撤回授权范围** 您也可以通过本隐私政策中提供的联系方式联系向我们提出撤回同意或改变您授权同意的范围的请求。当您撤回同意后,我们将不再处理相应的个人信息。但您撤回同意的决定,不会影响此前基于您的授权而开展的个人信息处理活动。 **6. 注销账号** 您可以通过本平台自主申请注销账号,您也可以通过本隐私政策中提供的联系方式与我们联系申请注销您的账号,我们将会在收到您的申请后及时进行处理,并在15个工作日或法律法规要求的时限内回复您的请求。在您注销账号前,我们可能需要验证您的个人身份、安全状态、设备信息等。您知悉并理解,注销账号是不可逆的行为,当您注销账号后,我们将删除有关您的相关信息或进行匿名化处理,但法律法规另有规定的除外。 **7. 近亲属的权利** 根据相关法律要求,您可以提前就您的个人信息进行安排,您可以通过本隐私政策公布的联系方式与我们联系告知我们您的安排;如无另行安排,您的近亲属可以基于其合法、正当利益,通过本隐私政策中提供的联系方式与我们联系,对您身后的相关个人信息依照相关法律规定和本隐私政策的约定,行使查阅、复制、更正、删除等权利。 **8. 解释说明** 如您对我们的个人信息处理规则存在任何疑问,可以通过本隐私政策中提供的联系方式联系我们,要求我们进行说明、解释。 **9. 响应个人信息权利行使请求** 如果您或其他有权主体对相关法律法规赋予的个人信息权利的行使,有任何主张、要求或者疑问,您可以通过本隐私政策中提供的联系方式与我们联系,我们将尽快审核所涉问题,并在验证您的用户身份后的15个工作日内或其他法律法规明确规定的时限内回复。 **10. 意见反馈和投诉举报** 如果您有任何意见或您认为您的个人信息权利可能受到侵害,或者发现侵害个人信息权利的线索,您可以通过本隐私政策中提供的联系方式与我们联系以进行意见反馈、投诉举报。 **11. 停止运营并向您告知** 如我们停止运营,我们将及时停止处理您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。 ## 七、未成年人信息保护 本平台不面向未成年人,我们不会主动收集或处理未成年人的个人信息。如果您是未成年人,请勿注册、使用本平台或向我们提供任何个人信息。如我们发现因误操作或其他原因收集了未成年人的个人信息,我们将及时删除或进行匿名化处理。如果未成年人的父母或其他监护人发现未成年人向我们提供了个人信息,可以通过本隐私政策载明的联系方式与我们联系,我们将在核实相关情况后及时予以删除。 ## 八、隐私政策的修订和通知 1\. 为了给您提供更好的服务,本平台中的相关服务将不时更新与变化,我们会适时对本隐私政策进行修订,这些修订构成本隐私政策的一部分并具有等同于本隐私政策的效力,未经您明确同意,我们不会削减您依据当前生效的本隐私政策所应享受的权利。 **2. 本隐私政策更新后,我们会在本平台相关页面发出更新版本,并在更新后的条款生效前通过官方网站公告或其他适当的方式提醒您更新的内容,以便您及时了解本隐私政策的最新版本。** ## 九、联系我们 1\. 本平台由上海阶跃星辰智能科技股份有限公司提供,如果您对个人信息保护问题有投诉、建议、疑问,您可以通过[platform@stepfun.com](mailto:platform@stepfun.com)与我们联系,我们核查并验证您的用户身份后会及时反馈您的投诉与举报。 2\. 如对本隐私政策内容有任何疑问、意见或建议,您可通过[platform@stepfun.com](mailto:platform@stepfun.com)与我们联系。 3\. 我们还设置了个人信息保护负责人,负责对个人信息处理活动以及采取的保护措施等进行监督。您可以通过[platform@stepfun.com](mailto:platform@stepfun.com)与我们的个人信息保护负责人联系。 **十 、法律适用及争议解决** **本隐私政策的执行、解释及争议解决均应适用中华人民共和国大陆地区法律。您和我们就本隐私政策内容或其执行发生任何争议的,应友好协商解决。如无法协商解决争议时,您同意应将争议提交上海阶跃星辰智能科技股份有限公司住所地的人民法院诉讼解决。** **十一 、定义** 1\. 个人信息:指以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息,不包括匿名化处理后的信息。 2\. 敏感个人信息:指一旦泄露或者非法使用,容易导致自然人的人格尊严受到侵害或者人身、财产安全受到危害的个人信息,包括生物识别、宗教信仰、特定身份、医疗健康、金融账户、行踪轨迹等信息,以及不满十四周岁未成年人的个人信息。 3\. 儿童:指不满十四周岁的未成年人。 4\. 匿名化:指个人信息经过处理无法识别到特定自然人且不能复原的过程。 # StepFun 开放平台用户协议 Source: https://platform.stepfun.com/docs/zh/agreement/userservice **最新版本生效日期:2026年9月28日** 尊敬的用户,欢迎使用本平台!本协议适用于上海阶跃星辰智能科技股份有限公司(以下称“我们”或“公司”)通过StepFun开放平台、AI Studio平台等形式(统称“**本平台**”)向您提供的产品和服务。本协议为本公司与使用本平台的用户(如为个人用户,则指您本人;如为企业用户,则包括企业用户以及代表企业用户使用本平台的个人,以下统称“**您**”或“**用户**”)签署的具有合同效力的文件。 在使用本平台前,请您务必仔细阅读并理解本协议。本协议将为您介绍您在使用本平台及相关服务时所享有的权利、履行的义务和责任。请您认真阅读、充分理解各条款内容,**特别是免除或限制责任、争议解决等可能对您权益造成重大影响的条款,同时我们已为您以粗体字的形式予以提示**。 **请您知悉,当您主动勾选或点击确认本协议、或实际使用本平台相关服务时,即表示您与我们已就本协议达成一致,本协议具有合同效力。如果您不同意本协议的任意内容,或者无法准确理解我们对本协议条款的解释,请停止使用本平台及相关服务。否则,即表示您已接受本协议所述的所有条款及其适用条件,同意受本协议约束。如您代表您所在企业签署本协议、使用本平台相关服务,您应确保具备所需的一切授权及许可以使您有权代表您所在企业签署本协议及使用本平台相关服务。** **您在开通、订阅、购买、访问或使用本平台项下任何具体服务时,我们就该等服务已经发布或后续发布的相关服务协议、服务规则、操作指引、产品说明、页面提示、公告通知及其他相关文件(以下统称“服务规则”),均构成本协议不可分割的组成部分,与本协议具有同等法律效力。您在使用相应服务时,应同时遵守前述文件的相关约定。** ## 1 服务与账户使用 1.1 服务内容 1.1.1 服务内容包括我们通过本平台向用户提供的模型及API技术服务以及基于您体验我们提供的模型和API能力的目的,而向您提供的智能对话、内容生成及AI助手等服务(以下或称“**本服务**”),具体服务内容以各项服务规则说明为准。本平台主要面向企业客户和成年人个人用户,本服务可用于用户日常工作、生活、学习等场合,提供用户日常所需的知识学习、信息检索、内容消费、人机互动、任务执行等服务。 1.1.2 请您知悉,本公司仅作为中立的技术服务提供者,向您提供本平台上的各类产品和服务。**您的网站、应用、软件、平台等任何产品、服务及相关内容等,由您自行运营。除本协议另有约定或我们另有明确许可外,您不得以任何形式将本平台提供的服务全部或部分出售、转让、出借、出租、分许可、转授权或以其他方式提供给任何第三方使用,否则,我们有权采取限制、暂停或终止服务等措施。** 1.1.3 您应确保您使用本服务,或进一步对外提供服务,已经依照所有适用法律法规的规定获得了合法经营资质或政府审批等(并在本协议有效期内保持长期有效),并持续按照《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》《生成式人工智能服务管理暂行办法》《互联网信息服务深度合成管理规定》《互联网信息服务算法推荐管理规定》等相关法律法规要求,履行相关审核、标识、评估、备案、信息安全管理等义务。**若您违反本协议任一项承诺与保证的,包括但不限于在本协议签订时不具备开展业务所需的全部资质许可或未履行相关手续,或者在本协议有效期内丧失全部或部分资质许可的,我们有权中止或者终止向您提供服务,并不承担任何责任。** 1.1.4 请您知悉并同意,我们对本平台的部分或全部功能可能会收取费用。届时,请您根据我们公布的收费信息或者依据我们之间签署的其他相关协议,支付相应的费用。**未按约定支付相应的服务费用的,我们有权单方面不经通知暂停或终止提供服务,并删除您在本平台上所有的非法律法规要求的全部数据等,由此给您或您的最终用户造成任何损失的,由您自行承担。具体付款的账户信息和开票的信息,您可通过联系我们进行确认。无论您的账号是否被关停、限制使用等,您均需足额支付已使用服务的费用,同时,如果您存在欠费的情况,还应按法律允许的最大的违约利率承担违约责任并承担我们追索欠费的取证费、律师费等全部相关支出。** 1.1.5 **请您知悉并同意,为技术升级、服务体系升级、或因经营策略调整或配合国家重大技术、法规政策等变化,我们不保证永久提供某种服务或产品,并有权单方面变更所提供服务、产品的形式、规格等任何方面(如升级迭代产品、服务的价格和计费模式)或推出新的产品或服务,在终止该种服务或进行此种变更前,我们将尽最大努力且以提前发布公告或邮件通知等方式通知您,并且您需按照变更后的条件履行相关义务。对于更新或升级的服务、产品,除非相关内容是必须选择的,否则您可以自行选择是否升级,如果您不升级的,您将无法使用升级后的服务。** 1.1.6 **本平台中的部分服务依托于生成式人工智能等技术,生成内容仅供您参考,您不应将相关服务输出的内容作为专业建议、商业用途或用于其他目的。若涉及对您或者相关方可能会产生重大影响的情形(例如与医疗、财务、投资、保险、法律等有关的场景或目的),建议您咨询相关专业人士。相关服务的输出内容不应成为您进一步作为或不作为的依据,本平台中生成的相关内容为人工智能模型概率生成,不确保真实性,您须自行进行核实,特别是针对其中包含的数字、时间以及各类事实性描述等内容。您根据输出的内容所作出的任何判断或者据此作出的后续相关操作行为,所带来的后果和责任均由您自行承担,包括因对输出的内容的真实性、准确性、可靠性、不侵权或满足特定目的的依赖而产生的风险。** 1.2 账户使用 1.2.1 您需要按照本平台页面提示注册账号,并可能需根据具体服务场景完成个人实名认证、企业认证。实名认证的适用用户范围、适用服务或功能、认证方式、认证次数、同一身份可关联的账号数量及相关使用条件等,以平台届时展示的页面说明、服务规则或其他提示为准。 1.2.2 为保障平台及账号安全,核验用户个人或企业身份,并防止恶意注册、重复领取或不当获取平台权益以及其他滥用行为,**如您未完成或未通过相应认证,我们可能根据相关服务规则限制您使用相应的服务、功能或权益。完成认证后,我们可能基于认证结果识别和管理同一用户,并对相关账号、服务、额度、权益或使用资格等进行统一管理或限制**,包括对同一身份可关联的账号数量、一定时间内的认证次数等设置合理限制,以及防止通过多个账号重复获取权益、规避平台规则或实施其他滥用行为等。具体以平台届时相关页面说明、服务规则或其他提示为准。我们可能根据业务发展、安全管理或合规要求调整认证的适用范围及相关规则,并通过平台页面、站内通知或其他合理方式向您说明。 1.2.3 **请您妥善保管账号及密码、API Key等认证信息,因保管不善、违规共享或授权不当造成的风险、损失及责任,由您自行承担**。若用户账号或账号下行为出现纠纷时,由用户承担全部责任。 1.2.4 **仅限于您本人使用账号及密码,您不得以任何形式将账户转让、出借、出租或提供给其他第三方使用。** 1.2.5 若您发现任何非法使用用户账号的情况,应立即通知我们,我们将给予最大限度地配合和处理。**但对于用户因账号、密码、密钥或其他认证信息泄露造成的各种损失,由您自行承担法律责任。** 1.2.6 **若您违反适用的法律法规,或出现本协议约定情形的,我们有权终止向您提供服务并收回您的账户**。您也可以向我们提出注销账户请求,经我们审核同意,由我们注销该注册用户,用户即解除与我们的合作关系。但账户被收回或者注销后,我们仍有权:1)保留相关行为记录,但涉及个人信息的除外(如有);2)对用户在使用本平台过程中存在违法行为或违反本协议的行为,行使本协议所约定的权利。 ## 2 您的权利与使用限制 2.1 您的权利 2.1.1 您有权依据本协议的约定使用本平台及相关服务,我们亦有权根据技术和业务的发展增加或减少本服务内容。 2.1.2 您充分理解并同意,依据本协议,我们授予您一项可撤销的、不可转让的、非独占地合法使用本平台及相关服务的权利。您可以将本服务用于个人学习和研究、内部运营,也可以将本服务集成到您的产品中,向您的最终用户提供服务,具体的服务方式以我们实际提供的为准。 2.1.3 在法律允许的范围,您或您的最终用户基于本服务输入的文字、图片、音频、视频等内容(输入内容)的全部权利均仅归您或原作者所有,输入内容均不会因上传、发布等行为发生知识产权等权利的转移。**若您或您的最终用户输入他人享有知识产权等合法权利的内容,应当取得合法授权,确保不得侵害他人合法权利。** 2.2 使用限制 2.2.1 **您在使用本平台及相关服务时,应遵守法律法规、本协议及相关服务规则,并按照诚实信用、合法正当、合理必要的原则使用本平台及相关服务,不得实施任何可能影响本平台正常运营秩序、损害公司或第三方合法权益、规避本平台管理措施或超出本平台许可范围使用服务的行为。您应根据自身业务场景、技术能力和合规义务,合理控制调用频率、资源消耗、输出使用方式及风险后果,并对使用本平台相关服务的行为及结果承担责任。** 2.2.2 **为保障平台安全、服务稳定、交易秩序、资源公平分配及合规运营,我们有权基于自身风险控制判断,结合您的账户状态、调用行为、交易情况、投诉举报、异常指标、技术特征、业务场景或其他合理因素,对您的账户采取相应管理措施,包括但不限于限流、限制功能、限制调用频次、限制购买、暂停提供部分或全部服务、暂时冻结账号权限、要求补充材料、要求整改、终止服务或封禁账号。前述措施可在我们认为必要时即时采取,如情况允许,我们可视具体情形通知用户。** 2.2.3 **您应遵守所有适用的法律法规,遵守本协议、使用文档等相关协议、规则的约定,您不得以任何违法、侵害他人权利的方式使用本平台及相关服务,包括但不限于:** 1\) 对本平台进行渗透,以窃取模型、数据等资产或反汇编、反编译、翻译或以其他方式试图发现本服务的模型、算法和系统的源代码或底层组件或参数; 2\) 使用任何自动化或编程方法从本平台中提取数据或输出,包括爬虫、抓取、收集或提取数据; 3\) 未经授权,使用本服务和/或本服务的输出内容来研发与本平台相竞争的模型或服务,包括开发或训练任何人工智能或机器学习算法或模型等; 4\) 使用任何技术手段重现或复制本平台或相关服务; 5\) 删除、修改、遮掩或以其他任何方式替换本平台及相关服务中可能包含的我们相关的商业名称、商标、服务标记、域名或其合作伙伴其他明显的标志,删除本平台及相关服务中包含的任何版权声明、商标声明或其他所有权声明等; 6\) 使用本服务侵犯任何人权利(权益)或从事任何违反法律法规的行为,包括但不限于进行网络犯罪、生成虚假信息、侵犯第三方权益(包括但不限于著作权、专利权、商标权、肖像权等)、商业秘密等,利用算法、数据、平台等优势实施不公平竞争; 7\) 向我们发送或输入任何含有木马、病毒、恶意软件或任何其他有可能影响本平台及相关服务安全及稳定性的内容; 8\) 对本平台及相关服务采取任何攻击手段,包括但不限于诱导性的提问,或利用本平台及相关服务的功能去攻击其它服务、机构或侵入、干扰、破坏或限制本平台正常运行; 9\) 企图规避本平台的安全设置或网络系统,登录未经明确授权的服务器或账号,或采用运行端口扫描等方式窥探其他网络的安全措施; 10\) 利用或针对本平台相关服务从事诈骗、欺诈、误导或欺骗性活动; 11\) 其他任何违反法律法规规定或损害本平台及相关服务的行为。 2.2.4 **我们会根据《人工智能生成合成内容标识办法》及配套标准等监管规定,对AI生成合成的内容添加显式标识,并在生成合成内容的文件元数据中添加隐式标识。标识的具体样式和添加方式,根据产品场景有所不同。其中,显式标识的具体标识方法和样式例如在产品交互场景界面底部等适当位置或展示内容附近显示“AI生成”或类似提示文字。用户通过互联网传播相关内容时,应保持标识的准确性、完整性,任何组织和个人不得恶意删除、篡改、伪造、隐匿相关内容标识。** 2.2.5 您在从事与本平台服务相关的所有行为(包括但不限于访问浏览、利用、转载、宣传介绍)时,必须以善意且谨慎的态度行事;不得利用本平台及相关服务从事危害国家安全和社会公共利益、扰乱经济秩序和社会秩序、侵犯他人合法权益等法律、行政法规禁止的活动;**您不得利用本服务上传、生成或传播以下违反法律法规、政治相关、侵害他人合法权益的内容:** 1\) 反对宪法所确定的基本原则的; 2\) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; 3\) 损害国家荣誉和利益的; 4\) 歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖像、名誉、荣誉的; 5\) 宣扬恐怖主义、极端主义或者煽动实施恐怖活动、极端主义活动的; 6\) 煽动民族仇恨、民族歧视,破坏民族团结的; 7\) 破坏国家宗教政策,宣扬邪教和封建迷信的; 8\) 散布谣言,扰乱经济秩序和社会秩序的; 9\) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的; 10\) 侮辱或者诽谤他人,侵害他人名誉、隐私、肖像、知识产权、商业秘密和其他合法权益的; 11\) 含有虚假、有害、胁迫、骚扰、侵害、中伤、粗俗、猥亵或其他道德上令人反感的内容; 12\) 中国法律、法规、规章、条例以及任何具有法律效力之规范所限制或禁止的其他内容。 2.2.6 **您使用本服务向公众提供服务时,还应当履行下列义务:** 1\) 遵守法律、行政法规,尊重社会公德和伦理道德,履行网络安全主体责任,保护个人信息、商业秘密等; 2\) 在您的产品上线前依照法律法规的规定开展安全评估、算法备案等工作; 3\) 对大模型生成内容的安全性、合法性、合规性等进行有效管理和控制,自行建立包括但不限于内容审核、用户管理、数据安全、监测预警和应急处置等制度或机制; 4\) 采取合理措施,包括与您的最终用户订立合法有效的协议等,确保本协议的约定同样适用于您的最终用户; 5\) 加强数据安全管理,采取必要措施保障数据安全,采取技术措施添加不影响用户使用的标识,并依照法律、行政法规和国家有关规定保存日志信息。在生成或者编辑的信息内容的合理位置、区域进行显著标识,向公众提示人工智能生成合成情况。 6\) 可适用的所有法律法规规定的其他义务。 2.2.7 **请您知悉,如我们发现您违反本协议的约定或利用本平台及相关服务从事违法犯罪活动的,我们有权依据自己的合理判断不经通知,采取警示、限制功能、暂停或者终止服务、封禁账号、删除相关内容等处置措施,保存有关记录,并向有关主管部门报告。由此而导致或产生的法律责任或第三方主张的任何索赔、要求或损失,您应当自行承担责任。因此给我们造成任何损失的,您也应当一并赔偿(包括我们维权所支出的诉讼费、公证费、公告费、律师费等费用)。** 2.2.8 您在使用本服务,或基于本服务进一步对外提供服务的,应当自行负责对您使用的计算机信息系统、设备等采取必要的、有效的安全保护措施并提供技术支持,**因您未采取相应措施导致您自身或任何第三方权益受损的,由您自行承担责任**。 2.2.9 **为确保服务安全性及合规性,您不应将本服务用于金融数据相关大模型技术合作(如将服务应用于向银行、证券公司、保险公司、信托投资公司和基金管理公司等金融机构提供数据分析、投资研究、投资顾问或投资者教育等服务)。如您就金融数据相关的技术合作有进一步需求,请通过[feedback@api.stepfun.com](mailto:feedback@api.stepfun.com)联系我们。** 2.2.10 **除上述约定外,您在使用本产品及相关服务的过程中,还应遵循公司制定的《平台管理规则及公约》的相关内容。** ## 3 服务的暂停、中断或终止 3.1 我们将全力保障在现有技术上维护本平台及相关服务的正常运行,并努力提升和改进技术,使用户的使用活动得以顺利进行;**但我们有权基于业务调整或风险管控的需要,暂停、中断或终止向您提供本平台相关服务**。 3.2 为保证服务的安全性和稳定性,我们可能进行设备更换等重大调整,因此**本平台相关服务可能在合理期间内中断或暂停,您知悉并同意该等情况下我们无须向您承担任何责任,我们会尽合理努力提前向您通知该等调整事宜,您应当予以配合。** 3.3 **我们有权对用户是否涉嫌违反本协议的约定予以认定,并有权根据认定结果中止、终止对用户的使用许可或采取其他依本协议约定可采取的限制措施。** 3.4 **若您的最终用户对本服务的相关使用行为违反法律法规规定或违反本协议任何约定的,我们有权基于自身判断要求您停止向该最终用户提供服务,或者暂停或终止向您提供本平台相关服务,而不承担任何责任。** 3.5 **我们有权根据自身安全管控规则对您使用本平台服务的行为进行合理监控,若您的使用行为违反法律法规的规定;或触发本平台安全、风控、反欺诈或反滥用机制;或存在其他账户异常情形,我们有权暂停、中断或终止向您提供服务,或对您使用的服务进行限制,对此我们不承担任何责任,但法律另有规定的除外。** 3.6 **若我们按照适用法律规定终止提供服务,或出现本协议约定的服务终止情形的,对于您存储在我们服务中的数据等任何信息(如有),在法律法规允许的范围内,我们有权在服务终止后或在我们与您另行约定的保留期限(如有)届满后,删除上述信息,请您自行提前保存、迁移相关数据信息。** ## 4 责任范围与免责声明 4.1 **我们仅在本协议中列明的责任承担范围内承担相应责任。** 4.2 **您对自己使用本平台及相关服务的一切行为及由此产生的一切结果负责,包括但不限于您所提供的任何服务、发表的任何内容、以及由此产生的任何后果。您应承担因使用本平台及相关服务而引起的所有风险,本平台及相关服务中提供的内容,应仅供您参考,不构成任何建议或承诺,我们不承担您因使用本平台及相关服务给您或任何第三方产生的任何损害或责任。** 4.3 **若您基于本服务进一步向您的最终用户提供服务的,您应当对最终用户对服务的使用行为负责,确保每个最终用户对服务的使用遵守本协议的约定,包括但不限于确保最终用户基于本服务上传、发布或者传输的内容合法合规,不存在任何违法或不良信息、不侵害任何第三方的知识产权等合法权益、不侵犯任何第三方的个人信息权益等。** 4.4 **在法律允许的情况下,我们对于与本协议有关或由本协议引起的任何间接的、惩罚性的、特殊的、派生的损失(包括业务损失、收益损失、利润损失或其他经济利益的损失),不论是如何产生的,也不论是由对本协议的违约(包括违反保证)还是由侵权造成的,均不负有任何责任。** 4.5 **您理解并同意,本平台是按照现有技术和条件所能达到的现状提供的。我们尽最大努力确保服务的连贯性和安全性,但并不能保证其所提供的服务毫无瑕疵,也无法随时预见和防范法律、技术以及其他风险。不论在何种情况下,我们均不对由于网络连接故障,电力故障,罢工,劳动争议,暴乱,起义,骚乱,火灾,洪水,风暴,爆炸,不可抗力,战争,政府行为,国际、国内法院的命令,黑客攻击,互联网病毒,网络运营商技术调整,政府临时管制或任何其他不能合理控制的原因而造成的本平台不能访问、服务中断、信息及数据的泄露、延误、停滞或错误,不能提供或延迟提供服务而承担责任。** 4.6 **您理解并同意,当本平台提供的内容包含来自第三方插件、第三方网站的内容时,我们并不对这些内容的有效性负责,且不保证从这些途径获取的任何内容、产品、服务或其他材料的真实性、合法性、安全性。您应慎重辨别这些内容的合法性、准确性、真实性、适用性、完整性和安全性,并采取谨慎的预防措施。如您不确定这些内容是否合法、准确、真实、实用、完整和安全,建议您先咨询专业人士。在法律允许的范围内,我们不承担您使用任何第三方信息或链接所引致的任何人身和财产损失(包括但不限于因下载而感染电脑病毒、名誉或商誉诽谤、版权或知识产权等权利的损失)。** 4.7 **您在使用本平台过程中,您可能会授权本平台访问、调用某些第三方工具。请您知悉,这些第三方工具不受我们控制,我们不对第三方工具的内容及其所提供的服务的准确性、完整性或合法性承担任何责任。您应自行判断第三方工具的真实性和可靠性,并自行承担指示本平台访问、调用第三方工具所产生的后果。我们建议您仅选择使用您信任的第三方工具。** ## 5 知识产权 5.1 **除本协议另有明确约定外,与本平台相关的一切著作权、商标权、专利权、商业秘密等知识产权均受法律法规保护,由我们及其关联方享有完整的知识产权、所有权等合法权利。用户有权依照本协议约定合法使用本平台及本平台相关内容。** 5.2 **对于您使用本平台提供的相关生成式人工智能服务而输出的内容,在适用法律允许的范围内,输出的内容的知识产权及产生的其他财产权益(如有)归属于您或适用法律规定的权利人。** 5.3 您理解并且同意,**对于您发布上传或传输的内容,您授予我们一项免费且无需标注个人身份的、在法律允许范围内合理且最大程度的许可使用(包括但不限于存储、使用、复制、修订、编辑等)的权利,以为实现本协议目的、提升大模型服务体验进行使用。** 5.4 **除非法律另有规定或本协议另有约定,本平台运行过程中所产生的一切数据由我们享有合法权利,未经我们事先同意,任何人不得为本协议约定之外的目的获取、使用前述数据,亦不得以任何形式将前述数据提供给他人。** 5.5 未经我们许可,请不要擅自使用本平台及我们相关的任何商标、服务标记、商号、域名、网站名称、URL或其他显著品牌特征等,不得将本条款前述标识以单独或结合任何方式展示、使用或申请注册商标、进行域名注册等,也不得实施向他人明示或暗示有权展示、使用、或其他有权处理该等标识的行为。 5.6 **您保证在使用本平台过程中没有侵犯任何第三方知识产权的行为;若您违反上述约定,我们有权按照本条及本协议之其他相关约定终止您全部或部分服务;由此导致我们和/或第三方损失的,由您自行承担责任。** 5.7 **您同意在合作期间,我们有权使用您或您企业的名称、品牌等作为商业案例进行宣传、展示。** 5.8 本条款在本协议终止后对本协议各方仍继续有效。 ## 6 数据和个人信息保护 6.1 **我们提供本服务时可能需要您提供一定的个人信息,具体请参见我们《StepFun平台隐私政策》的约定,我们会根据该等隐私政策的说明处理和保护您的个人信息。** 6.2 **您使用本服务向最终用户提供服务的过程中可能涉及到收集使用最终用户的个人信息,该等情况下,您作为最终用户个人信息的处理者应当履行个人信息处理者的相关法定义务。为了确保个人信息的保护,您应建立健全的个人信息保护相关制度,采取适当的措施,并按照所适用的法律法规的要求保护用户个人信息。您应根据所提供的服务、行业监管要求以及所涉及的个人信息类别采取适当的数据保护措施,确保所涉及的个人信息的安全,避免个人信息泄露、被破坏、未经授权或者超出授权使用,并在停止提供服务后,及时主动删除最终用户的个人信息(除法律法规另有规定外)。同时,您应采取相应措施保障个人信息主体的权利,以符合所适用的法律法规的要求。** 6.3 **您应当建立健全的信息生态治理机制、网络信息安全责任制度和信息发布审查制度,对最终用户通过指定软件以及使用本服务所发布的信息进行审查,并及时处理最终用户发布违规信息的事件。** 6.4 **您使用本服务时,向我们传输的任何信息,如涉及到个人信息和其他数据的,必须充分取得相关主体的明示同意和授权,并确保我们不会因为处理相关数据和个人信息遭受任何损失和投诉,否则相关纠纷和赔偿责任由您向第三方或国家主管机关承担责任(包括但不限于直接经济损失、间接经济损失、相关罚款和费用等),并需赔偿给我们造成的一切损失。您需进一步承诺**: (1) **处理最终用户个人信息的过程中,遵守可适用的法律法规和国家规范性文件,包括但不限于《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等。** (2) **向最终用户告知对应的个人信息处理目的、处理方式和个人信息种类等信息,并获取最终用户的授权同意。** (3) **已向最终用户提供易于操作的用户权利实现机制,包括告知最终用户如何行使知情、查阅、复制、更正、删除、补充、转移等可适用法律法规要求的各项权利。** 6.5 **您特此授权我们在为您提供服务期间或者为提供、诊断、改善、优化、升级本服务之目的使用、处理您使用本平台服务产生的相关数据(如涉及),我们承诺采取相应的合理的安全、保密措施进行保护,如采取脱敏、匿名、假名、加密等技术措施。如遇到履行法定义务、社会公众利益等情况时,我们会向监管部门提供相关数据,但会在合理的时间向您进行通知。** ## 7 意见反馈 如您对本平台及相关服务有任何意见、建议,或希望向我们进行投诉、举报的,可以通过[feedback@api.stepfun.com](mailto:feedback@api.stepfun.com)与我们联系,向我们进行如实反馈,并提供相应的证明材料。我们对您的意见高度重视并依法采取处理措施。 ## 8 本协议的修改 **我们依据国家政策法律变化、技术进步、产品功能变更等有权根据变化适时或必要时对本协议条款内容做出修改,我们将以合理的方式通知您。如您不同意对本协议条款所做的修改,您有权停止使用本平台及相关服务,如您继续使用本平台及相关服务,则视为您接受修改后的条款。** ## 9 法律与管辖 **本协议根据中华人民共和国大陆法律法规制定,受中华人民共和国大陆法律法规管辖。因本协议而发生的任何争议应提交至公司住所地的人民法院诉讼解决。** ## 10 其他条款 10.1 您在使用本平台过程中,涉及任何第三方提供的产品或服务时,我们和第三方对可能出现的纠纷在法律规定和约定的范围内各自承担责任;同时,您还须遵守第三方的用户协议或使用协议。 10.2 本协议中的标题仅为方便阅读而设,并不影响本协议中任何规定的含义或解释。本协议各自部分的效力相互独立,部分条款的无效或终止不影响其他部分的效力。 10.3 **我们因经营策略调整或公司合并、分立、收购、资产转让时,在提前30天通过发布公告或邮件通知等方式书面通知您后,我们有权单方将本协议部分或全部权利义务转让给第三方。** 10.4 **您和公司均是独立的主体,在任何情况下本协议不构成公司对您的任何形式的明示或暗示担保,双方之间亦不构成代理、合伙、合营或雇佣关系。** 10.5 本协议条款无论因何种原因部分无效,其余条款仍有效且对双方具有约束力。 # 常见问题 Source: https://platform.stepfun.com/docs/zh/faq/common-questions ## 接口支持 ### 是否会开放类似跃问的文件内容提取的接口? 目前阶跃星辰已为开发者提供了文件解析能力,可以参考[文件解析](/docs/zh/guides/developer/doc-parser)文档使用。 ### 是否会开放类似跃问的搜索接口? 目前阶跃星辰为开发者提供了以下搜索接入方式,按需选择: * **网页搜索 API**:`POST /v1/search`,与对话模型解耦。`step-5-preview` 请使用这种方式,详见 [网络搜索](/docs/zh/guides/developer/web-search)。 * **内置 Web Search 工具**:仅部分模型可在 Chat Completions 的 `tools` 中调用;`step-5-preview` 不支持。 * **StepSearch MCP Server**:基于 Model Context Protocol 的远程搜索服务,面向 Claude Code、Cline、OpenCode 等兼容 MCP 的客户端,无需本地安装,详见 [StepSearch](/docs/zh/guides/developer/search-mcp)。 ### 是否兼容 Langchain 或者 OpenAI 兼容,可以直接使用 Langchain 或者 OpenAI 的 SDK 调用。您可以参考 [从 OpenAI 迁移至阶跃星辰](/docs/zh/guides/developer/openai) 完成迁移。 ## 账号相关 ### 个人充值能否开企业抬头的发票? 个人微信充值的订单,进行企业认证后可以开企业抬头发票。 ### 如何完成个人实名认证? 个人实名认证通过支付宝完成人脸识别核验,操作步骤见[个人实名认证](/docs/zh/quickstart/real-name-verification)。 ### 个人实名认证一直失败怎么解决? 请提交[工单](https://platform.stepfun.com/ticket)联系技术支持。 ### 一个实名身份可以认证多个账号吗? 同一个实名身份最多可以用于两个账号的实名认证。 ### 个人实名认证次数达到上限后如何处理? 平台限制 24 小时内最多认证 10 次。达到上限后,请等待 24 小时,系统会自动解除限制;您也可以进入工单系统反馈认证问题。 ### 不进行实名认证会影响使用吗? 使用免费套餐的用户需要完成实名认证才能继续使用。所有用户在付费前都需要完成实名认证。 ### 如何进行企业认证? 企业认证通过企业信息核验与对公账户小额打款验证完成,所需材料与操作步骤见[企业认证](/docs/zh/guides/organization/verification)。 ### 企业认证后能否转为个人账号? 目前还未支持该功能,如有强烈诉求请扫描官网首页底部的二维码加入开发者交流群,联系客服处理。 ### 企业认证后还能通过个人微信充值么? 认证为企业账户后,仍然可以进行个人微信充值。已进行企业认证的账户进行个人充值后,只能开具企业抬头发票。 ### 企业认证后可以换绑手机号么? 该功能已在规划进行中,预计近期上线。 ### 怎么提高账号的请求限制? 为了整体资源分配的公平性,我们会根据您拥有的账户累计充值金额实施相应的速率限制策略。详情请参见[API 速率限制](/docs/zh/guides/pricing/rate-limits#阶梯限速)。 ### 充值金额是否有使用时限? 目前没有使用时限,请放心使用。 ## 其他 ### 怎样获取大模型或应用相关协议/合同? 请扫描官网首页底部的二维码加入开发者交流群,联系客服获取。 # 基本概念 Source: https://platform.stepfun.com/docs/zh/guides/basic-concepts ## 关键概念 ### 文本大模型 > 文本大模型,例如 `step-5-preview`,基于生成式人工智能技术,通过在大量数据上进行训练,以理解和生成自然语言。 **文本大模型可以用于但不限于以下任务:** * **内容生成**:生成文章、故事、对话等。 * **代码生成**:根据描述生成代码片段。 * **摘要**:将长篇文章或文档缩减为简短的摘要。 * **翻译**:将一种语言翻译成另一种语言。 * **问答**:回答各种问题,从简单的事实查询到复杂的推理问题。 * **创意写作**:创作诗歌、歌词或其他形式的创意文本。 * **语言理解**:进行情感分析、文本分类等。 * **对话系统**:与用户进行自然语言对话,模拟聊天机器人或虚拟助手。 使用这些模型时,通常需要提供一个 `prompt`,即一段引导性的文本,它告诉模型需要执行的任务类型以及相关的上下文信息。设计一个有效的 `prompt` 是至关重要的,因为它直接影响到模型输出的质量和相关性。 ### 多模态大模型 > 多模态大模型,在文本大模型基础上,增加了对多种模态(如图像、音频、视频等)数据的处理能力,如 `step-5-preview` 和 `step-3.7-flash`,目前能够理解处理文本、图像与视频。 > 多模态大模型的核心优势在于更符合人类认知世界的习惯,因为人类通过多种感官接收多模态信息,这些信息通常是互补和协同的,使用多模态大模型可以更好地理解这些信息以及进行推理。 **多模态大模型可以用于但不限于以下任务:** * **图像到文本的翻译**:为图像生成描述性文本。 * **对话系统**:结合文本和图像信息回答复杂问题。 * **创作**:根据图像和文本创作文学作品。 * **医疗影像诊断**:结合医学影像(如 X 光片、MRI 图像)和病人的病历文本,多模态模型可以帮助医生更准确地诊断疾病。 * **搜索引擎**:搜索引擎可以利用多模态技术来理解用户的查询意图,结合文本、图像,提供更相关的搜索结果。 * **自动驾驶**:自动驾驶汽车可以使用多模态模型来处理来自多个传感器(如摄像头、雷达、激光雷达)的数据,以更好地理解周围环境并做出驾驶决策。 ### Context 长度 > **Context 长度**指的是在自然语言处理任务中,模型在生成响应或进行预测时所考虑的输入文本的 Token 数量。这个长度限制了模型单次处理信息的范围。 **重要性** * **效果影响**:Context 长度决定了模型能够记忆和处理的信息量,影响其理解和生成文本的效果。 * **性能影响**:较大的 Context 长度可以提高模型的准确性,但同时也会增加计算资源的消耗。 * **费用影响**:开发者需要在效果和成本之间做出权衡,较长的 Context 如下应用场景中所述可能提高效果,但也会增加使用成本。 **应用场景** * **对话系统**:在对话系统中,Context 长度影响对话的连贯性和上下文理解。 * **创作**:在文学创作中,较长的 Context 长度可以生成更连贯和逻辑性更强的文本。 * **学术论文和研究**:学术论文通常很长,包含大量的背景信息、实验数据和详细讨论,较长的 Context 长度可以帮助模型更好地理解和总结这些文档。 * **小说和文学作品**:对于文学作品的分析和理解,较长的 Context 长度可以帮助模型捕捉到故事的情节发展和角色之间的关系。 ### Token > 在文本大模型中,Token 是处理文本的基本单位,它代表了文本中的一个有意义的字符序列。Token 可以是单个字符、单词、短语,甚至是句子,具体取决于模型的设定和训练数据的特点。在中文文本中,Token 的划分尤为关键,因为中文字符不像英文那样以空格分隔单词,而是以单个汉字或汉字组合来表达意思。 **Token 的长度** * **汉字与 Token 的关系**:一般而言,一个 Token 大约相当于 1.5 到 2 个汉字。这个比例是根据模型对中文文本的常规处理方式得出的,但实际的 Token 数量可能会因文本内容的不同而有所变化。 **模型的上下文长度限制** * **最大上下文长度**:文本模型在处理输入(Input)和输出(Output)时,需要遵守模型的最大上下文长度限制。这意味着输入和输出的 Token 总数不能超过模型设定的最大值。 * **长度限制的重要性**:这一限制确保了模型能够有效地处理信息,避免因处理过长文本而导致的性能下降或错误。 **实际应用中的考量** * **文本长度的规划**:在实际应用中,需要根据模型的最大上下文长度来规划文本的长度,以确保文本能够被模型完整地理解和生成。 * **Token 优化**:在某些情况下,可能需要对文本进行优化,比如通过减少不必要的 Token 或者重新组织文本结构,以适应模型的上下文长度限制。 ### 速率限制 > 速率限制是确保服务稳定性和公平性的重要机制,它通过限制用户在特定时间内可以发起的请求数量来工作。以下是速率限制的3种主要衡量方式: **RPM (每分钟请求数)**: RPM 限制是基于时间的,它规定了用户在一分钟内可以发起的请求数量。例如,如果 RPM 限制是20,那么用户在任何连续的一分钟时间段内最多只能发起20个请求。 **TPM(每分钟 Token 数)**: TPM 限制同样是基于时间的,但它衡量的是用户在一分钟内可以传输的 Token 数量。Token 通常是指请求以及响应中的数据单位,如果用户的请求非常简短,即使在一分钟内发起了很多请求,也可能不会达到 TPM 限制。 **并发数(同时在线请求数)**: 并发 限制基于同一时刻在线的推理请求数量。例如,如果并发限制是20,那么同时在线的请求数量最多只能是20个,超过并发限制的请求会被拒绝,除非旧的推理请求被处理完毕,新的推理请求才会被允许进入模型推理。 **速率限制的触发**: 速率限制可能会在以上任何一种选项中达到,具体取决于哪种限制先被触发。例如: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 假如当前用户的速率限制规则RPM是20,TPM是200K,如果用户向 `ChatCompletions` 发送了20个请求,每个请求包含100个 Token, 即使TPM未达到200K,但是由于RPM已经达到20,也会触发速率限制 ``` # 联系我们 Source: https://platform.stepfun.com/docs/zh/guides/contact-us ## 开放平台客服 扫描以下二维码添加开放平台客服微信: ![客服微信](https://static-openapi.stepfun.com/static/platform-docs/resource/step-wechat-person-qrcode.webp) ## 开发者交流群 扫描以下二维码加入开发者交流群: ![开发者交流群](https://static-openapi.stepfun.com/static/platform-docs/resource/step-wechat-group-qrcode.webp) # 语音对话 Source: https://platform.stepfun.com/docs/zh/guides/developer/audio-chat 阶跃星辰端到端语音模型支持在对话过程中传入音频内容,并生成语音回复。用户可以通过 Chat Completion API 发送语音输入,模型会同时返回文本和音频响应,实现真正的语音到语音交互体验。 > [!NOTE] > > 推荐使用 `step-audio-2` 或 `step-audio-2-mini` 模型,这些模型具备最新的语音理解和生成能力。`step-audio-r1.5` 具有出色的声音理解与推理能力,能够并行边想边说,适合需要高精度语音理解的场景。 ## 能力概述 * **语音输入理解**:支持用户通过语音提问,模型可以理解语音中的内容和语调 * **语音输出生成**:模型可以直接生成语音回复,无需额外的 TTS 步骤 * **多种声音选择**:支持多种预置声音风格,满足不同场景需求 * **流式输出**:支持流式返回音频数据,实现低延迟的语音交互 * **工具调用**:支持用户自定义函数调用(`step-audio-r1.5` 模型不支持) ## 核心参数 在调用 chat completions 接口时,指定 model 为以下模型,可以获得语音回复能力。 | 模型名称 | 说明 | | - | - | | `step-audio-r1.5` | 超强语音理解与推理模型,理解各类声音与文字,边想边说,推理能力出众 | | `step-audio-2` | 最新的端到端语音模型,支持语音输入输出、toolcall,支持音色复刻(realtime 接口) | | `step-audio-2-mini` | 轻量版端到端语音模型,轻便快速 | | `step-1o-audio` | 上一代语音模型,音色多样 | ### audio 参数 `audio` 参数用于控制音频输出,只在端到端语音模型下生效。 * `voice` `string` ***required***\ 指定生成音频的声音 ID。对于 `step-audio-2` 系列模型,可用以下声音: * `wenrounansheng`(温柔男声) * `qingchunshaonv`(青春少女) * `livelybreezy-female`(活力少女) * `elegantgentle-female`(高雅女声) 对于 `step-1o-audio` 和 `step-audio-r1.5` 模型,可通过[获取声音列表接口](/docs/zh/api-reference/audio/list-voice)查询可用的声音 ID。 * `format` `string` ***required***\ 指定生成音频的格式: * `wav`:在非流式场景下(stream=false)支持 * `pcm`:在流式场景下(stream=true)使用,格式为 24kHz、单声道、16bit ### modalities 参数 `modalities` 参数指定输出的模态类型,支持 `text`、`audio` 两种类型。 如果需要模型输出音频,则需要将 `audio` 添加到该参数中,例如:`["text", "audio"]`。 ## 快速开始 ### 文本输入,语音输出 最简单的使用方式是发送文本消息,让模型返回语音回复。 **python** ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 from openai import OpenAI client = OpenAI(api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/v1") completion = client.chat.completions.create( model="step-audio-2", modalities=["text", "audio"], messages=[ { "role": "system", "content": "你是一个老北京大爷,喜欢用京片子和用户聊天。", }, { "role": "user", "content": "今儿个北京的天气咋样啊?", } ], audio={ "voice": "wenrounansheng", "format": "wav", }, stream=False, ) # 获取文字回复 print(completion.choices[0].message.audio.transcript) # 保存音频文件 with open("response.wav", "wb") as f: f.write(base64.b64decode(completion.choices[0].message.audio.data)) # 打开 response.wav 即可收听音频回复 ``` **js** ```js copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import OpenAI from "openai"; import fs from "fs"; const openai = new OpenAI({ apiKey: "YOUR_STEP_API_KEY", baseURL: "https://api.stepfun.com/v1", }); async function main() { const completion = await openai.chat.completions.create({ model: "step-audio-2", modalities: ["text", "audio"], messages: [ { "role": "system", "content": "你是一个老北京大爷,喜欢用京片子和用户聊天。", }, { "role": "user", "content": "今儿个北京的天气咋样啊?", } ], audio: { voice: "wenrounansheng", format: "wav", }, stream: false, }); // 获取文字回复 console.log(completion.choices[0].message.audio.transcript); // 保存音频文件 fs.writeFileSync("response.wav", Buffer.from(completion.choices[0].message.audio.data, 'base64')); // 打开 response.wav 即可收听音频回复 } main(); ``` **curl** ```bash copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl https://api.stepfun.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $STEP_API_KEY" \ -d '{ "model": "step-audio-2", "modalities": ["text", "audio"], "messages": [ { "role": "system", "content": "你是一个老北京大爷,喜欢用京片子和用户聊天。" }, { "role": "user", "content": "今儿个北京的天气咋样啊?" } ], "audio": { "voice": "wenrounansheng", "format": "wav" }, "stream": false }' ``` ### 语音输入,语音输出 支持用户通过语音提问,模型返回语音回复,实现端到端的语音对话。 **python** ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 from openai import OpenAI client = OpenAI(api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/v1") # 读取本地音频文件并转换为 base64 with open("question.wav", "rb") as f: audio_data = base64.b64encode(f.read()).decode('utf-8') completion = client.chat.completions.create( model="step-audio-2", modalities=["text", "audio"], messages=[ { "role": "system", "content": "你是一个动物声音识别专家,请根据用户提供的声音进行识别和回答。", }, { "role": "user", "content": [ { "type": "text", "text": "听听这是什么声音?", }, { "type": "input_audio", "input_audio": { "data": f"data:audio/wav;base64,{audio_data}", } } ], } ], audio={ "voice": "qingchunshaonv", "format": "wav", }, stream=False, ) # 获取文字回复 print(completion.choices[0].message.audio.transcript) # 保存音频文件 with open("response.wav", "wb") as f: f.write(base64.b64decode(completion.choices[0].message.audio.data)) ``` **js** ```js copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import OpenAI from "openai"; import fs from "fs"; const openai = new OpenAI({ apiKey: "YOUR_STEP_API_KEY", baseURL: "https://api.stepfun.com/v1", }); // 从 URL 下载音频并转换为 base64 const downloadAudioAsBase64 = async (url) => { const response = await fetch(url); const arrayBuffer = await response.arrayBuffer(); const buffer = Buffer.from(arrayBuffer); return "data:audio/wav;base64," + buffer.toString('base64'); } async function main() { const completion = await openai.chat.completions.create({ model: "step-audio-2", modalities: ["text", "audio"], messages: [ { "role": "system", "content": "你是一个动物声音识别专家,请根据用户提供的声音进行识别和回答。", }, { "role": "user", "content": [ { type: "text", text: "听听这是什么声音", }, { type: "input_audio", input_audio: { data: await downloadAudioAsBase64("https://stepchat-static.tos-cn-shanghai.volces.com/resource_tmp/cat-meow.wav"), } } ], } ], audio: { voice: "qingchunshaonv", format: "wav", }, stream: false, }); // 获取文字回复 console.log(completion.choices[0].message.audio.transcript); // 保存音频文件 fs.writeFileSync("response.wav", Buffer.from(completion.choices[0].message.audio.data, 'base64')); } main(); ``` ## 流式语音输出 当 `stream=true` 时,API 会以流式方式返回音频数据,实现超低延迟的语音交互体验。 **python** ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 import struct from openai import OpenAI client = OpenAI(api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/v1") completion = client.chat.completions.create( model="step-audio-2", modalities=["text", "audio"], messages=[ { "role": "user", "content": "请用温柔的语气给我讲一个睡前故事", } ], audio={ "voice": "elegantgentle-female", "format": "pcm", # 流式场景下使用 pcm 格式 }, stream=True, ) audio_chunks = [] transcript = "" for chunk in completion: delta = chunk.choices[0].delta # 处理音频数据 if hasattr(delta, 'audio') and delta.audio: if hasattr(delta.audio, 'data') and delta.audio.data: audio_chunks.append(base64.b64decode(delta.audio.data)) if hasattr(delta.audio, 'transcript') and delta.audio.transcript: transcript += delta.audio.transcript print(delta.audio.transcript, end="", flush=True) print("\n\n完整文字回复:", transcript) # 合并所有 PCM 数据 pcm_data = b''.join(audio_chunks) # 生成 WAV 文件头(24kHz,单声道,16bit) def create_wav_header(pcm_size, sample_rate=24000, channels=1, bits_per_sample=16): byte_rate = sample_rate * channels * bits_per_sample // 8 block_align = channels * bits_per_sample // 8 return struct.pack( '<4sI4s4sIHHIIHH4sI', b'RIFF', 36 + pcm_size, # 文件大小 - 8 b'WAVE', b'fmt ', 16, # fmt chunk 大小 1, # 音频格式 (1 = PCM) channels, sample_rate, byte_rate, block_align, bits_per_sample, b'data', pcm_size ) # 保存为 WAV 文件 with open("response.wav", "wb") as f: f.write(create_wav_header(len(pcm_data))) f.write(pcm_data) # 打开 response.wav 即可收听音频回复 ``` **js** ```js copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import OpenAI from "openai"; import fs from "fs"; const openai = new OpenAI({ apiKey: "YOUR_STEP_API_KEY", baseURL: "https://api.stepfun.com/v1", }); // 生成 WAV 文件头(24kHz,单声道,16bit) function createWavHeader(pcmSize, sampleRate = 24000, channels = 1, bitsPerSample = 16) { const byteRate = sampleRate * channels * bitsPerSample / 8; const blockAlign = channels * bitsPerSample / 8; const header = Buffer.alloc(44); header.write('RIFF', 0); header.writeUInt32LE(36 + pcmSize, 4); header.write('WAVE', 8); header.write('fmt ', 12); header.writeUInt32LE(16, 16); // fmt chunk 大小 header.writeUInt16LE(1, 20); // 音频格式 (1 = PCM) header.writeUInt16LE(channels, 22); header.writeUInt32LE(sampleRate, 24); header.writeUInt32LE(byteRate, 28); header.writeUInt16LE(blockAlign, 32); header.writeUInt16LE(bitsPerSample, 34); header.write('data', 36); header.writeUInt32LE(pcmSize, 40); return header; } async function main() { const completion = await openai.chat.completions.create({ model: "step-audio-2", modalities: ["text", "audio"], messages: [ { "role": "user", "content": "请用温柔的语气给我讲一个睡前故事", } ], audio: { voice: "elegantgentle-female", format: "pcm", // 流式场景下使用 pcm 格式 }, stream: true, }); const audioChunks = []; let transcript = ""; for await (const chunk of completion) { const delta = chunk.choices[0].delta; // 处理音频数据 if (delta.audio) { if (delta.audio.data) { audioChunks.push(Buffer.from(delta.audio.data, 'base64')); } if (delta.audio.transcript) { transcript += delta.audio.transcript; process.stdout.write(delta.audio.transcript); } } } console.log("\n\n完整文字回复:", transcript); // 合并 PCM 数据并保存为 WAV 文件 const pcmData = Buffer.concat(audioChunks); const wavHeader = createWavHeader(pcmData.length); fs.writeFileSync("response.wav", Buffer.concat([wavHeader, pcmData])); // 打开 response.wav 即可收听音频回复 } main(); ``` 流式返回的音频格式为 24kHz、单声道、16bit 的 PCM 数据,您可以直接将数据流式送入播放器进行实时播放,也可以按上述示例将其保存为标准的 WAV 文件。 ## 多轮语音对话 支持在多轮对话中保持语音上下文。您可以将用户的语音历史放入 messages 中,AI 的输出推荐将文字部分作为 assistant 回复填入 content。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 from openai import OpenAI client = OpenAI(api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/v1") # 读取当前轮用户语音 with open("current_question.wav", "rb") as f: current_audio = base64.b64encode(f.read()).decode('utf-8') completion = client.chat.completions.create( model="step-audio-2", modalities=["text", "audio"], messages=[ { "role": "system", "content": "你是一个友好的助手,请用自然的语气回答用户的问题。", }, # 第一轮对话(可以用 ASR 文本表示历史语音) { "role": "user", "content": "你好,请问今天天气怎么样?", }, { "role": "assistant", "content": "你好!今天天气晴朗,气温适宜,非常适合出门活动。", }, # 当前轮语音输入 { "role": "user", "content": [ { "type": "input_audio", "input_audio": { "data": f"data:audio/wav;base64,{current_audio}", } } ], } ], audio={ "voice": "wenrounansheng", "format": "wav", }, stream=False, ) print(completion.choices[0].message.audio.transcript) ``` > [!NOTE] > > **上下文限制说明**: > > * `step-audio-2` / `step-audio-r1.5` 支持上下文传入 wav 格式音频 > * 请求最大支持 10MB(指 base64 后的总大小,大致能传 7.5MB 的 wav 文件) > * 最多支持 30 段声音(如果单段声音超过 25s,会被自动分段,每 25s 视为一段) > * `step-1o-audio` 目前不支持上下文中传入 wav(但支持语音输出) ## 结合 Tool Call 使用 `step-audio-2` / `step-1o-audio` 语音模型支持 Tool Call 功能,可以在语音对话中调用外部工具。完整流程包括:检测函数调用、执行函数、返回结果并获取最终语音回复。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 import json from openai import OpenAI client = OpenAI(api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/v1") # 定义工具函数 def get_weather(city: str) -> str: """模拟获取天气信息""" # 实际应用中这里调用真实的天气 API return f"{city}:晴,气温 25°C,空气质量良好" tools = [ { "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称,如:北京、上海" } }, "required": ["city"] } } } ] messages = [ { "role": "user", "content": "北京今天天气怎么样?", } ] # 第一次调用:模型可能返回 tool_calls completion = client.chat.completions.create( model="step-audio-2", modalities=["text", "audio"], messages=messages, tools=tools, audio={ "voice": "wenrounansheng", "format": "wav", }, stream=False, ) assistant_message = completion.choices[0].message # 检查是否有 tool_calls if assistant_message.tool_calls: # 将 assistant 消息加入上下文 messages.append({ "role": "assistant", "content": assistant_message.audio.transcript if assistant_message.audio else None, "tool_calls": [ { "id": tc.id, "type": "function", "function": { "name": tc.function.name, "arguments": tc.function.arguments } } for tc in assistant_message.tool_calls ] }) # 执行每个工具调用并添加结果 for tool_call in assistant_message.tool_calls: function_name = tool_call.function.name function_args = json.loads(tool_call.function.arguments) # 执行函数 if function_name == "get_weather": result = get_weather(function_args["city"]) else: result = "未知函数" # 将工具执行结果加入上下文 messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": result, }) # 第二次调用:获取最终的语音回复 final_completion = client.chat.completions.create( model="step-audio-2", modalities=["text", "audio"], messages=messages, tools=tools, audio={ "voice": "wenrounansheng", "format": "wav", }, stream=False, ) # 获取最终回复 final_message = final_completion.choices[0].message print("文字回复:", final_message.audio.transcript) # 保存音频 with open("response.wav", "wb") as f: f.write(base64.b64decode(final_message.audio.data)) else: # 没有 tool_calls,直接输出回复 print("文字回复:", assistant_message.audio.transcript) with open("response.wav", "wb") as f: f.write(base64.b64decode(assistant_message.audio.data)) ``` ### Tool Call 返回示例 第一次调用返回(text+audio 模态,带 tool\_call 字段): ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "019b55f32eb27db7a0cc933be0216686", "choices": [ { "finish_reason": null, "index": 0, "message": { "role": "assistant", "audio": { "data": "[base64 wav data]", "transcript": "让我帮您查一下北京的天气。" }, "tool_calls": [ { "id": "call-1766673564415832077", "function": { "arguments": "{\"city\": \"北京\"}", "name": "get_weather" }, "type": "function", "index": 0 } ] } } ], "model": "step-audio-2", "usage": { "completion_tokens": 106, "prompt_tokens": 410, "total_tokens": 516 } } ``` > [!NOTE] > > **注意**:模型可能会在返回 tool\_calls 的同时输出语音(如"让我帮您查一下"),您可以在等待函数执行时播放这段语音,提升用户体验。 ## 音频格式说明 ### 输入音频格式 * 支持 mp3 和 wav 格式 * Base64 编码格式示例:`data:audio/mpeg;base64,${base64_string}` 或 `data:audio/wav;base64,${base64_string}` ### 输出音频格式 | 场景 | 格式 | 规格 | | - | - | - | | 非流式(stream=false) | wav | 标准 wav 文件格式 | | 流式(stream=true) | pcm | 24kHz,单声道,16bit | ## Chat Completions vs Realtime API 阶跃星辰提供两种语音对话方案,适用于不同的场景需求: | 特性 | Chat Completions API | Realtime API | | - | - | - | | 连接方式 | HTTP 请求 | WebSocket 长连接 | | 语音识别 (ASR) | 需自行实现或使用第三方服务 | 内置,自动识别用户语音 | | 上下文管理 | 需自行维护 messages 列表 | 内置,自动管理对话历史 | | 语音活动检测 (VAD) | 需自行实现 | 内置,自动检测用户说话 | | 联网搜索 | 需自行实现搜索接口 | 内置 web\_search 工具 | | 知识库检索 | 需自行实现 | 内置 retrieval 工具 | | 延迟 | 较低(流式输出) | 极低(双向流式交互) | | 适用场景 | 离线处理、批量任务、简单集成 | 实时对话、语音助手、客服机器人 | | 音色复刻 | 不支持 | `step-audio-2` 支持音色复刻 | ### 使用 Realtime API 的优势 如果您需要构建实时语音对话应用,推荐使用 [Realtime API](/docs/zh/guides/developer/realtime): * **开箱即用**:内置 ASR、VAD、上下文管理,无需额外集成 * **超低延迟**:基于 WebSocket 的实时双向通信 * **内置工具**:支持 `web_search` 联网搜索和 `retrieval` 知识库检索 * **自定义 Tool Call**:同样支持自定义函数调用 * **音色复刻**:支持使用自定义音色进行语音生成 > **[实时语音互动开发指南](/docs/zh/guides/developer/realtime)** ## 常见问题 ### 流式播放 PCM 音频 在浏览器环境中播放流式 PCM 音频,需要使用 Web Audio API。以下是一个简单的播放器示例: ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} class SimplePCMPlayer { constructor() { this.audioContext = new (window.AudioContext || window.webkitAudioContext)(); this.bufferedData = []; this.isPlaying = false; this.nextStartTime = 0; } // 追加 PCM 数据(16位有符号小端,24kHz,单声道) appendPCM(pcmArrayBuffer) { const int16Array = new Int16Array(pcmArrayBuffer); const float32Array = new Float32Array(int16Array.length); for (let i = 0; i < int16Array.length; i++) { float32Array[i] = int16Array[i] / 32768; } this.bufferedData.push(float32Array); if (!this.isPlaying) { this.playNext(); } } playNext() { if (this.bufferedData.length === 0) { this.isPlaying = false; return; } this.isPlaying = true; const data = this.bufferedData.shift(); const audioBuffer = this.audioContext.createBuffer(1, data.length, 24000); audioBuffer.copyToChannel(data, 0); const source = this.audioContext.createBufferSource(); source.buffer = audioBuffer; source.connect(this.audioContext.destination); const startTime = Math.max(this.audioContext.currentTime, this.nextStartTime); this.nextStartTime = startTime + audioBuffer.duration; source.start(startTime); source.onended = () => this.playNext(); } // 清空缓冲并停止播放 clear() { this.bufferedData = []; this.isPlaying = false; this.nextStartTime = this.audioContext.currentTime; } } ``` ### 优化首字延迟 如果需要更低的首字延迟: 1. 使用 `step-audio-2-mini` 模型,它的响应速度更快 2. 使用流式输出(stream=true),可以边生成边播放 3. 考虑使用 [Realtime API](/docs/zh/guides/developer/realtime) 获得最低延迟体验 # 文件解析 Source: https://platform.stepfun.com/docs/zh/guides/developer/doc-parser > [!NOTE] > > 文档解析能力限时免费使用中。文件服务本身存储按 0.5元/GB/天计费。 阶跃星辰文档解析接口提供强大的文档解析能力,支持 PDF、Word 等多种格式,帮助开发者快速解析文档内容,并将其作为输入用于生成和推理。该接口提供从文档内容提取到生成应用的一站式解决方案,让基于文档内容的应用开发更加高效便捷。 ## 效果 * [上传文件](/docs/zh/api-reference/files/create):提供文档上传接口,支持多种文档格式,简化了基于文档的内容的输入。(注意:目前仅支持纯文本内容,图片或扫描形式的文本内容暂不支持) * [查询文件状态](/docs/zh/api-reference/files/retrieve):文档状态查询接口让开发者及时跟踪解析进度,随时了解文档是否成功解析。 * [读取文件内容](/docs/zh/api-reference/files/retrieve-content):文档解析成功后,内容提取接口可快速获得文档内容,为后续基于文档内容的生成或分析提供数据基础。 * [查询文件清单](/docs/zh/api-reference/files/list):提供文件清单查询接口,帮助开发者获取已上传文档的列表,便于文档管理。 * [删除文件](/docs/zh/api-reference/files/delete):支持文件删除功能,让开发者可以在文档处理完成后随时删除文档,方便管理文档存储。 ## 开发步骤 ![doc-parser-flow](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/doc-parser-flow.jpg?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=50cde0d85c5050ad72081f3b9941ce4b) 通过【上传文件】【查询文件状态】【提取文件内容】+文本补全接口 即可获得完整基于文档内容的对话补全能力 ### 1.上传文件 上传文件到阶跃星辰文件服务,由阶跃星辰文件服务解析文件内容,用于后续生成和推理。 * 上传时使用的 purpose 字段的值为 `file-extract`,用于文件解析。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" headers = { "Authorization": f"Bearer {STEP_API_KEY}" } #定义文件名,上传本地文件 files = { "file": ("sampleFileName.doc", open("./file/《内部审计制度》.doc", "rb")), } #purpose为文件使用意图字段,目前支持以下选项 #file-extract: 用作文件解析,可以将文件内的文本,解析出来。(暂时不支持图片,或扫描的文字) #retrieval: 用于知识库,在后续上线知识库能力的时候,在知识库关联该文档的时候,会将文档字段分片并向量化,以便RAG使用 data = { "purpose": "file-extract" } #调用接口上传文件 response = requests.post(BASE_URL+"/files", headers=headers, files=files, data=data) print(response.json()) #解析出json responseJson = response.json() #提取出文件id print(responseJson['id']) ``` 返回结果如下: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} #返回的报文:请注意存好 id!!!!后续对文件的操作都是基于此id { "id": "file-C0DDg04QPg", "object": "file", "bytes": 56182, "created_at": 1730194303, "filename": "sampleFileName.doc", "purpose": "file-extract" } file-C0DDg04QPg ``` ### 2. 查询文件状态 在文件上传完成后,需要查询文件解析状态,确认文件解析是否完成,以便后续获取文件内容。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" file_id = "file-C0DDg04QPg" URL = BASE_URL+"/files/"+file_id headers = { "Authorization": f"Bearer {STEP_API_KEY}" } response = requests.get(URL, headers=headers) print(response.json()) #解析出json responseJson = response.json() #提取出文件解析的状态 print(responseJson['status']) ``` 返回结果如下,在返回的报文中重点关注 status 状态,当 status 为 success 时,表示文件解析处理完成,可以通过接口获取到文件的内容。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} #返回的报文:重点关注status状态。 #当purpos为file-extract时。 #success:表示文件解析处理完成,可以通过接口获取到文件的内容 #processed:表示还在解析中,当前状态无法提取文件内容 { "id": "file-C0DDg04QPg", "object": "file", "bytes": 56182, "created_at": 1730194304, "filename": "sampleFileName.doc", "purpose": "file-extract", "status": "success" } success ``` ### 3. 提取文件内容 当文件完成解析后,就可以使用提取文件内容接口获取文件内容,并在 Chat API 中,将内容作为对话的输入,生成对话补全。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" file_id = "file-C0DDg04QPg" URL = BASE_URL+"/files/"+file_id+"/content" headers = { "Authorization": f"Bearer {STEP_API_KEY}" } response = requests.get(URL, headers=headers) print(response.text) #返回的报文:解析文档后生成内容 #例如 好好学习,天天向上 ``` ### 4. 基于文档推理完整示例 当提取到需要的文档内容后,可以将文档内容作为对话的输入,生成对话补全。完整代码参考如下 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests import time from openai import OpenAI STEP_API_KEY = "YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" #定义上传文件方法 def upload_file(filename, filepath, base_url, step_api_key): headers = { "Authorization": f"Bearer {step_api_key}" } with open(filepath, "rb") as file: files = { "file": (filename, file), } data = { "purpose": "file-extract" } # Make the API request response = requests.post(f"{base_url}/files", headers=headers, files=files, data=data) # Parse the JSON response response_json = response.json() # Return the file ID return response_json.get("id") #定义获取文件状态方法 def get_file_status(fileid, base_url, step_api_key): headers = { "Authorization": f"Bearer {step_api_key}" } url = f"{base_url}/files/{fileid}" response = requests.get(url, headers=headers) response_json = response.json() return response_json.get('status', 'unknown') #定义获取文件内容方法 def get_file_content(fileid, base_url, step_api_key): headers = { "Authorization": f"Bearer {step_api_key}" } url = f"{base_url}/files/{fileid}/content" response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: return f"Error: {response.status_code} - {response.text}" # 上传文件获取文件ID file_id = upload_file( filename="经济责任审计制度.doc", filepath="./file/《经济责任审计制度》.doc", base_url=BASE_URL, step_api_key=STEP_API_KEY, ) # 等待文件解析完成 while True: status = get_file_status(file_id, BASE_URL, STEP_API_KEY) if status == 'success': break time.sleep(1) # 避免频繁请求 # 获取文件内容 file_content = get_file_content(file_id, BASE_URL, STEP_API_KEY) print(file_content) # 生成对话 messages = [ { "role": "system", "content": "你是阶跃星辰助手,会读取用户发送给你的文件的内容,并结合文件内容回答问题", }, { "role": "user", "content": file_content, }, {"role": "user", "content": "请简单介绍文档的具体内容"}, ] time_start = time.time() # 初始化 client = OpenAI(api_key=STEP_API_KEY,base_url=BASE_URL) # 针对长文本分析,建议先使用token count接口计算一次文件解析出文本的tokens,https://platform.stepfun.com/zh/api-reference/token-count, # 再选择合适上下文长度的模型 # 实现文本补全 response = client.chat.completions.create( messages=messages, model="step-5-preview", stream=True, ) i=0 for chunk in response: i += 1 print(chunk.choices[0].delta.content.strip(),end="") if i == 1: time_firstWord = time.time() elapsed_time= time_firstWord-time_start print(f"首字生成时间: {elapsed_time:.2f} 秒") time_end = time.time() elapsed_time = time_end - time_start print(f"总生成时间: {elapsed_time:.2f} 秒") #返回的报文:即针对文件解析出来的内容生成的会话补全内容 ``` ## 其他操作实例 ### 查看文件列表 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" #filePurpose根据需要填写file-extract或retrieval filePurpose="file-extract" URL = BASE_URL+"/files?purpose="+filePurpose headers = { "Authorization": f"Bearer {STEP_API_KEY}" } response = requests.get(URL, headers=headers) responseJson = response.json() print(responseJson) ``` 返回结果如下: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} #返回的报文,将会列举出上传成功的文件清单。 #建议将文件清单读取后,缓存到页面上,以便于对文档进行操作 { "object": "list", "data": [ { "id": "file-C0OBldwum0", "object": "file", "bytes": 1095573, "created_at": 1730203514, "filename": "繁花.txt", "purpose": "file-extract", "status": "success" }, { "id": "file-C0OGG69uvw", "object": "file", "bytes": 60728, "created_at": 1730203574, "filename": "经济责任审计制度.doc", "purpose": "file-extract", "status": "success" } ] } ``` ### 删除文件 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" file_id = "file-C0OGG69uvw" URL = BASE_URL+"/files/"+file_id headers = { "Authorization": f"Bearer {STEP_API_KEY}" } response = requests.delete(URL, headers=headers) responseJson = response.json() print(responseJson) ``` 返回结果如下: ```jsonc theme={"theme":{"light":"light-plus","dark":"dark-plus"}} // 返回的报文,将会告知是否删除成功。 { "id": "file-C0OGG69uvw", "object": "file", "deleted": true } ``` ## 注意事项 * 文件解析流程: * 对于首次解析的文件,需先查询文件解析状态,确认成功后再获取内容。 * 超长文本解析时,请先计算内容的 tokens 数量,以避免超出限制导致的请求中断。 * 文件与请求限制: * 单文件大小:最大 64MB。 * 文件总数限制:最多存储 1000 个文件。 * 支持的意图: * file-extract:用于文档内容解析。 * retrieval:用于知识库存储。 * 支持的文件类型: * 纯文本文件:.txt, .md * PDF 文件:.pdf * Word 文档:.doc, .docx * Excel 表格:.xls, .xlsx * PPT 文件:.ppt, .pptx * CSV 文件:.csv * HTML/XML 文件:.html, .htm, .xml * 内容限制: * 仅支持纯文本内容解析,不支持图片或扫描的文本内容。 # 异常处理 Source: https://platform.stepfun.com/docs/zh/guides/developer/exception 大模型本身在运行过程中,存在一定的随机性,这些随机性也会带来一些可能的问题或异常。此外,当请求频次过高时,也会触发阶跃星辰所设定的请求限制,因此作为开发者,您可以通过在您的应用程序中添加错误处理的逻辑,来帮助您更好的提供服务。 阶跃星辰 API 提供的异常类型一共有两种: 1. HTTP 层面的异常 2. 模型层面的异常 ### HTTP 层面的异常 目前阶跃星辰可能会返回如下几类错误码,您可以通过在应用程序中添加不同的拦截和处理,来优化您的应用程序体验。 #### 400 错误 当阶跃星辰 API 返回 HTTP 400 错误时,表明您的请求当中存在了超出参数配置的内容, 因此,您需要参考所调用的 API 文档,检查自己的请求是否出现了问题。 如果您的请求信息中包含 UGC 内容, 则可以前置的在应用程序中参考阶跃星辰 API 的限制进行用户输入的验证,以帮助用户更早的感知到自己输入的问题。 #### 401 错误 当阶跃星辰 API 返回 HTTP 401 错误时,表明您的认证无效。这可能是由于您使用了错误的 API 密钥。您需要仔细检查您所使用的 API 密钥是否正确,确保其准确无误。 如果问题仍然存在,您可以联系我们的技术支持团队,他们将为您提供进一步的帮助和指导,以解决认证相关的问题,确保您能够正常使用阶跃星辰 API 的各项功能。 #### 402 错误 当阶跃星辰 API 返回 HTTP 402 错误时,表明您的账号当中的余额已经无法支撑本次调用,因此,您需要尽快访问阶跃星辰开放平台充值费用,以恢复正常调用。 #### 404 错误 当阶跃星辰 API 返回 HTTP 404 错误时,表明您的请求路径不正确。这意味着您所请求的资源在服务器上无法按照您提供的路径被找到。您需要仔细参照文档,检查并修复请求路径信息。 * 首先,确认您输入的路径格式是否符合 API 的规范要求,包括大小写、特殊字符等是否准确。 * 如果经过检查和修复后,仍然返回 404 错误,您可以进一步查看文档中关于路径结构和层级的详细说明,确保您对 API 的资源组织结构有清晰的理解。 如果问题依旧无法解决,您可以联系我们的技术支持团队,他们将为您提供更深入的指导和帮助,以确保您能够正确地访问到所需的资源,顺利使用阶跃星辰 API 的相关功能。 #### 429 错误 当阶跃星辰 API 返回 HTTP 429 错误时,表明您的请求频次已经超出了允许的频次。您可以通过设定一定的 delay 时间后,再次请求。如果 delay 仍无法解决,则可以通过充值获得更高的频次。 如充值后的限额依然无法满足您的需求,可以联系我们以开通更高的频次。 #### 451 错误 当阶跃星辰 API 返回 HTTP 451 错误时,表明您的请求内容或大模型响应内容中出现了无法通过安全审核的内容,您可以通过前置添加安全审核能力,来前置完成验证,以帮助用户更早的感知到自己输入的问题。 #### 500 / 503 / 504 错误 当阶跃星辰 API 返回 HTTP 500 /503 /504 错误时,表明是阶跃星辰的服务端出现的问题,当您遇到 5XX 错误时,可以稍等重试。如多次重试后依然无法解决,则可以联系我们定位。 ### 模型层面的异常 在大模型补全时,可能会因为多种原因停止返回,因此需要根据返回的 `finish_reason` 进行下一步的处理 * 当结束原因为 `stop` 时,表示大模型按照预定计划结束生成,可直接处理 Message。 * 当结束原因为 `length` 时,表示大模型没有按照预定计划结束生成,受限于 max\_token 未能完整输出。 * 当结束原因为 `content_filter` 时,表示大模型虽然按照预定计划结束生成,但未通过安全审核,可以通过前置添加安全审核能力,来前置完成验证,以帮助用户更早的感知到自己输入的问题。 * 当结束原因为 `tool_calls` 时,表示大模型希望调用函数,则需要进行相应的处理,并将返回的函数调用结果传入下一次请求中。 #### 流式请求下的处理 在使用流式请求时,请求可能会在生成过程中因为模型输出原因结束,因此,您需要在获取到服务器的流式返回时,根据每一个 chunk 返回的 `finish_reason` 进行下一步的处理。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} completion = client.chat.completions.create() for c in completion: for choice in c.choices: if choice.finish_reason == "stop": # 表示正常结束,直接输出即可。 print(c.to_dict()) if choice.finish_reason == "content_filter": # 表示此请求被安全审核拦截 print(c.to_dict()) ### .... 更多处理 ``` # 图片理解 Source: https://platform.stepfun.com/docs/zh/guides/developer/image-chat 阶跃星辰视觉理解大模型支持在对话过程中传入图片文件用于理解图片当中的内容,参与大模型的对话过程中,通过图像来补充上下文,以实现诸如:基于图片追问、提问图片中的内容等能力。 > [!NOTE] > > 推荐优先使用 `step-5-preview`,支持文本、图片和视频输入,提供 1M tokens 上下文。需要辨认图片细节时,可显式设置 `detail: "high"`;高速多模态场景也可使用 `step-3.7-flash`。 ## 能力限制 * 目前 `step-5-preview`、`step-3.7-flash`、`step-1o-turbo-vision` 等模型支持 JPG/JPEG、PNG、静态 GIF、WebP 格式的图片,且支持通过 URL 或 Base64 作为参数传递。 * 上述模型限制了单次请求图像不能超过 60 张,如果超过 60 张照片,可以先对图片进行描述,并作为上下文传入到请求当中。 ## 使用 Step 5 Preview 在启动程序的终端设置 `STEPFUN_API_KEY` 后,可使用以下示例。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import os from openai import OpenAI client = OpenAI( api_key=os.environ["STEPFUN_API_KEY"], base_url="https://api.stepfun.com/v1", ) completion = client.chat.completions.create( model="step-5-preview", messages=[{ "role": "user", "content": [ {"type": "text", "text": "请描述这张图片。"}, {"type": "image_url", "image_url": { "url": "https://www.stepfun.com/assets/section-1-CTe4nZiO.webp", "detail": "high", }}, ], }], ) print(completion.choices[0].message.content) ``` ## 其他兼容模型示例 以下保留 `step-1o-turbo-vision` 的示例与历史输出,便于维护现有集成。其中图片 Token 数、默认细节模式与预处理参数不代表 Step 5 Preview 的实际用量;请以目标模型文档及响应中的 `usage` 为准。 ## 如何实现图片理解 ### 简单图片理解 在对话过程中,如果您需要将图片传递给大模型,则可以通过在传入的信息当中,加入 `type` 为 `image_url` 类型的内容,来完成对话。 阶跃星辰支持在 image\_url 类型中使用 URL 或 Base64 格式的内容,为了保证更好的性能,推荐使用 URL 来完成图片参数的传递。 具体实现可以参考如下代码 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI import os API_KEY= os.getenv("API_KEY") client = OpenAI(api_key=API_KEY, base_url="https://api.stepfun.com/v1") completion = client.chat.completions.create( model="step-1o-turbo-vision", messages=[ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你除了擅长中文,英文,以及多种其他语言的对话以外,还能够根据用户提供的图片,对内容进行精准的内容文本描述。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容", }, # 在对话中传入图片,来实现基于图片的理解 { "role": "user", "content": [ { "type": "text", "text": "用优雅的语言描述这张图片", }, { "type": "image_url", "image_url": { "url": "https://www.stepfun.com/assets/section-1-CTe4nZiO.webp", "detail": "high" }, }, ], }, ], ) print(completion.model_dump_json(indent=3)) # 输出内容 # { # "id": "105e9027276481c141821b77b1b2a2f2.eeb4fc6f4b4e39921fe5fc5e2f33d57c", # "choices": [ # { # "finish_reason": "stop", # "index": 0, # "logprobs": null, # "message": { # "content": "在这幅静谧的夜景中,一座现代建筑在微光中显得格外引人注目。建筑外墙上“ART WEST BUND”的字样在灯光的映衬下熠熠生辉,透露出浓厚的艺术气息。建筑前的广场宽敞而整洁,几盏路灯散发出温暖的光芒,为夜色增添了一丝浪漫。树木静静地矗立在广场上,仿佛在守护着这片宁静的艺术之地。远处的高楼在夜幕中若隐若现,与这座艺术殿堂相映成趣,共同构成了一幅充满现代感与艺术气息的都市夜景图。", # "refusal": null, # "role": "assistant", # "function_call": null, # "tool_calls": null # } # } # ], # "created": 1727073234, # "model": "step-1o-turbo-vision", # "object": "chat.completion", # "service_tier": null, # "system_fingerprint": null, # "usage": { # "completion_tokens": 130, # "prompt_tokens": 497, # "total_tokens": 627, # "completion_tokens_details": null, # "cached_tokens": 256 # } # } ``` ### 基于图片的多轮对话 除了直接使用图片进行图像理解,您还可以使用图片进行多轮对话,通过将其放置在上下文中,即可完成多轮对话。 具体实现可以参考如下代码。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI import os API_KEY= os.getenv("API_KEY") client = OpenAI(api_key=API_KEY, base_url="https://api.stepfun.com/v1") completion = client.chat.completions.create( model="step-1o-turbo-vision", messages=[ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你除了擅长中文,英文,以及多种其他语言的对话以外,还能够根据用户提供的图片,对内容进行精准的内容文本描述。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容", }, { "role": "user", "content": [ { "type": "text", "text": "用优雅的语言描述这张图片", }, { "type": "image_url", "image_url": { "url": "https://www.stepfun.com/assets/section-1-CTe4nZiO.webp", "detail": "high" }, }, ], }, # 将模型给予的返回重新插入会对话上下文,进行一轮新的对话 { "role":"assistant", "content": "这幅图片中,我们看到了一座现代建筑,它坐落在一个宁静而宽敞的广场上。建筑的外墙以简洁的线条和明亮的色彩为特色,彰显出一种现代美学。夜幕降临,天空呈现出淡淡的蓝色,与建筑的暖色灯光形成了鲜明的对比,营造出一种温馨而宁静的氛围。\n\n广场上,几盏路灯散发出柔和的光芒,为周围的树木和地面铺上了一层温暖的光辉。树木静静地矗立在广场上,为这座建筑增添了一丝自然的气息。远处的高楼大厦在夜色中若隐若现,与这座建筑形成了鲜明的对比,展现出城市的繁华与宁静并存的景象。\n\n总的来说,这幅图片通过巧妙的构图和色彩运用,展现了一座现代建筑在夜幕中的美丽景象,让人感受到城市中的宁静与温馨。" }, # 将用户的新问题继续追问大模型 { "role":"user", "content":"那这张照片可能是在哪个国家拍摄的?" } ], ) print(completion.model_dump_json(indent=3)) # 输出内容 # { # "id": "aad5d20afc7506cfda8fc7510124d948.05ca5a939a04585bd7a68e5a9ee64563", # "choices": [ # { # "finish_reason": "stop", # "index": 0, # "logprobs": null, # "message": { # "content": "这张照片展示了一座现代建筑,建筑外墙上写有“ART WEST BUND”的字样,这通常是上海西岸艺术中心的标志。上海西岸艺术中心位于中国上海,是一处集艺术展览、文化交流和休闲娱乐于一体的综合性艺术园区。因此,这张照片很可能是在中国上海拍摄的。", # "refusal": null, # "role": "assistant", # "function_call": null, # "tool_calls": null # } # } # ], # "created": 1727073254, # "model": "step-1o-turbo-vision", # "object": "chat.completion", # "service_tier": null, # "system_fingerprint": null, # "usage": { # "completion_tokens": 65, # "prompt_tokens": 697, # "total_tokens": 762, # "completion_tokens_details": null, # "cached_tokens": 256 # } # } ``` ### 多图图片理解 ### 使用 detail 参数提供更加完整的信息 > [!NOTE] > > `step-1o-turbo-vision` 模型推荐默认开启 detail 模式,会拥有更好的视觉理解能力。 目前默认会选择低分辨率模式,以获得更加快速响应速度,同时,低分辨率模式也会带来较少的 token 消耗。在低分辨率模式下,`step-1o-turbo-vision` 默认每张图片约 169 token; 但在一些具体的业务场景下,需要大模型细致的理解图片中的细节和内容,则可以通过设置其 detail 模式为 `high`,使得大模型获取到更加完整的信息,从而进行更加详细的图片理解和描述。需要注意的是,当 detail 模式为 `high` 时,图片的 Token 消耗将会基于图片大小进行计算,可能会消耗远超低分辨率模式的 token 数,此外,由于大模型会看到完整版的图片,响应的首字时延也会有提升。 具体代码可参考下 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI import os API_KEY= os.getenv("API_KEY") client = OpenAI(api_key=API_KEY, base_url="https://api.stepfun.com/v1") completion = client.chat.completions.create( model="step-1o-turbo-vision", messages=[ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你除了擅长中文,英文,以及多种其他语言的对话以外,还能够根据用户提供的图片,对内容进行精准的内容文本描述。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容", }, # 在对话中传入图片,来实现基于图片的理解 { "role": "user", "content": [ { "type": "text", "text": "用优雅的语言描述这张照片", }, { "type": "image_url", "image_url": { "url": "https://www.stepfun.com/assets/section-1-CTe4nZiO.webp" }, }, { "type":"image_url", "image_url":{ "url":"https://postimg.aliavv.com/step/daesog.png" } } ], }, ], ) print("low detail") print(completion.model_dump_json(indent=2)) print("high detail") completion = client.chat.completions.create( model="step-1o-turbo-vision", messages=[ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你除了擅长中文,英文,以及多种其他语言的对话以外,还能够根据用户提供的图片,对内容进行精准的内容文本描述。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容", }, { "role": "user", "content": [ { "type": "text", "text": "用优雅的语言描述这张照片", }, { "type":"image_url", "image_url":{ "url":"https://postimg.aliavv.com/step/daesog.png", "detail":"high" } } ], }, ], ) print(completion.model_dump_json(indent=2)) # 输出内容 # low detail # { # "id": "3f4db73a6d12292f6a4ca78b9811bcc5.9cad450fae99f56ba0e269e6185981ef", # "choices": [ # { # "finish_reason": "stop", # "index": 0, # "logprobs": null, # "message": { # "content": "这张照片展现了一座现代化城市的壮丽夜景。从高处俯瞰,城市的天际线在夜幕中熠熠生辉,高楼大厦的灯光如繁星点点,勾勒出一幅繁华而迷人的画卷。蜿蜒的河流贯穿城市,水面反射着两岸的灯火,宛如一条闪耀的丝带。照片中的建筑各具特色,有的高耸入云,有的独具匠心,共同谱写出一曲都市的交响乐。夜色中的城市,充满了活力与魅力,让人不禁为之沉醉。", # "refusal": null, # "role": "assistant", # "function_call": null, # "tool_calls": null # } # } # ], # "created": 1727073489, # "model": "step-1o-turbo-vision", # "object": "chat.completion", # "service_tier": null, # "system_fingerprint": null, # "usage": { # "completion_tokens": 117, # "prompt_tokens": 899, # "total_tokens": 1016, # "completion_tokens_details": null # } # } # high detail # { # "id": "cb3b1fb0f8e7aeb4caa096ec235b494e.f2bbc7d720611275241dd62954fb3b19", # "choices": [ # { # "finish_reason": "stop", # "index": 0, # "logprobs": null, # "message": { # "content": "在这幅照片中,我们俯瞰着一座繁华的城市,夜幕低垂,万家灯火如星辰般点缀着大地。高楼大厦拔地而起,宛如巨人般屹立在城市的心脏,勾勒出一幅现代与传统的完美融合画卷。河流蜿蜒流过城市,水面反射着璀璨的灯光,宛如一条银色的丝带,将城市的繁华与宁静巧妙地连接在一起。\n\n照片中,东方明珠电视塔高耸入云,成为城市的标志性建筑,其独特的造型在夜色中熠熠生辉。周围的建筑也纷纷点亮了灯光,犹如一座座灯塔,指引着夜归的人们。街道上车水马龙,流光溢彩,仿佛一条条流动的银河,为这座城市增添了无限的活力与魅力。\n\n在这幅照片中,我们不仅看到了城市的繁华与喧嚣,更感受到了一种宁静与和谐。它让我们明白,无论城市多么喧嚣,总有一片宁静的港湾等待着我们去发现。", # "refusal": null, # "role": "assistant", # "function_call": null, # "tool_calls": null # } # } # ], # "created": 1727073505, # "model": "step-1o-turbo-vision", # "object": "chat.completion", # "service_tier": null, # "system_fingerprint": null, # "usage": { # "completion_tokens": 217, # "prompt_tokens": 2102, # "total_tokens": 2319, # "completion_tokens_details": null # } # } ``` 如果您需要在对话过程中,使用多个图片,则可以在对话过程中通过 image\_url 传入多个图片来完成对话和问答。 > 需要注意的是,根据模型不同,一次多轮对话最多可以拥有不超过 10 张照片或 50 张照片。如果超过图片数量限制,可以参考[超出模型图片数量上限的处理方式](/docs/zh/guides/developer/image-chat#超出模型图片数量上限的处理方式)进行调整。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI import os API_KEY= os.getenv("API_KEY") client = OpenAI(api_key=API_KEY, base_url="https://api.stepfun.com/v1") completion = client.chat.completions.create( model="step-1o-turbo-vision", messages=[ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你除了擅长中文,英文,以及多种其他语言的对话以外,还能够根据用户提供的图片,对内容进行精准的内容文本描述。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容", }, # 在对话中传入图片,来实现基于图片的理解 { "role": "user", "content": [ { "type": "text", "text": "用优雅的语言描述这两张照片", }, { "type": "image_url", "image_url": { "url": "https://www.stepfun.com/assets/section-1-CTe4nZiO.webp", "detail": "high" }, }, { "type":"image_url", "image_url":{ "url":"https://postimg.aliavv.com/step/daesog.png", "detail":"high" } } ], }, ], ) print(completion.model_dump_json(indent=3)) # 输出内容 # { # "id": "dd2937ea8d72e0a5064826e2f0154c02.1e83c144d202624be954996ef3fa3a5c", # "choices": [ # { # "finish_reason": "stop", # "index": 0, # "logprobs": null, # "message": { # "content": "第一张照片展现了一座现代建筑,其设计简洁而富有现代感。在黄昏的柔和光线下,建筑外墙的浅色与周围环境形成了和谐的对比。入口处的红色设计引人注目,仿佛是这座建筑的心脏,散发着温暖的光芒。周围的树木和灯光点缀其间,为整个场景增添了一丝宁静与优雅。地面的石材铺装和远处的阶梯设计,使空间显得更加开阔和有层次感。\n\n第二张照片则展示了一座繁华都市的夜景,从高空俯瞰,城市的灯火辉煌尽收眼底。高楼大厦错落有致,灯光璀璨,犹如星河倒映在人间。河流蜿蜒穿过城市,水面反射着两岸的霓虹,为这座城市增添了一份流动的韵律。夜色中的城市充满了活力与魅力,每一栋建筑都仿佛在诉说着自己的故事,共同谱写出一曲繁华的乐章。", # "refusal": null, # "role": "assistant", # "function_call": null, # "tool_calls": null # } # } # ], # "created": 1727073194, # "model": "step-1o-turbo-vision", # "object": "chat.completion", # "service_tier": null, # "system_fingerprint": null, # "usage": { # "completion_tokens": 193, # "prompt_tokens": 900, # "total_tokens": 1093, # "completion_tokens_details": null, # "cached_tokens": 768 # } # } ``` 在上述对话过程中,通过在 content 当中传入多个图片的 image\_url,实现了在对话中使用多张图片来进行问答。您可以根据实际情况,将多个图片插入到多个消息当中,或保留在同一个消息当中。 ### 使用 Base64 进行图片理解 在一些场景下,希望大模型可以直接处理用户上传的图片,而不会再次上传至对象存储或服务当中,则可以选择在对话信息中使用 Base64 编码来传递图片内容,方便大模型理解和生成。 在使用时,您只需要提前将原本的图片连接替换为标准的 Base64 [Data URL](https://www.rfc-editor.org/rfc/rfc2397) 来发起请求即可使用 Base64 进行大模型对话和理解。 ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/guide/base64image.jpg?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=3dcbdbb55f572f95e350df5e1ed0a44c) 您可以参考如下代码对图片处理,获得图片对应的 Base64 文本,并拼接到 Chat 中 **python** ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 with open("./sample.jpg", "rb") as image_file: base64_bytes = base64.b64encode(image_file.read()) print(base64_bytes) ``` **Node.js** ```js copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} const fs = require('fs'); const imageBuffer = fs.readFileSync('./sample.jpg'); const base64Image = imageBuffer.toString('base64'); console.log(base64Image) ``` 需要注意的是,上述方法获得的是图片的 bas64 编码,在实际调用时,您还需要拼上对应格式的类型等信息,常见图片类型的对应前缀可参考如下表格。 | 图片后缀 | 图片类型 | 对应前缀 | | - | - | - | | jpg | image/jpeg | `data:image/jpeg;base64,` | | png | image/png | `data:image/png;base64,` | | gif | image/gif | `data:image/gif;base64,` | | webp | image/webp | `data:image/webp;base64,` | ### 使用 Files API 加速图片理解 在使用图片理解时,如果传入的是外部的 URL,阶跃星辰的服务器将会请求外部 URL,获取图片内容并进行生成。生成的速度将会受到图片下载速度的影响,因此,我们推荐将图片放置在 CDN 或具有较大下载带宽的对象存储上,以便于对图片进行更快的下载。但如果您的图片需要重复使用,比如用来做 Few-shot,则可以考虑将图片使用阶跃星辰 Files API 上传至阶跃星辰文件存储服务上,以避免重复下载,产生持续的流量消耗。 ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/guide/image_url.png?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=f5202757927ec6b252a25c33f499b6c8) 您可以调用[上传文件](/docs/zh/api-reference/files/create) API,并传入文件,选择 **purpose 为 storage**,上传完成后所获取的 File ID 则可以在对话过程中使用。在拿到 File ID 后,您需要在 File ID 前拼上 `stepfile://`,用于标注这个图片从阶跃星辰文件服务中获取,后续模型在推进推理时,将会从阶跃星辰文件存储服务上获取文件,从而降低下载文件所需的时间,提升整体推理的时延。 ## 常见问题 ### 图片较多情况下指令跟随较差的处理方式 模型在进行推理时,图片也会转换成为相应的 Image Token,当一个对话的上下文较长时,可能会导致模型重点关注靠后的 Prompt,因此在撰写 Prompt 时,可以将指令放在尾部,图片放在头部,方便模型更加关注指令,从而提升指令跟随的效果。 ### 超出模型图片数量上限的处理方式 如果在对话过程中,出现了超过模型图片上限的情况,则可以将前述的照片先使用 `step-3.7-flash` 等多模态模型对图片进行总结和描述,并作为上下文传递。从而实现在整个对话中插入多个图片的信息。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI import os API_KEY= os.getenv("API_KEY") client = OpenAI(api_key=API_KEY, base_url="https://api.stepfun.com/v1") # 使用 `step-1o-turbo-vision` 模型,对图片进行描述 def get_description_from_img(img_url:str): completion = client.chat.completions.create( model="step-1o-turbo-vision", messages=[ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你除了擅长中文,英文,以及多种其他语言的对话以外,还能够根据用户提供的图片,对内容进行精准的内容文本描述。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容", }, # 在对话中传入图片,来实现基于图片的理解 { "role": "user", "content": [ { "type": "text", "text": "请详细描述这张图片中的内容", }, { "type": "image_url", "image_url": { "url": img_url, "detail":"high" }, }, ], }, ], ) return completion.choices[0].message.content real_chat_context = [] real_chat_context.append({ "role": "user", "content": get_description_from_img("https://www.stepfun.com/assets/section-1-CTe4nZiO.webp"), }) print(real_chat_context) # 调用模型进行真正的对话沟通。 ``` ### 优化图片以降低模型返回的首字延时 如果您的业务场景对于首字延时更敏感,而对于模型是否可以完整理解图片中的每一个细节,那么您可以通过对图片进行一定的预处理,以在保留绝大多数图片信息的同时,获得较好的处理速度。 > **[引入 Prompt 缓存提升推理速度](/docs/zh/guides/developer/prompt-cache)** * 对图片进行 resize * 对于 detail 设置为 low 或保持默认的情况下,可以将图片的最长边缩放至 728px,短边等比例缩放,从而提升处理的速度。 * 对于 detail 设置为 high 的情况下,可以将图片的最长边缩放至 504 的倍数,短边等比例缩放,从而提升处理的速度。 * 对图片质量进行压缩 * 通过对图片进行压缩,将其 quality 设置为 80 ,来显著降低图片大小,同时不会太过影响模型的效果。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from PIL import Image # 确保安装了Pillow库 # 运行以下命令以安装Pillow # pip install Pillow # 处理图片为 80% 质量 def compress(input_path, output_path, quality): image = Image.open(input_path) image.save(output_path, quality=quality) # 将图片按照最长边resize到728,短边等比例缩放,并存储为新图片 def resize_image(input_path, output_path, max_size): image = Image.open(input_path) width, height = image.size # 计算新的尺寸 if width > height: new_width = max_size new_height = int((max_size / width) * height) else: new_height = max_size new_width = int((max_size / height) * width) # 调整图片尺寸 resized_image = image.resize((new_width, new_height), Image.ANTIALIAS) resized_image.save(output_path) # 调用函数 resize_image('input.jpg', 'resized_output.jpg', 728) compress('input.jpg', 're_quality_output.jpg',80) ``` ### 适配透明背景的 PNG 图片 目前 `step-3.7-flash`、`step-1o-turbo-vision` 等模型支持对透明背景的 PNG 图片进行处理,但在使用时,会将透明通道处理景为黑色的情况。您可以通过对图片进行处理,将其背景设置为白色,从而避免模型在推理时,无法正确理解图片中的内容。 可以参考下方代码,提前将透明背景的 PNG 图片转换成白色背景。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from PIL import Image def convert_rgba_to_rgb_with_white_background(input_path, output_path): img = Image.open(input_path) if img.mode != 'RGBA': raise ValueError("输入图片不是 RGBA 模式") white_background = Image.new('RGB', img.size, (255, 255, 255)) white_background.paste(img, mask=img.split()[3]) result = white_background.convert("RGB") result.save(output_path) ``` # Cherry Studio Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/cherry-studio Cherry Studio 是一款桌面 AI 客户端,支持多模型 Provider,并提供对话、代码生成和文本生成等能力。通过配置 Step API Key,Cherry Studio 可以直接接入 Step 模型,在桌面客户端中调用推理能力。 本文档介绍 Cherry Studio 接入 Step API 的准备条件、配置步骤与基础测试流程。 ## 概述 Cherry Studio 适合在统一桌面工作台中完成多模型对话和开发辅助任务。完成 Provider 配置后,即可在客户端内直接调用 Step 模型。 ## 前置条件 ### 客户端环境 支持以下系统: * macOS * Windows * Linux 建议使用最新版本 Cherry Studio。 ### 安装 Cherry Studio 访问 [Cherry Studio 官网](https://cherry-ai.com)下载安装包。 安装完成后启动 Cherry Studio。 ### 订阅 Step Plan 在开始配置前,请先确认当前账号已完成 Step Plan 订阅。只有在账号具备对应计划或调用权限后,后续模型调用与额度使用才会正常生效。 如需订阅或购买,请访问:[Step Plan 订阅](https://platform.stepfun.com/step-plan) ### 获取 Step API Key 访问 [Step 平台控制台](https://platform.stepfun.com/interface-key)创建 API Key,并妥善保存。 ## 配置步骤 ### 添加 Provider 打开 Cherry Studio,进入模型配置界面: 1. 在模型服务列表中选择**阶跃星辰**。 2. 输入 `Step API Key`。 3. 在 API 地址栏输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} https://api.stepfun.com/step_plan/v1 ``` 4. 保存配置。 5. 添加 `step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603` 或 `step-3.5-flash` 模型。 点击**+添加**,在打开的窗口中输入以下选项: * 模型 ID:`` * 模型名称:可填写便于识别的名称 * 分组名称:可填写便于归类的名称 > 说明:`` 请填写当前账号在 Step Plan 下可用的模型。已验证示例:`step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603`、`step-3.5-flash`。文档列出的模型不构成全部可用名单。 点击**添加模型**保存设置。 ## 测试接入 点击 API 密钥右侧的**检测**。如果提示成功,则表明设置成功。如果出现错误,则需要检查 API key 和 base url 是否设置正确。 # Claude Code Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/claude-code 本文介绍如何在 Claude Code 中通过 [Messages API](/docs/zh/api-reference/chat/messages-create) 接入 Step 模型,配置 Step Plan、推理强度与 1M 上下文,并验证对话和工具调用。 ## 接入条件 ### 运行环境 * macOS、Linux 或 Windows。Windows 可使用 PowerShell,也可在 WSL 中运行。 * 本文采用 npm 安装方式,需要 Node.js 22 或更高版本;已使用原生安装包安装 Claude Code 的用户可跳过 npm 安装。 使用 npm 安装前,确认 Node.js 与 npm 可用: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} node -v npm -v ``` ### 订阅 Step Plan 确认 [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。本文配置示例使用 Step Plan 通道。 ### 获取 Step API Key 前往 [Step 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 配置步骤 ### 安装 Claude Code 在终端中执行: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} npm install -g @anthropic-ai/claude-code ``` 安装完成后,验证版本: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} claude --version ``` 兼容性验证版本:**Claude Code 2.1.209**。安装命令获取最新版;模型别名解析和上下文管理可能因版本不同而变化。 ### 创建配置文件 **通过官方脚本快速配置** 以下命令从 Step 官方仓库 `stepfun-ai/Step-Cookbook` 下载中文脚本,下载成功后才执行。 macOS / Linux / WSL(Bash) 请先安装 `jq`,脚本使用它更新 JSON 配置。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://raw.githubusercontent.com/stepfun-ai/Step-Cookbook/main/scripts/claude-key-setup/zh-CN/configure_claude.sh -o configure_claude.sh && bash configure_claude.sh ``` Windows(普通 PowerShell) 使用当前用户的普通 PowerShell 即可,无需管理员权限。 ```powershell theme={"theme":{"light":"light-plus","dark":"dark-plus"}} & { $ErrorActionPreference = "Stop" Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass Invoke-WebRequest -Uri "https://raw.githubusercontent.com/stepfun-ai/Step-Cookbook/main/scripts/claude-key-setup/zh-CN/configure_claude.ps1" -OutFile "configure_claude.ps1" & .\configure_claude.ps1 } ``` 接入 Step Plan 时,请在脚本菜单中选择 `2`,输入 API Key,并选择模型(默认 `step-5-preview`)。选择 `1` 会使用普通 API 通道。 脚本会备份已有配置并替换整个 `env` 对象,保留 `hooks`、`theme` 等其他顶层字段;原 `env` 中的额外变量会被移除。 **手动编辑配置文件** 将以下字段合并到用户级配置文件 `~/.claude/settings.json`,保留已有的 `permissions`、`hooks` 等设置。Windows 对应 `%USERPROFILE%\.claude\settings.json`;若设置了 `CLAUDE_CONFIG_DIR`,使用该目录下的 `settings.json`。文件不存在时先创建目录,再保存以下 JSON,将 `YOUR_STEP_API_KEY` 替换为实际密钥: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "env": { "ANTHROPIC_AUTH_TOKEN": "YOUR_STEP_API_KEY", "ANTHROPIC_BASE_URL": "https://api.stepfun.com/step_plan" }, "model": "step-5-preview" } ``` 模型 ID 可填写 `step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603` 或 `step-3.5-flash`。 #### 配置项说明 | 字段 | 位置 | 用途 | | - | - | - | | `ANTHROPIC_AUTH_TOKEN` | `env` | Step API Key,用于请求认证。 | | `ANTHROPIC_BASE_URL` | `env` | 配置为 `https://api.stepfun.com/step_plan`,Claude Code 自动追加 `/v1/messages`。 | | `model` | 顶层 | 主会话模型;启动参数 `--model` 或环境变量 `ANTHROPIC_MODEL` 可覆盖此项。 | | `ANTHROPIC_DEFAULT_OPUS_MODEL` 等 | `env`,可选 | 将内置模型档位映射到 Step 模型。 | | `CLAUDE_CODE_SUBAGENT_MODEL` | `env`,可选 | 设置子 Agent 模型。 | | `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | `env`,可选 | 覆盖客户端对自定义模型的上下文窗口估计。 | | `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | `env`,可选 | 设置自动压缩使用的窗口,不超过模型上下文窗口。 | 可选:将以下模型别名和子 Agent 配置合并到 `env`。任务显式指定的模型需单独核对。 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "ANTHROPIC_DEFAULT_SONNET_MODEL": "step-5-preview", "ANTHROPIC_DEFAULT_OPUS_MODEL": "step-5-preview", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "step-5-preview", "ANTHROPIC_DEFAULT_FABLE_MODEL": "step-5-preview", "CLAUDE_CODE_SUBAGENT_MODEL": "step-5-preview" } ``` 首次接入先验证最小配置,再按需加入别名与子 Agent 设置。若后台任务仍请求内置模型名,请核对该任务显式指定的模型。 同名变量同时出现在配置文件 `env` 和终端环境时,配置文件中的值会覆盖终端值。切换服务后,请一并检查用户配置、项目配置及 `.zshrc` / `.bashrc` 中的旧地址和密钥,保存后重新启动 Claude Code。 ### 设置推理强度 `step-5-preview` 支持以下推理强度: | --effort | 适用任务 | | - | - | | `low` | 简单任务,优先速度与较低 token 消耗。 | | `medium` | 一般推理与多步骤任务。 | | `high` | 复杂推理、规划与代码分析。 | 调用 Step 5 Preview 时,`xhigh` 和 `max` 由 Step 服务端映射为 `high`。Claude Code 通过 Messages API 的 `output_config.effort` 传入该设置。 启动时指定本次会话的推理强度: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} claude --model step-5-preview --effort medium ``` 保存默认档位时,将 `effortLevel` 合并到 `~/.claude/settings.json` 顶层,而不是 `env`: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "effortLevel": "medium" } ``` 保存后重启 Claude Code。若设置未生效,检查 `CLAUDE_CODE_EFFORT_LEVEL`、启动参数及项目或组织设置。 ### 开启 1M 上下文 [`step-5-preview`](/docs/zh/guides/models/step-5-preview) 的模型上下文窗口为 **1M tokens**。若 `/context` 将其显示为未识别模型并按 200k 计算,将以下字段合并到 `~/.claude/settings.json`,保留已有配置: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "env": { "ANTHROPIC_AUTH_TOKEN": "YOUR_STEP_API_KEY", "ANTHROPIC_BASE_URL": "https://api.stepfun.com/step_plan", "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000", "CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1000000" }, "model": "step-5-preview" } ``` 说明: * `CLAUDE_CODE_MAX_CONTEXT_TOKENS`:告诉 Claude Code 按 1M 窗口计算用量。必须写纯数字 `1000000`,不要写成 `1M` 或 `1000k`。 * `CLAUDE_CODE_AUTO_COMPACT_WINDOW`:将自动压缩窗口对齐到 1M。取值范围为 `100000`–`1000000`,同样只接受纯数字;客户端仍会预留输出与内部处理空间,可能在窗口填满前压缩。 * 保存后完全退出并重新启动 Claude Code,再输入 `/context` 确认窗口已接近 1M,而不再是 200k。 * 声明大于 200k 后,启动时可能出现「200K limit isn't enforced」类提示,属于预期行为。 通过官方脚本接入时,脚本不会自动写入上述两个字段,需要手动补进 `env`。 ### 启动 Claude Code 进入任意代码项目目录: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} cd your-project ``` 启动 Claude Code: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} claude ``` 首次启动时若出现 `Do you want to use this API key?`,选择 `Yes` 即可。 ## 测试接入 ### 验证客户端对话 1. 保存配置,完全退出并重新启动 Claude Code。 2. 输入 `/status`,核对模型、认证方式和配置来源。 3. 发送「只回复 OK」,检查返回内容与流式输出。 ### 验证 Agent 工具调用 在安装了 Python 的独立测试目录中,先创建一个输出 `Hello, world!` 的 `hello.py`,再向 Claude Code 发送: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 读取当前目录中的 hello.py,把它改成接受命令行参数 name。 未传参数时输出 Hello, Step5;传入 Ada 时输出 Hello, Ada。 使用本机可用的 Python 解释器分别运行这两种情况,检查输出。 如果验证失败,根据报错修正后重新运行。不要修改其他文件。 完成后汇报文件变更、执行的命令和运行结果。 ``` 按权限提示批准必要操作,核对读取、修改、运行的工具记录及两次输出。随后继续提问,确认会话保留任务上下文。 ### 核对用量与路由 在 [Step 开放平台](https://platform.stepfun.com)按请求时间、模型与响应 ID 核对调用记录,确认使用 Step Plan 通道及对应额度。 ## 常见问题 > **Q: 修改配置后不生效怎么办?** > > 重启后使用 `/status` 核对模型、认证与配置来源,依次检查项目配置、`--model`、`ANTHROPIC_MODEL`、`CLAUDE_CONFIG_DIR` 及组织设置。确认 `settings.json` 是有效 JSON。 > > 以下 Bash / jq 命令只显示相关配置和密钥是否存在,不输出密钥值: > > ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} > jq '{model, base_url: .env.ANTHROPIC_BASE_URL, context_window: .env.CLAUDE_CODE_MAX_CONTEXT_TOKENS, compact_window: .env.CLAUDE_CODE_AUTO_COMPACT_WINDOW, has_auth_token: (.env.ANTHROPIC_AUTH_TOKEN != null), has_api_key: (.env.ANTHROPIC_API_KEY != null)}' "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/settings.json" > ``` > **Q: 返回 401 invalid\_api\_key 怎么办?** > > 将有效的 Step API Key 填入 `ANTHROPIC_AUTH_TOKEN`,检查密钥是否输入错误、被撤销或属于其他站点。若同时设置 `ANTHROPIC_API_KEY`,不要仅更新它而保留旧的 `ANTHROPIC_AUTH_TOKEN`。 > > 曾通过 `/login` 登录其他账号时,先使用 `/status` 核对凭据来源;需要退出该登录态时,执行 `/logout` 后重启,再验证 Step 配置。 > **Q: 如何单独检查 Messages API 连通性?** > > 先通过 curl 检查端点、密钥和模型。以下命令适用于 Bash / Zsh;Windows 可在 WSL 或 Git Bash 中运行。 > > ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} > export STEP_API_KEY="YOUR_STEP_API_KEY" > > curl --silent --show-error --fail-with-body \ > --write-out '\nHTTP %{http_code}\n' \ > https://api.stepfun.com/step_plan/v1/messages \ > -H "Authorization: Bearer ${STEP_API_KEY}" \ > -H "Content-Type: application/json" \ > -H "anthropic-version: 2023-06-01" \ > -d '{ > "model": "step-5-preview", > "max_tokens": 1024, > "messages": [{"role": "user", "content": "Reply only with OK."}] > }' > ``` > > **通过条件**:HTTP 200,响应 `type` 为 `message`,`content` 中有包含 `OK` 的 `text` 块。若只有 `thinking` 块,且 `stop_reason` 为 `max_tokens`,应提高输出预算后重试。 > **Q: 地址错误或 curl 成功但 Claude Code 失败怎么办?** > > Claude Code 在 `ANTHROPIC_BASE_URL` 后自动追加 `/v1/messages`。按下表检查地址: > > | ANTHROPIC\_BASE\_URL | 请求路径 | 说明 | > | - | - | - | > | `https://api.stepfun.com/step_plan` | `/step_plan/v1/messages` | Step Plan Messages 通道。 | > | `https://api.stepfun.com/step_plan/v1` | `/step_plan/v1/v1/messages` | 重复 `/v1`,地址错误。 | > | `https://api.stepfun.com/step_plan/v1/messages` | `/step_plan/v1/messages/v1/messages` | 重复接口路径,地址错误。 | > | `https://api.stepfun.com` | `/v1/messages` | 普通按量付费 API,不使用 Step Plan 额度。 | > > 若 curl 正常而客户端失败,检查项目配置或用户配置是否覆盖了终端变量。需要进一步排查时,使用 `claude --debug` 查看日志。 > **Q: 后台任务或子 Agent 报模型错误怎么办?** > > 检查 `ANTHROPIC_DEFAULT_HAIKU_MODEL`、`ANTHROPIC_DEFAULT_FABLE_MODEL`、`CLAUDE_CODE_SUBAGENT_MODEL` 及任务中显式指定的模型,确认它们使用可用的 Step 模型 ID。相关字段见上文配置项说明。 > **Q: /context 仍显示 200k 怎么办?** > > 确认正在使用 `step-5-preview`,配置目录正确,且 `env` 中的 `CLAUDE_CODE_MAX_CONTEXT_TOKENS` 和 `CLAUDE_CODE_AUTO_COMPACT_WINDOW` 均为 `"1000000"`。完全退出并重启后再检查。官方脚本默认不写入这两项。 > **Q: 返回 model does not exist 怎么办?** > > 核对模型 ID、当前账号权限、目标通道以及子任务模型。客户端提示不识别自定义模型,不等于服务端拒绝该模型;以具体请求错误为准。 > **Q: 返回 402 quota\_exceeded 怎么办?** > > 先确认请求通道。Step Plan 通道检查订阅和 Credit;普通 API 通道检查账户余额或额度。 若仍需帮助,请提供客户端版本、错误信息、发生时间、脱敏配置及请求 ID,通过[技术支持](/docs/zh/guides/contact-us)进一步排查。 ## 相关文档 * [Messages API](/docs/zh/api-reference/chat/messages-create) * [Step 5 Preview](/docs/zh/guides/models/step-5-preview) * [Step Plan 概述](/docs/zh/step-plan/overview) # Cline Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/cline Cline 是运行在 VS Code、Cursor 等编辑器中的编码 Agent,支持 Plan / Act 工作模式、文件编辑和终端命令执行。通过 Step Plan Provider,可在编辑器中使用 Step 模型完成开发任务。 ## 接入条件 * 已安装 VS Code 或 Cursor。运行下方 Python 验证示例时,还需安装 Python 3。 * [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 * 已在 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 安装 Cline 在编辑器扩展市场中搜索并安装 Cline,扩展标识为 `saoudrizwan.claude-dev`。 ## 配置 Step Plan ### 选择 Provider 1. 打开 Cline 面板,进入设置中的 `API Configuration`。首次使用时,从 `Configure your provider` 进入。 2. 在 `API Provider` 中选择 `StepFun Step Plan (China)`。 3. 填写 API Key,并选择 `step-5-preview`。其余连接参数按下表确认。 | 配置项 | 填写值 | | - | - | | `API Provider` | `StepFun Step Plan (China)`。 | | `Base URL` | `https://api.stepfun.com/step_plan/v1`,使用预设时确认已填入该地址。 | | `API Key` | Step API Key,不包含 `Bearer ` 前缀或首尾空格。部分界面将该字段显示为 `OpenAI Compatible API Key`。 | | `Model ID` | `step-5-preview`。 | 如果当前版本没有 Step Plan 预设,选择 `OpenAI Compatible`,手动填写同一 Base URL、API Key 和 Model ID。Cline 自动追加 `/chat/completions`,完整请求路径为 `/step_plan/v1/chat/completions`。 ### 确认模型参数 展开 `MODEL CONFIGURATION`。以下配置适用于 [Step 5 Preview](/docs/zh/guides/models/step-5-preview);使用预设时,核对已有值即可。 | 配置项 | 设置 | 说明 | | - | - | - | | `Supports Images` | 开启 | 允许发送图像输入。 | | `Context Window` | `1000000` | 客户端使用的上下文窗口。 | | `Max Output Tokens` | `65536` | 为推理和正文保留输出预算,避免设为过小值。 | | `Input / Output Price / 1M` | 保留默认 | 用于 Cline 的成本估算,实际用量以平台记录为准。 | | `Temperature` | 保留默认 | 无需为接入单独设置。 | | `Reasoning Effort` | 保留默认,或选择 `High` | 需要较高推理强度时再调整。Step 5 Preview 支持 `low`、`medium`、`high`。 | 切换到其他模型时,按对应模型规格调整上下文与输出预算。配置完成后保存,并新建任务。 ## 接入 StepSearch MCP 需要联网搜索或获取网页内容时,可配置 [StepSearch](/docs/zh/guides/developer/search-mcp)。该服务通过 Step Plan 端点提供 `web_search` 和 `web_fetch`。 1. 在 Cline 面板打开 `MCP Servers`,进入 `Configure`,选择 `Configure MCP Servers`。 2. 在打开的 `cline_mcp_settings.json` 中合并以下配置,保留其他 MCP 服务,将 `YOUR_STEP_API_KEY` 替换为实际密钥: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "mcpServers": { "step-search": { "type": "streamableHttp", "url": "https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp", "headers": { "Authorization": "Bearer YOUR_STEP_API_KEY" }, "disabled": false, "autoApprove": [] } } } ``` 3. 保存后,在 MCP Servers 面板检查 `step-search` 是否已连接,并确认工具列表包含 `web_search` 和 `web_fetch`。 4. 新建任务,请 Cline 使用其中一个工具完成搜索或网页抓取,核对工具调用记录与返回结果。 `type` 必须使用 Cline 的 `streamableHttp` 写法;省略该字段会使用兼容旧版的 SSE 传输。`autoApprove: []` 保留逐次确认,首次调用时按提示批准即可。 > [!WARNING] > > MCP 配置中的 API Key 以明文保存。请使用 Cline 的用户配置文件,不要将真实密钥提交到代码仓库或分享给他人。任何获得该密钥的人都可能以您的权限发起请求并消耗额度。 ## 验证接入 ### 验证对话 新建任务并输入 `请只回复 OK。`,预期返回 `OK`。 ### 验证工具调用 1. 在独立测试目录中创建 `README.md`,内容为 `Cline Step Plan test`,然后在编辑器中打开该目录。 2. 在 Cline 中选择 `Act` 模式,发送以下指令: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 读取 README.md,创建 hello.py,使其打印 "Hello, world!"。 使用本机可用的 Python 解释器运行 hello.py,并报告执行命令和实际输出。 不要修改 README.md 或其他已有文件。 ``` 3. 按提示批准必要的文件与命令操作,核对读取、编辑和执行记录。确认 `hello.py` 实际生成,输出为 `Hello, world!`,且 `README.md` 未被修改。 自动批准是可选设置,手动批准也可完成上述验证。 ### 验证配置保存 重启编辑器后,检查 Provider 与模型选择是否保留,并重新发起一次简短对话。 ## 常见问题 > **Q: 找不到 Step Plan Provider 怎么办?** > > 更新 Cline 扩展;也可选择 `OpenAI Compatible`,使用 `https://api.stepfun.com/step_plan/v1` 和实际 API Key,手动填写 `step-5-preview` 或账号可用的其他模型 ID。 > **Q: 提示 Connection error 怎么办?** > > 检查 Base URL、网络连接、API Key 和模型权限。Base URL 保留到 `/step_plan/v1`,API Key 字段不添加 `Bearer ` 前缀。查看完整错误信息,分别排查认证、模型和请求参数;仅查询模型列表成功还需继续验证实际对话请求。 > **Q: 返回 401 怎么办?** > > 确认密钥完整、有效,没有首尾空格,且属于所选 Provider 对应站点的账号。模型连接使用 API Key 字段,MCP 则使用 `Authorization: Bearer YOUR_STEP_API_KEY`,两处填写形式不同。 > **Q: Cline 只回复文字,没有修改文件或执行命令怎么办?** > > 确认已选择 `Act` 模式并打开目标项目。检查是否有等待确认的工具调用,按提示批准后继续;无需为此开启所有自动批准选项。若配置刚发生变化,新建任务后重试。 > **Q: 回复为空、被截断或推理阶段没有正文怎么办?** > > 推理阶段可能暂时没有正文。若请求结束后仍无正文,检查停止原因、错误信息与输出预算;预算过小可能在正文生成前耗尽。使用 Step 5 Preview 时,先核对模型参数表中的配置,再根据具体错误调整。 > **Q: MCP 中没有 step-search 或对应工具怎么办?** > > 确认配置合并在 `mcpServers` 下,`type` 为 `streamableHttp`,`disabled` 为 `false`,且请求头包含完整的 `Bearer ` 前缀和密钥。保存后刷新或重新连接服务,并检查连接日志。 # CodeGPT Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/codegpt CodeGPT 是运行在 VS Code 中的 AI 编码助手扩展,支持 Chat 与 Agent。通过 Custom Provider 的 OpenAI 兼容接口,可接入 Step Plan 模型进行对话和代码修改。 ## 接入条件 * 已安装 VS Code 和 CodeGPT 扩展,扩展标识为 `danielsanmedium.dscodegpt`。配置步骤对应 CodeGPT 3.24.73。 * 已登录 CodeGPT 账号,可访问模型管理中的 Local / Custom 配置。 * [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 * 已在 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 配置连接 1. 打开 CodeGPT 面板,进入 Manage AI Models。 2. 选择 Local,再选择 Custom (any OpenAI-compatible server)。 3. 填写连接参数。 | 配置项 | 填写内容 | | - | - | | Base URL / endpoint | `https://api.stepfun.com/step_plan/v1` | | API Key | StepFun API Key | CodeGPT 自动在 Base URL 后追加 `/chat/completions`。上述地址使用 Step Plan 订阅额度。 4. 点击 Test。显示 `Connected` 并加载模型列表后,选择 `step-5-preview`。 5. 点击 Save & close 保存。 6. 在聊天模型选择器中选择 Custom 下的 `step-5-preview`,新建对话。 Custom Provider 的地址、密钥和模型通过模型管理面板配置。 ## 验证接入 ### 验证对话 在 Chat 中输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请只回复 OK。 ``` 预期返回 `OK`。 ### 验证工具调用 在安装了 Python 的独立测试目录中创建 `README.md`,内容为 `CodeGPT Step Plan test`,并在 VS Code 中打开该目录。 切换到 Agent 模式,确认仍选中 Custom 下的 `step-5-preview`,输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 读取 README.md,创建 hello.py,输出 Hello, StepFun!。 使用本机可用的 Python 解释器运行 hello.py,并汇报执行命令和输出。 不要修改其他文件。 ``` 按扩展提示授权文件操作和命令执行,核对工具记录、生成的 `hello.py` 和 `Hello, StepFun!` 运行输出。 ### 核对用量 在 [StepFun 开放平台](https://platform.stepfun.com)的使用详情中,按请求时间核对模型 ID 和计费来源,确认调用使用 Step Plan。 ## 常见问题 > **Q: Test 连接失败怎么办?** > > 核对 Base URL、API Key 和网络连接。地址应为 `https://api.stepfun.com/step_plan/v1`,密钥应属于对应平台账号。修改后重新点击 Test。 > **Q: 模型列表为空或没有目标模型怎么办?** > > 确认 Test 已显示 `Connected`,并检查账号的 Step Plan 订阅与模型权限。重新测试连接后选择模型。 > **Q: 如何确认使用的是 Step 模型?** > > 模型选择器中选择 Custom 下的 `step-5-preview`,并在 StepFun 开放平台的使用详情中核对本次请求的模型及计费来源。 > **Q: Chat 正常,但 Agent 无法执行任务怎么办?** > > 确认已切换到 Agent 模式并打开项目目录,检查文件和终端权限。Python 示例还需要本机具有可用的 Python 解释器。 # Codex CLI Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/codex Codex CLI 是 OpenAI 开源的终端编码 Agent,支持文件读取、代码修改和命令执行。通过自定义 Provider,可在本地项目中使用 Step Plan 模型完成开发任务。 ## 接入条件 * 已安装 Node.js、npm、`curl` 和 Python 3。以下终端命令适用于 Bash 或 zsh,Windows 用户可在 WSL 中执行。 * [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 * 已在 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 接入说明 * Codex CLI 0.154.0 仅支持 Responses API,`wire_api` 使用 `responses`。Step Plan 提供 `/step_plan/v1/responses`,可直接连接,无需协议转换代理。 * 用户配置写入 `$CODEX_HOME/config.toml`,`CODEX_HOME` 默认为 `~/.codex`。API Key 通过环境变量或该目录下的 `.env` 提供,不写入 `config.toml`。 * Codex 的内置模型目录主要提供 OpenAI 模型元数据。本配置通过 `model_catalog_json` 声明 Step 模型名称、上下文窗口和输入能力,使其在 `/model` 中可选;模型目录只在 Step 专用 profile 中启用。 ## 安装 Codex CLI 安装 Codex CLI 0.154.0: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} npm install -g @openai/codex@0.154.0 ``` 检查安装版本: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} codex --version ``` 预期输出为 `codex-cli 0.154.0`。 ## 配置 Step Plan ### 确定配置目录 在终端执行以下命令,保留已有的 `CODEX_HOME` 设置;未设置时使用默认目录: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}" mkdir -p "$CODEX_HOME" export CODEX_HOME="$(cd "$CODEX_HOME" && pwd)" ``` 如需与日常配置分开,改用独立目录后再继续配置: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export CODEX_HOME="$HOME/.codex-step-plan" mkdir -p "$CODEX_HOME" ``` 请在同一终端中完成后续配置与启动。以后使用独立配置目录时,也需先设置对应的 `CODEX_HOME`。 ### 添加 Provider 编辑 `$CODEX_HOME/config.toml`,合并以下配置,保留其他设置。若已存在 `[model_providers.stepfun]`,更新该表即可。 ```toml theme={"theme":{"light":"light-plus","dark":"dark-plus"}} [model_providers.stepfun] name = "StepFun Step Plan" base_url = "https://api.stepfun.com/step_plan/v1" env_key = "STEP_API_KEY" wire_api = "responses" ``` | 字段 | 说明 | | - | - | | `model_providers.stepfun` | Provider 标识,后续通过 `model_provider = "stepfun"` 引用。 | | `base_url` | Step Plan 基础地址。Codex 自动追加 `/responses`,完整请求路径为 `/step_plan/v1/responses`。 | | `env_key` | 提供 API Key 的环境变量名称,不是密钥本身。 | | `wire_api` | 使用 Responses API,填写 `responses`。 | Provider 定义必须放在用户级配置中。Codex 会忽略项目 `.codex/config.toml` 中的 `model_provider` 和 `model_providers`。自定义 Provider 也不能使用 `openai`、`ollama`、`lmstudio` 等保留标识。 ### 设置 API Key 将 `YOUR_STEP_API_KEY` 替换为实际密钥,选择以下一种方式配置。 在启动 Codex 的终端中设置环境变量: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export STEP_API_KEY="YOUR_STEP_API_KEY" ``` 也可编辑 `$CODEX_HOME/.env`,添加或更新以下内容,由 Codex 启动时加载: ```dotenv theme={"theme":{"light":"light-plus","dark":"dark-plus"}} STEP_API_KEY=YOUR_STEP_API_KEY ``` 设置文件权限: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} chmod 600 "$CODEX_HOME/.env" ``` `.env` 以明文保存 API Key,请勿将该文件提交到代码仓库或分享给他人。 ### 创建模型目录 1. 下载与 Codex CLI 0.154.0 对应的默认 Agent 指令,作为模型目录中的 `base_instructions`: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://raw.githubusercontent.com/openai/codex/rust-v0.154.0/codex-rs/protocol/src/prompts/base_instructions/default.md \ -o "$CODEX_HOME/default.md" ``` 2. 确认文件非空: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} test -s "$CODEX_HOME/default.md" && wc -c "$CODEX_HOME/default.md" ``` 3. 生成 `$CODEX_HOME/step-catalog.json`: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} python3 - <<'PY' import json import os home = os.environ["CODEX_HOME"] with open(os.path.join(home, "default.md"), encoding="utf-8") as instructions_file: base_instructions = instructions_file.read() def entry(slug, name, description, context_window, input_modalities): return { "slug": slug, "display_name": name, "description": description, "context_window": context_window, "input_modalities": input_modalities, "base_instructions": base_instructions, "visibility": "list", "supported_in_api": True, "priority": 1, "availability_nux": None, "upgrade": None, "default_reasoning_level": "medium", "supported_reasoning_levels": [ {"effort": "low", "description": "较低推理强度"}, {"effort": "medium", "description": "中等推理强度(默认)"}, {"effort": "high", "description": "较高推理强度"}, ], "supports_reasoning_summaries": True, "default_reasoning_summary": "auto", "support_verbosity": False, "default_verbosity": None, "apply_patch_tool_type": "freeform", "web_search_tool_type": "text", "shell_type": "shell_command", "truncation_policy": {"mode": "tokens", "limit": 10000}, "supports_parallel_tool_calls": False, "supports_image_detail_original": False, "effective_context_window_percent": 95, "experimental_supported_tools": [], "supports_search_tool": False, } models = [ entry("step-5-preview", "Step 5 Preview", "StepFun 1M 多模态", 1000000, ["text", "image"]), entry("step-3.7-flash", "Step 3.7 Flash", "StepFun 256K", 256000, ["text", "image"]), entry("step-3.5-flash", "Step 3.5 Flash", "StepFun 256K", 256000, ["text"]), ] catalog_path = os.path.join(home, "step-catalog.json") with open(catalog_path, "w", encoding="utf-8") as catalog_file: json.dump({"models": models}, catalog_file, ensure_ascii=False, indent=2) print("已生成:", catalog_path) print("模型:", [model["slug"] for model in models]) PY ``` 生成结果应包含 `step-5-preview`、`step-3.7-flash` 和 `step-3.5-flash`。可按账号权限增删 `entry(...)` 条目。模型目录字段与 Codex 版本相关,升级后应按目标版本重新检查。 ### 创建 Step 专用配置 新建 `$CODEX_HOME/step.config.toml`。首次创建时可执行以下命令;文件已存在时,请合并配置,保留其他设置。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} cat > "$CODEX_HOME/step.config.toml" < **Q: 启动后要求登录 ChatGPT 怎么办?** > > 核对 `CODEX_HOME`、`step.config.toml` 中的 `model_provider = "stepfun"`,以及启动命令是否包含 `--profile step`。确认用户级 `config.toml` 中存在对应 Provider,且 API Key 已通过环境变量或 `.env` 提供。使用独立配置目录时,在当前终端重新设置 `CODEX_HOME` 后启动。 > **Q: /model 中没有 Step 模型或出现 Model metadata not found 怎么办?** > > 检查所选 profile 的 `model_catalog_json` 是否指向有效的绝对路径,以及目录中的模型 ID 是否正确。修改后重启 Codex;若仍显示旧列表,退出 Codex,移除当前 `CODEX_HOME` 下的 `models_cache.json` 后重试。 > **Q: 模型目录报 missing field 怎么办?** > > 模型目录缺少当前 Codex 版本要求的字段。使用与目标版本匹配的结构重新生成 `step-catalog.json`,并确认 `default.md` 下载成功且非空。不要将其他版本的精简目录直接用于当前版本。 > **Q: 连接失败、持续重连或返回 401 怎么办?** > > 查看完整错误信息,检查网络连接、API Key 状态与模型权限。`base_url` 使用 `https://api.stepfun.com/step_plan/v1`,`wire_api` 使用 `responses`;确认 `env_key` 与实际环境变量名称一致,且密钥属于所用端点对应的账号。 > **Q: codex exec 一直等待标准输入怎么办?** > > 如果输出停留在 `Reading additional input from stdin...`,且无需通过标准输入提供内容,在命令末尾添加 `< /dev/null`。 > **Q: 回复为空或返回 incomplete 怎么办?** > > 检查服务端返回状态、错误详情与 Token 用量。推理消耗和输出预算不足都可能影响正文生成;确认具体原因后,再使用目标客户端版本与服务端支持的参数调整。 > **Q: MCP 已注册,但会话中没有搜索工具怎么办?** > > 核对注册与启动时的 `CODEX_HOME` 是否一致,并检查 `STEP_API_KEY`。通过 `codex mcp list` 检查配置,重启交互会话后用 `/mcp` 检查连接状态。若在 `codex exec` 中使用,也需单独确认该运行方式实际加载并调用了工具。 # Cursor Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/cursor 本文介绍如何将 StepFun 模型接入 Cursor,在 Chat / Agent 中完成代码生成、文件修改等开发任务。 ## 接入条件 ### Cursor 账号要求 需要有效的 **Cursor 付费订阅**(例如 Pro 或 Teams),用于启用 BYOK(Bring Your Own Key,自带 API Key)。**Free / Hobby 免费账号不能通过本文方式在 Cursor 内置 Chat / Agent 中调用 Step 模型。** ### 安装 Cursor 从 Cursor 官网下载并安装编辑器。建议使用 **Cursor 3.15.20 或更高版本**。 ### 选择计费方式 * **普通 API(按量付费)**:确认账户有可用余额或额度,且具备所用模型的调用权限。 * **Step Plan(订阅额度)**:确认 [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 ### 获取 API Key 前往 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 配置 Cursor > [!NOTE] > > 本配置用于 Chat / Agent;代码自动补全(Tab)仍使用 Cursor 内置模型。 > [!WARNING] > > **Override OpenAI Base URL** 是全局覆盖设置。开启后,走 OpenAI 协议的请求会统一发送至自定义端点。需要使用 Cursor 订阅内置模型时,请先[关闭 Override](#切回-cursor-内置模型),再新建会话。 **1. 打开模型设置** 打开 **Cursor Settings**,进入 **Models** 页面。也可以通过命令面板搜索 `Cursor Settings` 打开设置。 **2. 配置连接** 在 Models 页面的连接配置区域填写以下内容(Base URL 以 Step Plan 为例): | 字段 | 填写内容 | | - | - | | OpenAI API Key | `` | | Use OpenAI API Key | `ON` | | Override OpenAI Base URL | `ON` | | Base URL | `https://api.stepfun.com/step_plan/v1` | 在 **OpenAI API Key** 字段中填写 Step API Key,用于请求认证。 > [!NOTE] > > 根据计费方式选择 Base URL: > > 普通 API(按量付费):`https://api.stepfun.com/v1`\\ > > Step Plan(订阅额度):`https://api.stepfun.com/step_plan/v1` > > Base URL 不包含 `/chat/completions`;Cursor 会自动追加该路径。 **3. 添加自定义模型** 在 Models 页面添加自定义模型,**Model ID** 可填写 `step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603` 或 `step-3.5-flash`。 [`step-5-preview`](/docs/zh/guides/models/step-5-preview) 的模型上下文窗口为 **1M tokens**。 **4. 选择模型并新建会话** 打开 Chat 或 Agent 面板,选择刚添加的 Step 模型,并新建会话进行测试。 ## 验证接入 ### 文本连通 在新会话中输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请只回复 OK。 ``` **预期结果**:返回 `OK`,且未出现 `401`、`403` 或协议错误。 ### Agent 工具调用 在已安装 Python 的独立测试目录中,创建一个 `README.md` 文件,内容为 `Cursor Step Plan test`。在 Cursor 中打开该目录,使用选中了 Step 模型的新 **Agent** 会话,输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} Read README.md in the current workspace. Create a hello world script in Python named hello.py that prints exactly "Hello, world!". Run the script with an available Python interpreter and report the command and output. Do not modify README.md or any other files. ``` 检查 Agent 提议的文件操作和命令后,再按需授权执行。 **预期结果**: 1. 会话中出现读取 `README.md`、创建 `hello.py` 和执行命令的真实工具调用记录。 2. 工作目录中实际生成 `hello.py`,可在编辑器中核对文件内容与变更。 3. 运行输出为 `Hello, world!`。 仅在对话中返回一段代码,不代表已完成 Agent 工具调用验证。 ### 请求路由 在 [Step 开放平台](https://platform.stepfun.com)的用量或请求记录中,确认本次调用的模型 ID 与 Cursor 中的选择一致,计费通道与配置的普通 API 或 Step Plan Base URL 对应。 ### 重启验证(可选) 完全退出并重新打开 Cursor,确认 Models 配置保留,并在新会话中使用同一模型重复文本连通测试。 ## 切回 Cursor 内置模型 仅切换模型选择器,不会自动取消自定义 Base URL。 1. 在 **Cursor Settings → Models** 中关闭 **Override OpenAI Base URL**。 2. 按需关闭 **Use OpenAI API Key**。 3. 新建会话,选择要使用的 Cursor 内置模型。 ## 常见问题 > **Q: 配置 API Key 后仍提示升级或达到用量上限怎么办?** > > 先在 Cursor Dashboard 确认当前登录账号的订阅状态: > > * **Free / Hobby**:免费账号不支持 BYOK,请先满足 [Cursor 账号要求](#cursor-账号要求)。 > * **有效付费订阅**:确认使用的是已订阅的 Cursor 账号、自定义 Step 模型及新会话。团队账号还需确认管理员允许 BYOK,并检查团队的使用限制;Step 账户的模型权限及余额或订阅额度按[所选计费方式](#选择计费方式)检查。 > **Q: 配置后提示 Connection error 怎么办?** > > 依次检查: > > 1. **Override OpenAI Base URL** 已开启,Base URL 与计费方式一致:普通 API 使用 `https://api.stepfun.com/v1`,Step Plan 使用 `https://api.stepfun.com/step_plan/v1`。 > 2. Base URL 没有误填 `/chat/completions` 等完整接口路径。 > 3. API Key 有效,且 **Use OpenAI API Key** 已开启。 > 4. Model ID 拼写正确,账号具备所选通道下的模型调用权限。 > 5. 当前网络可访问 `https://api.stepfun.com`;若使用代理,同时检查代理配置。 > **Q: 配置后提示 401 Incorrect API key 怎么办?** > > 检查以下项目: > > * Key 是否复制完整,是否包含多余空格或换行,是否已被撤销。 > * Key 是否来自当前中文站(`.com`)账号,是否误用了其他站点或服务商的密钥。 > * **Use OpenAI API Key** 是否为 `ON`。 > > 重新粘贴完整 Key 并启用开关后,新建会话重试。权限或额度问题请按[所选计费方式](#选择计费方式)检查账户状态。 > **Q: 配置后提示 model not found / BAD\_MODEL\_NAME 怎么办?** > > 1. 确认 Model ID 填写正确,例如 `step-5-preview`,且账号具备所选通道下的模型调用权限。 > 2. 确认 Override 已开启,Base URL 与所选计费方式一致。 > 3. 在新建的 Chat / Agent 会话中选择该自定义模型。 > **Q: 为什么 Chat 可用,但 Agent 无法执行任务?** > > * 确认当前使用 **Agent** 模式,而不只是文本对话模式。 > * 确认选中的是自定义 Step 模型,不是 Auto,并用新会话重试最小 Agent 任务。 > * 检查 Cursor 是否在等待文件修改或终端命令授权;Python 示例还需要本机有可用的 Python 解释器。 > * 区分模型请求失败与工具执行失败:例如 Python 未安装或命令被拒绝,不代表模型连接失败。 若仍无法解决,联系[技术支持](/docs/zh/guides/contact-us)时提供 Cursor 版本、模型 ID、发生时间、脱敏后的错误信息和 Cursor Request ID。 获取 Cursor Request ID:在对应 Chat / Agent 会话右上角打开 **…** 菜单,选择 **Copy Request ID**。 ## 相关文档 * [Step Plan 快速开始](/docs/zh/step-plan/quick-start) * [Step 5 Preview 模型规格](/docs/zh/guides/models/step-5-preview) # DeepSeek Harness Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/deepseek-harness DeepSeek Harness(`dsh`)是 DeepSeek 开源的 Agent Harness。本文介绍如何通过自定义 Provider 接入 Step 5 Preview,包括 Web UI 配置、配置文件、验证与常见问题。 > [!NOTE] > > dsh 目前处于开发者预览阶段,界面和配置可能随版本变化。本文按当前官方模型配置文档整理;运行前请阅读项目的[安全说明](https://github.com/deepseek-ai/deepseek-harness/blob/master/SAFETY.md),只在可信工作目录中使用,并谨慎授权文件操作和命令执行。 ## 配置速查 | 配置项 | 值 | | - | - | | Provider ID | `stepfun` | | API protocol | `openai-completions` | | Step Plan Base URL | `https://api.stepfun.com/step_plan/v1` | | 按量付费 API Base URL | `https://api.stepfun.com/v1` | | 模型 ID | `step-5-preview` | | 上下文窗口 | 1,000,000 tokens | | API Key | [控制台密钥管理](https://platform.stepfun.com/interface-key) | ## 前置条件 ### 安装并启动 dsh 准备 Node.js 22.19+(22.x)或 24+ 和 npm,建议使用当前 LTS,并以 dsh 官方要求为准。然后在可信工作目录中运行: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} npx -y @deepseek-ai/dsh web ``` 首次运行会下载所需包。本机启动时默认打开 `http://127.0.0.1:3080`;通过 SSH 启动时可能只打印地址。具体启动选项见 [dsh 官方仓库](https://github.com/deepseek-ai/deepseek-harness)。 ### 准备 API Key 在[控制台](https://platform.stepfun.com/interface-key)创建 API Key。使用 Step Plan 前请确认[订阅](https://platform.stepfun.com/plan-subscribe)和模型权限;使用按量付费 API 时请确认账户余额及权限。不要将真实密钥提交到代码仓库或分享在截图中。 ## 方式一:通过 Web UI 配置 > [!WARNING] > > 使用 Step Plan 订阅额度时,必须选择 `/step_plan/v1`,并确认订阅有效、具备对应模型权限。普通 `/v1` 是按量付费 API,不会因为已有 Step Plan 订阅而自动使用订阅额度。下文示例默认使用 Step Plan;按量付费用户请统一替换 Base URL。 **1. 打开模型设置** 在 dsh Web UI 中进入 **Settings → Models**,选择 **Add a custom provider**。 **2. 填写 Provider** | 字段 | 填写内容 | | - | - | | Provider ID | `stepfun`,这是提供方标识,不是模型名 | | Display name | `StepFun` | | Base URL | `https://api.stepfun.com/step_plan/v1` | | API protocol | `openai-completions` | | API key | 您的 StepFun API Key | Provider ID 保存后不能直接重命名;要使用新标识,请创建新的 Provider。 **3. 添加模型** 在模型列表中点击 **Add model**,将模型 ID 和显示名称都填为 `step-5-preview`。在 **Model options** 中将上下文窗口设为 `1000000`(1,000,000 tokens,输入时不加逗号);需要图片输入时,在 **Input types** 中保留 **Text** 并选中 **Image**。 可选添加 `step-3.7-flash`,上下文窗口为 256,000 tokens(填写 `256000`)。模型规格分别见 [Step 5 Preview](/docs/zh/guides/models/step-5-preview) 和 [Step 3.7 Flash](/docs/zh/guides/models/step-3.7-flash),可用模型以当前账户权限为准。 > [!WARNING] > > 模型 ID 不能为空。仅点击 Add model 而不填写 ID 会导致保存失败;Provider ID 应为 `stepfun`,模型 ID 是 `step-5-preview`。 **4. 保存并选择模型** 点击 **Create provider**,新建会话,在模型选择器中选择 StepFun 下的 `step-5-preview`,发送一条简单消息验证。已有会话可能保留之前使用的模型。 > [!NOTE] > > Web UI 保存的密钥存储在运行 dsh 的机器上的 `$DSH_HOME/.credentials.yaml` 中,配置只保留凭据引用;如果 dsh 部署在远程服务器上,密钥也保存在服务器上。调用模型时仍会将密钥作为认证信息发送给配置的 API 服务,请核对 Base URL。 ## 方式二:通过配置文件 > [!WARNING] > > 使用 Step Plan 订阅额度时,必须选择 `/step_plan/v1`,并确认订阅有效、具备对应模型权限。普通 `/v1` 是按量付费 API,不会因为已有 Step Plan 订阅而自动使用订阅额度。下文示例默认使用 Step Plan;按量付费用户请统一替换 Base URL。 编辑 `~/.dsh/settings.yaml`。如果设置了 `DSH_HOME`,请使用该目录下的 `settings.yaml`。将以下配置合并到现有 `llm-pi-ai.providers` 中,不要覆盖其他 Provider 或重复创建同名 YAML 键。 ```yaml theme={"theme":{"light":"light-plus","dark":"dark-plus"}} llm-pi-ai: providers: stepfun: apiKeyEnv: STEPFUN_API_KEY api: openai-completions baseURL: https://api.stepfun.com/step_plan/v1 compat: supportsDeveloperRole: false maxTokensField: max_tokens models: - id: step-5-preview name: step-5-preview contextWindow: 1000000 input: [text, image] - id: step-3.7-flash name: step-3.7-flash contextWindow: 256000 input: [text, image] ``` `compat` 将系统指令按兼容的角色发送,并使用 `max_tokens` 指定输出限制;这些选项见 [dsh 请求兼容性文档](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/guide/providers.md#request-compatibility)。`input` 声明 dsh 可发送的输入类型,不代表模型的全部模态能力。 ### 设置凭据 选择以下一种方式: * **Web UI(推荐)**:启动 dsh,进入 **Settings → Models**,编辑 `stepfun`,填入 API Key 并保存。 * **环境变量**:将 `YOUR_STEP_API_KEY` 替换为您的 API Key,在启动 dsh 的同一个终端中设置变量,再启动进程。以下命令适用于 macOS / Linux / WSL 的 Bash 或 Zsh: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export STEPFUN_API_KEY="YOUR_STEP_API_KEY" npx -y @deepseek-ai/dsh web ``` > [!NOTE] > > `settings.yaml` 和通过 Web UI 保存的凭据通常在下一次请求生效,无需重启。终端中的新环境变量不会自动传入已经运行的进程;使用环境变量方式时,需要从已设置变量的终端重新启动 dsh。 ## 验证配置 先确认 **dsh 新会话**选中了 `stepfun` 下的 `step-5-preview`,发送简单消息并检查返回。 如需单独排查 API 连通性,在终端设置 `STEPFUN_API_KEY` 后运行以下命令。仅在 Web UI 中保存密钥不会自动设置终端变量。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl --silent --show-error --fail-with-body \ --write-out '\nHTTP %{http_code}\n' \ https://api.stepfun.com/step_plan/v1/chat/completions \ -H "Authorization: Bearer $STEPFUN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "step-5-preview", "messages": [{"role": "user", "content": "Say hello briefly."}], "max_tokens": 1024 }' ``` 返回 HTTP 200 且 JSON 中包含正常的 `choices` 表示这次 API 请求成功;它不能单独证明 dsh 的 Provider、凭据或会话选择正确。若输出被截断,可提高 `max_tokens` 后重试。测试调用会使用对应账户的额度。 ## 常见问题 | 现象 | 排查方式 | | - | - | | `MISSING_CREDENTIAL` | 确认 `apiKeyEnv` 与 `STEPFUN_API_KEY` 一致,变量已传入 dsh 进程;或在 Web UI 中补填密钥。若旧环境变量仍存在,更新或移除它后重启,避免遮蔽 UI 保存的新密钥。 | | 模型 ID 不能为空 | 模型 ID 是 API 调用时使用的模型标识:Step 5 Preview 填写 `step-5-preview`,Step 3.7 Flash 填写 `step-3.7-flash`。为每个新增模型填写对应 ID,或删除多余的空模型行。Provider ID 填写 `stepfun`,不要与模型 ID 混淆。 | | `401 Unauthorized` | 检查密钥是否正确、有效,且属于当前 API 地址对应的平台账户。 | | `404` / model not found | 检查 Base URL、`step-5-preview` 拼写以及账户模型权限;不要把完整 `/chat/completions` 路径填入 Base URL。 | | 密钥和地址正确,但请求字段被拒绝 | 检查 YAML 的 `compat.supportsDeveloperRole: false` 和 `compat.maxTokensField: max_tokens`,然后新建会话重试。 | | 新配置没有生效 | 检查 `DSH_HOME`、YAML 缩进及重复键;重新选择模型并新建会话。使用新环境变量时重启 dsh。 | | 模型列表获取失败 | 模型发现依赖服务端列表接口;可以直接手动添加模型 ID,不必等待自动发现。 | ## 相关文档 * [Step 5 Preview](/docs/zh/guides/models/step-5-preview) * [Step 3.7 Flash](/docs/zh/guides/models/step-3.7-flash) * [Step Plan 快速开始](/docs/zh/step-plan/quick-start) # Goose Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/goose Goose 是由 Block(前身为 Square)开发的开源 AI Agent 客户端。它通过自然语言支持代码生成、文件编辑、命令执行和项目分析等开发任务。通过配置 OpenAI Compatible 提供商,Goose 可以连接到 Step 模型,并在常见的开发工作流中使用本地工具。 本文档介绍将 Step API 与 Goose 集成的前置条件、配置步骤和基本验证方法。 ## 概述 Goose 支持通过 OpenAI Compatible API 集成第三方大型语言模型。配置提供商后,您可以直接在 Goose 中使用 Step 模型进行对话任务、代码编辑和工具调用。 通过配置自定义提供商,Goose 可以使用 Step 模型实现以下功能: * 自主任务执行:自动编辑文件并运行 Shell 命令。 * 代码库分析:理解项目结构并回答复杂的编程问题。 * 自动化工作流:结合本地工具链完成端到端的开发任务。 ## 前置条件 开始之前,请确保满足以下要求。 ### 安装 Goose 确保已安装 Goose 命令行工具或桌面客户端。 * [官方网站](https://block.github.io/goose/) ### 订阅 Step Plan 开始配置之前,请确保您的当前账户已有有效的 Step Plan 订阅。只有具备所需套餐或调用权限的账户才能正常使用模型调用和配额。 如需订阅或购买,请访问 [Step Plan 订阅](https://platform.stepfun.com/step-plan) ### 获取 Step API Key 登录 StepFun 开放平台获取用于身份验证的 API Key,并妥善保管。 ### 确认连接信息 提前准备以下连接信息: * Base URL:`https://api.stepfun.com/step_plan/v1` * 协议类型:`OpenAI Compatible` ## 配置步骤 ### 打开提供商设置 在 Goose 桌面客户端中,点击 `Settings`,选择 `Providers`,然后点击 `Add Provider`。 ### 填写配置参数 在配置对话框中,输入以下信息: * Provider Type:选择 `OpenAI Compatible` * Display Name:输入 `StepFun` * API URL:输入 `https://api.stepfun.com/step_plan/v1` * API Key:粘贴您从 Step 平台获取的密钥 * Available Models:输入以下模型名称 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ``` > 说明:`` 请填写当前账号在 Step Plan 下可用的模型。已验证示例:`step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603`、`step-3.5-flash`。文档列出的模型不构成全部可用名单。 配置完成后,Goose 即可通过该提供商调用 Step 模型。 ## 测试集成 配置完成后,在 Goose 主聊天窗口切换至 `StepFun` 提供商下的任意模型,并使用以下示例进行验证。 ### 基础对话测试 输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 你好,你是谁? ``` 预期结果:返回由 StepFun 提供的模型身份回复。 ### 工具能力测试 输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请列出我当前目录下的所有文件。 ``` 预期结果:Goose 调用本地目录列表工具,并使用 Step 模型对文件列表进行汇总。 ### 代码编辑测试 输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 帮我创建一个名为 hello.py 的文件,输出当前时间。 ``` 预期结果:Goose 生成代码并将文件保存到本地磁盘。 ## 常见问题 ### 工具识别失败或连接超时 可能原因:当前网络环境可能无法直接访问 API 端点。 请检查以下内容: * 代理或网络设置是否正确 * API URL 末尾是否误加了斜杠 ### 模型列表为空 如果模型下拉列表为空,请确保已在 `Available Models` 中手动输入具体的模型标识符,例如: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ``` 如果未输入任何模型标识符,下拉列表可能无法正确显示可用选项。 ## 总结 通过 Goose 的 `OpenAI Compatible` 模式,开发者可以将 Step 模型的推理能力与 Goose 的本地工具链相结合,用于代码生成、文件操作和项目分析等任务。 建议使用 `` 进行集成验证和日常开发任务。 # Hermes Agent Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/hermes-agent Hermes Agent 是由 Nous Research 开发的开源 AI Agent 框架,支持在终端环境中通过自然语言完成代码生成、文件编辑、任务自动化等开发任务。Hermes Agent 可以接入 Step 模型,在命令行或消息平台中调用推理能力。 本文档介绍如何在 Hermes Agent 中完成 Step API 的接入配置,并验证模型是否可用。 ## 概述 Hermes Agent 适合在服务器或本地终端中运行的 AI 编程助手。完成配置后,您可以通过终端 TUI 或 Telegram 等消息平台与 Agent 对话,让它执行代码生成、文件操作、定时任务等自动化工作。 ## 前置条件 ### 操作系统 Hermes Agent 支持以下系统: * Linux(推荐 Ubuntu/Debian) * macOS * Windows(需使用 WSL2) ### 安装 Hermes Agent Hermes Agent 提供一键安装脚本,自动完成依赖安装和配置。 **通过安装脚本(推荐):** ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash ``` 安装脚本会自动检测并安装以下组件: * `uv`(Python 包管理器) * `Python 3.9+` * `Node.js`(部分技能需要) * `ripgrep`、`ffmpeg` 等工具 安装完成后,重新加载 shell 配置: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} source ~/.bashrc # Bash 用户 # 或 source ~/.zshrc # Zsh 用户 ``` 验证安装: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hermes --version ``` 若返回版本号(如 `Hermes Agent v0.6.0`),则说明安装成功。 ### 订阅 Step Plan 在开始配置前,请先确认当前账号已完成 Step Plan 订阅。只有在账号具备对应计划或调用权限后,后续模型调用与额度使用才会正常生效。 如需订阅或购买,请访问:[Step Plan 订阅](https://platform.stepfun.com/step-plan) ### 获取 Step API Key 在 [Step 开放平台](https://platform.stepfun.com/interface-key) 获取 API Key,用于身份认证和请求授权。建议通过控制台创建新的 Key,并避免将其硬编码进代码仓库。 推荐做法: * 使用环境变量保存 Key * 或通过本地配置文件管理 Key ## 配置步骤 Hermes Agent 通过环境变量或配置文件读取 API 服务地址和认证信息。 ### 方式一:通过 Hermes Agent 的配置向导 如果您是首次安装或希望重新运行引导流程: 打开终端,执行以下命令: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hermes setup ``` 在引导过程中: 1. 当提示选择模型提供商时,选择 **StepFun Step Plan**后选择**China**。 2. 填入您在第一步获取的 **API Key**。\\ 3. 选择您想要用的 Model ID。 ### 方式二:配置文件修改 Hermes Agent 的配置文件位于 `~/.hermes/config.yaml`。 打开配置文件,找到 `model` 相关配置项,添加或修改以下内容: ```yaml theme={"theme":{"light":"light-plus","dark":"dark-plus"}} model: provider: openai api_key: "YOUR_STEP_API_KEY" base_url: "https://api.stepfun.com/step_plan/v1" model: "" ``` > **说明**:`` 请填写当前账号在 Step Plan 下可用的模型。已验证示例:`step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603`、`step-3.5-flash`。文档列出的模型不构成全部可用名单。 ### 选择模型 配置完成后,运行以下命令选择模型: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hermes model ``` ## 测试接入 完成配置后,启动 Hermes Agent 并发送测试消息: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hermes ``` 在对话界面中输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hello ``` 如果返回正常内容,说明 API 调用成功。 ### 代码生成测试 输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} Create a hello world script in Python ``` 预期返回类似结果: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} print("Hello, world!") ``` ### 文件操作测试 输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 在当前目录创建一个名为 test.txt 的文件,内容为 "Hermes Agent test" ``` 如果 Agent 成功创建文件,则说明模型调用链路正常。 ## 常见问题 ### 模型列表为空或无法加载 如果 `hermes model` 命令中未显示 Step 相关模型,请检查: 1. 当前网络是否能访问 `api.stepfun.com`。 2. Base URL 是否填写为 `https://api.stepfun.com/step_plan/v1`。 3. API Key 是否具有 Step Plan 权限。 4. Hermes Agent 是否为最新版本(`hermes update` 升级)。 ### API Key 错误 如果出现以下报错: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 401 Incorrect API key ``` 请检查: * Key 是否复制完整 * Key 是否属于正确环境(Step Plan 对应 `.com` 域名) * Base URL 是否指向 Step Plan 端点 ### 连接超时或失败 请检查: * 当前网络环境是否正常(如有代理需配置) * API 端点是否可访问(`curl https://api.stepfun.com/step_plan/v1` 测试连通性) ### 模型返回错误 请确认 Model ID 是否填写正确,例如: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ``` 推荐模型(已验证示例,请按当前账号权限替换): * `step-5-preview`(新一代旗舰多模态强推理,支持图片和视频理解) * `step-3.7-flash`(高速多模态推理模型) * `step-3.5-flash-2603`(Agent 优化版,推理更强) * `step-3.5-flash`(标准版,响应更快) ## 高级配置(可选) ### 启用工具调用 Hermes Agent 支持自动工具调用。在 `~/.hermes/config.yaml` 中启用: ```yaml theme={"theme":{"light":"light-plus","dark":"dark-plus"}} tools: enabled: - terminal - file - browser - code_execution ``` ### 配置记忆系统 Hermes Agent 的持久记忆存储在 `~/.hermes/memories/` 目录。您可以通过自然语言让 Agent 记住重要信息,这些记忆会在后续对话中自动召回。 ### 消息网关(Telegram/Discord) 如需在手机上通过 Telegram 与 Hermes Agent 对话,启动网关: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hermes gateway start ``` 首次运行会提示配置 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_ALLOWED_USERS`,相关信息可在 Telegram 中通过 @BotFather 获取。 ## 总结 完成环境变量或配置文件配置后,Hermes Agent 即可通过 Step API 在终端或消息平台中执行代码生成、文件编辑、任务自动化等开发任务。建议先用最小示例(如 hello world)验证连通性,再逐步探索技能创建、记忆管理和定时任务等高级功能。 # Kilo Code Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/kilo-code Kilo Code 是运行在 VS Code、Cursor 等编辑器中的编码 Agent,可连接不同模型提供方,执行代码修改、调试和终端任务。通过 Step Plan Provider,可在编辑器内使用 Step 模型。 ## 接入条件 * 已安装 VS Code 或 Cursor。运行下方 Python 验证示例时,还需安装 Python 3。 * [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 * 已在 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 安装 Kilo Code 在编辑器扩展市场中搜索并安装 Kilo Code,扩展标识为 `kilocode.kilo-code`。以下步骤使用包含 `Providers` 和 `Models` 设置页的版本。 ## 配置 Step Plan ### 连接内置 Provider 1. 打开 Kilo Code 设置,进入 `Providers`,选择 `StepFun Step Plan (China)`。 2. 填写 API Key,点击 `Submit` 保存。API Key 字段不添加 `Bearer ` 前缀或首尾空格。 3. 在 `Settings > Models > Default Model` 中,选择该 Provider 下的 Step 5 Preview,模型 ID 为 `step-5-preview`。 4. 保存后新建任务。使用内置 Provider 时,保留其模型预设参数。 ### 使用自定义 Provider 如果当前版本没有 Step Plan 预设,或预设列表中没有目标模型,可通过 `Providers > Custom provider` 手动配置: | 配置项 | 填写值 | | - | - | | `Provider ID` | `step-plan`。 | | `Display name` | `Step Plan`。 | | `Provider API` | `OpenAI Compatible`。 | | `Base URL` | `https://api.stepfun.com/step_plan/v1`。 | | `API key` | Step API Key,不包含 `Bearer ` 前缀。 | | `Models` | 选择或添加 `step-5-preview`。 | 点击 `Submit` 后,在模型选择器中选择该自定义 Provider 下的模型。此配置使用 Chat Completions 协议,完整请求路径为 `/step_plan/v1/chat/completions`。 手动添加的模型还需提供上下文和输出容量信息。若当前配置文件中的自定义模型缺少这些字段,将以下内容合并到 `kilo.json` 或 `kilo.jsonc`,保留该 Provider 已有的连接与认证设置: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "provider": { "step-plan": { "models": { "step-5-preview": { "name": "Step 5 Preview", "limit": { "context": 1000000, "output": 65536 } } } } } } ``` 上述容量配置适用于 [Step 5 Preview](/docs/zh/guides/models/step-5-preview)。切换到其他模型时,按对应模型规格调整。推理模型需要为推理与正文保留预算,过小的输出限制可能导致正文为空或提前结束。 ## 接入 StepSearch MCP [StepSearch](/docs/zh/guides/developer/search-mcp) 通过 Step Plan 端点提供 `web_search` 和 `web_fetch`,用于联网搜索与网页内容获取。 ### 提供认证环境变量 完全退出编辑器后,在项目目录的终端中设置密钥并重新启动编辑器。将 `YOUR_STEP_API_KEY` 替换为实际密钥;Cursor 用户将 `code .` 替换为 `cursor .`。 **macOS / Linux / WSL** ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export STEP_API_KEY="YOUR_STEP_API_KEY" code . ``` **Windows PowerShell** ```powershell theme={"theme":{"light":"light-plus","dark":"dark-plus"}} $env:STEP_API_KEY = "YOUR_STEP_API_KEY" code . ``` 若编辑器命令不可用,先配置对应命令行入口。环境变量只对当前终端及其启动的进程生效;以后使用该 MCP 时,也需确保编辑器进程能够读取 `STEP_API_KEY`。 ### 添加 MCP 服务 1. 在 Kilo Code 设置中打开 `MCP Servers`。 2. 编辑当前项目的 `kilo.json`。如果项目已有 `kilo.jsonc` 或 `.kilo/` 下的同名配置文件,请合并到现有文件中,保留其他设置: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "mcp": { "step-search": { "type": "remote", "url": "https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp", "headers": { "Authorization": "Bearer {env:STEP_API_KEY}" }, "oauth": false, "enabled": true } } } ``` 3. 保存后刷新或重新连接服务,检查 `step-search` 是否已连接,以及工具列表中是否包含 `web_search` 和 `web_fetch`。 4. 新建任务,调用其中一个工具完成搜索或网页抓取,按提示确认授权,并核对实际返回结果。 新版配置使用顶层 `mcp`、`type: "remote"` 和 `{env:STEP_API_KEY}` 环境变量引用。远程服务优先使用 Streamable HTTP,必要时回退到 SSE。该示例通过请求头认证,不使用 OAuth。 > [!WARNING] > > 请保留示例中的环境变量引用,不要将真实密钥写入项目配置后提交到代码仓库。任何获得该密钥的人都可能以您的权限发起请求并消耗额度。 ## 验证接入 ### 验证对话 新建任务并输入 `请只回复 OK。`,预期返回 `OK`。 ### 验证工具调用 1. 在独立测试目录中创建 `README.md`,内容为 `Kilo Code Step Plan test`,然后在编辑器中打开该目录。 2. 新建任务,发送以下指令: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 读取 README.md,创建 hello.py,使其打印 "Hello, world!"。 使用本机可用的 Python 解释器运行 hello.py,并报告执行命令和实际输出。 不要修改 README.md 或其他已有文件。 ``` 3. 按提示批准必要的文件与命令操作,核对读取、编辑和执行记录。确认 `hello.py` 实际生成,输出为 `Hello, world!`,且 `README.md` 未被修改。 ### 验证配置保存 重启编辑器后,检查 Provider 与模型选择是否保留,并重新发起一次简短对话。 ## 常见问题 > **Q: 找不到 Step Plan Provider 或 Step 5 Preview 怎么办?** > > 更新 Kilo Code 扩展并检查 Provider 列表。也可通过 `Providers > Custom provider` 选择 `OpenAI Compatible`,填写 Step Plan Base URL,并手动添加 `step-5-preview`。保存后,选择该自定义 Provider 下的模型。 > **Q: 提示 Connection error 或返回 401 怎么办?** > > 查看完整错误信息,检查网络连接、Base URL、API Key 与模型权限。自定义 Provider 使用 `https://api.stepfun.com/step_plan/v1`;API Key 应完整、有效,且属于对应站点账号。根据服务端返回信息,分别排查认证、模型和请求参数。 > **Q: 回复为空或被截断怎么办?** > > 检查停止原因和输出预算。推理可能先消耗输出预算,过小的限制会影响正文生成。使用内置模型时先恢复其预设;使用自定义模型时检查容量与请求设置,再按实际错误调整。 > **Q: 旧版 Include max output tokens 设置如何处理?** > > `Include max output tokens` 和 `Max Output Tokens = -1` 属于旧版界面配置,不作为新版内置 Provider 的必填项。新版自定义模型使用 `limit.context`、`limit.output` 描述容量,请填写模型支持的有效值,不要直接将 `-1` 复制到 `limit.output`。 > **Q: 旧版 .kilocode/mcp.json 配置如何处理?** > > 当前流程使用 `kilo.json` 或 `kilo.jsonc` 中的 `mcp` 配置。旧版 `.kilocode/mcp.json` 中的 `mcpServers`、`streamable-http`、`disabled` 等字段不能直接混入新版示例;请按当前配置格式迁移,或使用与旧版扩展匹配的配置。 > **Q: MCP 中没有 step-search 或对应工具怎么办?** > > 检查配置是否位于当前项目实际加载的文件中,`type` 是否为 `remote`、`enabled` 是否为 `true`。确认编辑器进程可以读取 `STEP_API_KEY`,请求头使用 `Bearer {env:STEP_API_KEY}`。保存后重新连接,并查看服务日志。 > **Q: 模型只回复文字,没有执行操作怎么办?** > > 确认已打开目标项目,当前模式允许修改文件,并检查是否有等待批准的工具调用。按提示授权后继续;不需要为完成验证而开启全部自动批准选项。 # Oh My Pi Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/oh-my-pi Oh My Pi(OMP)是 Pi 的工作流扩展,通过 npm 包 `oh-my-pi` 安装,提供任务分类、角色指令和 Skill 加载能力。模型调用沿用 Pi 的 Provider 配置,通过 Anthropic Messages API 接入 Step Plan。 ## 接入条件 * 已按 [Pi 接入指南](/docs/zh/guides/developer/integrations/pi)安装 Pi 0.87.1,并完成 Step Plan 配置与基础对话验证。 * 启动 Pi 的终端已设置 `STEP_API_KEY` 环境变量。 ## 安装 OMP 1. 在终端中安装 `oh-my-pi` 0.2.0。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi install npm:oh-my-pi@0.2.0 ``` 2. 检查已安装的软件包。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi list ``` 软件包列表应包含 `npm:oh-my-pi@0.2.0`。Pi 会在新会话中自动加载扩展。 ## 配置编排器 如需自定义编排器名称和提示词模板,在项目根目录的 `.oh-my-pi.jsonc` 中合并以下配置,保留已有字段。文件不存在时创建该文件。 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "orchestrator": { "agentName": "stepfun", "promptTemplate": "sisyphus" } } ``` 保存后,在已有 Pi 会话中执行 `/oh-my-pi-reload`,或重新启动 Pi。 ## 启动 Pi 在项目目录的终端中执行: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi --provider stepfun --model step-5-preview ``` ## 验证接入 ### 检查扩展状态 在 Pi 会话中输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} /oh-my-pi-doctor ``` 诊断结果应显示 `Healthy`,且配置诊断无错误。 ### 验证对话 在终端中执行: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi --provider stepfun --model step-5-preview --print "请只回复 OK。" ``` 预期返回 `OK`。 ### 验证工具调用 1. 在安装了 Python 的独立测试目录中创建 `README.md`,内容为 `Oh My Pi Step Plan test`。 2. 从该目录启动 Pi。 3. 在会话中输入以下任务。 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 读取 README.md,创建 hello.py,输出 Hello, StepFun!。 使用本机可用的 Python 解释器运行 hello.py,并汇报执行命令和输出。 不要修改其他文件。 ``` 4. 核对文件读取、创建和命令执行记录,确认生成的 `hello.py` 运行输出为 `Hello, StepFun!`。 ### 验证角色调用 在同一测试目录的 Pi 会话中输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 调用 oh_my_pi_subagent 工具,请 oracle 评审 hello.py 的输出和可移植性。 只给出简短结论,不修改文件。 ``` 核对工具记录中包含 `oh_my_pi_subagent`,并确认当前会话返回评审结果。 ### 核查请求通道 Pi 的 Step Plan 配置 Base URL 为 `https://api.stepfun.com/step_plan`,对应请求路径为 `/step_plan/v1/messages`。如需核查请求路由或计费归属,请提供请求时间、模型 ID 和 Request ID 联系技术支持。 ## 常见问题 > **Q: 安装时找不到软件包怎么办?** > > npm 软件包源使用 `npm:` 前缀。请执行 `pi install npm:oh-my-pi@0.2.0`,安装后运行 `pi list` 检查结果。 > **Q: 可以为 oracle 单独指定模型吗?** > > 0.2.0 的 `oh_my_pi_subagent` 工具向当前会话返回角色指令,后续请求仍使用 Pi 当前选择的模型。该版本尚未实现通过 `agents.oracle.model` 或任务分类的 `model` 字段切换实际调用模型。选择模型时,请使用 Pi 的 `--provider` 和 `--model` 参数。 > **Q: 如何停用 OMP?** > > 在终端中执行 `pi remove npm:oh-my-pi@0.2.0`,然后重新启动 Pi。 > **Q: 认证、请求路径或上下文配置异常怎么办?** > > OMP 沿用 Pi 的模型和凭据配置。请按 [Pi 接入指南](/docs/zh/guides/developer/integrations/pi)检查 `STEP_API_KEY`、`models.json` 中的 `baseUrl` 和对应模型的 `contextWindow`。 # OpenCode Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/open-code Open Code 是一款运行在终端中的 AI Coding Agent,适合通过自然语言完成代码生成、代码修改和项目分析等开发任务。完成配置后,可以直接在终端中调用 Step 模型完成开发流程。本文档介绍 Open Code 接入 Step Plan 的准备条件、配置步骤与基础验证方法。 ## 概述 Open Code 适合偏终端交互的开发工作流。Open Code 内置了 StepFun Provider,但默认 Base URL 指向普通付费 API(`/v1`)。要用上 Step Plan 订阅额度,**必须通过 `opencode.json` 将 Base URL 覆盖为 `step_plan/v1`**——这是本指南的核心配置点。 ## 前置条件 ### 开发环境 支持以下系统: * macOS * Linux * Windows(推荐使用 WSL) ### 安装 Open Code 推荐使用 Open Code 官方安装脚本(macOS / Linux / WSL): ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://opencode.ai/install | bash ``` > [!TIP] > > 如果上述脚本下载较慢(脚本会从 GitHub release 资产拉取,国内网络偶尔会中断),或不希望使用 WSL,可改用以下方式: > > ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} > # Homebrew(macOS / Linux) > brew install anomalyco/tap/opencode > > # Chocolatey(Windows) > choco install opencode > > # Scoop(Windows) > scoop install opencode > > # npm 全局安装(跨平台) > npm install -g opencode-ai > ``` 安装完成后,确认安装成功: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} opencode --version ``` ### 订阅 Step Plan 在开始配置前,请先确认当前账号已完成 Step Plan 订阅。只有在账号具备对应计划或调用权限后,后续模型调用与额度使用才会正常生效。如需订阅或购买,请访问:[Step Plan 订阅](https://platform.stepfun.com/step-plan) ### 获取 Step API Key 访问 [Step 平台控制台](https://platform.stepfun.com/interface-key) 创建 API Key,复制并妥善保存。 ## 配置步骤 Open Code 通过 `opencode.json` 配置文件管理 Provider,无需写入 `~/.zshrc`。 ### 创建 opencode.json 创建 `~/.config/opencode/opencode.json`(全局配置,对所有项目生效): ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} mkdir -p ~/.config/opencode ``` 写入以下内容: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "$schema": "https://opencode.ai/config.json", "provider": { "stepfun": { "api": "https://api.stepfun.com/step_plan/v1", "models": { "step-5-preview": { "name": "Step 5 Preview" } } } } } ``` > [!WARNING] > > `provider.stepfun.api` 这一行**必须填写**。Open Code 内置的 StepFun Provider 默认指向 `https://api.stepfun.com/v1`(普通付费 API),不覆盖会导致请求走错端点、用不上 Step Plan 订阅额度。 ### 设置环境变量 Open Code 通过 `STEPFUN_API_KEY` 环境变量读取 Step API Key。打开终端运行: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} echo 'export STEPFUN_API_KEY="YOUR_STEP_API_KEY"' >> ~/.zshrc source ~/.zshrc ``` 将 `YOUR_STEP_API_KEY` 替换为您在控制台创建的 Step API Key。 验证: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} echo $STEPFUN_API_KEY ``` 若输出您的 API Key,则说明配置成功。 ### 选择模型 在终端任意目录启动 Open Code: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} opencode ``` 按下 `/` 输入 `/models` 调出模型列表,选择: * `stepfun/step-5-preview` 选择后终端底部会显示当前模型,例如: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} > build · step-5-preview ``` 这表示当前会话已在使用 Step 模型。 ## 测试接入 启动 `opencode` 后,输入简单任务进行验证: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} Create a hello world script in Python ``` 若接入成功,模型会返回类似内容: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} print("Hello, world!") ``` ## 常见问题 ### 401 Incorrect API key 如果出现: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 401 Incorrect API key ``` 请按顺序排查: 1. `STEPFUN_API_KEY` 是否已写入并 `source ~/.zshrc`,`echo $STEPFUN_API_KEY` 是否有输出。 2. Key 是否复制完整、首尾是否带空格或换行。 3. 控制台对应账号是否已订阅 Step Plan。 ### 400 you have no active step plan subscription 如果出现: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 400 you have no active step plan subscription ``` 当前账号尚未订阅 Step Plan。请到 [Step Plan 订阅](https://platform.stepfun.com/step-plan) 开通后重试。 ### 请求很久没响应 / 没用上订阅额度 如果调用能成功返回内容,但发现: * 响应时间异常长、或者 * Step Plan 订阅的 Credit 额度没有消耗、走的是按 token 付费 请确认 `~/.config/opencode/opencode.json` 中的 `provider.stepfun.api` 已正确指向 `https://api.stepfun.com/step_plan/v1`。Open Code 内置的 StepFun Provider 默认指向 `https://api.stepfun.com/v1`,不覆盖会走错端点。 ### Provider 未显示 / 模型列表里找不到 StepFun StepFun 只有在配置了凭证后才会出现在 `/models` 列表中。请检查: 1. 是否已配置 StepFun 凭证(设置 `STEPFUN_API_KEY` 环境变量、`opencode auth login`、或在 `opencode.json` 中配置 `provider.stepfun.options.apiKey`)。 2. `opencode.json` 文件路径与 JSON 格式是否正确(`opencode providers list` 可查看当前识别到的 Provider)。 3. 如果以上都没问题,Open Code 版本可能过低,运行 `opencode upgrade` 升级到最新版本后重试。 ### 调用名(模型 ID) 在 Open Code 里指定模型时使用 `/` 格式: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} stepfun/step-5-preview stepfun/step-3.7-flash stepfun/step-3.5-flash stepfun/step-3.5-flash-2603 ``` 以上为已验证示例,请按当前账号在 Step Plan 下的可用模型替换,不构成全部可用名单。 ## 总结 完成 `opencode.json`、`STEPFUN_API_KEY` 配置后,Open Code 即可通过 Step Plan 在终端中执行代码生成、文件编辑和项目分析等任务。建议先按「测试接入」一节在 TUI 中跑一次范例验证连通性,再继续补充您自己的终端开发工作流。 # OpenClaw Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/openclaw ## 前置条件 在配置 OpenClaw 之前,确保您已经 * [订阅 Step Plan](https://platform.stepfun.com/step-plan) * 登录 [platform.stepfun.com](https://platform.stepfun.com),在控制台创建并获取 API Key。 ## 安装 OpenClaw 如果您尚未安装 OpenClaw,请先完成安装。 在终端中运行以下命令: **macOS / Linux / WSL2** ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://openclaw.ai/install.sh | bash ``` **Windows** ```powershell theme={"theme":{"light":"light-plus","dark":"dark-plus"}} powershell -c "irm https://openclaw.ai/install.ps1 | iex" ``` **npm** ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} npm i -g openclaw ``` ## 配置阶跃模型 安装后会启动 Onboard 引导。如果已安装过 OpenClaw,可以通过以下命令重新启动 Onboard 引导: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} openclaw onboard ``` ### 配置模型 API key 使用以下配置: * 在 Model/auth provider 中选择 StepFun。 * 在 StepFun auth method 中选择 StepFun Step Plan API key。 * 在 Enter StepFun API key 中粘贴您的 API key。 * Model configured 会显示该认证方式下默认模型。 * 在 Default model 列表中,您可以选择保持默认或者选择另外的模型。 ### 完成其他配置 接下来您可以根据自己的需求配置 channel、search、skills、hooks。 配置完成后可以选择在终端(TUI) 或者 Web UI 中启动。 ### 验证 启动后您可以随便问一个问题,看界面中是否有 OpenClaw 的回应。 ### 其他配置方式 **通过官方脚本快速配置** #### macOS / Linux(Bash) ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://raw.githubusercontent.com/Zgh332358/openclaw-stepfun-installer/main/add_stepfun_smart.sh | bash ``` #### Windows(PowerShell 管理员模式) **注意**:必须在管理员模式的 PowerShell 下运行,否则脚本会提示并退出。 1. 右键点击 Windows 开始菜单,选择「终端管理员」或「Windows PowerShell (管理员)」 2. 执行以下命令: ```powershell theme={"theme":{"light":"light-plus","dark":"dark-plus"}} irm https://raw.githubusercontent.com/Zgh332358/openclaw-stepfun-installer/main/add_stepfun_smart.ps1 | iex ``` **手动编辑配置文件** OpenClaw 的配置文件位于 `~/.openclaw/openclaw.json`。 使用您喜欢的编辑器打开它,在文件中添加或修改以下内容。以下按 Step 5 Preview 的窗口配置,`` 填写 `step-5-preview`;若选择 `step-3.7-flash` 或 Step 3.5 Flash 系列,请同时将 `contextWindow` 改为 `256000`。`maxTokens: 8192` 是本示例的输出预算,不代表模型的最大输出能力。 ```jsonc theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "agents": { "defaults": { "model": { "primary": "stepfun/" // 可填写 step-5-preview、step-3.7-flash、step-3.5-flash-2603 或 step-3.5-flash } } }, "models": { "mode": "merge", "providers": { "stepfun": { "baseUrl": "https://api.stepfun.com/step_plan/v1", "apiKey": "${STEP_API_KEY}", "api": "openai-completions", "models": [ { "id": "", "name": "", "reasoning": true, "contextWindow": 1000000, "maxTokens": 8192 } ] } } } } ``` > 说明:`` 请填写当前账号在 Step Plan 下可用的模型。已验证示例:`step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603`、`step-3.5-flash`。文档列出的模型不构成全部可用名单。 ## 常见问题 > **Q: 配置后提示 'Model is not allowed'** > > 如果您设置了 `agents.defaults.models`(模型允许列表),需要确保 `stepfun/` 也被加入到该列表中,否则模型会被拦截。解决方法: > > ```jsonc theme={"theme":{"light":"light-plus","dark":"dark-plus"}} > { > "agents": { > "defaults": { > "models": { > "stepfun/": { > "alias": "Step Model" > } > } > } > } > } > ``` > > 或者直接移除 `agents.defaults.models` 配置项以取消白名单限制。 > **Q: `api` 字段为什么选 `openai-completions`?** > > StepFun API 完整兼容 OpenAI 的 Chat Completions 请求格式。OpenClaw 在配置自定义 Provider 时支持两种 API 类型: > > * `openai-completions`:适用于兼容 OpenAI 格式的提供商(绝大多数第三方提供商) > * `anthropic-messages`:适用于兼容 Anthropic Messages 格式的提供商 > > StepFun 属于前者。 > **Q: Windows 上可以不用 WSL2 吗?** > > 不推荐。OpenClaw 依赖 Linux 工具链(`make`、`g++` 等)和 systemd 服务管理,原生 Windows 环境会遇到诸多兼容性问题。WSL2 是官方推荐的 Windows 使用方式。 ## 参考链接 * [OpenClaw 官方文档](https://docs.openclaw.ai) * [OpenClaw 模型配置文档](https://docs.openclaw.ai/concepts/model-providers) * [OpenClaw Models CLI 文档](https://docs.openclaw.ai/concepts/models) * [Step Plan 订阅](https://platform.stepfun.com/step-plan) # Pi Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/pi Pi 是 earendil-works 开源的终端编码 Agent,支持文件读取、编辑和命令执行。通过自定义 Provider,可使用 Anthropic Messages 协议接入 Step Plan。 ## 接入条件 * macOS、Linux 或 Windows,已安装 Node.js 22.19 或更高版本及 npm。 * [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 * 已在 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 在终端中执行以下命令,检查当前环境: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} node --version npm --version ``` 如果 Node.js 版本为 `v22.19.0` 或更高,且 npm 能正常输出版本号,可直接继续安装 Pi。 ## 安装 Pi 安装 Pi 0.87.1: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1 ``` 检查安装版本: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi --version ``` ## 配置 Step Plan ### 设置 API Key 在启动 Pi 的终端中设置环境变量,将 `YOUR_STEP_API_KEY` 替换为实际密钥: **macOS / Linux / WSL** ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export STEP_API_KEY="YOUR_STEP_API_KEY" ``` **Windows PowerShell** ```powershell theme={"theme":{"light":"light-plus","dark":"dark-plus"}} $env:STEP_API_KEY = "YOUR_STEP_API_KEY" ``` ### 添加模型 1. 打开 `~/.pi/agent/models.json`。如果设置了 `PI_CODING_AGENT_DIR` 时,请使用该目录下的 `models.json`。 2. 将以下 `providers.stepfun` 配置合并到文件中,保留其他 Provider。文件不存在时创建目录并保存以下 JSON。 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "providers": { "stepfun": { "baseUrl": "https://api.stepfun.com/step_plan", "api": "anthropic-messages", "apiKey": "$STEP_API_KEY", "models": [ { "id": "step-5-preview", "input": ["text", "image"], "contextWindow": 1000000 }, { "id": "step-3.7-flash", "input": ["text", "image"], "contextWindow": 256000 } ] } } } ``` | 字段 | 说明 | | - | - | | `providers.stepfun` | Provider 标识,启动时通过 `--provider stepfun` 选择。 | | `baseUrl` | Step Plan 配置地址。Pi 自动追加 `/v1/messages`,最终路径为 `/step_plan/v1/messages`。 | | `api` | `anthropic-messages` 指定 Anthropic Messages 协议。 | | `apiKey` | `$STEP_API_KEY` 引用启动进程中的环境变量。 | | `models[].input` | 允许客户端发送的输入类型。 | | `models[].contextWindow` | 客户端使用的上下文窗口,填写整数 token 数。 | [Step 5 Preview](/docs/zh/guides/models/step-5-preview) 的上下文窗口为 1M tokens,[Step 3.7 Flash](/docs/zh/guides/models/step-3.7-flash) 为 256K tokens。上述配置分别使用 `1000000` 和 `256000`。 ### 设置默认模型 将以下字段合并到同一配置目录中的 `settings.json`: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "defaultProvider": "stepfun", "defaultModel": "step-5-preview" } ``` ## 启动 Pi 在项目目录的终端中执行: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi ``` 也可在启动时指定 Provider 和模型: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi --provider stepfun --model step-5-preview ``` ## 验证接入 ### 检查模型配置 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi auth check --provider stepfun --json pi --list-models stepfun ``` 认证检查的 `status` 应为 `ready`,表示客户端能够解析凭据。模型列表应包含配置的模型 ID,Step 5 Preview 的上下文显示为 1M,Step 3.7 Flash 显示为 256K。 ### 验证对话 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} pi --provider stepfun --model step-5-preview --print "请只回复 OK。" ``` 预期返回 `OK`。 ### 验证工具调用 在安装了 Python 的独立测试目录中创建 `README.md`,内容为 `Pi Step Plan test`。从该目录启动 Pi,输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 读取 README.md,创建 hello.py,输出 Hello, StepFun!。 使用本机可用的 Python 解释器运行 hello.py,并汇报执行命令和输出。 不要修改其他文件。 ``` 核对文件读取、创建和命令执行记录,确认目录中生成 `hello.py`,运行输出为 `Hello, StepFun!`。 ### 核对用量 在 [StepFun 开放平台](https://platform.stepfun.com)的使用详情中,按请求时间核对模型 ID 和计费来源,确认调用使用 Step Plan。 ## 常见问题 > **Q: 模型列表中没有 Step 模型怎么办?** > > 检查生效目录中的 `models.json` 是否为有效 JSON,以及 `providers.stepfun.models` 中的模型 ID。打开 `/model` 重新加载配置,或重启 Pi 后运行 `pi --list-models stepfun`。 > **Q: 无法解析 API Key 或认证失败怎么办?** > > 在启动 Pi 的同一终端中设置 `STEP_API_KEY`,检查密钥是否完整、有效,且属于所用端点对应的账号。若 `auth.json` 中已保存 `stepfun` 凭据,Pi 会优先使用该凭据,应一并核对其内容。 > **Q: 请求路径错误怎么办?** > > `api` 使用 `anthropic-messages`,`baseUrl` 填写 `https://api.stepfun.com/step_plan`。Pi 自动追加 `/v1/messages`,配置地址只保留到 `/step_plan`。 > **Q: 上下文窗口显示与模型规格不一致怎么办?** > > 检查对应模型的 `contextWindow`:`step-5-preview` 使用 `1000000`,`step-3.7-flash` 使用 `256000`。保存后重新加载模型列表并选择该模型。 # Roo Code Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/roo-code Roo Code 是运行在 VS Code、Cursor 等编辑器中的编码 Agent,支持文件编辑、终端命令执行和多步工具调用。通过 OpenAI Compatible Provider,可使用 Chat Completions API 接入 Step Plan。 ## 接入条件 * 已安装 VS Code 或 Cursor。运行下方修复与测试示例时,还需安装 Python 3。 * [Step Plan 订阅](https://platform.stepfun.com/step-plan)有效、额度可用,且具备所用模型的调用权限。 * 已在 [StepFun 开放平台密钥管理](https://platform.stepfun.com/interface-key)页面创建 API Key。 ## 安装 Roo Code 在编辑器扩展市场中搜索 Roo Code,确认扩展标识为 `RooVeterinaryInc.roo-cline`。配置适用于 Roo Code 3.54.0;上游仓库已归档,使用时需确认与当前编辑器的兼容性。 ## 配置 Step Plan ### 配置连接 1. 打开 Roo Code 面板,进入设置中的 `Providers`。 2. 在 `API Provider` 中选择 `OpenAI Compatible`,填写以下参数: | 配置项 | 填写值 | | - | - | | `API Provider` | `OpenAI Compatible` | | `Base URL` | `https://api.stepfun.com/step_plan/v1` | | `API Key` | Step API Key,不包含 `Bearer ` 前缀或首尾空格。 | | `Model ID` | `step-5-preview` | Roo Code 自动追加 `/chat/completions`,完整请求路径为 `/step_plan/v1/chat/completions`。Base URL 保留到 `/step_plan/v1`,不要替换为普通按量 API 地址。 Roo Code 3.54.0 仅支持 OpenAI 原生工具调用,没有 XML 回退。所选模型需要支持函数调用,以下使用 [Step 5 Preview](/docs/zh/guides/models/step-5-preview)。 ### 确认模型参数 展开 `Model Configuration`,按 Step 5 Preview 的能力核对设置: | 配置项 | 设置 | 说明 | | - | - | - | | `Enable streaming` | 开启 | 使用流式输出。 | | `Context Window Size` | `1000000` | 客户端使用的上下文窗口。 | | `Include max output tokens` | `Off` | 不在请求中额外发送输出上限。 | | `Max Output Tokens` | `-1` | 配合上一项关闭使用,由服务端处理输出长度。 | | `Image Support` | 开启 | 允许图像输入。 | 3.54.0 开启 `Include max output tokens` 时会发送 `max_completion_tokens`。本配置关闭该选项;不要只修改 `Max Output Tokens` 而遗漏开关。若需要主动限制输出,应为推理和正文保留足够预算。 切换到其他模型时,按其规格调整上下文与输入能力。保存配置后新建任务。 ## 接入 StepSearch MCP 需要联网搜索或获取网页内容时,可配置 [StepSearch](/docs/zh/guides/developer/search-mcp)。该服务通过 Step Plan 端点提供 `web_search` 和 `web_fetch`。 1. 在 Roo Code 面板打开 `MCP Servers`,选择编辑全局 MCP 配置。 2. 合并以下内容,保留已有的其他服务,将 `YOUR_STEP_API_KEY` 替换为实际密钥: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "mcpServers": { "step-search": { "type": "streamable-http", "url": "https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp", "headers": { "Authorization": "Bearer YOUR_STEP_API_KEY" }, "disabled": false, "alwaysAllow": [] } } } ``` 3. 保存后重新连接服务,确认 `step-search` 已连接,且工具列表包含 `web_search` 和 `web_fetch`。 4. 新建任务,调用其中一个工具完成搜索或网页抓取,按提示批准调用,并检查返回结果。 Roo Code 的 URL 型 MCP 配置必须显式提供 `type`,此处使用 `streamable-http`,不能写成 Cline 的 `streamableHttp`。`alwaysAllow: []` 保留逐次批准。 MCP 配置以明文保存 API Key,请勿将含真实密钥的文件提交到代码仓库或分享给他人。 ## 验证接入 ### 验证对话 新建任务并输入 `请只回复 OK。`,预期返回 `OK`。 ### 验证修复与测试 1. 创建独立测试目录,添加以下两个文件。其中 `calc.py` 故意包含加法错误。 `calc.py`: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} def add(left, right): return left - right ``` `test_calc.py`: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import unittest from calc import add class TestAdd(unittest.TestCase): def test_add(self): self.assertEqual(add(2, 3), 5) ``` 2. 在编辑器中打开该目录,选择允许修改文件的 `Code` 模式,向 Roo Code 发送: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 只在当前目录工作。读取 calc.py 和 test_calc.py,修复导致 test_add 失败的错误。 运行 python3 -m unittest test_calc -v;如果失败,继续修复并重新测试。 不要修改 test_calc.py 或其他文件。最后报告修改内容、执行命令和测试结果。 ``` 3. 按提示批准必要的文件与命令操作。确认 `calc.py` 中的加法已修复,测试输出为 `OK`,且 `test_calc.py` 未被修改。 手动批准即可完成验证,无需开启全部自动批准选项。 ### 验证配置保存 重启编辑器,检查 Provider 与模型选择是否保留,并重新发起一次简短对话。 ## 常见问题 > **Q: 发送消息后一直显示 API Request... 怎么办?** > > 先检查扩展宿主日志,确认是否存在 `Could not find ripgrep binary`。VS Code 可通过命令面板中的 `Developer: Open Logs Folder` 打开日志目录,查看当前窗口的 `exthost/exthost.log`。只有出现该错误时,才按下一项处理 ripgrep;其他情况应根据实际网络、认证或请求错误排查。 > **Q: Roo Code 3.54.0 找不到 ripgrep 怎么办?** > > 3.54.0 的路径探测未覆盖部分新版 VS Code 的 `ripgrep-universal` 目录布局。更改工作区或用户配置目录不会改变扩展查找的编辑器安装路径。 > > macOS 的 VS Code 可在确认日志报错后使用以下临时兼容方案。脚本会在安装目录新增软链接,自动识别 Apple Silicon 或 Intel,且不会覆盖已有路径。源文件不存在或安装目录不可写时,应停止处理,不要提升权限强制执行。 > > ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} > ( > set -eu > APP="/Applications/Visual Studio Code.app/Contents/Resources/app" > case "$(uname -m)" in > arm64) ARCH="darwin-arm64" ;; > x86_64) ARCH="darwin-x64" ;; > *) printf '%s\n' 'Unsupported architecture'; exit 1 ;; > esac > RG="$APP/node_modules.asar.unpacked/@vscode/ripgrep-universal/bin/$ARCH/rg" > TARGET="$APP/node_modules/@vscode/ripgrep/bin/rg" > if [ ! -x "$RG" ]; then > printf '%s\n' 'Bundled ripgrep was not found at the expected path.' > exit 1 > fi > if [ -e "$TARGET" ] || [ -L "$TARGET" ]; then > printf '%s\n' 'The target already exists; no changes were made.' > exit 1 > fi > mkdir -p "$(dirname "$TARGET")" > ln -s "$RG" "$TARGET" > "$TARGET" --version > ) > ``` > > 完成后运行 `Developer: Reload Window`,重新发起任务。该命令只适用于上述 macOS VS Code 安装位置;Cursor 和其他系统需核对各自的安装路径。编辑器更新可能移除软链接,出现相同日志时再检查。 > **Q: 提示 Connection error 或返回 401 怎么办?** > > 检查网络连接、Base URL、API Key 与模型权限。Base URL 使用 `https://api.stepfun.com/step_plan/v1`;API Key 应完整、有效,且属于对应端点的账号。模型连接的 API Key 字段不加 `Bearer `,MCP 的 `Authorization` 请求头则需要该前缀。 > **Q: 回复为空、被截断或推理阶段没有正文怎么办?** > > 推理阶段可能暂时没有正文。若请求结束后仍无正文,查看停止原因、错误信息与输出设置。确认 `Include max output tokens` 已关闭;若主动设置预算,过小的值可能在正文生成前被推理消耗。 > **Q: 模型只回复文字,或工具调用失败怎么办?** > > 确认当前为 `Code` 等允许执行任务的模式,已打开目标目录,并批准了必要的操作。所选模型必须支持 OpenAI 原生工具调用;若返回工具错误,核对模型 ID 和完整错误信息,并以工具调用记录确认执行情况。 > **Q: MCP 中没有 step-search 或连接超时怎么办?** > > 检查配置位于 `mcpServers` 下,`type` 为 `streamable-http`,`disabled` 为 `false`,请求头包含完整密钥与 `Bearer ` 前缀。保存后重新连接,并检查网络与服务日志;超时需要区分认证、网络和传输问题,不能直接归因于客户端版本。 # Zed Source: https://platform.stepfun.com/docs/zh/guides/developer/integrations/zed Zed 是一款高性能代码编辑器,内置 AI Assistant 能力,并支持通过 OpenAI Compatible API 调用第三方大模型。通过配置自定义 API Endpoint,Zed 可以接入 Step 模型,在编辑器内完成对话、代码生成、代码解释和代码修改等任务。 ## 概述 Zed 适合在轻量编辑器中直接使用 AI Assistant。完成接口配置后,即可在编辑器内调用 Step 模型完成常见编程辅助任务。 ## 前置条件 ### 安装 Zed 下载并安装 Zed 编辑器:[https://zed.dev](https://zed.dev) 安装完成后启动 Zed。 ### 订阅 Step Plan 在开始配置前,请先确认当前账号已完成 Step Plan 订阅。只有在账号具备对应计划或调用权限后,后续模型调用与额度使用才会正常生效。 如需订阅或购买,请访问:[Step Plan 订阅](https://platform.stepfun.com/step-plan) ### 获取 Step API Key 在 [Step 开放平台](https://platform.stepfun.com) 获取 API Key,用于身份认证和请求授权。 ## 配置步骤 ### 打开 Agent Panel 设置 使用命令面板(`Cmd+Shift+P`),输入并执行: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} agent: open settings ``` ### 添加 LLM Provider 在打开的界面中,找到 **LLM Providers** 区域,点击右侧的 **+ Add Provider** 按钮,在弹出的表单中填写以下信息: * **Provider Name**:`StepFun`(自定义名称,可任意填写) * **API URL**:`https://api.stepfun.com/step_plan/v1` * **API Key**:填写在 Step 平台获取的 API Key * **Model Name**:`` > 说明:`` 请填写当前账号在 Step Plan 下可用的模型。已验证示例:`step-5-preview`、`step-3.7-flash`、`step-3.5-flash-2603`、`step-3.5-flash`。文档列出的模型不构成全部可用名单。 填写完成后,点击 **Save Provider** 保存。 ## 测试接入 ### 基础对话测试 在 Agent Panel 中输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} hello ``` 如果返回正常内容,说明 API 调用成功。 ### 代码生成测试 输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} Write a python hello world program ``` 预期返回类似结果: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} print("Hello, world!") ``` ### 代码解释测试 在代码文件中选中一段代码后输入: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} Explain this code ``` 如果能收到解释结果,说明模型调用链路正常。 ## 常见问题 ### 无法连接 API 请检查: * API URL 是否填写为 `https://api.stepfun.com/step_plan/v1` * API Key 是否有效 * 当前网络是否可访问 API Endpoint ### 模型返回错误 请确认 Model Name 是否填写正确,例如: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ``` ### AI 无响应 建议重新检查以下配置并重启 Zed: * API URL * API Key * Model Name(``) ## 总结 完成 LLM Provider 配置后,Zed 即可通过 Step API 提供对话、代码生成和代码解释等辅助能力。建议先完成基础对话和最小代码示例测试,再投入实际开发使用。 # JSON Mode 与 JSON Schema 结构化输出 Source: https://platform.stepfun.com/docs/zh/guides/developer/json-mode 阶跃星辰大模型可以用于情感分析、信息提取和内容评分等应用场景。[Step 5 Preview](/docs/zh/guides/models/step-5-preview) 支持 JSON Mode 与 JSON Schema 结构化输出,您可以按业务需要选择输出方式。 ## 选择输出方式 | 方式 | 请求参数 | 适用场景 | | - | - | - | | JSON Mode | `response_format: {"type": "json_object"}` | 需要可解析的 JSON,不要求由 API 约束具体字段和类型 | | JSON Schema | `response_format.type: "json_schema"`,并设置 `json_schema.strict: true` | 需要按指定 Schema 约束字段、类型和必填项 | 在 prompt 中描述结构或放入 JSON Schema,可以引导 JSON Mode 的输出,但不等同于 API 层面的严格结构约束。需要严格结构约束时,请使用 `json_schema` 参数,而不只是将 Schema 写入 prompt。 ## JSON Schema:通过 API 约束输出结构 以下用法适用于 `step-5-preview`、`step-3.7-flash`、`step-3.5-flash` 和 `step-3.5-flash-2603`。 将 `response_format.type` 设置为 `json_schema`,并在 `response_format.json_schema` 中填写: * `name`:Schema 名称。 * `strict`:设置为 `true`,启用严格模式。 * `schema`:期望的 JSON 结构,包括属性、类型和必填字段。 以下示例使用 `step-5-preview` 提取姓名和年龄。Schema 直接通过 API 参数传入,无需在 prompt 中重复。将 `YOUR_STEP_API_KEY` 替换为您的 API Key,在终端设置 `STEPFUN_API_KEY` 环境变量,再执行请求;`$STEPFUN_API_KEY` 表示读取该变量的值。以下命令适用于 Bash 或 Zsh,使用按量付费 API。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export STEPFUN_API_KEY="YOUR_STEP_API_KEY" curl --silent --show-error --fail-with-body \ https://api.stepfun.com/v1/chat/completions \ -H "Authorization: Bearer $STEPFUN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "step-5-preview", "messages": [{"role": "user", "content": "提取人物:王明 28 岁。"}], "stream": false, "response_format": { "type": "json_schema", "json_schema": { "name": "person", "strict": true, "schema": { "type": "object", "additionalProperties": false, "required": ["name", "age"], "properties": { "name": {"type": "string"}, "age": {"type": "integer"} } } } }, "max_tokens": 1024 }' ``` `choices[0].message.content` 是包含 JSON 的字符串,解析后的结果示例为: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} {"name": "王明", "age": 28} ``` 本例通过 `required` 指定两个字段都必须返回,通过 `additionalProperties: false` 禁止额外字段。结构约束不代表提取内容在事实或业务含义上一定正确,应用仍需进行业务校验。完整参数说明见 [Chat Completions API](/docs/zh/api-reference/chat/chat-completion-create)。 ## JSON Mode:返回可解析的 JSON ### 使用方法 在使用 JSON Mode 时,您需要做三件事: 1. 在 System Prompt 中明确要求返回 JSON,并描述预期结构;也可以放入 JSON Schema 作为提示词引导,但这不提供严格的 Schema 约束。 2. 请求时,设置 response\_format 为 `{ "type": "json_object" }`,从而来让大模型返回可解析的 JSON 结果。 3. 解析大模型返回的结果,并验证是否符合预期。符合预期后即可使用在业务系统中对接。 ### 参考代码 以使用大模型进行评论的情感分析为例子,您可以参考如下代码,让大模型返回 JSON 结果。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI( base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY ) # 在 System Prompt 中定义返回结果 system_prompt = """ 你是一个评论分析师,会根据用户的输入,分析用户输入的情感,并给出评论的情感分析结果 ## 分析规则 1. 如果用户的评论中包含了负面情感词汇,那么情感分析结果为 negative 2. 如果用户的评论中包含了正面情感词汇,那么情感分析结果为 positive 3. 如果用户的评论中没有包含正面或者负面情感词汇,那么情感分析结果为 neutral ## 正面情感词汇 - 好 - 棒 - 优秀 ## 负面情感词汇 - 差 - 糟糕 - 糟 ## 例子 ### 例子 1 #### 输入内容 "这个产品真的很好,我很喜欢" #### 输出内容 { "emotion": "positive", "score": 0.9, "reason": "用户评论中包含了正面情感词汇" } ### 例子 2 #### 输入内容 "这个产品好垃圾,我很讨厌" #### 输出内容 { "emotion": "negative", "score": 0.9, "reason": "用户评论中包含了负面情感词汇" } ## 输入内容 用户的评论文本 ## 输出内容 按照如下结构输出 JSON 结果 class Response: emotion: str # 用户评论的情感分析结果,可选项为 positive, negative, neutral score: float # 用户评论的情感分析得分,范围为 0 到 1 之间 reason: str # 用户评论的情感分析结果的原因 """ response = client.chat.completions.create( model="step-5-preview", messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": "这个产品还行?"} ], response_format={ "type": "json_object" }, ) print(response) ``` ### 可选:在 prompt 中使用 Schema 引导 JSON Mode JSON Schema 可以描述输出字段、类型和必填项。在 JSON Mode 的 prompt 中加入 Schema,可以引导输出结构,但不提供严格约束。 以下 Schema 定义了一个包含 `url` 和 `notes` 两个必填字段的对象: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "$schema": "http://json-schema.org/draft-07/schema#", "title": "用户输入解析", "type": "object", "properties": { "url": { "type": "string", "description":"用户输入的 URL" }, "notes": { "type": "string", "description":"用户对于输入的 URL 的评价" } }, "required": [ "url", "notes" ] } ``` 在您的 prompt 中加入 JSON Schema,并设置 `response_format: {"type": "json_object"}`,可以引导模型按预期结构输出。以下仍是提示词示例,不是 API 的 `json_schema` 参数用法: ```markdown theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 你是一个专业的文本处理工程师,会根据用户的输入,从中提取 URL 和 用户的评价内容,并以 JSON 的方式返回。 ## 约束 - 你会以下方的 JSON Schema 的格式返回给用户 { "$schema": "http://json-schema.org/draft-07/schema#", "title": "用户输入解析", "type": "object", "properties": { "url": { "type": "string", "description":"用户输入的 URL" }, "notes": { "type": "string", "description":"用户对于输入的 URL 的评价" } }, "required": [ "url", "notes" ] } ``` ## 注意事项 * 两种方式都需要先检查请求是否成功,以及 `finish_reason` 是否为 `stop`。如果为 `length`,输出可能因 `max_tokens` 限制而被截断,不能按完整 JSON 使用;可提高输出上限后重试。 * 对于请求失败、拒绝回答或没有可用 `content` 的情况,请单独处理,不要直接作为业务 JSON 解析。 * 解析 `choices[0].message.content` 后,仍需校验数据是否满足业务要求。使用 JSON Mode 时,还需自行检查字段、类型和必填项。 * JSON Mode 可以通过 prompt 中的输入输出示例改善结构遵循效果,但不应据此承诺严格符合 Schema。 * 如果通过代理或网关调用,请确认 `response_format` 及其嵌套字段完整传递到 API 服务端;客户端请求中包含该字段,不代表中间链路一定保留了它。 # 多轮对话上下文管理 Source: https://platform.stepfun.com/docs/zh/guides/developer/multiple-round 大模型相比于传统的模型,拥有支持用户自定义 Prompt、用户可传入上下文等优势,从而轻松实现大模型的人设锚定、多轮对话等能力。 在实际使用时,阶跃星辰的 Chat Completion API 支持传入一个数组作为 Message List 。您只需要按照用户沟通的顺序,将用户信息和大模型返回的信息,构建成数组用于调用大模型,即可轻松实现基于大模型的多轮对话能力。 ### 实现多轮对话 想要实现多轮对话,您需要在自己的业务系统中存储对话和对话内容,以便于形成对话记录。 因此,您需要在业务系统中建设 Chat 和 Message 对象,并在业务系统中存储 Chat 和 Messages。 * 当用户开启对话时,则创建 Chat; * 当用户发送消息时,则创建 Message,并按照创建时间正序查询 Message,并构建对话记录作为参数传递给大模型用于结合上下文生成内容; * 当大模型返回信息时,同样创建 Message。 ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/multiple_round.jpeg?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=87d378595830a339778f63e86f4ab90f) #### 代码示例 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI from datetime import datetime # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI( base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY ) # 定义数据结构 class Chat: id: str user_id: str class Message: chat_id: str role : str # 可选值 system, user,assistant,tool content: str # 用户输入的信息 / 大模型返回的信息 created_at: datetime # 从数据库中提取数据 # messages_from_db = orm.order_by ("created_at","asc").first (5) messages_from_db = [ { "chat_id":"chat_1", "role":"system", "content":"你是阶跃星辰大模型助手", "created_at": "2024-01-01 10:01:00" }, { "chat_id":"chat_1", "role":"user", "content":"今天天气怎么样?", "created_at": "2024-01-01 10:02:00" }, { "chat_id":"chat_1", "role":"assistant", "content":"对不起,我不能回答你关于天气的问题。", "created_at": "2024-01-01 10:03:00" }, { "chat_id":"chat_1", "role":"user", "content":"那你告诉我北京适合去旅游么?", "created_at": "2024-01-01 10:04:00" } ] def clean_msg(msg): del msg["chat_id"] del msg["created_at"] return msg messages_for_chat = [clean_msg (item) for item in messages_from_db] # 调用补全接口进行补全 stream = client.chat.completions.create( model="step-5-preview", messages=messages_for_chat, stream=True, ) # 对流式返回的内容进行打印 / 渲染输出 for chunk in stream: if chunk.choices[0].delta.content is not None: print(chunk.choices[0].delta.content, end="") ``` ### 管理对话上下文 `step-5-preview` 支持 1M tokens 上下文;`step-3.7-flash` 和 Step 3.5 Flash 系列支持 256K。请按实际使用模型的上下文窗口管理历史记录,并为输出预留空间。对话历史也会计入输入 Token 和费用,因此应根据业务需要选择历史长度,而不是无条件传入全部记录。 * 一般日常的对话可以保留 10 轮对话记录; * 对于某些需要深度沟通、对话的场景,则可以选择将完整对话记录交给大模型进行补全。 > **[引入 Prompt 缓存降低费用,提升推理速度](/docs/zh/guides/developer/prompt-cache)** ### 常见问题 * 如果要实现多轮对话的效果,需要在存储对话记录时,按时间记录,并在重新取出给大模型时,按照时间正序给出答案,以便于大模型正确的理解上下文。 # 从 OpenAI 迁移至阶跃星辰 Source: https://platform.stepfun.com/docs/zh/guides/developer/openai ## 前提条件 阶跃星辰大模型支持个人和企业调用,您可以在开放平台后台创建 API Key,并使用 API Key 调用。在测试模型能力时,除了通过 API 调用,您也可以通过体验中心快速体验阶跃星辰大模型。 > 在测试完成后, 您可以通过[联系我们](/docs/zh/guides/contact-us)联系阶跃星辰客服,我们将会为您提供和 OpenAI 对标的 TPM / RPM 限制,帮助您无缝迁移调用。 ## 模型选择 阶跃星辰为开发者提供多种模型能力,您可以根据自己当前使用的模型,切换至阶跃星辰大模型。 ### 推理与多模态模型 * `step-5-preview`:面向真实任务的新一代旗舰基模,支持文本、图片和视频输入,提供 1M tokens 上下文,适合编程、专业知识工作和多步骤 Agent 任务。 * `step-3.7-flash`:高速多模态推理模型,原生支持图片和视频理解,支持三档推理强度(low/medium/high),适合智能体、代码与多模态场景。 * `step-3.5-flash`:高速语言推理模型,顶尖推理能力与快速可靠的执行能力,适合逻辑推理、数学、软件工程、深度研究等复杂任务。 ### 文生图模型 > [!NOTE] > > 文生图与图片编辑相关模型已于 2026 年 10 月 10 日下线,相应接口已同步停止服务。详见[图像模型下线公告](/docs/zh/announcements/image-model-retirement)。 ## API 兼容 目前,阶跃星辰大模型兼容 OpenAI 的 API 规范,您可以直接使用 OpenAI 的 SDK 进行调用,如果您的应用已经在使用 OpenAI SDK 开发,那么可以以极低的成本进行迁移。 目前我们与 OpenAI 兼容的 API 如下: * [Chat Completion](/docs/zh/api-reference/chat/chat-completion-create) * [上传文件](/docs/zh/api-reference/files/create) * [获取文件列表](/docs/zh/api-reference/files/list) * [获取文件信息](/docs/zh/api-reference/files/retrieve) * [获取文件内容](/docs/zh/api-reference/files/retrieve-content) * [删除文件](/docs/zh/api-reference/files/delete) * [获取模型列表](/docs/zh/api-reference/models/list) * [查询单个模型信息](/docs/zh/api-reference/models/retrieve) ## SDK 迁移指南 ### OpenAI Python SDK 从 OpenAI Python SDK 迁移时,您只需要将原本的 Client 初始化中的参数 `api_key` 替换为阶跃星辰的 API Key ,并新增 `base_url` 设置为 `https://api.stepfun.com/v1`,并在具体的模型设置中,设置为阶跃星辰大模型即可完成调用。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} # 修改前 client = OpenAI( api_key="OPENAI_KEY" ) # 修改后 client = OpenAI( api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/v1" ) ``` ### OpenAI TypeScript SDK 从 OpenAI TypeScript SDK 迁移时,您只需要将原本的 Client 初始化中的参数 `api_key` 替换为阶跃星辰的 API Key ,并新增 `base_url` 设置为 `https://api.stepfun.com/v1`,并在具体的模型设置中,设置为阶跃星辰大模型即可完成调用。 ```typescript copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} // 修改前 const openai = new OpenAI({ apiKey: 'OPENAI_KEY', }) // 修改后 const openai = new OpenAI({ apiKey: 'YOUR_STEP_API_KEY', baseURL: 'https://api.stepfun.com/v1', }) ``` ### LangChain 在使用 Langchain 开发应用时,您只需要修改 ChatOpenAI 初始化时的 `openai_api_key`、`openai_api_base` 和 `model_name` ,即可切换至阶跃星辰大模型。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from langchain.chat_models import ChatOpenAI from langchain.prompts import PromptTemplate from langchain.chains import LLMChain from os import getenv from dotenv import load_dotenv load_dotenv() template = """你是阶跃星辰大模型开发的智能助手,你会根据用户的问题,一步一步的思考并回答。用户的问题是:问题:{question}""" prompt = PromptTemplate(template=template, input_variables=["question"]) # 修改前 # llm = ChatOpenAI( # openai_api_key=getenv("OPENAI_KEY"), # model_name="gpt-4o" # ) # 修改后 llm = ChatOpenAI( openai_api_key=getenv("STEP_API_KEY"), openai_api_base="https://api.stepfun.com/v1", model_name="step-5-preview" ) llm_chain = LLMChain(prompt=prompt, llm=llm) question = "阶跃星辰大模型如何帮助企业员工提升效率" print(llm_chain.run(question)) ``` ### LangChain.js 在使用 Langchain.js 开发应用时,您只需要修改 ChatOpenAI 初始化时的 modelName、openAIApiKey 和 basePath ,即可切换至阶跃星辰大模型。 ```typescript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} // 修改前 const chat = new ChatOpenAI({ modelName: 'gpt-4o', openAIApiKey: $OPENAI_KEY, }) // 修改后 const chat = new ChatOpenAI( { modelName: 'step-5-preview', openAIApiKey: $STEP_API_KEY, }, { basePath: 'https://api.stepfun.com/v1', }, ) ``` # 静态托管 CLI 与 MCP Source: https://platform.stepfun.com/docs/zh/guides/developer/page-hosting-cli-mcp 本指南面向在**生产环境**使用 StepFun 静态托管的开发者与 CI 集成方,覆盖 `steppage` 命令行工具(CLI)与 Page MCP Server 两种接入方式。二者共用同一把 Page 托管 API Key:CLI 面向人工操作与 CI/CD 流水线,MCP 面向 Claude 等 MCP 客户端、由模型直接调用。当前版本 1.0.0。 ## 准备工作 两种方式都要求本机已安装 **Node.js 20 或更高版本**(安装脚本会做校验,低于 20 直接报错退出)。同时需要一把有效的 Page 托管 API Key,可在[阶跃星辰开放平台](https://platform.stepfun.com)控制台获取;CLI 与 MCP 都用这把 Key 认证,认证后仅能访问该 Key 拥有的站点。 ## steppage CLI ### 安装 生产渠道通过 curl 一键脚本安装,脚本会下载自包含独立产物到 `~/.steppage/bin/`,并在 `~/.local/bin/steppage` 写入可执行包装器: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://dl.stepfun.com/steppage-cli/p/install.sh | bash ``` 如需固定到某个版本,在命令前加 `VERSION` 环境变量(默认 `latest`): ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} VERSION=v1.0.0 curl -fsSL https://dl.stepfun.com/steppage-cli/p/install.sh | bash ``` 若安装后提示 `~/.local/bin` 不在 PATH 中,将下面一行加入 shell 配置(如 `~/.zshrc`)后重开终端: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export PATH="$HOME/.local/bin:$PATH" ``` 验证安装:`steppage --version`;查看全部命令:`steppage --help`。 ### 认证 推荐先登录一次,校验并保存密钥。将示例中的 `YOUR_STEP_API_KEY` 替换为您的 Page 托管 API Key。`login` 会向服务端探测身份,成功后把密钥写入 `~/.steppage/config.json`(文件权限 600): ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} steppage login --key YOUR_STEP_API_KEY steppage whoami # 打印当前 key 对应的 uid steppage logout # 清除已保存的 key ``` 在 CI 等无状态环境中可跳过 `login`,直接用环境变量 `STEPFUN_API_KEY` 提供密钥,所有命令都会自动读取。 ### 快速开始:部署一个目录 一条 `deploy` 命令即可完成「构建产物 → 上传 → 发布版本」。首次部署用 `--name` 新建站点,加 `--go-live` 在发布同时上线: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} steppage deploy ./dist --name my-site --go-live ``` 向**已有**站点发布新版本则用 `--site `。`deploy` 接受一个目录(递归扫描)或单个 `.zip`。产物根目录若无 `index.html`,需用 `--root ` 指定站点首页,或用 `--no-root-page` 声明不提供首页;交互终端下会提示选择根文件,CI(非 TTY)下则直接报错要求显式传参。 ### 命令参考 | 命令 | 说明 | 关键参数 | | - | - | - | | `login` | 校验并保存托管 API key | `--key YOUR_STEP_API_KEY`(不填则交互输入) | | `logout` | 清除已保存的 API key | — | | `whoami` | 打印当前 key 对应身份 | — | | `deploy ` | 构建产物并发布 | `--site`、`--name`、`--root`、`--no-root-page`、`--go-live` | | `list` | 列出您的站点 | — | | `get` | 查看单个站点 | `--site`(必填) | | `update` | 重命名站点或修改服务模式 | `--site`(必填)、`--name`、`--serving-mode`(可选值为 `spa` 或 `static`,后两者至少填一个) | | `delete` | 删除站点(不可逆) | `--site`(必填)、`--yes`(跳过确认;非 TTY 必填) | | `versions` | 列出站点版本 | `--site`(必填) | | `promote` | 将暂存版本上线 | `--site`、`--version`(必填) | | `rollback` | 回滚到较旧版本 | `--site`、`--version`(必填) | | `preview mint` | 获取或创建某版本的持久预览链接 | `--site`、`--version`(必填) | | `preview expiry` | 设置或清除预览链接过期时间 | `--site`、`--version`、`--expires`(可设为 `never`、小时数或天数,例如 `24h`、`7d`) | | `preview revoke` | 撤销某版本的预览链接 | `--site`、`--version`(必填) | | `config --show` | 打印解析后的环境、是否已配置 key 及配置文件路径 | — | **全局选项**(可用于任意命令):`--json` 让命令在 stdout 输出机读 JSON(错误仍走 stderr),便于 CI 解析;`-H, --header "Name: value"` 注入自定义 HTTP 请求头,可重复;`-v, --version` 打印版本。 ### 典型工作流 \*\*预发布再上线。\*\*先发布但不上线,取预览链接验收,确认无误后再上线: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} steppage deploy ./dist --site 123 # 发布新版本(不上线) steppage preview mint --site 123 --version 456 # 取预览链接验收 steppage promote --site 123 --version 456 # 验收通过后上线 ``` \*\*回滚。\*\*线上版本出问题时,回滚到历史版本: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} steppage versions --site 123 # 查历史版本 steppage rollback --site 123 --version 400 # 回滚到指定版本 ``` \*\*CI 集成。\*\*流水线中设置 `STEPFUN_API_KEY` 免登录,并加 `--json` 解析结果: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} export STEPFUN_API_KEY="YOUR_STEP_API_KEY" steppage deploy ./dist --site 123 --go-live --json ``` `promote`、`rollback` 会改变线上版本,`delete` 不可逆。`delete` 在交互终端下需输入站点名二次确认,在无 TTY 的 CI 中必须显式加 `--yes` 才会执行。 ## Page MCP Server MCP Server 把上述部署、上线、回滚、巡检能力封装成 MCP 工具,供 Claude 等客户端由模型直接调用。它以 stdio 方式运行,**纯环境变量认证**(不读写任何配置文件),与 CLI 使用同一把 Page 托管 API Key。 ### 安装 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -fsSL https://dl.stepfun.com/steppage-mcp/p/install.sh | bash ``` 同样支持 `VERSION=v1.0.0` 固定版本。脚本安装产物到 `~/.steppage-mcp/bin/`,并在 `~/.local/bin/steppage-mcp` 写入包装器——这个路径就是要填给 MCP 客户端的命令。 ### 配置 MCP 客户端 在客户端的 MCP 配置中,把 `command` 指向安装好的包装器,并通过 `env` 传入密钥。以 Claude 为例: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "mcpServers": { "steppage": { "command": "/Users//.local/bin/steppage-mcp", "env": { "STEPFUN_API_KEY": "YOUR_STEP_API_KEY" } } } } ``` 把 `` 换成您的用户名(用绝对路径最稳妥)。`STEPFUN_API_KEY` 是唯一必填认证项。 ### 工具参考 | 工具 | 说明 | 关键参数 | | - | - | - | | `page_deploy` | 构建并发布本地目录 / .zip,返回预览 URL(goLive 时附线上 URL) | `path`(必填)、`site`、`name`、`root`、`noRootPage`、`goLive` | | `page_list_sites` | 列出当前 key 拥有的站点 | — | | `page_get_site` | 查看单个站点 | `site`(必填) | | `page_update_site` | 重命名站点或修改服务模式 | `site`(必填)、`name`、`servingMode`(可选值为 `spa` 或 `static`) | | `page_delete_site` | 永久删除站点(不可逆) | `site`(必填) | | `page_list_versions` | 列出站点版本 | `site`(必填) | | `page_promote` | 将暂存版本上线 | `site`、`version`(必填) | | `page_rollback` | 回滚到较旧版本 | `site`、`version`(必填) | | `page_inspect` | 查看服务配置(含 header 规则)与版本列表 | `site`(必填) | | `page_preview_mint` | 获取或创建持久预览链接 | `site`、`version`(必填) | | `page_preview_expiry` | 设置或清除预览链接过期时间 | `site`、`version`、`expires`(可设为 `never`、小时数或天数,例如 `24h`、`7d`) | | `page_preview_revoke` | 撤销预览链接 | `site`、`version`(必填) | | `page_whoami` | 查看当前 key 对应身份 | — | 说明:ID 类参数均为数值型字符串,工具内部做了 bigint 安全处理;多文件产物若无 `index.html`,`page_deploy` 需传 `root` 或 `noRootPage`(MCP 无交互提示)。`page_promote`、`page_rollback`、`page_delete_site` 为破坏性操作,调用前请确认。 ## 环境变量与语言 | 变量 | 适用 | 说明 | | - | - | - | | `STEPFUN_API_KEY` | CLI + MCP | Page 托管 API Key。CLI 可用它免 `login`;MCP 的唯一认证方式 | | `STEPPAGE_OVERSEA` | CLI + MCP | 设为真值时输出英文(海外);默认中文(国内)。安装脚本已按区域预置默认值 | | `VERSION` | 安装脚本 | 固定安装版本,如 `v1.0.0`;默认 `latest` | ## 故障排查 | 现象 | 处理 | | - | - | | 安装报 Node 版本过低或找不到 node | 安装 / 升级到 Node.js 20+ 后重跑脚本 | | `steppage: command not found` | `~/.local/bin` 未在 PATH:加 `export PATH="$HOME/.local/bin:$PATH"` 并重开终端 | | API Key 被服务器拒绝 | 确认 API Key 有效且填写正确;重新执行 `login` 或检查 `STEPFUN_API_KEY` | | 部署报缺少 index.html | 用 `--root ` 指定首页,或 `--no-root-page` 声明不提供首页 | | CI 中 delete 无反应 / 报错 | 非 TTY 环境删除必须加 `--yes` | # Prompt 优化 Source: https://platform.stepfun.com/docs/zh/guides/developer/prompt Prompt Engineering 是用户与模型之间的重要桥梁。优化提示对于的模型推理结果至关重要。通过从简单到复杂的案例展示,将帮助开发者掌握提示词的使用,以提升大语言模型在文本总结、推理和转换等基础自然语言处理任务中的能力。 ### Prompt(提示词)设计原则 #### 原则一:编写清晰且具体的指令 ##### 1. 明确的表达 * **模糊指令**:❌ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 讲讲艺术。 ``` 用户的需求不清晰,可能导致模型产生各种艺术形式的泛泛介绍。 * **明确指令**:✅ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请解释印象派绘画的特点,并列举三位著名的印象派画家。 ``` 明确指出需要讨论的艺术流派(印象派)和具体的输出要求(特点和画家),避免模型产生不相关的内容。 ##### 2. 详尽的指令 * **简略指令**:❌ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 解释经济学。 ``` 过于宽泛,无法明确用户的具体需求。 * **详细指令**:✅ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请解释供需理论,特别是如何通过供需平衡影响商品价格。举例说明供给过剩和需求不足时的价格变化。 ``` 提供了具体的经济学概念(供需理论)和要求(影响及举例),确保模型提供详细且相关的信息。 ##### 3. 巧用分隔符 * **无分隔符**:❌ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 分析这段文本并总结观点 ``` 无法分辨哪部分是需要分析的文本,哪部分是指令,容易引起误解。 * **使用分隔符**:✅ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请分析以下文本,文本内容存在 XML 标签 中: 文本内容 并总结主要观点。 ``` 使用 XML 标签清晰地将需要分析的文本和指令区分开,避免混淆,确保模型正确理解和处理任务。 ##### 4. 考虑特殊情况 * **无条件检查**:❌ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请列出文本中的错误。 ``` 未指明错误类型,可能导致结果不符合预期。 * **有条件检查**:✅ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 检查以下文本是否包含语法错误,如果有,请指出并纠正;如果没有,请说明没有错误。 ``` 指明先检查语法错误的存在与否,再决定下一步行动,确保模型按要求执行。 ##### 5. 使用少样本(Few-Shot-Prompt)帮助大模型理解 * **无示例**:❌ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 解释隐喻的使用。 ``` 语调和风格不明确,模型可能无法理解具体要求。 * **提供示例**:✅ ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 以下是对话示例,请解释隐喻的使用: < 人甲 >: 如何才能成为优秀的领导? < 人乙 >: 就像一艘船的船长,需要在风暴中稳住航向,指引船员们前进。 ``` 提供一个对话样本,展示预期的语调和风格,帮助模型理解任务要求和输出格式。 #### 原则二:给模型时间去思考 在设计提示词时,为语言模型提供充足的推理时间非常重要。与人类一样,语言模型在解决复杂问题时也需要时间。如果让模型匆忙得出结论,结果可能不准确。例如,若仅提供书名和一句简介让模型推断一本书的主题,可能得不到理想的答案。因此,我们应在提示词中指引模型进行深入思考,例如先列出问题的各种看法,再得出最终结论。通过逐步推理,模型能更好地进行逻辑思维,输出更准确的结果。 ##### 1. 指定完成任务的步骤 下面是一个示例,我们描述了西游记的故事,并给出以下 prompt 指导模型操作: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请按照以下步骤分析文本并给出最终的结果。 1. 用一句话概括文本内容。 2. 将概括翻译成英文。 3. 列出故事中的人名。 4. 输出包含概括和人名个数的 JSON 对象。 文本内容如下: 孙悟空和猪八戒一起前往花果山摘桃子。他们一路上嘻嘻哈哈,孙悟空蹦蹦跳跳地在前面带路,猪八戒则慢悠悠地跟在后面。到了花果山后,孙悟空灵活地爬上树摘桃子,猪八戒在树下等得着急,就自己到处找桃子。结果猪八戒不小心掉进了一个小水坑,弄得一身泥水,孙悟空看到后哈哈大笑。最后他们带着摘到的桃子一起回到了唐僧所在的地方。 ``` 模型输出: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 1. 概括:孙悟空和猪八戒去花果山摘桃子,猪八戒掉进小水坑,最后他们带着桃子回到唐僧处。 2. 翻译:Sun Wukong and Zhu Bajie went to Huaguo Mountain to pick peaches. Zhu Bajie accidentally fell into a small puddle. Finally, they returned to where Tang Seng was with the picked peaches. 3. 人名:孙悟空、猪八戒 4. 输出:{"summary": "孙悟空和猪八戒去花果山摘桃子,猪八戒掉进小水坑,最后他们带着桃子回到唐僧处。", "num_names": 2} ``` ##### 2. 指导模型自主思考(吴恩达反思工作流) 在设计提示词时,我们可以要求语言模型先自行思考再下结论。例如,假设我们要模型判断一个数学问题的解答是否正确,仅提供问题和解答是不够的。相反,我们可以先让模型自己解决问题,再与提供的解答进行比较。这能帮助模型更好地理解问题,做出更准确的判断。接下来给出了三步反思 prompt。 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请按照以下步骤分析问题并给出最终的结果。 第一步:请按照你对问题的理解给出答案。 第二步:请验算答案的准确性,若准确则直接输出答案,若错误,请给出解决问题的建议。 第三步:请根据建议的方式,解决问题。并再次按照第二步方式验算答案或者给出解决问题的建议。 问题内容: 笼子里有若干只鸡和兔子,共有 35 个头和 94 只脚。问笼子里有几只鸡和兔子? ``` 模型推理 第一轮直接解答: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 鸡有 21 只,兔子有 14 只。(假设模型答错了) ``` 第二轮验算答案的正确性: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 鸡有 21 只 * 2 只腿 / 每鸡 等于 42 只腿 兔子 14 只 * 4 只腿 / 每兔 等于 56 只腿 总计 42+56=98 只腿 根据题干中笼子里有 94 只腿,跟验算的结果 98 只腿不相等,答案错误。请使用代数并一步一步推理解答问题。 ``` 第三轮模型一步一步推理解答: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 设鸡有 x 只,兔有 y 只。 1. 首先根据头的数量可得方程: - x + y = 35,即 y = 35 - x。 2. 然后根据脚的数量可得方程: - 2x + 4y = 94。 - 将 y = 35 - x 代入 2x + 4y = 94 可得: - 2x + 4 (35 - x) = 94。 - 展开式子得:2x + 140 - 4x = 94。 - 移项得:2x - 4x = 94 - 140。 - 合并同类项得:-2x = -46。 - 解得:x = 23。 - 把 x = 23 代入 x + y = 35,得 23 + y = 35,解得 y = 12。 - 经过验算,答案正确,所以鸡有 23 只,兔子有 12 只。 ``` ### 常用 Prompt 参考 #### 文本分析 ##### 1. 情感分析 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ## 角色 - 你是一位情感分析师 ## 目标 - 对给定文本进行情感分析,识别并分类情感倾向为正面、负面或中性,用于市场分析、客户反馈或舆情监控。判断情感倾向的标准如下:正面情感倾向包括表达喜爱、满意、赞扬等的词汇;负面情感倾向包括表达不满、抱怨、批评等的词汇;中性情感倾向是对事物客观的描述,不带有明显的情感色彩。 ## 限制 - 输出结果仅为情感倾向的类别:正面、负面、中性。 ## 输出 - 输出格式:情感倾向类别 ## 工作流程 1. 读取并理解给定的文本:文本内容存在 XML 标签 < TEXT> 中, 这里填入需要进行情感分析的内容 。 2. 根据文本内容,判断其情感倾向。 3. 输出判断出的情感类别(例如:正面、负面或中性)。 ``` ##### 2. 文档分析 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ## 角色 - 你是一位文档分析师 ## 目标 - 高效准确地处理和分析大量文档,提炼出文档的核心内容,生成清晰准确的文档摘要并提取关键信息。 ## 限制 - 输出内容仅包含文档摘要和关键信息,不包含其他多余信息。 ## 输出 - 输出格式:文档摘要和关键信息 ## 工作流程 1. 读取并理解给定的文本,文本内容存在 XML 标签 < TEXT> 中: 这里填入需要分析的文本 。 2. 基于对文档内容的理解,运用简洁明了的语言生成高度概括的摘要,突出核心要点。 3. 精准提取文档中的关键信息,涵盖重要事实、准确数据或合理结论等。 4. 按照规定格式输出文档摘要和关键信息。 ``` ##### 3. 文本翻译 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ## 角色 - 你是一位翻译专家 ## 目标 - 高效准确地将文本从一种语言翻译成另一种语言,并确保翻译结果的准确性和自然流畅性。 ## 限制 - 输出内容应符合目标语言的语法和文化背景,不包含多余或偏离原意的内容。 ## 输出 - 输出格式:最终翻译 ## 工作流程 1. 读取并理解给定的文本,文本内容存在 XML 标签 < TEXT> 中: 这里填入需要翻译的文本 。 2. 进行初步翻译,确保翻译结果在语义上与原文一致。 3. 将输出的翻译结果与原文对照,提出修改建议。修改建议应包括改进翻译准确性、流畅性、文化适应性等方面。 4. 基于修改建议对翻译的结果进行修正,并生成最终翻译。 5. 输出最终翻译。 ``` ### 注意事项 在开发和使用大模型时,需注意其生成虚假知识的风险,即 “幻觉” 现象。尽管模型掌握了丰富的知识,它们仍可能会编造看似真实但实则虚假的信息。 为应对这一问题,开发者一方面可以通过优化 Prompt 设计来减少幻觉,例如引用原句来追踪信息来源,或者使用上文提到的反思工作流。另一方面可以使用阶跃大模型提供的 Tool call 工具,Tool call 可以扩展语言模型的功能,使其能够执行额外的操作,如搜索信息、计算、访问数据库等。 # Prompt 缓存 Source: https://platform.stepfun.com/docs/zh/guides/developer/prompt-cache 在开发大模型的多轮对话和固定场景人设问答时,会将用户的输入和大模型的回答构建成对话历史传递在整个对话中,而随着对话轮次增加,整个对话过程中的重复内容也会逐渐增多。 Prompt 缓存可复用请求中的重复前缀。缓存命中的输入 Token 按对应模型的缓存命中单价计费,单价见 [API 定价](/docs/zh/guides/pricing/details#文本与多模态模型)。 ## 缓存支持模型 目前 `step-5-preview`、`step-3.7-flash`、`step-3.5-flash`、`step-3.5-flash-2603`、`step-1o-turbo-vision` 等模型支持 Prompt 缓存,其他模型的支持情况请以对应模型文档和定价表为准。 ## Prompt 缓存的基础原理 当请求超过 256 个 Token 时,缓存会自动启用。当您发起一次 API 请求时,会执行如下操作: 1. **缓存查询**:根据您的请求的 Prompt 的前缀,查询当前的 Prompt 是否有系统的缓存。 2. **缓存命中**:如果命中系统的缓存,系统将会使用缓存,并加上本次请求中缓存不包含的内容,进行推理。 3. **缓存未命中**:如果未命中系统的缓存,系统将会进行正常的推理并在处理完成后,将 Prompt 前缀进行缓存,以供下次请求使用。 在包含多 Example、多轮次对话、长上下文或背景信息的场景下,缓存命中率会更高,帮助开发者提升系统整体性能,优化成本。 缓存淘汰采用最近最少使用(LRU)策略,在系统请求高峰期,不使用的缓存会更容易被逐出;在系统请求低峰期,缓存则会拥有更长的生命周期。 ## 如何判断自己是否使用了 Prompt 缓存 在调用 Chat API 进行补全时,如果 `response.usage.cached_tokens` 大于 0,则表明该请求命中缓存,其值为命中的输入 Token 数。字段为 0 时表示未命中缓存。 以下为用量字段的示意响应,实际返回内容以请求结果为准: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "22ebae159c8f10c8657253671c8f7f17.6de8d4f65f5ba3dddeb693a1aa83de1e", "object": "chat.completion", "created": 1730963954, "model": "step-5-preview", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "xxx" }, "finish_reason": "stop" } ], "usage": { "cached_tokens": 512, "prompt_tokens": 591, "completion_tokens": 120, "total_tokens": 711 } } ``` 以上面这个请求结果为例,输入总量仍为 591 Token,其中 512 Token 按缓存命中单价计费,剩余 591 - 512 = 79 Token 按缓存未命中单价计费。缓存不会减少实际输入 Token 数,也不意味着命中部分免费。输入费用为 `(79 × 缓存未命中单价 + 512 × 缓存命中单价) / 1,000,000`,其中单价的单位为元 / 1M tokens;输出 Token 另行计费。 ## 什么样的内容会进入缓存 在进行缓存时,**会以 256 个 Token 作为最小单元开始进行缓存**,当您的 Prompt 长度少于 256 个 Token 时,将不会命中缓存。 具体可缓存的信息会包含如下内容: * **对话信息**:完整的对话数组会进入到缓存系统当中,其中包含 System Prompt、User Message 以及 Assistant Message。 * **图片信息**:用户消息中包含的图片信息也会进入缓存当中,但需要保证前后使用的是相同的图片。 * **视频信息**:用户消息中包含的视频信息也会进入缓存当中,但需要保证前后使用的是相同的视频。 * **工具调用信息及其结果**:对话信息中的工具调用信息及其调用结果也会参与到缓存当中。 ## 最佳实践 * 在 Prompt 的开头使用静态或者重复的内容,而在整个 Prompt 结尾放置动态的内容; * 监控不同 Prompt 的 Cached Token 和 Prompt Token 的比重、延迟、命中率,来优化 Prompt 结构; * 近期未使用的缓存会被系统逐出,因此,尽可能保持 Prompt 前缀的稳定,以获得更高的缓存命中率。 * 对于较长的 Prompt,可以放在系统流量非高峰期进行,以减少缓存被逐出的次数,获得更高的缓存命中率。 ## 如何对缓存进行排查 如果您的请求没有按照您的预期进行缓存,您可以按照如下的思路进行排查: 1. 确保缓存的部分在每次调用过程中都始终保持一致; 2. 检查是否两次请求间隔时间太长,以避免缓存失效; 3. 验证是否提供了至少 256个 Token 作为输入。 ## 常见问题 ### 缓存是否影响模型的推理的效果? 缓存不会影响模型的推理效果,每次生成都会使用完整的 Prompt 进行推理。 ### 我是否需要为 Prompt 缓存额外付费? 无需单独开通付费缓存功能。未命中的输入 Token(包括首次写入缓存的内容)按缓存未命中单价计费,命中的输入 Token 按缓存命中单价计费。具体单价见 [API 定价](/docs/zh/guides/pricing/details#文本与多模态模型)。 ### 我是否可以手动清除 Prompt 缓存? 目前不提供手动清除缓存的能力。您可以通过修改 Prompt 来使请求不命中缓存; ### 我是否可以让我的请求始终命中缓存? 目前我们不提供保证始终命中的 Prompt 缓存,如果您有相关诉求,可以通过联系我们和我们取得联系,确认您的场景和问题。 # 实时对话 Source: https://platform.stepfun.com/docs/zh/guides/developer/realtime > 如果您是 Realtime API 的新手,可尝试 [stepfun-realtime-api](https://www.npmjs.com/package/stepfun-realtime-api)。 本指南将介绍使用 Realtime API 时模型功能(如音频生成、文本生成、函数调用)所需的事件流程,以及如何理解实时会话的状态。 在模型生成响应的过程中,服务器会发出多个生命周期事件。您可以监听这些事件(如 `response.text.delta`),在响应生成时向用户提供实时反馈。 服务器发出的事件完整列表见[Realtime API 事件列表](/docs/zh/api-reference/realtime/chat),它们按大致的发出顺序排列,同时包含文本生成相关的客户端事件。 ## 实时语音到语音会话 实时会话是模型与连接的客户端之间的有状态交互。会话的关键组成部分包括: * **会话(Session)** 对象:控制交互参数,如使用的模型、生成输出的语音、其他配置等。 * **对话(Conversation)**:表示当前会话中生成的用户输入项和模型输出项。 * **响应(Responses)**:模型生成的音频或文本项,会被添加到对话中。 **输入音频缓冲区与 WebSocket** 如果使用 WebSocket 处理音频,需要通过发送包含 base64编码音频的 JSON 事件,手动与**输入音频缓冲区**交互。 所有这些组件共同构成了实时会话。您将使用客户端事件更新会话状态,并监听服务器事件以响应会话中的状态变化。 如需手动建立连接,也可通过 WebSocket 直接对接。 ## 快速开始:创建 WebSocket 语音链路 通过 WebSocket 连接需使用以下连接信息: | 类别 | 详情 | | - | - | | URL | wss\://api.stepfun.com/v1/realtime | | 查询参数 | model:需连接的实时模型,比如 `step-audio-2`/`step-audio-2-mini`/`step-1o-audio` | | 请求头 | Authorization: Bearer YOUR\_STEP\_API\_KEY | 以下是多个通过上述连接信息初始化 WebSocket 连接的示例,可用于对接 Realtime API: ### 示例1:使用 ws 模块(Node.js 环境) ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import WebSocket from 'ws' // 连接地址(需替换为实际要使用的模型ID) const url = 'wss://api.stepfun.com/v1/realtime?model=step-1o-audio' // 初始化WebSocket连接 const ws = new WebSocket(url, { headers: { Authorization: 'Bearer ' + process.env.STEPFUN_API_KEY, // 从环境变量中获取标准API密钥 }, }) // 监听“连接成功”事件 ws.on('open', function open() { console.log('已连接到服务器。') }) // 监听“接收消息”事件 ws.on('message', function incoming(message) { console.log(JSON.parse(message.toString())) // 解析并打印接收的消息 }) ``` ### 示例2:使用 websocket-client 库(Python 环境) ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} # 注:此示例需依赖websocket-client库,安装命令:pip install websocket-client import os import json import websocket # 从环境变量中获取OpenAI API密钥 STEPFUN_API_KEY = os.environ.get("STEPFUN_API_KEY") # 连接地址(需替换为实际要使用的模型ID) url = "wss://api.stepfun.com/v1/realtime?model=step-1o-audio" # 请求头配置 headers = [ "Authorization: Bearer " + STEPFUN_API_KEY, ] # 定义“连接成功”回调函数 def on_open(ws): print("已连接到服务器。") # 定义“接收消息”回调函数 def on_message(ws, message): data = json.loads(message) # 解析JSON格式的消息 print("收到事件:", json.dumps(data, indent=2)) # 格式化打印接收的事件 # 初始化WebSocket应用并配置回调 ws = websocket.WebSocketApp( url, header=headers, on_open=on_open, on_message=on_message, ) # 保持WebSocket连接 ws.run_forever() ``` 一旦您通过 WebSocket 连接到实时 API,就可以调用实时模型进行语音到语音对话。这需要您**发送客户端事件**来发起操作,并**监听服务器事件**以响应实时 API 执行的操作。 ## 会话生命周期事件 通过 WebSocket 启动会话后,服务器会发送 `session.created` 事件,表明会话已准备就绪。在客户端,您可以通过 `session.update` 事件更新当前会话配置。大多数会话属性可以随时更新,但模型用于音频输出的 `voice`(语音)在会话期间模型首次以音频响应后,就无法再修改。实时会话的最长持续时间为**30分钟**。 以下示例展示了通过 `session.update` 客户端事件更新会话的操作。 更新本会话中模型使用的系统指令 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} const event = { type: 'session.update', session: { instructions: "在回复中绝对不要使用'moist'这个词!", }, } // WebSocket都有.send()方法 dataChannel.send(JSON.stringify(event)) ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} event = { "type": "session.update", "session": { "instructions": "在回复中绝对不要使用'moist'这个词!" } } ws.send(json.dumps(event)) ``` 当会话更新后,服务器会发出 `session.updated` 事件,包含会话的新状态。 | 相关客户端事件 | 相关服务器事件 | | - | - | | session.update | session.created session.updated | ## 文本输入与输出 要使用实时模型生成文本,您可以向当前对话添加文本输入,请求模型生成响应,并监听服务器发送的事件以了解模型响应的进度。为了生成文本,会话必须配置为 `text`(文本)模态(默认已启用)。 使用 `conversation.item.create` 客户端事件创建新的文本对话项。 创建包含用户输入的对话项 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} const event = { type: 'conversation.item.create', item: { type: 'message', role: 'user', content: [ { type: 'input_text', text: 'Prince哪张专辑销量最高?', }, ], }, } // WebSocket都有.send()方法 dataChannel.send(JSON.stringify(event)) ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} event = { "type": "conversation.item.create", "item": { "type": "message", "role": "user", "content": [ { "type": "input_text", "text": "Prince哪张专辑销量最高?", } ] } } ws.send(json.dumps(event)) ``` 将用户消息添加到对话后,发送 `response.create` 事件以启动模型响应。如果当前会话同时启用了音频和文本,模型将同时返回音频和文本内容。如果只想生成文本,可以在发送 `response.create` 客户端事件时指定,如下所示。 生成仅文本响应 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} const event = { type: 'response.create', response: { modalities: ['text'], }, } // WebSocket都有.send()方法 dataChannel.send(JSON.stringify(event)) ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} event = { "type": "response.create", "response": { "modalities": [ "text" ] } } ws.send(json.dumps(event)) ``` 当响应完全生成后,服务器会发出 `response.done` 事件。该事件将包含模型生成的完整文本,如下所示。 监听 response.done 以查看最终结果 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} function handleEvent(e) { const serverEvent = JSON.parse(e.data) if (serverEvent.type === 'response.done') { console.log(serverEvent.response.output[0]) } } // 监听服务器消息(WebSocket) ws.on('message', handleEvent) ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} def on_message(ws, message): server_event = json.loads(message) if server_event.type == "response.done": print(server_event.response.output[0]) ``` 在模型生成响应的过程中,服务器会发出多个生命周期事件。您可以监听这些事件(如 `response.text.delta`),在响应生成时向用户提供实时反馈。服务器发出的事件完整列表见下文的“相关服务器事件”,它们按大致的发出顺序排列,同时包含文本生成相关的客户端事件。 | 事件类型 | 说明 | | - | - | | conversation.item.create | conversation.item.created response.output\_item.added response.content\_part.added response.text.delta response.text.done response.content\_part.done response.output\_item.done response.done rate\_limits.updated | ## 音频输入与输出 实时 API 最强大的功能之一是与模型进行语音到语音交互,无需中间的文本转语音或语音转文本步骤。这降低了语音界面的延迟,并为模型提供了更多关于语音输入的语调和抑扬顿挫的信息。 ### 语音选项 实时会话支持配置多种内置语音用于音频输出。您可以通过 `session.update` 或 `response.create` 请求中的 `voice` 参数来设置模型的声音。当前的语音选项包括 `qingchunshaonv`、`wenrounansheng`、`elegantgentle-female`、`livelybreezy-female` 等。 > 请注意,一旦模型在会话中生成了音频,该会话的 `voice` 设置将无法修改。 > `step-audio-2` 模型支持音色复刻功能。您可以通过上传音频文件创建自定义音色,并在实时会话的 `voice` 参数中使用其 ID。详情请参考[复刻音色](/docs/zh/api-reference/audio/create-voice)。 ### 使用 WebSocket 处理音频 通过 WebSocket 发送和接收音频时,您需要做更多工作来从客户端发送媒体和从服务器接收媒体。下面是一个表格,描述了 WebSocket 会话期间通过 WebSocket 发送和接收音频所需的事件流程。 以下事件按生命周期顺序排列,但有些事件(如 `delta` 事件)可能同时发生。 | 生命周期阶段 | 客户端事件 | 服务器事件 | | - | - | - | | 会话初始化 | session.update | session.created session.updated | | 用户音频输入 | conversation.item.create(发送完整音频消息) input\_audio\_buffer.append(分块流式传输音频) input\_audio\_buffer.commit(禁用 VAD 时使用) response.create(禁用 VAD 时使用) | input\_audio\_buffer.speech\_started input\_audio\_buffer.speech\_stopped input\_audio\_buffer.committed | | 服务器音频输出 | input\_audio\_buffer.clear(禁用 VAD 时,或者需要主动创建一轮输出时使用) | conversation.item.created response.created response.output\_item.created response.content\_part.added response.audio.delta response.audio\_transcript.delta response.text.delta response.audio.done response.audio\_transcript.done response.text.done response.content\_part.done response.output\_item.done response.done rate\_limits.updated | ### 向服务器流式传输音频输入 要向服务器流式传输音频输入,可以使用 `input_audio_buffer.append` 客户端事件。该事件要求您通过套接字向实时 API 发送**Base64编码的音频字节**块。每个块的大小不能超过15 MB。 输入块的格式可以为整个会话配置,也可以为每个响应单独配置。 * 会话级:`session.update` 中的 `session.input_audio_format` * 响应级:`response.create` 中的 `response.input_audio_format` 向对话附加音频输入字节 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import fs from 'fs'; import decodeAudio from 'audio-decode'; // 将音频数据的Float32Array转换为PCM16 ArrayBuffer function floatTo16BitPCM(float32Array) { const buffer = new ArrayBuffer(float32Array.length * 2); const view = new DataView(buffer); let offset = 0; for (let i = 0; i < float32Array.length; i++, offset += 2) { let s = Math.max(-1, Math.min(1, float32Array[i])); view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true); } return buffer; } // 将Float32Array转换为base64编码的PCM16数据 base64EncodeAudio(float32Array) { const arrayBuffer = floatTo16BitPCM(float32Array); let binary = ''; let bytes = new Uint8Array(arrayBuffer); const chunkSize = 0x8000; // 32KB块大小 for (let i = 0; i < bytes.length; i += chunkSize) { let chunk = bytes.subarray(i, i + chunkSize); binary += String.fromCharCode.apply(null, chunk); } return btoa(binary); } // 用三个文件的内容填充音频缓冲区,然后请求模型生成响应 const files = [ './path/to/sample1.wav', './path/to/sample2.wav', './path/to/sample3.wav' ]; for (const filename of files) { const audioFile = fs.readFileSync(filename); const audioBuffer = await decodeAudio(audioFile); const channelData = audioBuffer.getChannelData(0); const base64Chunk = base64EncodeAudio(channelData); ws.send(JSON.stringify({ type: 'input_audio_buffer.append', audio: base64Chunk })); }); ws.send(JSON.stringify({type: 'input_audio_buffer.commit'})); ws.send(JSON.stringify({type: 'response.create'})); ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import base64 import json import struct import soundfile as sf from websocket import create_connection # ... 创建名为ws的websocket-client ... def float_to_16bit_pcm(float32_array): clipped = [max(-1.0, min(1.0, x)) for x in float32_array] pcm16 = b''.join(struct.pack(' 1 else data base64_chunk = base64_encode_audio(channel_data) # 发送客户端事件 event = { "type": "input_audio_buffer.append", "audio": base64_chunk } ws.send(json.dumps(event)) ``` ### 发送完整音频消息 也可以创建包含完整音频录制的对话消息。使用 `conversation.item.create` 客户端事件创建带有 `input_audio` 内容的消息。 创建完整音频输入对话项 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} const fullAudio = '<音频字节的base64编码字符串>' const event = { type: 'conversation.item.create', item: { type: 'message', role: 'user', content: [ { type: 'input_audio', audio: fullAudio, }, ], }, } // WebSocket 有.send()方法 dataChannel.send(JSON.stringify(event)) ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} fullAudio = "<音频字节的base64编码字符串>" event = { "type": "conversation.item.create", "item": { "type": "message", "role": "user", "content": [ { "type": "input_audio", "audio": fullAudio, } ], }, } ws.send(json.dumps(event)) ``` ### 处理 WebSocket 的音频输出 您需要监听 `response.audio.delta` 事件,其中包含模型发来的 base64编码音频数据块。您需要缓冲这些块并将其写入文件。 请注意,`response.audio.done` 和 `response.done` 事件实际上不包含音频数据,只包含音频内容的转录文本。要获取实际的字节数据,需要监听 `response.audio.delta` 事件。 输出块的格式可以为整个会话配置,也可以为每个响应单独配置。 * 会话级:`session.update` 中的 `session.output_audio_format` * 响应级:`response.create` 中的 `response.output_audio_format` 监听 response.audio.delta 事件 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} function handleEvent(e) { const serverEvent = JSON.parse(e.data) if (serverEvent.type === 'response.audio.delta') { // 访问base64编码的音频块 // console.log(serverEvent.delta); } } // 监听服务器消息(WebSocket) ws.on('message', handleEvent) ``` ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} def on_message(ws, message): server_event = json.loads(message) if server_event.type == "response.audio.delta": # 访问base64编码的音频块: # print(server_event.delta) ``` ## 语音活动检测 默认情况下,实时会话启用**语音活动检测(VAD)**,这意味着 API 会判断用户何时开始或停止说话,并自动响应。 ### 禁用 VAD 可以通过 `session.update` 客户端事件将 `turn_detection` 设置为 `null` 来禁用 VAD。这对于需要精细控制音频输入的界面很有用,例如按键通话界面。 禁用 VAD 后,客户端必须手动发出一些额外的客户端事件来触发音频响应: * 手动发送 `input_audio_buffer.commit`,这将为对话创建新的用户输入项。 * 手动发送 `response.create` 以触发模型的音频响应。 * 在开始新的用户输入之前发送 `input_audio_buffer.clear`。 ## 自定义 Tool Call 目前 StepFun Realtime API 内置了以下工具: web\_search 和 retrieval。 另外,也支持自定义工具调用(Tool Call),用户可以根据需求定义自己的工具并在会话中使用。 ### 工具配置方式 在 update session 请求中配置 tools 参数来启用工具功能: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "tools": [ // 内置工具配置 { "type": "web_search", "function": { "description": "网络搜索工具", "options": { "top_k": 5, "timeout_seconds": 3 } } }, // 自定义工具配置 { "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "城市名称,如:北京、上海" } }, "required": ["location"] } } } ] } ``` ### 网络搜索工具 web\_search 通过 `type: "web_search"` 工具,模型可实时访问互联网,获取最新信息和数据。适用于需要广泛知识和实时数据的场景。 #### 使用示例 在 update session 请求的 tools 参数中添加以下结构: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "tools": [{ "type": "web_search" }] } ``` 即可在回复中启用 web\_search 工具。 #### 高级参数 * `options.top_k`: 指定返回结果的数量,默认为 5。 * `options.timeout_seconds`: 请求超时时间,默认为 3 秒。 示例 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "tools": [ { "type": "web_search", "function": { "description": "搜索工具", "options": { "top_k": 5, "timeout_seconds": 3 } } } ] } ``` 启用后,模型在回答需要搜索的问题时会自动调用该工具,您不需要做其他额外的逻辑处理。 ### 知识库检索工具 retrieval 通过 `type: "retrieval"` 工具,模型可实时访问指定知识库(Vector Store),精准回答用户问题。适用于垂直领域问答场景,用户可以提前定义用于参考的回复数据。 #### 一、功能配置步骤 在 update session 请求的 tools 参数中添加以下结构: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "tools": [ { "type": "retrieval", "function": { "description": "当用户问题涉及菜谱、烹饪步骤、食材处理或厨房技巧时,从此知识库检索答案", "options": { "vector_store_id": "133192900598194176", // 必填 "prompt_template": "从文档{{knowledge}}中找到问题{{query}}的答案。根据文档内容中的语句提取答案,若文档中无答案则告知用户无法回答" } } } ] } ``` #### 二、参数详解 | 参数 | 是否必填 | 说明 | | - | - | - | | type | 是 | 固定值 "retrieval",声明使用知识库检索功能。 | | function.description | 是 | 关键提示:用1-2句话明确触发条件,例如:“仅当问题与菜谱、食材或烹饪相关时使用本知识库”。 | | options.vector\_store\_id | 是 | 知识库的唯一 ID(示例:133192900598194176),需提前在平台创建。 | | options.prompt\_template | 否 | 定制化提示模板,支持占位符 `\{\{knowledge\}\}`(检索到的片段)和 `\{\{query\}\}`(用户原始问题);若不提供则使用默认模板。默认:从文档 `\{\{knowledge\}\}` 中找到问题 `\{\{query\}\}` 的答案。根据文档内容中的语句提取答案,若文档中无答案则告知用户无法回答 | #### 三、工作原理 1. 触发条件:用户问题匹配 description 中的领域描述(如“如何煎牛排?”)。 2. 知识检索: * 系统根据 vector\_store\_id 定位知识库。 * 将用户问题 `\{\{query\}\}` 嵌入为向量,检索最相关的知识片段。 3. 生成答案: * 自动将 `\{\{knowledge\}\}` 和 `\{\{query\}\}` 填入 prompt\_template。 * 模型基于模板生成最终回复(例:*“根据知识库:牛排需每面煎2分钟...”*)。 #### 四、最佳实践 1. 在 description 中精准描述: `"description": "仅限回答菜谱步骤、食材替代方案、烹饪时间问题,其他问题忽略检索"` 2. 错误处理:在 prompt\_template 中明确无答案时的响应,例如:"下面是检索到的结果: \{\{knowledge}},如果未在知识库中找到关于\{\{query}}的信息,请告诉用户尝试更具体的问题。" 3. 避免冲突:如果您启用了内置工具的 web\_search ,模型可能会尝试调用 web 搜索而不是在知识库,您可以在初始化会话时,通过 instructions 引导其优先使用知识库:\ "你是一个专业烹饪助手,当用户询问菜谱、食材处理或烹饪技巧时,必须从知识库中检索答案。若知识库无相关信息,需明确告知用户。" ### 自定义 Tool Call 通过自定义函数调用,您可以扩展模型的能力,使其能够执行特定业务逻辑(如查询天气、生成星座运势等)。基本流程如下: 1. **配置函数**:在会话级别定义可用函数 2. **检测调用**:模型根据用户输入决定是否调用函数 3. **执行函数**:客户端使用生成的参数执行自定义代码 4. **返回结果**:将函数执行结果返回给模型并获取最终响应 #### 函数配置 通过 `session.update` 事件的 `session.tools` 参数添加函数定义: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "session.update", "session": { "tools": [ { "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "城市名称,如:北京、上海" } }, "required": ["location"] } } } ] } } ``` #### 函数调用流程 ##### 1. 检测函数调用 当用户输入触发函数调用时,您将收到包含函数调用参数的对话项: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "event_id": "cee2a492-012c-4655-ac50-5db2c99f4345", "type": "conversation.item.created", "item": { "id": "item_20250622105814", "type": "function_call", "status": "incomplete", "call_id": "call_20250622225814_get_weather", "name": "get_weather", "object": "realtime.item" } } ``` ##### 2. 接收函数参数 参数生成过程中会收到增量更新事件: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "response.function_call_arguments.delta", "call_id": "call_20250622225814_get_weather", "arguments": "{\"location\":\"北", "name": "get_weather" } ``` 参数生成完成后会收到完成事件: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "response.function_call_arguments.done", "call_id": "call_20250622225814_get_weather", "arguments": "{\"location\":\"北京\"}", "name": "get_weather" } ``` ##### 3. 返回函数执行结果 客户端执行函数后,需要将结果返回给模型: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "conversation.item.create", "item": { "type": "function_call_output", "call_id": "call_20250622225814_get_weather", "output": "北京:晴,25°C" } } ``` ##### 4. 触发模型响应 返回函数结果后,需要手动触发模型生成最终响应: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "response.create" } ``` #### 完整示例:星座运势查询 ##### 1. 配置星座运势函数 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "session.update", "session": { "tools": [ { "type": "function", "function": { "name": "generate_horoscope", "description": "提供某个星座的今日运势。", "parameters": { "type": "object", "properties": { "sign": { "type": "string", "description": "需要查询运势的星座。", "enum": [ "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座" ] } }, "required": ["sign"] } } } ] } } ``` ##### 2. 用户请求与函数调用 用户输入:"我的运势如何?我是水瓶座。" 模型检测到需要调用函数,返回调用参数: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "response.done", "response": { "output": [ { "type": "function_call", "name": "generate_horoscope", "call_id": "call_sHlR7iaFwQ2YQOqm", "arguments": "{\"sign\":\"水瓶座\"}" } ] } } ``` ##### 3. 返回函数执行结果 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "conversation.item.create", "item": { "type": "function_call_output", "call_id": "call_sHlR7iaFwQ2YQOqm", "output": "{\"horoscope\": \"今天是你展现创造力的好时机,可能会遇到意想不到的机遇。\"}" } } ``` ##### 4. 获取最终响应 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "response.create" } ``` 通过以上流程,您可以灵活扩展模型能力,实现各种自定义功能。 > 注意,函数调用和语音可能会出现在同一轮,比如如果有 get\_weather 函数,模型可能会先输出:“让我先查查天气” 的口水话,然后再创建函数调用。这样的好处是,如果有比较复杂的函数调用,可以利用语音播放的时间来并行处理函数调用的生成。但是您需要注意要在语音播放完后才调用 `response.create` 来触发最终回复。 ## 开发技巧 ### 实现开场白 在某些应用场景下,您可能希望在对话开始时,模型能够主动打招呼或介绍自己。这可以通过在创建会话时,使用特殊的提示词实现: ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请你原样无修改地输出下面的话: 你好,我是阶跃星辰开发的AI助手。 ``` 客户端主动创建响应: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "response.create", "session": { "instructions": "请你原样无修改地输出下面的话:你好,我是阶跃星辰开发的AI助手。" } } ``` 这样,模型会主动输出问候语:您好,我是阶跃星辰开发的 AI 助手。 ### 更灵活的 VAD 如果您使用 server\_vad 模式,但每次 append 的音频片段较长,可能会导致系统响应延迟较高。这是因为 VAD 需要积累足够长的音频数据才能做出判断,建议以20ms 左右的间隔提交音频,以保证检测的实时性。 此外,VAD 判断用户停止说话的依据是检测到连续若干帧的空白或低音量音频。如果您提交的音频末尾没有包含足够的静音帧,VAD 可能无法准确识别语音结束点,从而导致系统未能及时触发自动回复。为避免该问题,应确保在语音段后保留一定时长的静音音频。 最佳实践建议: * 音频分段提交:尽量以小块(如 20ms\~30ms)为单位频繁提交音频数据; * 如果您用音频文件输入,务必在文件确保有一定的静音段; ### 网页中播放声音示例代码 为了支持流式 pcm16 的播放,您的播放逻辑需要支持多次 append 动作。另外,为了可以及时打断,最好可以实现及时清空缓冲区的功能。 这里是一份简易的示例代码,用 typescript 写成,适用于浏览器环境。 ```typescript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} class SimplePCMPlayer { // 固定参数:单声道、24000Hz采样率(示例用) private static readonly SAMPLE_RATE = 24000 private static readonly CHANNELS = 1 private audioContext: AudioContext private currentSource: AudioBufferSourceNode | null = null private bufferedData: Float32Array[] = [] private isPlaying = false private nextStartTime = 0 constructor() { // 简单的兼容性处理 const AudioContextConstructor = window.AudioContext || (window as any).webkitAudioContext if (!AudioContextConstructor) { throw new Error('浏览器不支持Web Audio API') } this.audioContext = new AudioContextConstructor() } /** * 追加16位有符号小端PCM数据(单声道24000Hz) * @param pcm 原始PCM数据(ArrayBuffer) */ appendPCM(pcm: ArrayBuffer) { // 简单校验 if (pcm.byteLength % 2 !== 0) { console.error('PCM数据长度必须是2的倍数(16位整数)') return } // 16位Int转32位Float(范围归一化到[-1, 1)) const int16Array = new Int16Array(pcm) const float32Array = new Float32Array(int16Array.length) for (let i = 0; i < int16Array.length; i++) { float32Array[i] = int16Array[i] / 32768 } this.bufferedData.push(float32Array) if (!this.isPlaying) { this.playNext() } } /** * 播放下一段缓冲数据 */ private playNext() { if (this.bufferedData.length === 0) { this.isPlaying = false return } this.isPlaying = true const data = this.bufferedData.shift()! // 创建音频缓冲 const audioBuffer = this.audioContext.createBuffer( SimplePCMPlayer.CHANNELS, data.length, SimplePCMPlayer.SAMPLE_RATE, ) audioBuffer.copyToChannel(data, 0) // 创建播放源 const source = this.audioContext.createBufferSource() source.buffer = audioBuffer source.connect(this.audioContext.destination) // 计算播放时间(避免重叠) const currentTime = this.audioContext.currentTime const startTime = Math.max(currentTime, this.nextStartTime) this.nextStartTime = startTime + audioBuffer.duration // 开始播放 source.start(startTime) this.currentSource = source // 播放结束后继续下一段 source.onended = () => { this.currentSource = null this.playNext() } } /** * 清空缓冲并停止播放 */ clearAll() { // 停止当前播放 if (this.currentSource) { this.currentSource.stop() this.currentSource.onended = null this.currentSource = null } // 清空状态 this.bufferedData = [] this.isPlaying = false this.nextStartTime = this.audioContext.currentTime } } ``` ## 错误处理 服务器在会话期间遇到错误情况时,会发出 `error` 事件。有时,这些错误可以追溯到您的应用发出的客户端事件。 与 HTTP 请求和响应不同(其中响应隐式关联到客户端的请求),我们需要使用客户端事件上的 `event_id` 属性来确定其中某个事件是否在服务器上触发了错误情况。下面的代码展示了这种方法,客户端尝试发出不支持的事件类型。 ```javascript theme={"theme":{"light":"light-plus","dark":"dark-plus"}} const event = { event_id: 'my_awesome_event', type: 'scooby.dooby.doo', } dataChannel.send(JSON.stringify(event)) ``` 客户端发送的这个失败事件将触发如下错误事件: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "type": "invalid_request_error", "code": "invalid_value", "message": "无效值: 'scooby.dooby.doo' ...", "param": "type", "event_id": "my_awesome_event" } ``` # 推理模型 Source: https://platform.stepfun.com/docs/zh/guides/developer/reasoning 阶跃星辰为开发者提供了多款推理模型,覆盖文本推理、多模态理解、Agent 和代码分析等场景。推荐优先使用 `step-5-preview`,覆盖编程、专业知识工作和多步骤 Agent 任务,原生支持文本、图片与视频输入,提供 1M tokens 上下文;如需高速多模态推理,可使用 `step-3.7-flash`,纯文本场景也可使用 `step-3.5-flash`。 `step-3.7-flash` 是阶跃星辰的高速多模态推理模型。在 `step-3.5-flash` 的高速推理与工具调用能力基础上,新增原生图片和视频理解能力,支持三档推理强度,适合 Agent、代码、多模态分析和复杂规划任务。 `step-3.5-flash` 是阶跃星辰最强大的开源基座模型。它专为极致效率而生,具备前沿的推理能力和卓越的智能体(Agent)性能。该模型基于稀疏混合专家(MoE)架构,尽管拥有 1960 亿参数,但处理每个 Token 时仅需选择性激活 110 亿参数。这种极高的“智能密度”使其推理深度足以媲美顶级闭源模型,同时兼顾了实时交互所需的敏捷响应速度。 ## 推理强度控制 支持三档推理强度的模型可通过参数控制思考深度。Chat Completion API 使用 `reasoning_effort`;Messages API 使用 `output_config.effort`。 | 推理强度 | 适用场景 | | :- | :- | | `low` | 简单问答、摘要、改写、信息抽取 | | `medium` | 默认推荐,适合一般推理和多步骤任务 | | `high` | 复杂推理、数学、规划、代码分析 | > [!NOTE] > > 基础调用示例见[快速开始](/docs/zh/quickstart/overview)。参数字段说明见 [Chat Completion API](/docs/zh/api-reference/chat/chat-completion-create#请求参数) 和 [Messages API](/docs/zh/api-reference/chat/messages-create#请求参数)。 ## 文本推理调用示例 推理模型的文本对话调用方式基本一致。以下以 `step-5-preview` 为例,构建一个流式对话。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import time from openai import OpenAI # Set your API Key and Base URL BASE_URL = "https://api.stepfun.com/v1" STEP_API_KEY = "YOUR_STEP_API_KEY" # Select Model COMPLETION_MODEL = "step-5-preview" # User Prompt user_prompt = "How many 'r's are in the word strawberry?" client = OpenAI(api_key=STEP_API_KEY, base_url=BASE_URL) time_start = time.time() try: response = client.chat.completions.create( model=COMPLETION_MODEL, messages=[ {"role": "user", "content": user_prompt} ], stream=True ) except Exception as e: print("Exception occurred when requesting API:", e) exit(1) print("Reasoning Process:") try: for chunk in response: # Check for reasoning content if hasattr(chunk.choices[0].delta, 'reasoning') and chunk.choices[0].delta.reasoning: print(chunk.choices[0].delta.reasoning, end='', flush=True) # Check for standard content elif chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end='', flush=True) except Exception as e: print("\nError occurred while processing streaming results:", e) time_end = time.time() print(f"\n\nTotal generation time: {time_end - time_start:.2f} seconds") ``` ## 多模态图片理解示例 以下使用最简单的代码实现 `step-3.7-flash` 对图片进行分析。基础调用方式见[快速开始](/docs/zh/quickstart/overview),推理强度(`reasoning_effort`)等参数详见本指南。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import time import base64 from openai import OpenAI BASE_URL,STEP_API_KEY = "https://api.stepfun.com/v1", "YOUR_STEP_API_KEY" # 选择模型 COMPLETION_MODEL = "step-3.7-flash" # 用户问题提示 user_prompt = "帮我看看这是什么菜,如何制作?" # 将本地图片转换为 base64 字符串 def image_to_base64(image_path): with open(image_path, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) return encoded_string.decode('utf-8') # 注意提供准确的图片路径 image_path1 = "./宫保鸡丁.png" bstring1 = image_to_base64(image_path1) # 构造消息,依靠模型自主深度思考 messages = [ {"role": "user", "content": [ {"type": "image_url", "image_url": {"url": f"data:image/jpg;base64,{bstring1}", "detail": "high"}}, {"type": "text", "text": user_prompt} ]} ] time_start = time.time() client = OpenAI(api_key=STEP_API_KEY, base_url=BASE_URL) try: response = client.chat.completions.create( model=COMPLETION_MODEL, messages=messages, stream=True ) except Exception as e: print("请求 API 时发生异常:", e) exit(1) try: for chunk in response: # 您可以在这里获取到补全的内容,并判断是否是 reaonsing 内容。 print(chunk) except Exception as e: print("处理流式结果时发生错误:", e) time_end = time.time() print(f"\n总生成时间: {time_end - time_start:.2f}秒") ``` 输入参数详情可以参考[Chat Completion 文档](/docs/zh/api-reference/chat/chat-completion-create#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0) **输出示例** ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3.7-flash', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=701, total_tokens=701, completion_tokens_details=None, prompt_tokens_details=None), agent='') ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None, reasoning='\n'), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3.7-flash', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=1, prompt_tokens=701, total_tokens=702, completion_tokens_details=None, prompt_tokens_details=None), agent='') ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None, reasoning='好的'), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3.7-flash', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=2, prompt_tokens=701, total_tokens=703, completion_tokens_details=None, prompt_tokens_details=None), agent='') 。。。 ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='!', function_call=None, refusal=None, role='assistant', tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3.7-flash', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=1031, prompt_tokens=701, total_tokens=1732, completion_tokens_details=None, prompt_tokens_details=None), agent='') ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None), finish_reason='stop', index=0, logprobs=None)], created=1744290861, model='step-3.7-flash', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=1032, prompt_tokens=701, total_tokens=1733, completion_tokens_details=None, prompt_tokens_details=None), agent='') ``` 响应体字段说明请参考 [Chat Completions API 的流式响应说明](/docs/zh/api-reference/chat/chat-completion-create#流式响应)。 ## 获取 Reasoning 内容 阶跃星辰的推理大模型在处理复杂问题时,会在输出中包含 reasoning 字段,展示模型的思考过程。开发者可以通过判断该字段是否存在来获取模型的思考信息。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} if chunk.choices[0].delta.reasoning: reasoning = chunk.choices[0].delta.reasoning print("模型思考过程:", reasoning) ``` 对于非流式场景可以直接提取 reasoning 字段,获取模型的思考过程。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} msg = completion.choices[0].message.content reasoning = completion.choices[0].message.reasoning ``` ### 通过 `reasoning_content` 字段,获取模型的思考过程。 如果您目前使用的推理模型中已经使用 `reasoning_content` 字段,可以继续使用该字段。阶跃星辰的推理模型也支持这一字段,开发者可以根据自己的需求选择使用。 只需要在请求时传入 `reasoning_format="deepseek-style"` 即可。(如使用 OpenAI SDK,则需要通过 `extra_body` 字段传入) ## 多模态模型使用注意事项 * **深度思考优势**:模型在接收到图片及文字提示后,会首先经过内部思考(reasoning)再输出最终结果。这一过程有助于完成复杂的关联和因果推理,但可能会使响应时间略有延迟,应据此考虑超时设置。 * **图片数据格式**:确保传入的图片数据使用正确的 Base64 编码格式,并按照 API 要求指定图片类型(如 JPG/JPEG、PNG、静态 GIF、WebP 等)和细节参数,保证推理的准确性。详见[文档](/docs/zh/guides/models/vision#关键术语) * **错误处理与日志记录**:在输出时已加入 Trace ID,若遇到模型推理问题,可将此 ID 反馈给我们。 ## 智能路由(Step Plan 专属) `step-router-v1` 是阶跃星辰为 Step Plan 通道提供的智能路由模型,按请求特征自动在 `deepseek-v4-pro` 与 `step-3.7-flash` 之间切换,让复杂决策走 Pro、高频执行走 Flash。详细使用方式与最佳实践见 [Step Router V1 智能路由](/docs/zh/guides/developer/step-router)。 # 知识库 Source: https://platform.stepfun.com/docs/zh/guides/developer/retrieval RAG(检索增强生成)技术结合了大模型与知识库,通过实时检索相关信息来生成更准确、详实的回答,主要解决大模型在知识更新和特定领域专业性上的不足,确保回答内容与最新数据一致,减少“幻觉”现象。 使用 RAG 可以提升信息检索的效率和准确性,增强模型在复杂查询和专业应用中的表现,如智能客服、内容生成和决策辅助等。此外,RAG 有助于扩展模型的知识覆盖范围,提升用户体验,确保提供可靠且有针对性的解决方案,是提升大模型实用性的重要技术手段。 ## 达成效果 基于自有文档创建知识库,并将其与大模型结合使用,实现检索与生成一体化的智能应用。 ## 具体的步骤 & 参考代码 ### 获取并整理本地知识 1. **知识选取**: 识别并提取与工作相关的非结构化知识源,包括但不限于在线网站、PDF 文档及各类问题清单。\ 实际操作:收集有用的需求文档,QA 等,以及打印出官网的相关信息。 2. **信息剔除**: 对所选知识源中的无关信息进行系统化剔除,确保保留下来的内容具有高度的相关性和实用性。\ 实际操作:剔除代码,私人信息,未经处理的口语描述等信息 3. **内容精简**: 针对重复性内容进行精简与整合,去除冗余信息,以提高知识库的有效性和可用性。 \ 实际操作:将相似内容教给大模型,剔除重复信息,保留精练的信息 4. **文档处理**: 对于 Excel 格式的问题清单,将内容转换为问答形式,确保信息结构化清晰;其他文档则按段落进行整理,形成描述性文字,便于后续查询与引用。\ 实际操作:统一将各种文档交给大模型进行优化。 ### 一、上传文件 参考[文件管理接口](/docs/zh/api-reference/files/create) API 上传文件,后续将用于录入知识库,注意: **purpose 字段的值为 retrieval** ### 二、创建知识库 创建知识库,用于后续的文件管理,您可以将一个方向的内容录入到同一个知识库中,方便后续的管理。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" url = BASE_URL+"/vector_stores" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {STEP_API_KEY}" # 确保 STEP_API_KEY 是定义好的变量 } data = { "name": "food_calorie" } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Success:", response.json()) else: print("Error:", response.status_code, response.text) ``` 返回结果如下: > 注意保存好知识库 ID,后续知识库关联文件,以及使用知识库,都是直接使用此 ID ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "171215831957549056", "name": "food_calorie" } ``` ### 三,知识库关联文件 将文件关联到知识库中,后续就可以使用知识库 ID 进行检索,从而确保多个文件可以同时参与检索。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import requests from requests_toolbelt.multipart.encoder import MultipartEncoder STEP_API_KEY="YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" # 使用创建知识库时获取的ID vector_store_id = "171215831957549056" url = BASE_URL+"/vector_stores/"+vector_store_id+"/files" headers = { "Authorization": f"Bearer {STEP_API_KEY}" # 确保 STEP_API_KEY 是定义好的变量 } # 准备 multipart 数据 # 使用 上传文件后获取的文件id multipart_data = MultipartEncoder( fields={ "file_ids": "file-CeAyPYz5Bg" } ) # 添加 multipart content-type 到头部 headers["Content-Type"] = multipart_data.content_type response = requests.post(url, headers=headers, data=multipart_data) if response.status_code == 200: print("Success:", response.json()) else: print("Error:", response.status_code, response.text) ``` 返回的报文 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "file-CeAyPYz5Bg", "usage_bytes": 1405210, "vector_store_id": "171215831957549056" } ``` ### 四,使用知识库进行对话补全 以下是一个基于食品热量的知识库检索的案例,您可以根据自己的需求,调整问题和答案,以及知识库的内容。 ```python copy theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI STEP_API_KEY = "YOUR_STEP_API_KEY" BASE_URL = "https://api.stepfun.com/v1" # 初始化 client = OpenAI(api_key=STEP_API_KEY, base_url=BASE_URL) # 选择模型 COMPLETION_MODEL = "step-3.7-flash" sys_prompt = """ 你是一名食物营养成分专家。 你的任务是识别文本中的每一份食物,并根据以下分类规则预估它们的重量和热量、营养成本(碳水化合物、蛋白质、脂肪),并按「输出格式」进行最后结果的输出。 ## 理解食物 1.我会给你一段文字,请识别文字中的食物 2.根据食物的名称,去检索食物的营养成分 4.如果检索后,上下文没有对应食物的营养成分,则直接在食物名称后加上「营养成分未知」,然后输出结果 ## 输出格式(请仅输出以下内容,不要说任何多余的话) 1.如果检索出了食物的营养成分,则直接输出以下内容 食物名称:预计每100g的热量(大卡),碳水化合物(g),蛋白质(g),脂肪(g) 2.如果没有检索出了食物的营养成分,则直接输出以下内容 食物名称:营养成分未知 """ user_prompt = "西红柿鸡炒番茄,西冷牛排" messages = [ { "role": "system", "content": sys_prompt }, { "role": "user", "content": user_prompt } ] tools = [ { "type": "retrieval", "function": { "name": "food_nutrition", "description": "本文档存储了食物的营养成分,包含:食物名称,预估重量(g),热量(大卡),碳水化合物(g),蛋白质(g),脂肪(g)等信息", # 知识库的描述 "options": { "vector_store_id": "171215831957549056", # 知识库 ID "prompt_template": "从文档 {{knowledge}} 中找到问题 {{query}} 的答案。根据文档内容中的语句找到答案,如果文档中没用答案则告诉用户找不到相关信息;" } } } ] response = client.chat.completions.create( messages=messages, model=COMPLETION_MODEL, tool_choice="auto", tools=tools, stream=True, ) for chunk in response: print(chunk) ``` 返回的报文 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "e45108181a377f91ae197bcbf5273667.2935815498cc45d238f63de5d0eb5c9e", "choices": [ { "finish_reason": "stop", "index": 0, "logprobs": null, "message": { "content": "西红柿鸡炒番茄:营养成分未知\n西冷牛排:食物名称:预计每100g的热量(大卡)131,碳水化合物(g)11,蛋白质(g)10,脂肪(g)6\n", "role": "assistant", "function_call": null, "tool_calls": null } } ], "created": 1732516765, "model": "step-3.7-flash", "object": "chat.completion", "service_tier": null, "system_fingerprint": null, "usage": { "completion_tokens": 80, "prompt_tokens": 219, "total_tokens": 299 } } ``` 可以看到命中知识库后,会直接基于知识库的内容进行回复,未命中的知识库则直接说明情况(可以后续补充完善知识库) ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/guide/retrieval.png?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=e9bea0f926b9213a5fa623905aa9e155) ## 注意事项 1. 上传文件时,`purpose` 字段必须填写为 `retrieval`。有关文件上传及管理的详细信息,请参阅[文档解析开发指南](/docs/zh/guides/developer/doc-parser)。 2. 添加文件到知识库时,确保文件状态为 success 后,才能将其添加到知识库中。 3. 在使用知识库进行对话补全时,确保在 description 中**清晰描述知识库的内容**;并在提示语(prompt)中,将任务描述与 description 紧密结合,以提高知识库命中的概率。 # StepSearch Source: https://platform.stepfun.com/docs/zh/guides/developer/search-mcp StepSearch MCP Server 是基于模型上下文协议(Model Context Protocol)实现的搜索服务,为 Claude Code、Cline、OpenCode 等兼容 MCP 的客户端提供阶跃星辰的专业搜索能力,包括网络搜索、网页内容获取等功能。 ## 功能特性 * **实时搜索**:支持全网搜索,获取最新的网络信息和资源 * **编程增强**:在开发过程中检索编程最佳实践、API 文档及论文等 * **远程服务**:基于 HTTP 协议的远程 MCP 服务,无需本地安装 ## 支持的工具 该服务实现了模型上下文协议,可与任何兼容 MCP 的客户端一起使用。目前提供以下工具: | 工具 | 说明 | | - | - | | `web_search` | 全网信息检索与索引化结果输出 | | `web_fetch` | 指定 URL 的网页内容抓取与结构化提取 | ## 快速开始 ### 1. 获取访问令牌 前往 [阶跃星辰开放平台](https://platform.stepfun.com/interface-key) 获取您的 API Key。 ### 2. 配置 MCP 服务器 根据您使用的客户端,选择对应标签页查看配置方式。 **Claude Code** **一键安装命令:** ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} claude mcp add -s user -t http web-search https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp --header "Authorization: Bearer YOUR_STEP_API_KEY" ``` **手动配置:** 编辑 Claude Code 的配置文件(位于用户目录下 `~/.claude.json`): ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "mcpServers": { "web-search": { "type": "http", "url": "https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp", "headers": { "Authorization": "Bearer YOUR_STEP_API_KEY" } } } } ``` **Cline(VS Code)** 安装 Cline 扩展后,在侧边栏点击右上角 **MCP Servers** → **Configure** → **Configure MCP Servers**,将以下配置粘贴并保存: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "mcpServers": { "web-search": { "type": "streamableHttp", "url": "https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp", "headers": { "Authorization": "Bearer YOUR_STEP_API_KEY" } } } } ``` **OpenCode** 编辑全局配置文件 `~/.config/opencode/opencode.json`,将以下内容粘贴并保存: ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "$schema": "https://opencode.ai/config.json", "mcp": { "web-search": { "type": "remote", "url": "https://api.stepfun.com/step_plan/v1/mcp/web_search/mcp", "headers": { "Authorization": "Bearer YOUR_STEP_API_KEY" } } } } ``` ## 使用示例与最佳实践 将搜索 MCP 服务器安装到客户端后,即可在对话中直接使用搜索能力。以下是几种典型使用场景。 ### 预备:创建搜索专用 Agent Claude Code 通过 `.claude/agents/` 目录下的定义文件来识别可用的 Sub-Agent。创建专用搜索 Agent 后,Claude Code 可以在需要实时信息时自动调用该 Sub-Agent 执行搜索任务,每次处理一个查询并返回结构化结果。 **1. 创建 Agent 定义文件** 在项目根目录下创建 `.claude/agents/search-agent.md`: ```markdown theme={"theme":{"light":"light-plus","dark":"dark-plus"}} --- name: search-agent description: 执行网络搜索,获取实时信息(最新版本、CVE 漏洞、定价、社区反馈等)。每次只处理一个查询并返回结构化结果。 tools: mcp__web-search__web_search, mcp__web-search__web_fetch --- 你是专职网络搜索助手,只负责执行搜索任务并返回结构化结果。 ## 工作流程 1. 接收主 Agent 传入的搜索关键词 2. 使用可用的 Search MCP 工具执行搜索 3. 过滤并整理结果 4. 返回结构化输出 ## 输出格式 每次搜索按以下格式返回: ### 查询:[搜索关键词] **结果 1**: - 标题:[文章或页面标题] - 核心结论:(1-2 句话概括关键发现) - 代码片段:(如有相关代码,最多 10 行) - 来源:[URL] ## 规则 - 每次查询最多返回 3 条最相关结果 - 不得返回网页全文 - 只返回与查询直接相关的信息 - 优先返回含代码示例的结果 - 优先返回近期内容(1-2 年内) - 过滤 SEO 垃圾内容和低质量页面 ``` **2. 在 CLAUDE.md 中配置调用规则** 在项目的 `CLAUDE.md` 中添加以下内容,告诉 Claude Code 什么时候使用搜索 Agent: ```markdown theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ## 搜索 Sub-Agent 调用规则 ### 可用的搜索 Agent - **search-agent**: 通过 Search MCP 执行网络搜索,用于获取实时信息(CVE、定价、社区反馈等) ### 什么时候调用 - 涉及最新版本、安全漏洞、定价限额等模型知识无法覆盖的实时信息时,使用 search-agent - 不要用于模型能直接回答的问题(基础语法、技术选型、Bug 修复等) ### 多查询调用规则 - 当有多个独立搜索需求时,为每个查询单独调用一次 search-agent - 每个 Agent 实例只处理一个查询,保持结果清晰可追溯 ``` ### 场景一:多 API 文档查询 项目集成多个第三方服务时,需要获取各服务的最新 API 用法。第三方 API 随时可能更新,模型训练时的文档版本可能已过时。 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 我正在开发一个 SaaS 付费功能:用户付款 → 发送确认邮件 → 文件上传到云存储。 涉及的服务: - Stripe(支付) - Resend(邮件) - Cloudflare R2(存储) 请使用 search-agent 通过 search mcp 依次查询各服务的最新官方文档: 1. Stripe: Checkout Session 创建 + Webhook 验证 2. Resend: 发送邮件 API + 模板功能 3. Cloudflare R2: S3 兼容 API 上传 输出:整合后的 Node.js 实现方案,包含完整代码示例。 ``` ### 场景二:代码安全审计 + CVE 搜索 审查代码安全性时,模型可以识别漏洞模式,但需要搜索最新的 CVE 信息和安全公告。 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 请审计以下代码的安全性: [粘贴代码] 第一步:直接分析代码中的漏洞(不需要搜索)。 第二步:使用 search-agent 搜索以下三个方向: 1. "jsonwebtoken npm vulnerability CVE 2024 2025" — 查该依赖的最新已知漏洞 2. "OWASP authentication best practices 2024" — 查最新认证安全指南 3. "bcrypt vs argon2 vs scrypt comparison 2024" — 查当前推荐的密码哈希方案 输出: - 漏洞清单(分:模型识别 vs 搜索发现) - 修复后的完整代码 - 依赖安全建议 ``` ### 场景三:依赖升级影响分析 升级主要依赖版本时,新版本的 breaking changes 和社区反馈往往是模型训练后产生的实时信息。 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 我需要将项目从 Next.js 14 升级到 Next.js 15。 请使用 search-agent 搜索以下方向: 1. "Next.js 15 breaking changes migration issues" 2. "Next.js 15 upgrade problems Reddit GitHub" 3. "Next.js 15 app router changes 2024" 输出: - 升级检查清单(官方文档 vs 社区踩坑) - 必须修改的代码示例 - 需要同步升级的依赖列表 - 社区反馈的高频问题 ``` ### 场景四:开源生态实时调研 评估开源项目时,GitHub stars、最近 commit、维护者动态都是实时数据,模型无法直接回答。 ```text theme={"theme":{"light":"light-plus","dark":"dark-plus"}} 我在考虑使用 Drizzle ORM,但想了解它当前的生态状态。 请使用 search-agent 搜索以下方向: 1. "Drizzle ORM GitHub issues bugs 2024" — 最近的 bug 和问题 2. "Drizzle ORM production experience" — 生产环境使用反馈 3. "Drizzle ORM vs Prisma 2024 comparison" — 最新的对比评测 4. "Drizzle ORM roadmap changelog" — 近期发展方向 我不需要你介绍 Drizzle 是什么(我知道), 我需要的是:它现在稳定吗?社区活跃吗?有什么已知的坑? ``` ## MCP 使用额度说明 * **计费规则**:`web_search` 按照开放平台网络搜索的计价方式收费,每次调用 0.04 元,与 Step Plan 其他用量一并消耗 Credit 额度;`web_fetch` 不单独计费 * **额度周期**:消耗 Step Plan 月度 Credit,月池月末清零,可用加油包补充 * **限流策略**:以 QPM / QPH / 并发控制为主,并对单用户增加必要限频 如需订阅或升级套餐,请访问:[Step Plan 订阅](https://platform.stepfun.com/step-plan) ## 常见问题 ### 访问令牌无效? * 确认 API Key 已完整复制,没有多余空格 * 验证 Key 已激活且余额充足 * 检查 `Authorization` 头格式是否正确(需包含 `Bearer ` 前缀,注意空格) ### 连接超时? * 检查网络连接是否正常 * 确认防火墙未拦截对 `api.stepfun.com` 的访问 * 确认服务端点 URL 拼写正确 ### 搜索结果为空? * 尝试调整搜索关键词的表述方式 * 避免过于具体或过于宽泛的查询条件 * 确保网络连接正常 ## 参考链接 * [Model Context Protocol 官方文档](https://modelcontextprotocol.io/) * [Claude Code MCP 配置指南](https://docs.anthropic.com/en/docs/claude-code/mcp) * [Step Plan 订阅](https://platform.stepfun.com/step-plan) * [阶跃星辰开放平台](https://platform.stepfun.com) * [Search API 文档](https://platform.stepfun.com/docs/zh/api-reference/search/search) # Step Router V1 智能路由 Source: https://platform.stepfun.com/docs/zh/guides/developer/step-router `step-router-v1` 是阶跃星辰为 [Step Plan](/docs/zh/step-plan/overview) 通道提供的智能路由模型。开发者只需在 `model` 字段填入 `step-router-v1`,系统会根据请求特征自动路由到 `deepseek-v4-pro` 或 `step-3.7-flash` 中更合适的一个:复杂推理交由 `deepseek-v4-pro` 处理,高频执行交由 `step-3.7-flash` 承载。 > [!NOTE] > > 仅 [Step Plan](/docs/zh/step-plan/overview) 通道(`https://api.stepfun.com/step_plan/v1`)可用。本模型不支持图像识别。 ## 适用场景 `step-router-v1` 适合以下需要在成本与智能之间自动权衡的场景: * **复杂度差异大的混合工作流**:同一个 Agent 既要处理格式整理、信息抽取等高频小任务,又要处理架构规划、错误诊断等关键决策,由路由自动分流可省去自行实现分流逻辑的成本。 * **Agent 长链路任务**:多轮对话、含工具调用的请求,系统会在判定为复杂场景时调度 `deepseek-v4-pro` 以保障输出质量。 * **成本敏感但需要高质量决策的场景**:默认由 `step-3.7-flash` 承载多数请求以控制成本,复杂请求自动升级至 `deepseek-v4-pro` 以保留智能产出。 ## 调用方式 调用方式与直接调用底层模型完全一致,仅需将 `model` 设为 `step-router-v1`,并将 base\_url 指向 Step Plan 通道。 ### 非流式 **Python (OpenAI SDK)** ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI client = OpenAI( api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/step_plan/v1", ) response = client.chat.completions.create( model="step-router-v1", messages=[ {"role": "user", "content": "请帮我把这段需求拆解成开发任务列表"} ], ) print(response.choices[0].message.content) ``` **Python (Anthropic SDK)** ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from anthropic import Anthropic # 注意:Anthropic SDK 会自动拼接 /v1/messages,base_url 不带 /v1 client = Anthropic( api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/step_plan", ) message = client.messages.create( model="step-router-v1", max_tokens=1024, messages=[ {"role": "user", "content": "请帮我把这段需求拆解成开发任务列表"} ], ) print(message.content[0].text) ``` ### 流式 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI client = OpenAI( api_key="YOUR_STEP_API_KEY", base_url="https://api.stepfun.com/step_plan/v1", ) stream = client.chat.completions.create( model="step-router-v1", messages=[{"role": "user", "content": "你好"}], stream=True, ) for chunk in stream: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) ``` ## 字段差异 `step-router-v1` 的请求与响应字段约束整体与直接调用底层模型一致。命中 `deepseek-v4-pro` 时的字段差异(`max_tokens` 上限、不支持的内容类型等),详见 [Messages API](/docs/zh/api-reference/chat/messages-create) 中 **step-router-v1 字段限制(仅适用于该模型)**,以及 [Chat Completion API](/docs/zh/api-reference/chat/chat-completion-create) 中 **Step Plan 通道:DeepSeek 引擎字段差异**。 ## 计费机制 按实际命中的引擎计费:命中 `deepseek-v4-pro` 按 `deepseek-v4-pro` 单价收费,命中 `step-3.7-flash` 按 `step-3.7-flash` 单价收费。计费金额最终折算为 Step Plan 总额度消耗,详见 [Step Plan 概述](/docs/zh/step-plan/overview)。 ## 相关链接 > **[产品介绍](/docs/zh/guides/models/step-router)** > > `step-router-v1` 的产品定位、底层引擎组成与定价。 > **[接入文档](/docs/zh/step-plan/integrations/reasoning-api)** > > Step Plan 推理模型接入:base\_url、SDK、字段差异。 # 流式输出 Source: https://platform.stepfun.com/docs/zh/guides/developer/stream 在使用大模型生成结果的过程中,会遇到大模型要生成内容较多而导致生成时间较长的问题 —— 比如当您让大模型帮您生成一个 1000 字的文章,往往需要大模型输出 10 秒以上。在这个过程中,如果您没有给用户准备相应的反馈,则极有可能导致用户误以为系统故障 / 使用报错而离开当前界面。 因此,我们需要通过某些产品手段来优化产品体验,帮助用户感知到当前的进展情况和状态,以便于更好的将用户留在当前页面,等待执行结果。 在传统 API 当中,由于接口只能一次性返回,因此开发者需要在产品上放置 Loading 页面或骨架屏,以告知用户当前正在加载中。 但阶跃星辰的 [对话补全接口](/docs/zh/api-reference/chat/chat-completion-create) 支持流式返回,您可以通过流式返回,实现类似于打字机特效的的效果,帮助用户在大模型生成过程中,直接查看内容。 ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/stream.gif?s=2892f635ae97e0bcc0494a5705d6fd14) ### 实现流式输出 开放平台的 Chat Completion 接口支持通过传入 stream=True,来开启流式输出内容, API 将会返回 SSE 请求内容,您可以通过解析 SSE 请求的返回结果,并将其渲染到 UI 上,来实现效果。 #### 代码示例 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI(base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY) # 调用补全接口进行补全 stream = client.chat.completions.create( model="step-5-preview", messages=[{"role": "user", "content": "全季酒店怎么样?"}], stream=True, ) # 对流式返回的内容进行打印 / 渲染输出 for chunk in stream: if chunk.choices[0].delta.content is not None: print(chunk.choices[0].delta.content, end="") ``` ### 注意事项 * 在使用流式输出时,虽然模型返回的速度较快,但依然有等待延迟,在此期间,您可以配合 Loading 引导用户等待,以帮助用户即时获得反馈。 # 工具调用 Source: https://platform.stepfun.com/docs/zh/guides/developer/tool-call 大模型虽然掌握了丰富的知识,但在特定领域,例如时效性较高的资讯类和天气预报,或者需要严密科学计算,以及特定行业的知识,当它们匮乏这部分知识时,它们可能会编造看似真实但实则虚假的信息。 为解决这一问题。阶跃大模型提供了 Tool call 工具,Tool call 可以扩展语言模型的功能,使其能够执行额外的操作,如搜索信息、科学计算、访问数据库等。这样模型可以为用户提供更精准的信息,帮助开发者更好地处理业务需求。 除了获取信息以外, Tool Call 还可以帮助开发者生成函数调用签名,开发者通过对调用签名的处理,实现扩展应用能力,让您的应用除了对话,还可以完成各项不同的能力。 ### 实现原理 & 参考 在使用 Tool Call 时,我们可以选择两个方向来思考 Tool Call 帮助我们扩展应用能力: * 使用 Tool Call 获取大模型自身训练不包含的信息,丰富上下文,精确回答内容; * 使用 Tool Call 操作本地应用程序,执行特定业务操作。 ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/tool_call.jpeg?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=7c8a235c4ace3e198467a444cee565e8) 前者主要通过 Tool Call 调用预定义好的函数,以获得更加精确的信息,帮助大模型补全上下文,从而生成更加精确的回答。 后者则是通过 Tool Call 调用本地应用程序,执行特定的业务操作,以实现更加丰富的功能。 #### 使用 Tool Call 获取信息 这里我们以助手类应用的常见技能 —— 查询天气为例,我们需要构建一个可以通过自然语言,查询天气的能力。 您需要做以下四步: * 第一步,需要准备好查询天气接口的地址和密钥,构造查询天气的 Function; * 第二步,构建 get\_weather 工具定义查询天气 Function 的功能; * 第三步,阶跃大模型识别用户查询天气的意图时,根据提示语给出查询参数; * 第四步,使用大模型返回的参数调用查天气接口,获取准确的天气信息。 参考代码:以 Python 为例 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI import requests import json # 初始化 查询天气的接口参数,这里我使用的是高德查询天气接口,各位开发者可以按需自行选择供应商进行实现 get_weather_url = "https://restapi.amap.com/v3/weather/weatherInfo?parameters" get_weather_key = "YOUR_GAODE_API_KEY" COMPLETION_MODEL= "step-5-preview" # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI(base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY) # 初始化查询天气的函数 def get_weather(city): params = { "city": city, "key": get_weather_key, "extensions": "base", # 获取实时天气 } response = requests.get(url=get_weather_url, params=params) # 实时天气 if response.status_code == 200: data = response.json() print(data) # weather = data.get ('lives')[0].get ('weather') # 当前天气现象 # temperature = data ['lives'][0].get ('temperature') # 当前温度 # print ( f"{city} 现在的天气是 {weather} 温度是 {temperature}°C.") else: print("对不起,我无法获取这个地点的天气。") # 构建 get_weather 函数说明 tools = [ { "type": "function", "function": { "name": "get_weather", "description": "查询天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称(必须为汉字)"} }, "required": ["city"], }, }, } ] # 调用补全接口进行补全 def query_weather(prompt): completion = client.chat.completions.create( model=COMPLETION_MODEL, messages=[{"role": "user", "content": prompt}], ## 自动选择是否调用外部函数 tool_choice="auto", tools=tools, ) # print (completion.choices [0].message.content.strip ()) print(completion) # 判断是否命中查询天气 Function if completion.choices[0].message.content.strip() == "": if completion.choices[0].message.tool_calls[0].function.name == "get_weather": # 获取参数 city_name = json.loads( completion.choices[0].message.tool_calls[0].function.arguments ) # 调用 Function get_weather(city_name["city"]) else: print("未命中查询天气 Tool") else: print("抱歉出错了") # print (completion.choices [0].message.content.strip ()) # 查询天气 query_weather("上海现在的天气怎么样?") ``` 返回结果: ```jsonc theme={"theme":{"light":"light-plus","dark":"dark-plus"}} # 返回值结果 # 首先大模型通过意图识别到需要调用 Tool Call,所以在 tool_calls 里给出了需要调用的函数名称,以及参数 { "id": "291c59ebf4017a937a2a42a8ed52581f.c2669ebc05a491c70f821b4e568b6433", "object": "chat.completion", "created": 1722505763, "model": "step-5-preview", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "", "tool_calls": [ { "id": "call_brg23SRcTgmpm_V0jfP-iA", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\": \" 上海 \"}" } } ] }, "finish_reason": "stop" } ], "usage": { "cached_tokens": 48, "prompt_tokens": 94, "completion_tokens": 16, "total_tokens": 110 } } # 接着使用大模型给出的参数调用查询天气接口,获得准确的天气 { "status": "1", "count": "1", "info": "OK", "infocode": "10000", "lives": [ { "province": "上海", "city": "上海市", "adcode": "310000", "weather": "晴", "temperature": "37", "winddirection": "西北", "windpower": "≤3", "humidity": "42", "reporttime": "2024-08-02 10:01:14", "temperature_float": "37.0", "humidity_float": "42.0" } ] } # 继续拼接作为上下文信息放入 Messages,让大模型进行补全。 ``` #### 使用 Tool Call 执行任务 当应用需要扩展其能力,不仅仅是获取数据时,则可以通过 Tool Call 能力,为您的应用增加一些神奇的能力,从而帮助用户更进一步展示不同的能力。 这里我们同样以助手类应用为例,我们可以实现一个通过自然语言发送电子邮件的能力。您需要做以下几步: * 第一步,在本地构建出一个发送邮件的 Function ,并实现发送邮件相关功能; * 第二步,构建 send\_email 工具定义发送邮件的功能; * 第三步,阶跃大模型识别用户发送邮件的意图时,根据提示语给出查询参数; * 第四步,使用大模型返回的参数调用发送电子邮件。 ##### 参考代码:以 Python & Swift 为例 本地的发送邮件的 Function ```swift theme={"theme":{"light":"light-plus","dark":"dark-plus"}} func sendEmail (subject:String, body: String, recipient: String) { // 调用 MFMailComposeViewController 来发送邮件 } ``` 服务端调用阶跃星辰大模型的参考代码 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI(base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY) # 构建 sendEmail 函数说明 tools = [ { "type": "function", "function": { "name": "sendEmail", "description": "这个函数可以用于向特定的用户发送包含特定内容的电子邮件", "parameters": { "type": "object", "properties": { "subject": { "type": "string", "description": "邮件的标题,不可以超过 255 个字", }, "body": { "type": "string", "description": "邮件内容,不可以超过 4096 个字", }, "recipient": {"type": "string", "description": "收件人"}, }, "required": ["subject", "body", "recipient"], }, }, } ] # 调用阶跃星辰 API 生成接口调用方法 def get_call_sign(user_input): completion = client.chat.completions.create( model=COMPLETION_MODEL, messages=[{"role": "user", "content": user_input}], ## 自动选择是否调用外部函数 tool_choice="auto", tools=tools, ) if completion.choices[0].message.content.strip() == "": if completion.choices[0].message.tool_calls[0].function.name == "sendEmail": # 获取参数 arguments = json.loads( completion.choices[0].message.tool_calls[0].function.arguments ) # 触发本地调用函数 send_to_client("sendEmail", arguments) ``` #### 注意事项 * 构造 Tool 的时候请注意将 Function 的 description 描述清楚,以便于大模型清晰的知道 Function 的功能,这样能提高命中率; * Function 入参的 description 也需要备注清楚(建议说明入参是中文还是英文),以便于大模型生成有效的参数供使用。 # 故障排查 Source: https://platform.stepfun.com/docs/zh/guides/developer/troubleshooting 为了方便用户快速定位问题,阶跃星辰在[异常处理](/docs/zh/guides/developer/exception)中提供了常见问题的处理建议。如果您在使用过程中遇到无法解决的问题,建议您先查看该页面的内容 但在您无法通过自助排查解决问题的情况下,您可以通过[联系我们](/docs/zh/guides/contact-us)的方式与我们取得联系。请在联系时提供以下信息,以便我们更快地定位问题: ## Chat API 如果您使用的是 [Chat API](/docs/zh/api-reference/chat/chat-completion-create) / [文生图](/docs/zh/api-reference/images/image)/[图生图](/docs/zh/api-reference/images/image2image)/[图片编辑](/docs/zh/api-reference/images/edits)/[音频生成](/docs/zh/api-reference/audio/create-audio)/[复刻音色](/docs/zh/api-reference/audio/create-voice)/[音频转写](/docs/zh/api-reference/audio/transcriptions),请提供以下信息: * 返回响应头 Header 中的 `X-Trace-Id` 字段。 * 生成结果中的 ID,即下方示例中的 `b7b56af0-52a6-483f-a589-948182676a1b` ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "b7b56af0-52a6-483f-a589-948182676a1b", "object": "chat.completion", "created": 1709893411, "model": "step-3.7-flash", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "你好!阶跃星辰是一家专注于人工智能技术的公司,致力于开发和提供各种AI解决方案。我们的人工智能技术涵盖了自然语言处理、计算机视觉、机器学习等领域,旨在帮助用户在各个行业和领域中提高效率和创造价值。\n\n我们提供多种AI产品和服务,包括智能客服、虚拟助手、智能推荐、智能审核等。这些产品和服务可以应用于多个行业,如金融、零售、教育、医疗等。通过使用我们的AI技术,用户可以更好地理解和分析数据,提供个性化的服务和体验,提高决策效率和准确性。\n\n我们注重用户数据的安全和隐私保护,严格遵守相关法律法规和行业标准。我们相信,人工智能技术应该为人类创造更多的福祉,而不是带来负面的影响。我们将继续努力,为用户提供更加智能、高效、安全的AI解决方案。" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 83, "completion_tokens": 176, "total_tokens": 259 } } ``` ## Realtime API 如果您使用的是 [Realtime API](/docs/zh/api-reference/realtime/chat),请提供以下信息: * `session.created` 和 `session.updated` 中的 `session.id` 字段,即下方示例中的 `sess_001` ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "event_id": "event_def", "type": "session.created", "session": { "id": "sess_001", "object": "realtime.session", "model": "step-1o-audio", "modalities": ["text", "audio"], "instructions": "你是由阶跃星辰提供的AI聊天助手,你擅长中文,英文,以及多种其他语言的对话。", "voice": "linjiajiejie", "input_audio_format": "pcm16", "output_audio_format": "pcm16", "max_response_output_tokens": "4096" } } ``` ## 流式生成音频 api 如果您使用的是 [流式生成音频 API](/docs/zh/api-reference/audio/ws-audio),请提供以下信息: * 任一事件中的 `session_id` 字段,即下方示例中的 `01956e7388477cfcbdc3aaabf364bc70` ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "event_id": "01956e73888c7953896a6e176bf3d760", "type": "tts.connection.done", "data": { "session_id": "01956e7388477cfcbdc3aaabf364bc70" } } ``` # 音频合成 Source: https://platform.stepfun.com/docs/zh/guides/developer/tts 阶跃星辰为开发者提供了语音互动模型,开发者可以使用阶跃星辰的语音互动模型来完成音频生成、[音色复刻](/docs/zh/api-reference/audio/create-voice)、[语音识别](/docs/zh/api-reference/audio/transcriptions)的能力,帮助开发者可以在自己的应用中除了实现标准的大模型的理解能力,还可以实现语音交互。 ## 快速开始 ### 快速生成一段音频 复制如下代码,您可以快速生成一段音频文件。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl --location 'https://api.stepfun.com/v1/audio/speech' \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer $STEP_API_KEY" \ --data '{ "model":"step-tts-mini", "input":"智能阶跃,十倍每一个人的可能", "voice":"cixingnansheng" }'\ --output "step.mp3" ``` ## 场景与官方音色推荐 阶跃星辰为开发者提供了七大场景数十种官方推荐音色,您可以在这里试听不同的音色,并在 API 当中调用。 但我们强烈建议您通过 [音色复刻](/docs/zh/api-reference/audio/create-voice) 的能力,定制您的专属音色。`step-tts-2` 具备业界领先的复刻性能,且复刻音色可 0 成本支持全部情绪、风格控制。 ### 1. 营销场景 营销场景需要音色具有感染力、说服力和亲和力,能够有效传递产品价值并激发购买欲望。`step-tts-2` 特色在于能够给出饱满的情绪,给用户以信任感和专业度,让营销内容更具吸引力。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 活力轻快 | livelybreezy-female | [我们的在线课程帮助数千人实现了职业突破,下一个成功的就是您!](https://static-openapi.stepfun.com/static/platform-docs/resource/1764227859773_6r0lga.wav) [精致的设计,贴心的细节,让每一件产品都成为您生活中的艺术品。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764227873237_xbptdq.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 正派青年 | zhengpaiqingnian | [限时优惠仅剩最后3天!现在购买即可享受买一送一超值福利,错过不再有!](https://static-openapi.stepfun.com/static/platform-docs/resource/1764227897199_sz9mse.wav) [想象一下,每天清晨被温暖的阳光唤醒,我们的智能窗帘为您开启美好的一天。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764227907908_w73z24.wav) | ### 2. 客服场景(电话催收等) 客服场景需要音色亲切、耐心、专业,能够有效安抚用户情绪并提供清晰解决方案。我们提供两种类型的客服音色,`step-tts-2` 音质突出、情绪饱满、真人感强,前四个推荐音色非常适合电话场景。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` | 爽快男声 | shuangkuainansheng | [【催收场景】您好,请问是张先生吗?这里是催债公司客服,关于您账户尾号1788的款项,想跟您做个温馨提醒,目前已经逾期5天了。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232419372_cjweb4.wav) [感谢您的来电,我是客服专员张明,工号2087,请问怎么称呼您?](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232431616_d45kct.wav) [关于您查询的账单问题,我这边可以看到具体明细,现在为您详细说明。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232439733_ucrkox.wav) | | `stepaudio-2.5-tts` / `step-tts-2` | 干练女声 | ganliannvsheng | [【催收场景】孙女士,这次逾期可能会对您的个人信用记录产生负面影响,我们希望能协助您避免这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232450294_e3wqt8.wav) [您好,欢迎致电客户服务中心,我是您的专属客服李静,很高兴为您服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232467535_p2pu4n.wav) [请您提供一下手机号码和身份证后四位,我来为您核实账户信息。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232485079_rarrcy.wav) | | `stepaudio-2.5-tts` / `step-tts-2` | 亲和女声 | qinhenvsheng | [【催收场景】如果目前全额还款有压力,我们可以先安排处理一部分,比如先还3万元,剩余部分我们再协商一个方案,您看可以吗?](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232648658_g46auz.wav) [听到您的情况我很关切,请相信我们会尽全力帮助您。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232658059_p1hw59.wav) [这个情况确实比较特殊,请允许我请示主管后给您回电解答。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232666804_uxi2nq.wav) | | `stepaudio-2.5-tts` / `step-tts-2` | 活力女声 | huolinvsheng | [【催收场景】“您说‘马上处理’具体是指今天下午几点前呢?我需要记录一个确切的时间点,以便后续为您跟进服务。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232752142_umr3gn.wav) [很高兴能为您解决问题,祝您有美好的一天,再见!](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232784129_7y8d7t.wav) [我们的服务时间是早8点到晚10点,欢迎再次来电。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232765549_zhtxfv.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 气质温婉 | elegantgentle-female | [您的满意是我们最大的追求,感谢您选择我们的服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232963968_2lpzrh.wav) [我完全理解您的情况,让我们一起来看看如何最好地解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764232975950_nb22zj.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 活力轻快 | livelybreezy-female | [您的满意是我们最大的追求,感谢您选择我们的服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233092953_7uj9hs.wav) [我完全理解您的情况,让我们一起来看看如何最好地解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233081037_2uelez.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔男声 | wenrounansheng | [非常理解您的心情,我们会尽快为您解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233106756_zi400x.wav) [您的订单已经处理完成,预计明天下午就能送达,请您注意查收。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233116023_vvny08.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 经典女声 | jingdiannvsheng | [您的满意是我们最大的追求,感谢您选择我们的服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233202847_b14wof.wav) [我完全理解您的情况,让我们一起来看看如何最好地解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233185685_fx2jym.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔熟女 | wenroushunv | [您的满意是我们最大的追求,感谢您选择我们的服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233217617_grbf54.wav) [我完全理解您的情况,让我们一起来看看如何最好地解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233227812_ca92c6.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 甜美女声 | tianmeinvsheng | [您的满意是我们最大的追求,感谢您选择我们的服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233448772_4id5xn.wav) [我完全理解您的情况,让我们一起来看看如何最好地解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233457923_qdn6vq.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 清纯少女 | qingchunshaonv | [您的满意是我们最大的追求,感谢您选择我们的服务。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233506642_dd78q1.wav) [我完全理解您的情况,让我们一起来看看如何最好地解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233498003_buc059.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 元气男声 | yuanqinansheng | [非常理解您的心情,我们会尽快为您解决这个问题。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233516928_rpphje.wav) [您的订单已经处理完成,预计明天下午就能送达,请您注意查收。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764233522624_r33ce3.wav) | ### 3. 有声书场景 有声书需要音色富有表现力、感染力,能够生动展现不同角色和情节氛围。我们的 TTS 特色在于细腻的情感表达和多变的语音风格,让听众沉浸于故事世界。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 儒雅男士 | ruyananshi | [“老人的眼中闪烁着智慧的光芒,缓缓道出那个埋藏千年的秘密。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231706722_cerhao.wav) [“狂风呼啸,海浪拍打着船舷,水手们紧紧抓住缆绳,与命运抗争。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231727050_6znwwg.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔女声 | wenrounvsheng | [“魔法森林中,精灵们跳着轻盈的舞蹈,星光为她们点亮前路。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231734698_puka7d.wav) [她轻轻抚摸着那本旧日记,泪水模糊了字迹,回忆如潮水般涌来。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231740416_syoeyy.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔公子 | wenrougongzi | [“月光洒在古老的城堡上,远处传来狼群的嚎叫,令人不寒而栗。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231762453_68oj6b.wav) [“他深吸一口气,推开了那扇尘封已久的大门,命运的齿轮开始转动。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231771111_0r0h3f.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 磁性男声 | cixingnansheng | [月光洒在古老的城堡上,远处传来狼群的嚎叫,令人不寒而栗。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231784986_xvr1ij.wav) [“他深吸一口气,推开了那扇尘封已久的大门,命运的齿轮开始转动。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231791652_9d9uy1.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 元气少女 | yuanqishaonv | [“花园里的玫瑰在晨露中绽放,散发着淡淡的香气,宛如少女的脸颊。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231810865_xiz5jk.wav) [“她轻轻抚摸着那本旧日记,泪水模糊了字迹,回忆如潮水般涌来。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231820537_fz8979.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 正派青年 | zhengpaiqingnian | [“月光洒在古老的城堡上,远处传来狼群的嚎叫,令人不寒而栗。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231834824_31a18s.wav) [“他深吸一口气,推开了那扇尘封已久的大门,命运的齿轮开始转动。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231842616_3y3jsx.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 元气男声 | yuanqinansheng | [“老人的眼中闪烁着智慧的光芒,缓缓道出那个埋藏千年的秘密。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231882851_ha2oe6.wav) [“狂风呼啸,海浪拍打着船舷,水手们紧紧抓住缆绳,与命运抗争。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231889066_vty0d3.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 播音男声 | boyinnansheng | [“月光洒在古老的城堡上,远处传来狼群的嚎叫,令人不寒而栗。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231898586_yvqsfk.wav) [“他深吸一口气,推开了那扇尘封久的大门,命运的齿轮开始转动。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231903863_n0rq6k.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 深沉男音 | shenchennanyin | [“月光洒在古老的城堡上,远处传来狼群的嚎叫,令人不寒而栗。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231909638_diuypc.wav) [“他深吸一口气,推开了那扇尘封已久的大门,命运的齿轮开始转动。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764231916499_zk19wv.wav) | ### 4. 情感陪伴场景 情感陪伴需要音色温暖、柔和、富有同理心,能够给予用户心理慰藉和支持。我们的 TTS 特色在于细腻的音色温柔动听,情绪感染力强,可为您的用户营造出安全、舒适的交流氛围。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 气质温婉 | elegantgentle-female | [“我在这里陪着你,无论快乐还是忧伤,我们都一起面对。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230170888_rpysp8.wav) [“你的坚强让我感动,但也要记得适时地让自己休息一下。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230185710_01rt1x.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 活力轻快 | livelybreezy-female | [“生活中总会有不如意的时候,但美好的事物永远值得期待。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230220618_qbsx4o.wav) [“说出来会好受一些,我永远是你忠实的听众和朋友。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230236362_tfyy2l.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔男声 | wenrounansheng | [“今天过得怎么样?如果有什么心事,我很愿意倾听。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230277656_1jj8at.wav) [“每个人都会有感到迷茫的时候,这很正常,你并不孤单。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230256668_9lhgua.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔公子 | wenrougongzi | [“深呼吸,放松心情,我相信你有能力面对任何挑战。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230295150_t7wi3h.wav) [“你的感受很重要,感谢你愿意与我分享内心的想法。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230307812_0gi9a8.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 经典女声 | jingdiannvsheng | [“我在这里陪着你,无论快乐还是忧伤,我们都一起面对。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230324896_hhowz6.wav) [“你的坚强让我感动,但也要记得适时地让自己休息一下。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230343351_k3vj3k.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 亲切女声 | qinqienvsheng | [早上好呀,今天天气真不错,适合出去走走。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230361427_d9rn3n.wav) [观众朋友们,大家好!欢迎收看今天的新闻播报。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764230377953_9uheoc.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 甜美女声 | tianmeinvsheng | [“生活中总会有不如意的时候,但美好的事物永远值得期待。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229581488_9bjx0x.wav) [“说出来会好受一些,我永远是你忠实的听众和朋友。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229591698_yk6d1a.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 磁性男声 | cixingnansheng | [“今天过得怎么样?如果有什么心事,我很愿意倾听。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229600823_8hr2u3.wav) [“每个人都会有感到迷茫的时候,这很正常,你并不孤单。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229613085_i8q5vt.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 元气少女 | yuanqishaonv | [“我在这里陪着你,无论快乐还是忧伤,我们都一起面对。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229624319_gy96i6.wav) [“你的坚强让我感动,但也要记得适时地让自己休息一下。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229636363_rl7puv.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 邻家姐姐 | linjiajiejie | [“生活中总会有不如意的时候,但美好的事物永远值得期待。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229893983_biv5nz.wav) [“说出来会好受一些,我永远是你忠实的听众和朋友。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229906559_3bkhy1.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 儒雅男士 | ruyananshi | [“今天过得怎么样?如果有什么心事,我很愿意倾听。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229965580_i9iwog.wav) [“每个人都会有感到迷茫的时候,这很正常,你并不孤单。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229990027_178cz8.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 深沉男音 | shenchennanyin | [“深呼吸,放松心情,我相信你有能力面对任何挑战。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229487791_a43xpe.wav) [“你的感受很重要,感谢你愿意与我分享内心的想法。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229478620_pgi8xr.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔女声 | wenrounvsheng | [“我在这里陪着你,无论快乐还是忧伤,我们都一起面对。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229464183_kpaxa8.wav) [“你的坚强让我感动,但也要记得适时地让自己休息一下。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229454546_dxzd93.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 软萌女声 | ruanmengnvsheng | [“生活中总会有不如意的时候,但美好的事物永远值得期待。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229441268_p9xrn8.wav) [“说出来会好受一些,我永远是你忠实的听众和朋友。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229433217_mzc9eo.wav) | ### 5. 语音助手场景 语音助手需要音色清晰、自然、高效,能够准确理解并响应用户指令。我们的 TTS 特色在于韵律自然,情绪饱满,让您的语音助手既专业又亲切。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 气质温婉 | elegantgentle-female | [“您要查询的航班信息已经找到,需要我为您详细说明吗?”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228832095_29ybp3.wav) [“已为您设置明天早上7点的闹钟,祝您晚安。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228840760_7lfeif.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 活力轻快 | livelybreezy-female | [正在搜索您需要的资料,找到3个相关结果,现在为您展示。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228850379_g5udri.wav) [今天北京天气晴朗,气温25度,适合外出活动。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228867575_iogyx5.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 清纯少女 | qingchunshaonv | [“您要查询的航班信息已经找到,需要我为您详细说明吗?”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228890474_009vob.wav) [“电量不足,建议连接充电器,以保持最佳使用体验。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228880711_uo1s1z.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 元气少女 | yuanqishaonv | [“新消息来自张经理:‘项目方案已通过,辛苦了!’”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228956977_jkgzvk.wav) [“正在搜索您需要的资料,找到3个相关结果,现在为您展示。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228942094_6cgojl.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 邻家姐姐 | linjiajiejie | [“您要查询的航班信息已经找到,需要我为您详细说明吗?”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228982358_2c8eqk.wav) [“电量不足,建议连接充电器,以保持最佳使用体验。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228972645_kzl33n.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 儒雅男士 | ruyananshi | [“已为您设置明天早上7点的闹钟,祝您晚安。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229029290_58c9et.wav) [“今天北京天气晴朗,气温25度,适合外出活动。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229015620_qu5naz.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 机灵少女 | jilingshaonv | [“新消息来自张经理:‘项目方案已通过,辛苦了!’”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229042857_sbtid3.wav) [“正在搜索您需要的资料,找到3个相关结果,现在为您展示。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229055562_gz7tjs.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 软萌女声 | ruanmengnvsheng | [“您要查询的航班信息已经找到,需要我为您详细说明吗?”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229191918_0u5rmk.wav) [“电量不足,建议连接充电器,以保持最佳使用体验。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229207559_ifljss.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 邻家妹妹 | linjiameimei | [“新消息来自张经理:‘项目方案已通过,辛苦了!’”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229220926_vubdhb.wav) [“正在搜索您需要的资料,找到3个相关结果,现在为您展示。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229230493_3vr4dl.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 知性姐姐 | zhixingjiejie | [“您要查询的航班信息已经找到,需要我为您详细说明吗?”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229251134_r2dv2t.wav) [“电量不足,建议连接充电器,以保持最佳使用体验。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764229242754_6j194i.wav) | ### 6. 视频配音场景 视频配音需要音色富有表现力、节奏感和画面感,能够与视频内容完美融合。我们的 TTS 特色在于精准的情绪表达和语音节奏控制,增强您视频的感染力。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 邻家姐姐 | linjiajiejie | [“细腻的手工,精致的工艺,每一件作品都承载着匠人的心血与智慧。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228368225_q6vf14.wav) [“美食是文化的载体,味蕾的记忆,让我们开启这段舌尖上的旅程。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228358790_54hsjm.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 邻家妹妹 | linjiameimei | [“在这个快节奏的时代,偶尔慢下来,发现生活中被忽略的美好。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228406946_msnk7y.wav) [“爱与温暖,成长与蜕变,这是一个关于家庭和梦想的动人故事。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228422631_jv0wae.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 青年大学生 | qingniandaxuesheng | [最近在研究一个新课题,感觉超有挑战性,你要一起来研究吗?](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228453152_11xqp7.wav) [从12月1日起,全区将全面应用医保刷脸支付,这一举措将进一步提升医保服务的便捷性。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228437723_owq9wd.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 软萌女声 | ruanmengnvsheng | [“时尚不仅是外在的装扮,更是内心态度的表达和个性的宣言。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228469573_c9d14l.wav) [“在这个快节奏的时代,偶尔慢下来,发现生活中被忽略的美好。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228481762_npxp0m.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 优雅女声 | youyanvsheng | [“在这个快节奏的时代,偶尔慢下来,发现生活中被忽略的美好。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228538767_2lkmyq.wav) [“爱与温暖,成长与蜕变,这是一个关于家庭和梦想的动人故事。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228548744_a6t35v.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 冷艳御姐 | lengyanyujie | [“细腻的手工,精致的工艺,每一件作品都承载着匠人的心血与智慧。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228563074_mkfaxu.wav) [“美食是文化的载体,味蕾的记忆,让我们开启这段舌尖上的旅程。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228577493_12hmg5.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 知性姐姐 | zhixingjiejie | [“从概念到现实,这款产品的诞生经历了数百个日夜的精心打磨。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228598185_j5cgak.wav) [“穿越云海,俯瞰大地,这是只属于勇者的视觉盛宴和心灵震撼。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228588844_rylx9j.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 爽快姐姐 | shuangkuaijiejie | [这个项目我来负责,保证完成得漂漂亮亮!](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228610601_8ca7fa.wav) [从12月1日起,全区将全面应用医保刷脸支付,这一举措将进一步提升医保服务的便捷性。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228620326_6f4lyx.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 文静学姐 | wenjingxuejie | [这本书的见解很独特,值得一读。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228640932_1hg09k.wav) [近期有报道显示,出租车霸占公交车泊位的现象时有发生,这给乘客上下车带来了安全隐患。](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228632403_m8zdxc.wav) | ### 7. 教育与培训场景 教培场景需要音色清晰、准确、有启发性,能够有效传递知识并激发学习兴趣。我们的 TTS 特色在于能把握教师在不同情绪下的声音特点。 | 推荐模型 | 推荐音色 | Voice-id | 合成示例 | | :- | :- | :- | :- | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 气质温婉 | elegantgentle-female | [“英语中的现在完成时表示过去发生但与现在有关联的动作或状态。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228058073_102wb4.wav) [“让我们一起朗读这首古诗,感受诗人笔下的明月和思乡之情。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228049743_8dc93a.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔男声 | wenrounansheng | [“今天我们学习勾股定理:直角三角形的两条直角边的平方和等于斜边的平方。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228096723_naf04h.wav) [“请注意这个发音要点:舌尖要轻抵上齿龈,发出清晰的辅音。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228085782_awotak.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 活力轻快 | livelybreezy-female | [“光合作用是植物将光能转化为化学能的重要过程,让我们详细了解。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228115572_zfgvsz.wav) [“绘画时要注意透视原理,近大远小,让画面更有立体感。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228129774_s17gwn.wav) | | `stepaudio-2.5-tts` / `step-tts-2` / `step-tts-mini` | 温柔熟女 | wenroushunv | [“英语中的现在完成时表示过去发生但与现在有关联的动作或状态。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228171350_vs3v5a.wav) [“让我们一起朗读这首古诗,感受诗人笔下的明月和思乡之情。”](https://static-openapi.stepfun.com/static/platform-docs/resource/1764228180145_lct34k.wav) | ## 官方音色清单 | **中文名** | **Voice ID** | **支持模型** | **推荐场景** | | - | - | - | - | | Vibrant Youth | vibrant-youth | `stepaudio-2.5-tts`、`step-tts-2` | 有声书、视频配音 | | Lively Girl | lively-girl | `stepaudio-2.5-tts`、`step-tts-2` | 有声书、视频配音 | | Soft-spoken Gentleman | soft-spoken-gentleman | `stepaudio-2.5-tts`、`step-tts-2` | 情感陪伴、有声书 | | Magnetic-voiced Male | magnetic-voiced-male | `stepaudio-2.5-tts`、`step-tts-2` | 有声书、视频配音 | | 自信男声 | zixinnansheng | `stepaudio-2.5-tts`、`step-tts-2` | 有声书、情感陪伴、教育与培训、营销 | | 气质温婉 | elegantgentle-female | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 客服与业务办理、口播(解说、新闻)、教育与培训、情感陪伴 | | 活力轻快 | livelybreezy-female | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 情感陪伴、客服与业务办理、教育与培训、营销 | | 温柔男声 | wenrounansheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 口播(解说、新闻)、情感陪伴、客服与业务办理、教育与培训 | | 温柔公子 | wenrougongzi | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 情感陪伴、有声书 | | 元气男声 | yuanqinansheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 有声书、口播(解说、新闻)、客服与业务办理 | | 经典女声 | jingdiannvsheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 客服与业务办理、情感陪伴 | | 温柔熟女 | wenroushunv | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 客服与业务办理、口播(解说、新闻)、教育与培训 | | 甜美女声 | tianmeinvsheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 情感陪伴、客服与业务办理 | | 清纯少女 | qingchunshaonv | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 客服与业务办理、语音助手 | | 磁性男声 | cixingnansheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 有声书、情感陪伴 | | 元气少女 | yuanqishaonv | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 有声书、情感陪伴、语音助手 | | 邻家姐姐 | linjiajiejie | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 口播(解说、新闻)、情感陪伴、语音助手、视频配音 | | 正派青年 | zhengpaiqingnian | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 营销、有声书 | | 青年大学生 | qingniandaxuesheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 口播(解说、新闻) | | 播音男声 | boyinnansheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 有声书、口播(解说、新闻) | | 儒雅男士 | ruyananshi | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 有声书、情感陪伴、口播(解说、新闻)、语音助手 | | 深沉男音 | shenchennanyin | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 情感陪伴、有声书 | | 亲切女声 | qinqienvsheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 口播(解说、新闻) | | 温柔女声 | wenrounvsheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 有声书、情感陪伴 | | 机灵少女 | jilingshaonv | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 语音助手、口播(解说、新闻) | | 软萌女声 | ruanmengnvsheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 情感陪伴、语音助手、视频配音 | | 优雅女声 | youyanvsheng | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 视频配音 | | 冷艳御姐 | lengyanyujie | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 视频配音 | | 爽快姐姐 | shuangkuaijiejie | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 口播(解说、新闻) | | 文静学姐 | wenjingxuejie | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 口播(解说、新闻) | | 邻家妹妹 | linjiameimei | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 视频配音、口播(解说、新闻)、语音助手 | | 知性姐姐 | zhixingjiejie | `stepaudio-2.5-tts`、`step-tts-2`、`step-tts-mini` | 视频配音、口播(解说、新闻)、语音助手 | | 爽快男声 | shuangkuainansheng | `stepaudio-2.5-tts`、`step-tts-2` | 客服与业务办理、语音助手 | | 干练女声 | ganliannvsheng | `stepaudio-2.5-tts`、`step-tts-2` | 客服与业务办理、语音助手 | | 亲和女声 | qinhenvsheng | `stepaudio-2.5-tts`、`step-tts-2` | 客服与业务办理、语音助手 | | 活力女声 | huolinvsheng | `stepaudio-2.5-tts`、`step-tts-2` | 客服与业务办理、语音助手 | ## 音色标签 音色标签支持语速演绎风格、情绪和语言三种选项;其中情绪类型的标签需要放置在 `voice_label.emotion` 字段中、语速演绎风格需放置在 `voice_label.style` 字段中。他们具体的支持情况如下表所示: | **序号** | **标签名称** | **标签类型** | **step-tts-2支持情况** | **step-tts-mini 支持情况** | | - | - | - | - | - | | 1 | 高兴 | 情绪 | √ | √ | | 2 | 非常高兴 | 情绪 | √ | √ | | 3 | 悲伤 | 情绪 | √ | √ | | 4 | 生气 | 情绪 | √ | √ | | 5 | 非常生气 | 情绪 | √ | √ | | 6 | 撒娇 | 情绪 | √ | √ | | 7 | 慢速 | 语速风格 | √ | √ | | 8 | 极慢 | 语速风格 | √ | √ | | 9 | 快速 | 语速风格 | √ | √ | | 10 | 极快 | 语速风格 | √ | √ | | 11 | 恐惧 | 情绪 | √ | √ | | 12 | 惊讶 | 情绪 | √ | √ | | 13 | 兴奋 | 情绪 | √ | √ | | 14 | 钦佩 | 情绪 | √ | √ | | 15 | 困惑 | 情绪 | √ | √ | | 16 | 冷漠 | 演绎风格 | √ | √ | | 17 | 尴尬 | 演绎风格 | √ | √ | | 18 | 沮丧 | 演绎风格 | √ | √ | | 19 | 骄傲 | 演绎风格 | √ | | | 20 | 温柔 | 演绎风格 | √ | | | 21 | 甜美 | 演绎风格 | √ | | | 22 | 豪爽 | 演绎风格 | √ | | | 23 | 严肃 | 演绎风格 | √ | | | 24 | 傲慢 | 演绎风格 | √ | | | 25 | 老年 | 演绎风格 | √ | | | 26 | 吼叫 | 演绎风格 | √ | | | 27 | 阴阳怪气 | 演绎风格 | √ | | | 28 | 磕巴 | 演绎风格 | √ | | ## 输出格式 阶跃星辰 TTS 模型 支持 wav、mp3、flac、opus 和 pcm 格式的音频输出,默认为 mp3格式,您可以根据自己的实际情况选择合适的音频格式进行使用。 ## 输出语言 阶跃星辰 TTS 模型支持输出中文、英文,中英混合和日语音频。 ## FAQ **我是否拥有创造出来的音频?** 是的,您创造出来的音频归您所有。但建议在产品上向用户说明相关音频由 AI 生成,以便于用户感知相关音频为 AI 生成。 **如何调整生成的音频的音量?** 您可以在调用生成 API 时,传入 volume 参数,可选值为 0.1\~2.0 ,代表着将音量缩小至 10% \~ 增大至 200%(两倍音量)。 **如何调整生成的音频的语速** 您可以在调用生成 API 时,传入 speed 参数,可选值为 0.5-2 ,代表着将语速降速为之前的一半 \~ 提速至两倍。 # 视频理解 Source: https://platform.stepfun.com/docs/zh/guides/developer/video-chat 阶跃星辰的 `step-5-preview`、`step-3.7-flash` 和 `step-1o-turbo-vision` 模型支持视频理解能力,开发者可以在对话上下文中传入一个视频链接,模型将会自动读取视频中的内容,并基于视频中的内容进行理解,回答用户提出的问题或参与整个上下文的生成。 > 视频上传支持三种方式:可直接访问的视频 URL、Base64 内联(`data:video/mp4;base64,...`)、或通过 [Files API](/docs/zh/api-reference/files/create) 上传后的 `stepfile://` 引用;容器格式支持 MP4、QuickTime、Matroska。 ## 使用 Step 5 Preview `step-5-preview` 原生支持多模态输入,通过 [Chat API](/docs/zh/api-reference/chat/chat-completion-create) 在 `user message` 中传入 `video_url` 和您希望模型做的事情,即可让模型理解视频内容并基于其完成生成。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl --location 'https://api.stepfun.com/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer $STEP_API_KEY" \ --data '{ "model": "step-5-preview", "messages": [ { "role": "user", "content": [ { "type": "video_url", "video_url": { "url": "https://static-openapi.stepfun.com/static/platform-web/vipcase/case1.mp4" } }, { "type": "text", "text": "请概括这个视频的主要内容,并提取关键信息点。" } ] } ] }' ``` 基础调用示例见[快速开始](/docs/zh/quickstart/overview),完整字段说明、Base64 / Files API 用法和推理强度控制见本指南及相关 API 文档。 ## 使用 step-1o-turbo-vision 通过 [Chat API](/docs/zh/api-reference/chat/chat-completion-create),在 `user message` 中传入 `video_url` 格式的视频链接,并写入您希望模型做的事情,即可让大模型理解视频内容,并基于视频内容来完成生成。 比如,如下是一个简单的基于视频写游记的例子: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl --location 'https://api.stepfun.com/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer $STEP_API_KEY" \ --data '{ "model": "step-1o-turbo-vision", "messages": [ { "role": "user", "content": [ { "type": "video_url", "video_url": { "url": "https://static-openapi.stepfun.com/static/platform-web/vipcase/case1.mp4" } }, { "type": "text", "text": "你是一个文案专家,你善于通过视频分析内容里面的风景和拍摄者的风格,然后以此为基础创作文案,请根据上传的视频写一段文案,要求充满诗意和浪漫,要求文字极简。" } ] } ], "max_tokens": 1024 }' ``` 大模型会生成如下文字返回给您: > 在夕阳的余晖中,他们相依相偎,静享这一刻的宁静与美好。酒杯中的液体在微风中轻轻摇曳,仿佛在诉说着他们甜蜜的时光。这一刻,世界仿佛静止,只有他们的心跳声在回响。 您可以参考上述 cURL 的用法,修改 Prompt 并改成您自己想要实现的目标,来让大模型帮助您完成任务。 ## 视频理解价格预估 `step-1o-turbo-vision` 的价格会受到 Prompt 长度和视频长度的影响,视频越长,价格越高。这里有一些不同长度的视频在 `step-1o-turbo-vision` 下的价格预估供您参考。 | 视频分辨率 | 视频长度 | 输入 token | 预估输入价格 | | - | - | - | - | | 3840x2160 | 00:14 | 5238 | 0.013095 元 | | 4096x2160 | 01:02 | 24064 | 0.06016元 | `step-5-preview` 和 `step-3.7-flash` 的定价详见 [API 定价](/docs/zh/guides/pricing/details)。 > **[引入 Prompt 缓存降低费用](/docs/zh/guides/developer/prompt-cache)** ## 注意事项 * 在使用时,强烈建议将视频放在指令前,这样可以让大模型获得更好的效果。 * 视频存在下载和审核的过程,耗时较长,因此在设计产品时,可设计相应的等待交互,帮助用户降低焦虑。 * `step-5-preview`、`step-3.7-flash` 与 `step-1o-turbo-vision` 当前均支持单个小于 128MB 的 MP4 视频文件 URL,如果您需要上传更大的视频或其他格式,可以使用 [ffmpeg](https://www.ffmpeg.org/) 将视频切割为多个小于 128MB 的 MP4 视频,具体操作方式可参考下方说明。 * 由于视频文件需要从您的服务器下载到阶跃星辰的服务器,所以下载速度将会直接影响最终返回的速度,您可以将视频文件放在可被高速访问的地址(如对象存储),以便于阶跃星辰服务器下载视频用于视频理解。 ## 常见问题 ### 使用 Files API 加速视频理解 在使用视频理解时,如果传入的是外部的 URL,阶跃星辰的服务器将会请求外部 URL,获取视频内容并进行生成。生成的速度将会受到视频下载速度的影响,因此,我们推荐将视频放置在 CDN 或具有较大下载带宽的对象存储上,以便于对视频进行更快的下载。但如果您的视频需要重复使用,比如用来做 Few-shot,则可以考虑将视频使用阶跃星辰 Files API 上传至阶跃星辰文件存储服务上,以避免重复下载,产生持续的流量消耗。 ![](https://mintcdn.com/stepfun/ivZhb9pOE5X12y-g/images/guide/video_url.png?fit=max\&auto=format\&n=ivZhb9pOE5X12y-g\&q=85\&s=7847cea6458d835d7d383e1634560e5f) 您可以调用[上传文件](/docs/zh/api-reference/files/create) API,并传入文件,选择 **purpose 为 storage**,上传完成后所获取的 File ID 则可以在对话过程中使用。在拿到 File ID 后,您需要在 File ID 前拼上 `stepfile://`,用于标注这个视频从阶跃星辰文件服务中获取,后续模型在推进推理时,将会从阶跃星辰文件存储服务上获取文件,从而降低下载文件所需的时间,提升整体推理的时延。 ## ffmpeg 视频切割操作指南 ### 切分视频文件 当您要处理的适配文件大于 128MB 时,您可以使用 ffmpeg 将视频切割为多个视频,并**通过模型将视频内容总结后,作为上下文传递在对话中**,以便于使用完整的视频进行对话。如:将 sample.mp4 切分成若干个 120 秒的视频文件。 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ffmpeg -i sample.mp4 -acodec copy -f segment -segment_time 120 -vcodec copy -reset_timestamps 1 -map 0 output_time_%d.mp4 ``` ### 将其他格式转换为 MP4 格式 当您需要将视频从其他格式转换为 MP4 格式时,可以通过 ffmpeg 命令进行转换。如:将 sample.mkv 转换为 sample.mp4 格式可用如下命令: ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} ffmpeg -i sample.mkv -codec copy sample.mp4 ``` # 网络搜索 Source: https://platform.stepfun.com/docs/zh/guides/developer/web-search 需要让模型回答时效性问题时,请先检索公开网页,再把结果交给对话模型。推荐使用独立的网页搜索接口。该接口与选用哪个聊天模型无关。 > [!WARNING] > > `step-5-preview` 不支持在 Chat Completions 的 `tools` 中传入 `type: "web_search"`。请调用 `POST https://api.stepfun.com/v1/search`,再将检索结果写入 `messages` 后调用模型。 ## 推荐:网页搜索 API 请求地址: `POST https://api.stepfun.com/v1/search` 完整参数、场景分类和响应字段见 [网页搜索 API](/docs/zh/api-reference/search/search)。 ### 检索示例 ```bash theme={"theme":{"light":"light-plus","dark":"dark-plus"}} curl -X POST "https://api.stepfun.com/v1/search" \ -H "Content-Type: application/json; charset=utf-8" \ -H "Authorization: Bearer $STEP_API_KEY" \ -d '{ "query": "上海最高的楼", "n": 5 }' ``` ### 把检索结果交给模型 下面示例先搜索,再把标题、链接和摘要交给 `step-5-preview`: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} import os import requests from openai import OpenAI api_key = os.environ["STEP_API_KEY"] client = OpenAI(api_key=api_key, base_url="https://api.stepfun.com/v1") search = requests.post( "https://api.stepfun.com/v1/search", headers={ "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", }, json={"query": "上海最高的楼", "n": 5}, ) search.raise_for_status() results = search.json()["results"] snippets = "\n\n".join( f"{item['title']}\n{item['url']}\n{item['snippet']}" for item in results ) completion = client.chat.completions.create( model="step-5-preview", messages=[ { "role": "system", "content": "根据检索结果回答用户问题。如果检索结果不足以判断,请明确说明。", }, { "role": "user", "content": f"上海最高的楼是哪栋?\n\n检索结果:\n{snippets}", }, ], ) print(completion.choices[0].message.content) ``` 也可以把 `/v1/search` 封装成自定义 `type: "function"` 工具,由模型决定何时检索。这与内置 `web_search` 不是同一能力;`step-5-preview` 支持普通 function calling,详见 [工具调用](/docs/zh/guides/developer/tool-call)。 在 Claude Code 等 Agent 客户端中,可使用 [StepSearch MCP](/docs/zh/guides/developer/search-mcp)。Realtime 语音会话的内置搜索见 [Realtime](/docs/zh/guides/developer/realtime)。 ## 内置 web\_search 工具(step-5-preview 不支持) `step-3.7-flash` 等仍支持该工具的模型,可以在 Chat Completions 的 `tools` 中传入 `type: "web_search"`。搜索完成后,结果会作为上下文交给模型继续推理,并按实际调用次数计费,见 [定价说明](/docs/zh/guides/pricing/details)。`step-5-preview` 不要使用下面的写法。 ### 启用互联网搜索 如需启用互联网搜索,可以通过在调用 API 时,传入 tools 定义来使用,具体定义如下: ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} #构建web_search工具 tools = [ { "type": "web_search",# 固定值 "function": { "description": "这个web_search用来搜索互联网的信息"# 描述什么样的信息需要大模型进行搜索。 } } ] ``` 互联网搜索工具的 `type` 固定为 `web_search`,并支持通过 `function.description` 来描述需要使用搜索的场景,用于指引大模型判断是否需要调用互联网搜索搜索相关信息。在完成搜索后,会以上下文的方式,插入到对话中,并交给大模型进行推理。互联网搜索工具按实际调用的次数计费,具体计费可见[定价说明](/docs/zh/guides/pricing/details)。 ### 实现步骤 & 参考代码 以下示例仅适用于仍支持内置 `web_search` 的模型。如开发者有自己的搜索渠道,也可以通过普通 function calling 自行接入。 **非流式响应** ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI( base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY ) #定义sys扮演的角色和任务 sys_prompt = "每个提问先通过web search,然后通过web search的结果,回答用户问题" user_prompt = "上海最高的楼上海什么楼?请只回答楼的名称,不要包含其他内容。例如:上海金茂大厦。" #构建信息 message = [ {"role": "system", "content": sys_prompt}, {"role": "user", "content": user_prompt} ] #构建web_search工具 tools = [ { "type": "web_search",# 固定值 "function": { "description": "这个web_search用来搜索互联网的信息"# 描述什么样的信息需要大模型进行搜索。 } } ] # 调用补全接口进行补全 completion = client.chat.completions.create( model="step-3.7-flash", messages=message, tool_choice="auto", tools=tools, stream=False#非流式可以不进行设置使用默认值 ) #非流式 print(completion) ``` **返回结果** * 返回结果中的 tool\_calls.function.results 当中包含的是搜索引擎返回的信息,您可以基于此渲染 UI。 ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "354dff9f4e8b0d273cf9d4639ba5f183.2618f2a05bbfdd02896c32051994da8c", "object": "chat.completion", "created": 1722413870, "model": "step-3.7-flash", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "上海中心大厦", "tool_calls": [ { "id": "call__Tg9p9DHRK2JamqimG-IVA", "type": "web_search", "function": { "name": "step_websearch", "arguments": "{\"keyword\": \"上海 最高的楼\"}", "results": [ { "index": 0, "url": "https://www.tianqi.com/video/3352.html", "title": "上海最高的楼 上海最高的楼是哪", "summary": "\n上海中心大厦是上海市的一座超高层地标式摩天大楼,其地上有119层,还有5层裙楼和5层地下室。上海中心大厦分为9个区,每一个都有自己的空中大厅和中庭。其中空中大厅每一层都建有自己的零售店和餐馆,形成了一个垂直商业区。\n相关推荐 更多 >>\n-\n### 何超莲看中国女排比赛快窒息 并且引发了网友的共鸣\n##### 热点07-30\n-\n### 覃海洋张雨霏一天7次尿检 游泳运动员受大干扰和压力\n##### 热点07-29\n-\n" }, { "index": 1, "url": "https://www.maigoo.com/news/481863.html?fromapp=wx", "title": "上海十大高楼排行榜 上海10大最高的摩天大楼 上海最高建筑盘点→买购网", "summary": "\n15 | 上海信息港枢纽大楼 | 288.00米 | 已建成 |\n16 | 上海恒基中心 | 285.00米 | 已建成 |\n17 | 上海明天广场 | 284.60米 | 已建成 |\n18 | 上海前滩中心 | 280.00米 | 已建成 |" }, { "index": 2, "url": "http://m.wenda.bendibao.com/sgh/128141.shtm", "title": "上海最高的楼有多少层- 本地宝", "summary": "【导语】: 118层.上海最高建筑物是上海中心大厦.上海中心大厦项目面积433954平方米,总高为632米,结构高度为580米,机动车停车位布置在地下,可停放2000辆. 118层.上海最高建筑物是上海中心大厦.上海中心大厦项目面积433954平方米,总高为632米,结构高度为580米,机动车停车位布置在地下,可停放2000辆. 上海三个高楼通常指上海环球金融中心、上海金茂大厦、上海中心大厦.其中,上海环球金融中心是位于中国上海陆家嘴的一栋摩天大楼,楼高492米,地上101层,是世界最高的平顶式大楼. 上海中心大厦是中国第一高楼(截止2018年1月).上海中心大厦项目面积433954平方米,建筑主体为118层,总高为632米,结构高度为580米,机动车停车位布置在地下,可停放2000辆. 金茂大厦又称金茂大楼,曾经是中国大陆最高的大楼,位于上海市浦东新区黄浦江畔的陆家嘴金融贸易区,楼高420.5米. 温馨提示: 微信关注上海本地宝 公众号(shbendibao)输入框回复 社保 ,查看更多上海最新社保卡更换流程、社保卡余额查询,社保卡办理网点等信息. " }, { "index": 3, "url": "https://hf.house365.com/info6666/398606.html", "title": "上海最高楼叫什么大厦有多少米高-365淘房网-上海最高楼", "summary": "上海最高楼叫上海中心大厦,总高为632米,共有132层,地上127层,地下5层.它不仅是上海最高的楼,也曾是中国最高的楼,现被739米的H700深圳塔取代.上海中心大厦于2008年11月29日开工,直到2016年3月12日全部完工,2016年4月27日开始运营.上海中心的设计来自美国的Gensler建筑设计事务所设计,其设计的'龙型方案中标后,与同济大学建筑设计研究院完成施工图出图,深化大厦细部设计. 上海中心大厦采用了一种'龙型设计能够延缓风流,随着高度的升高,每层扭曲近1度,将风环绕建筑时的侧力减少24%,提升了大厦的安全.此外,上海中心大厦不单单是一座办公楼,每个区都有自己的空中大厅和中庭,形成了一个垂直区.1号区将是零售区,2号区到6号区将为办公区,酒店和观景台座落于7号区到9号区.空中大厅的每一层都将建有自己的零售店和餐馆,成为一个垂直区. 除了上海中心大厦外,上海环球金融中心也是上海的地标建筑之一,它位于中国上海陆家嘴的一栋摩天大楼,2008年8月29日竣工,楼高492米,地上101层.环球金融中心曾一度成为国内外游客来上海的首选之地,位于100层的观光厅更是成为了上海的一个标志. 总的来说,上海中心大厦和上海环球金融中心都是上海的标志建筑,代表着上海的发展和成就.它们不仅仅是一座建筑,更是上海人民勇于进取、开拓创新的精神象征." }, { "index": 4, "url": "http://m.nongpin88.com/know/1957952.html", "title": "上海最高的楼是哪个楼_知道问答_醉学网", "summary": "上海最高的的楼是上海中心大厦 . 上海中心大厦,位于陆家嘴,建筑主体为118层,总高为632米,其设计高度超过附近的上海环球金融中心,被称为中国第一高楼,世界第三高楼. 上海中心大厦项目面积433954平方米,结构高度为580米,机动车停车位布置在地下,可停放2000辆. 美国SOM建筑设计事务所、美国KPF建筑师事务所及上海现代建筑设计集团等多家国内外设计单位提交了设计方案,美国Gensler建筑设计事务所的“龙型”方案及英国福斯特建筑事务所“尖顶型”方案入围.经过评选,“龙型”方案中标,大厦细部深化设计以“龙型”方案作为蓝本,由同济大学建筑设计研究院完成施工图出图." } ] } } ] }, "finish_reason": "stop" } ], "usage": { "cached_tokens": 64, "prompt_tokens": 1516, "completion_tokens": 4, "total_tokens": 1520 } } ``` **流式响应** ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} from openai import OpenAI # 初始化 阶跃星辰 Client STEPFUN_KEY = "YOUR_STEP_API_KEY" client = OpenAI( base_url="https://api.stepfun.com/v1", api_key=STEPFUN_KEY ) #定义sys扮演的角色,以及user提出的任务 sys_prompt = "每个提问先通过web search,然后通过web search的结果,回答用户问题" #在调用 Web Search 时,阶跃星辰会将搜索结果作为上下文传入传给大模型,因此如果您需要获取引用内容,可以通过 Prompt Engineering 的方式,#来要求大模型将信息来源反馈给您。具体效果可以参考下方的高亮加粗部分。 #user_prompt = "上海最高的楼上海什么楼?请只回答楼的名称,不要包含其他内容。例如:上海金茂大厦。回答时,你会将所使用的具体信息的 index 一并返回给用户。" user_prompt = "上海最高的楼上海什么楼?请只回答楼的名称,不要包含其他内容。例如:上海金茂大厦。" #构建信息 message = [ {"role": "system", "content": sys_prompt}, {"role": "user", "content": user_prompt} ] #构建web_search工具 tools = [ { "type": "web_search",# 固定值 "function": { "description": "这个web_search用来搜索互联网的信息"# 描述什么样的信息需要大模型进行搜索。 } } ] # 调用补全接口进行补全 completion = client.chat.completions.create( model="step-3.7-flash", messages=message, tool_choice="auto", tools=tools, stream=True#流式需要设置此参数,非流式可以不进行设置使用默认值 ) #非流式 #print(completion) #对流式返回的内容进行打印 / 渲染输出 for chunk in completion: print(chunk) #print(chunk.choices[0].delta.content.strip(),end="") ``` **响应** ```json theme={"theme":{"light":"light-plus","dark":"dark-plus"}} { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 1722413589, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": { "role": "assistant", "tool_calls": [ { "id": "call_GygttvWbRZu1ympMbC_eEw", "type": "web_search", "function": { "name": "step_websearch", "arguments": "{\"keyword\": \"上海 最高 楼 名称\"}", "results": [ { "index": 0, "url": "https://www.tianqi.com/toutiao/read/190032.html", "title": "上海最高的大楼 上海最高的大楼是什么名字 - 天气加", "summary": "\n当前所在位置 : 天气网\n天气生活\n生活 正文\n# 上海最高的大楼 上海最高的大楼是什么名字\n2022-05-31 来源:天气网 【字体: 大 中 小 】\n上海最高的大楼是上海中心大厦Shanghai Tower,建筑高度632米,位于上海市陆家嘴金融贸易区银城中路501号,是上海市的一座巨型高层地标式摩天大楼,始建于2008年11月29日,于2016年3月12日完成建筑总体的施工工作。上海中心大厦主要用途为办公、酒店、商业、观光等公共设施。\n主楼为地上127层,建筑高度632米,地下室有5层。\n\n上海中心大厦为多功能摩天大楼,主楼沿竖向共分为8个区段和1个观光层,在每个区段的顶部均布置有设备层和避难层。其中1区共5层,主要用于商业和会议。2区共12层、3区共13层、4区共13层、5区共14层、6区共14层均用于办公,办公标准层面积分别为:2区约5000平方米、3区约3900平方米、4区约3200平方米、5区约2700平方米、6区约2000平方米,7区共15层,为酒店。8区共15层,其中10层为酒店,5层用于办公。9区共3层,为观光层。观光层以上为设备层。地下5层用于地下商业和停车。\n" }, { "index": 1, "url": "https://m.renrenshipu.com/diet/article/24119.html", "title": "上海最高的楼叫什么 - 阅品美食", "summary": "\n在上海之巅360度全视角观光厅,近看东方明珠、金茂大厦、环球金融中心身居足下,远眺外滩、世博园区、八万人体育场尽收眼底,一览苏州河与黄浦江蜿蜒同奔长江共入东海。" }, { "index": 2, "url": "https://hf.house365.com/info6666/398606.html", "title": "上海最高楼叫什么大厦有多少米高-365淘房网-上海最高楼", "summary": "上海最高楼叫上海中心大厦,总高为632米,共有132层,地上127层,地下5层.它不仅是上海最高的楼,也曾是中国最高的楼,现被739米的H700深圳塔取代.上海中心大厦于2008年11月29日开工,直到2016年3月12日全部完工,2016年4月27日开始运营.上海中心的设计来自美国的Gensler建筑设计事务所设计,其设计的'龙型方案中标后,与同济大学建筑设计研究院完成施工图出图,深化大厦细部设计. 上海中心大厦采用了一种'龙型设计能够延缓风流,随着高度的升高,每层扭曲近1度,将风环绕建筑时的侧力减少24%,提升了大厦的安全.此外,上海中心大厦不单单是一座办公楼,每个区都有自己的空中大厅和中庭,形成了一个垂直区.1号区将是零售区,2号区到6号区将为办公区,酒店和观景台座落于7号区到9号区.空中大厅的每一层都将建有自己的零售店和餐馆,成为一个垂直区. 除了上海中心大厦外,上海环球金融中心也是上海的地标建筑之一,它位于中国上海陆家嘴的一栋摩天大楼,2008年8月29日竣工,楼高492米,地上101层.环球金融中心曾一度成为国内外游客来上海的首选之地,位于100层的观光厅更是成为了上海的一个标志. 总的来说,上海中心大厦和上海环球金融中心都是上海的标志建筑,代表着上海的发展和成就.它们不仅仅是一座建筑,更是上海人民勇于进取、开拓创新的精神象征." }, { "index": 3, "url": "http://www.zsuan.com/dq/dqzs/1467226.html", "title": "上海最高楼,上海市最高的楼宇多少米叫什么名字 - 装算", "summary": "1,上海市最高的楼宇多少米叫什么名字 上海的最高建筑是上海中心大厦,2014年建成,总高度632米,共125层. 2,上海最高楼叫什么名字 东方明珠不是楼是建筑最高楼不确定 上海中心大厦 东方明珠 3,上海最高的楼多高 上海最高的楼——上海中心大厦(总高为632米)地理位置:中国上海市陆家嘴金融贸易区建筑高度:632米层 数:地上118层、5层裙楼和5层地下室 4,上海最高的建筑是那幢 上海最高的建筑是上海中心大厦,地处上海最繁华的金融中心区陆家嘴.上海中心大厦总高度是632米,总高度125层,是国内第一高楼,在已经投入使用的写字楼里排名世界第三. 5,上海最高的楼是哪一座 九月十四日,上海的第一高度再次刷新,492米高、101层的上海环球金融中心结构封顶,整幢大楼预计明年春天竣工.据悉,在距地面472米的100层处,设计了“观光天阁”,这一高度或将成为当今世界摩天大楼中人可到达的最高高度,上海也因此将出现世界最高的大楼观光厅. 图为建造中的“上海第一高楼”已“鹤”立楼群,屹立在黄浦江畔 环球金融中心额 6,上海最高的楼 环球金融中心 上海中心比它还要高 但是现在还在打地基呢 N0.1 上海中心大厦(在建):632米,地下5层,地上124层,总高度632米,建筑造价:148亿元.位于浦东的陆家嘴功能区,百占地3万多平方米,其建筑设计方案由美国Gensler建筑设计事务所完成,总承包单位为上海建工(集团)总公司,是目前中国国内在建中的第一高楼. 在2010年上海世博会时地下部分封顶,2012年结构封顶且部分投入运营,2014年竣工交付使用.NO.2 上海环球金融中心是位于中国上海陆家嘴的一栋摩天大楼,2008年8月29日竣工.是中国目前第二高楼、世界第三高楼、世界最高的平顶式大楼,楼高492米,地上101层NO.3 东方明珠广播电视塔:468米,又名东方明珠塔,是一座位于中国上海的电视塔.坐落在中国上海浦东新区陆家嘴,毗邻黄浦江,与外滩隔江相望.东方明珠塔是由上海现代建筑设计(集团)有限公司的江欢成设计.建筑动工于1991年,于1994年竣工,投资总额达8.3亿元人民币.高467.9米,亚洲第二,世界第四高塔,仅次于广州新电度视塔(600米)、加拿大的加拿大CN电视塔(553.3米)及俄罗斯的奥斯坦金诺电视塔(540.1米),是上海的地标之一. 目前的东方明珠高468" }, { "index": 4, "url": "https://sgh.51dongshi.com/eggaedfresgbcs.html", "title": "上海市最高的楼叫什么_懂视", "summary": "上海市最高的楼叫什么 上海最高的楼叫做上海中心大厦,位于陆家嘴,总高632米,建筑主体为118层,是一座超高层地标式摩天大楼,上海中心大厦项目的面积达到了433954平方米,在2008年开工,直到2016年才竣工,费时八年,是目前中国的第一高楼,世界的第二高楼. 推荐度: 导读 上海最高的楼叫做上海中心大厦,位于陆家嘴,总高632米,建筑主体为118层,是一座超高层地标式摩天大楼,上海中心大厦项目的面积达到了433954平方米,在2008年开工,直到2016年才竣工,费时八年,是目前中国的第一高楼,世界的第二高楼. 上海是我们国家经济最为繁荣的城市之一,上海最高的楼也是上海的地标建筑,那么上海最高的楼叫什么呢?一起来看看吧. 上海最高的楼叫做上海中心大厦,位于陆家嘴,总高632米,建筑主体为118层,是一座超高层地标式摩天大楼. 上海中心大厦项目的面积达到了433954平方米,在2008年开工,知道2016年才竣工,费时八年,是目前中国的第一高楼,世界的第二高楼." } ] } } ] } } ], "usage": { "prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0 } } { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 0, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": { "role": "assistant" } } ], "usage": { "prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0 } } { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 1722413589, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": { "content": "上海" } } ], "usage": { "cached_tokens": 96, "prompt_tokens": 2167, "completion_tokens": 1, "total_tokens": 2168 } } { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 1722413589, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": { "content": "中心" } } ], "usage": { "cached_tokens": 96, "prompt_tokens": 2167, "completion_tokens": 2, "total_tokens": 2169 } } { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 1722413589, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": { "content": "大厦" } } ], "usage": { "cached_tokens": 96, "prompt_tokens": 2167, "completion_tokens": 3, "total_tokens": 2170 } } { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 1722413589, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": {} } ], "usage": { "cached_tokens": 96, "prompt_tokens": 2167, "completion_tokens": 4, "total_tokens": 2171 } } { "id": "1681409a3e4f09244a0951a67612cdf2.c78632c4a6ec4e2ef404a3222c81a82c", "object": "chat.completion.chunk", "created": 1722413589, "model": "step-3.7-flash", "choices": [ { "index": 0, "delta": {}, "finish_reason": "stop" } ], "usage": { "cached_tokens": 96, "prompt_tokens": 2167, "completion_tokens": 4, "total_tokens": 2171 } } ``` **流式响应并获取引用** 由于 OpenAI 的 SDK 在流式下无法获取到 results 的结果,所以在流式场景下,您需要自行实现调用阶跃星辰模型能力,并解析结果以获得响应。如下是一个基于 `httpx` 的参考代码。 ```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}} # 需要先执行 pip install httpx httpx-sse 以安装依赖。 import httpx from httpx_sse import connect_sse import json STEP_API_KEY = "YOUR_STEP_API_KEY" def main(): headers = { "Authorization": f"Bearer {STEP_API_KEY}" } body = { "model": "step-3.7-flash", "stream": True, "messages": [ { "role": "system", "content": "你是由阶跃星辰提供的AI聊天助手,你擅长中文,英文,以及多种其他语言的对话。在保证用户数据安全的前提下,你能对用户的问题和请求,作出快速和精准的回答。同时,你的回答和建议应该拒绝黄赌毒,暴力恐怖主义的内容。" }, { "role": "user", "content": "你好,请介绍一下 OPPO 公司!" } ], "tools": [ { "type": "web_search", "function": { "description": "这个函数可以用于搜索不同公司的介绍,比如 特斯拉公司、苹果公司" } } ] } text = "" search_result = [] finish_reason = "" with httpx.Client() as client: with connect_sse(client, "POST", "https://api.stepfun.com/v1/chat/completions", headers=headers, json=body) as event_source: for sse in event_source.iter_sse(): # 当返回 "[DONE]",表示流式结束,可以继续处理后续逻辑 if (sse.data == "[DONE]"): continue response_message = json.loads(sse.data) # 提取内容 text = text + response_message["choices"][0]["delta"]["content"] if "finish_reason" in response_message["choices"][0]: finish_reason = response_message["choices"][0]["finish_reason"] # 处理流式返回中的 Tool Call 逻辑 if "tool_calls" in response_message["choices"][0]["delta"]: # 可能会命中多个tool for tool_response in response_message["choices"][0]["delta"]["tool_calls"]: # 处理 web_search 的 tool if (tool_response["type"] == "web_search"): search_result = tool_response["function"]["results"] print("______result_________") print(f"完整补全内容:{text}") print(f"搜索结果: {search_result}") print(f"结束原因: {finish_reason}") pass if __name__ == "__main__": main() ``` ### 常见用法 #### 输出使用到的链接 在展示生成结果时,如果希望展示所使用的 Web 链接,则可以要求大模型在返回时,返回所使用的链接,并通过返回的 tool\_calls 的 results 来获取到对应链接的基础信息,并渲染给用户。 ### 注意事项 * 在使用流式输出时,将会在返回的第一个 chunk 中带上搜索引擎的结果。您可以使用第一个 chunk 来渲染 UI。 * 在使用大模型推理时,您需要写清楚 System Prompt 和 Tool 的 description,以便大模型能够正确理解您的需求,调用互联网搜索。 * 目前在实际调用互联网搜索时,会先进行意图判断,评估是否需要调用互联网搜索,并不会对每一次调用都使用互联网搜索。 # 语音模型列表 Source: https://platform.stepfun.com/docs/zh/guides/models/audio ## 模型概述 阶跃语音系列模型覆盖实时语音互动、综合音频生成、文本转语音和自动语音识别,提供从文字到音频、从语音到文字以及端到端语音对话的完整能力,适用于配音、语音助手、智能硬件、Voice Agent、音乐创作、实时字幕和会议记录等场景。 ## 模型列表 ### StepAudio 3 Realtime * **真人自然交互**:接话自然、节奏松弛、表达有温度,实时互动更接近真人交流。 * **听懂话,也听懂话外之音**:理解语气、情绪、副语言线索和环境声音。 * **真正的全双工对话**:支持自然打断、附和识别和话权协调,不抢话也不装聋。 * **自适应推理**:简单问题快速回应,复杂问题边想边说,在响应速度和回答质量之间动态平衡。 * **从会聊天到能办事**:Voice Agent 可调用工具或执行后端任务,任务完成后自然回到对话。 > **[StepAudio 3 Realtime](/docs/zh/guides/models/stepaudio-3-realtime)** > > 查看模型 ID、API 端点、能力说明和计费状态。 ### StepAudio 3 TTS * **真人级说话表现**:在音色、语调、节奏和气口停顿上贴近自然口语,可呈现笑声、迟疑、结巴、重复和改口等真实表达。 * **超低时延流式生成**:支持边生成边输出,适合实时对话和语音助手。 * **高表现力控制**:支持从整体语境到局部表达的细致控制,适合有声内容、配音和情绪化播报。 > **[StepAudio 3 TTS](/docs/zh/guides/models/stepaudio-3-tts)** > > 查看 TTS 能力和 API 端点。 ### StepAudio 3 Gen * **综合音频内容创作**:用自然语言描述角色设定、音色风格和情绪表达,即可生成富有表现力、可精细控制的人声,并统一编排音效、环境音、背景音乐与歌声。 * **精细化声音设计与控制**:支持通过自然语言控制多角色台词、音色风格、说话方式、语气情绪、方言口音,以及笑声、喘息、停顿等副语言特征,可在一条指令中描述多个角色及其互动关系。 * **全要素生成与时序编排**:可指定人声、音效、环境音和背景音乐的出现位置与先后顺序,完成协同生成与片段衔接。 * **专业内容生产**:适用于影视、游戏、动画、广播剧和有声书等场景,快速完成角色配音、多角色对白及配套的环境音、音效和背景音乐。 * **短视频与自媒体**:无需专业音频制作经验,一段规范化的自然语言描述即可生成风格可控的配音,并按需补充背景音乐和音效。 > **[StepAudio 3 Gen](/docs/zh/guides/models/stepaudio-3-gen)** > > 查看 Gen 能力和 API 端点。 ### StepAudio 3 Music * **歌词成歌**:根据歌词和自然语言风格描述,生成包含人声、旋律、编曲和混音的完整歌曲。 * **纯音乐生成**:根据场景、情绪、节奏和乐器描述生成无演唱人声的音乐。 * **歌曲翻唱与风格切换**:参考歌曲旋律,重新控制风格、人声、编曲和情绪。 * **干声智能配乐**:分析清唱人声的旋律、速度、节拍和情绪,生成匹配的和声、节奏与器乐编配。 * **自然语言音乐控制**:可组合描述曲风、人声、乐器、情绪、调式和制作质感,降低音乐创作门槛。 > **[StepAudio 3 Music](/docs/zh/guides/models/stepaudio-3-music)** > > 查看音乐生成能力、任务类型和 API 端点。 ### StepAudio 3 ASR * **语境理解**:以大语言模型为语义底座,结合音频、上下文和领域知识,提升专业术语、人名和同音词识别。 * **跨语言、跨场景提升**:覆盖中文、英文、方言、中英混说、长音频和垂类领域。 * **复杂声音处理**:支持悄悄话、极快语速、含糊连读、环境噪声、歌唱和背景音乐。 * **低误识别**:无语音测试准确率达到 99%,减少环境声、背景音乐和静音片段的误转写。 * **评测亮点**:内部上下文推理错误率 0.57%,较 StepAudio 2.5 ASR 降低 64.2%;AISHELL-6 悄悄话 CER 为 3.97%。 > **[StepAudio 3 ASR](/docs/zh/guides/models/stepaudio-3-asr)** > > 查看 ASR 系列能力、当前模型和识别 API。 关于 StepAudio 2.5 系列的对话模型,我们提供了两种不同的方式调用最新的语音对话模型,分别对应 StepAudio 2.5 Realtime 和 StepAudio 2.5 Chat: * StepAudio 2.5 Realtime,支持实时语音对话的 Realtime 交互形式,使用 websocket 协议,支持语音请求、语音回复,便于直接使用我们封装好的一整套实时对话能力使用。 * StepAudio 2.5 Chat,支持按轮次对话的 Chat Comletion 交互形式,支持单次提交语音请求、流式文本输出回复内容,便于基于接口和模型能力进行接入和开发。 ### StepAudio 2.5 Realtime 真正具备“活人感”的实时语音大模型。**全维度打造专属人设,连每一次呼吸和轻笑都不掉戏。** 1. **情绪价值**:不再是冰冷的 AI,而是有脾气、有态度、懂接梗的鲜活搭子,为您带来最自然、好玩的陪伴体验。 2. **对话双商领跑**:实现对话智商与情商的双重跃升。不仅能深度理解复杂语意、机智抛梗,更具备行业顶级副语言感知力——瞬间读懂您语气中的迟疑与轻笑,极速输出契合度拉满的高情商反馈。 3. **副语言感知**:不仅能深度理解复杂语意、机智抛梗,更具备行业顶级副语言感知力——瞬间读懂您语气中的迟疑与轻笑,极速输出契合度拉满的高情商反馈。 4. **千万人设完全自定义**:真正实现“全维灵魂捏脸”,彻底打破预设模板束缚。支持细颗粒度定义性格特征、专属口癖与情绪边界,随心打造千万种独一无二的专属搭子。 5. **贴合语境神级表现力**:在声音表现层面,StepAudio 2.5 Realtime 全面继承了业内顶尖的 StepAudio 2.5 TTS 能力,理解与生成的深度融合,结合强化学习训练,实现了“Global 全局场景定调”与“句内细节雕琢”的双重能力。能够精准洞察对话氛围,极细颗粒度地拿捏语速、重音与潜台词;发声时自然融入轻笑、叹息等真实细节,让每一次开口都与当下的交流场景完美契合。 情感陪伴、日常交流、百科问答、任务助手等日常实时沟通交互对话全场景。 ### StepAudio 2.5 Chat 真正具备“活人感”的对话大模型。**全维度打造专属人设,连每一次呼吸和轻笑都不掉戏。** 1. **情绪价值**:不再是冰冷的 AI,而是有脾气、有态度、懂接梗的鲜活搭子,为您带来最自然、好玩的陪伴体验。 2. **对话双商领跑**:实现对话智商与情商的双重跃升。不仅能深度理解复杂语意、机智抛梗,更具备行业顶级副语言感知力——瞬间读懂您语气中的迟疑与轻笑,极速输出契合度拉满的高情商反馈。 3. **副语言感知**:不仅能深度理解复杂语意、机智抛梗,更具备行业顶级副语言感知力——瞬间读懂您语气中的迟疑与轻笑,极速输出契合度拉满的高情商反馈。 4. **千万人设完全自定义**:真正实现“全维灵魂捏脸”,彻底打破预设模板束缚。支持细颗粒度定义性格特征、专属口癖与情绪边界,随心打造千万种独一无二的专属搭子。 ### StepAudio 2.5 TTS Contextual TTS,真正具有声音表演能力的语音合成模型。首次将**语境理解能力**引入语音生成全流程,让 AI 不是念文本,而是演文本。支持**通过自然语言描述实现全局语境定调与句中细腻控制**,生成具有呼吸感、轻重主次、情绪弧线的真人级表达。 1. **双档语境控制,人人都是配音导演**: * 通过 Global Context(全局语境)+ Inline Context(文中语境)双档控制,既能为整段内容定调氛围和人物关系,也能逐句精控每个字词如何演绎。 * 告别传统标签匹配,用自然语言描述您想要的声音表达。情绪、风格、场景、说话状态,模型都能理解并精准执行。 * 支持「克制的悲伤,不哭腔,轻轻发颤」「试探着撒娇,不是很黏,带一点嘴硬」这类复杂、混合、有层次的表达意图,实现更开放、更连续、也更贴近真实语境的情绪控制。 2. **Zero-shot Clone 全音色可控,百变音色随心复刻**: * 只需 3s 参考音频即可进行音色复刻,且完整继承全局 / 文中语境控制能力,不受固定音库和预设角色的限制。 3. **字字有戏,句句真实,开口没有 AI 味**: * 在停顿、重音、节奏、语气转折等韵律维度上全面提升,合成语音有呼吸感、有轻重主次、有情绪起伏。 * 底层人声品质升级,输出的声音更通透、更具拟人感,没有传统语音合成常见的“塑料感”和“AI 味”。 有声书、短剧配音、广告旁白、情感叙事、内容二创等多种对语音表现力有高要求的场景。 ### StepAudio 2.5 ASR 阶跃新一代语音识别模型,4B 参数 + Multi-Token Prediction(MTP)架构。在保持 SOTA 转写精度的同时单步并行预测多个 Token,大幅削减串行等待——5 分钟音频可在 1 秒内完成转写。提供一次性提交(SSE,模型字符串 `stepaudio-2.5-asr`)与实时双向流式(WebSocket,模型字符串 `stepaudio-2.5-asr-stream`)两种接入方式。 1. **极速推理,吞吐与时延双线突破**: * 引入 MTP 技术单步并行预测多个 Token,吞吐量较传统 ASR 提升 400%,时延降低 60%。 * 引擎侧 RTF ≈ 0.0053,转写 1 小时音频约需 19 秒,5 分钟音频 1 秒内出完整结果。 2. **SOTA 转写精度,多场景全面刷新基线**: * 基于 4B 参数深度优化,在新闻、会议、强噪声等多场景下,中英文错误率全面刷新行业基线。 * 支持 ITN 文本规范化,转写结果可直接用于业务系统。 3. **进阶识别能力**: * 双向流式(`stepaudio-2.5-asr-stream`)支持累计全量文本、可纠错尾词与字级时间戳,适合实时对话、语音助手、会议字幕。 * 音频文件识别支持分句与字 / 词级时间戳、双声道分轨,以及说话人识别(区分同一段音频中的不同说话人)。 4. **极致性价比,Step Plan 直接可用**: * 一次性提交(SSE)API 定价 0.15 元 / 小时,仅为上代 `step-asr` 系列的 1/10;双向流式 1.2 元 / 小时。 * Step Plan 订阅用户可直接调用,无需额外开通。 Voice Agent、大规模批量转写、实时字幕 / 直播、会议记录、语音输入等对识别速度与准确率均有要求的场景。 ### Step Audio 2 * 定位:全方位感官理解与端到端自然交互 * 能力标签:音色复刻、Tool Call、网络搜索 * 体验入口:[体验中心](https://www.stepfun.com/studio/audio?tab=voice-chat) * 在语言方面能够理解中文普通话、中文方言、英语、日语。支持语音复刻(通过上传音色片段实现自定义音色)。在能力方面能够理解环境声音事件、人类副语言和语音中的情绪、根据声音推测用户年龄、理解音乐,能够控制不同的语速、语调和情感进行表达,具备原生的 Tool Call 和 网络搜索 能力。 ### Step Audio 2 Mini * 定位:轻盈、极速而又不失深度 * 能力标签:Tool Call、网络搜索 * 接入方式:仅支持 API 接入 * 与 `step-audio-2` 模型相似,原生的 Tool Call 和网络搜索能力,效果得分在指令遵循、数理和推理任务上略低于 `step-audio-2`。模型推理速度更快,需要的资源更少。 ### StepAudio 2 ASR Pro 32B 参数的 ASR Pro 模型。 ### Step Audio R1.5 * 定位:深度声音理解与推理(Step Audio R1.1 升级版) * 能力标签:边说边想、深度推理、自然交互 * 体验入口:[体验中心](https://www.stepfun.com/studio/audio?tab=conversation) * 在 Step Audio R1.1 的基础上升级,进一步强化声音细节分析与逻辑推理能力,能听懂语气背后的深意,大幅提高对声音和情绪的理解。 * 引入基于人类反馈的强化学习(RLHF),在保持推理能力的同时,提升长程语音对话的自然度与情感连贯性。 * 推理和说话并发进行,在保证高质量回复的同时实现更快响应。 > [!NOTE] > > 原 Step Audio R1.1 已升级为 Step Audio R1.5,并结束限时免费,按文本 token 计费。计费标准请见[API 定价](/docs/zh/guides/pricing/details)。 ### Step-1o Audio * 定位:稳定型,久经考验 * 能力标签:Tool Call * 接入方式:仅支持 API 接入 * 第一代 端到端语音模型。技术成熟稳定,在汽车场景下大规模部署,久经考验,支持多种预置音色风格,支持工具调用。适用于构建基础的语音交互、内容生成等常规业务场景。 **应用案例** * **情感陪伴场景**:在用户分享人生重要时刻时,如相亲成功经历,模型能够表达恰当的祝贺,提出深入问题,并展现真实的情感共鸣。 **试听:恭喜相亲成功** 由 step-1o-audio 生成