最近帮一个团队补软著材料,最让我头疼的不是代码,而是接口文档。项目做了快两年,接口改了好几轮,Swagger里有的接口已经废弃,代码里还留着旧字段,产品经理给的说明又停留在早期版本。当时想偷个懒,直接用AI生成软件接口文档,结果第一轮整理完就发现:文字是挺像回事,放进软著申报包里根本经不起核对。
先说结论,AI当然能用,而且很适合做初稿。但如果把它理解成“输入项目名,导出一份能交的文档”,大概率会在格式、内容对应关系和技术细节上翻车。软著审查不是看文档写得多漂亮,而是看材料能不能体现这个软件是真实、完整、由申请人开发的。接口文档作为说明书或技术文档的一部分,最怕的就是空泛、雷同,以及和源代码、操作截图对不上。
我实际是怎么让AI生成第一版的
那次项目是一个企业内部设备巡检系统,包含Web端和移动端,接口主要围绕工单、巡检点、设备台账、消息通知和统计报表。最开始我把Swagger导出的OpenAPI文件、几张数据库表结构,还有项目README一起喂给AI,让它按模块生成接口说明。
提示词没有写得很复杂,大意是:请根据提供的OpenAPI描述,生成软件接口文档,每个接口包含接口名称、请求方式、URL、请求头、请求参数、参数类型、是否必填、字段说明、返回示例、错误码和调用场景;不要编造接口;无法确定的字段标注“待确认”;返回示例使用JSON。
这一版出来速度很快,目录也清楚,登录鉴权、工单管理、巡检任务、数据统计几个章节都有。可我一核对代码,问题马上就出来了。AI把几个后台定时任务调用的内部方法也整理成了接口;有些字段在OpenAPI里没有写说明,它就根据字段名自行脑补;分页参数一会儿写pageNum/pageSize,一会儿又变成page/size;错误码更是被它统一改成了常见模板,和项目里封装的Result类不一致。
这种文档如果直接放进去,外行看起来挺完整,真正和源代码一对照就露馅。所以后来我把AI的定位调整成“整理员”,而不是“创作员”。它负责把零散信息排成统一格式,我负责提供事实依据并逐项校对。
接口文档里真正不能省的内容
软著材料中的接口文档不一定要把所有接口都堆进去,但选入的部分要有代表性。我的做法是先画出系统边界:哪些接口给前端用,哪些给移动端用,哪些给第三方系统回调,哪些只是服务内部方法,不能混在一起。然后挑选核心业务链路,比如登录获取token、创建巡检工单、上传现场图片、提交巡检结果、查询统计列表。这样既能体现软件功能,也方便前后内容呼应。
每个接口我都坚持保留几个基本部分。接口名称要说人话,但不能只写“新增接口”“查询接口”;请求方式和路径要和控制器代码一致;请求头里要说明Authorization、Content-Type这些常见项;参数表至少包含字段名、类型、是否必填、说明;返回部分不能只给一句“成功返回数据”,最好放JSON示例;错误码也别乱写,项目里实际怎么封装就怎么写。
这里有个细节,很多人容易忽略:字段命名必须前后统一。比如同一个工单编号,接口里叫orderId,数据库里是order_id,文档里突然写成workOrderNo,截图上又显示工单编号,这就很麻烦。不是说这些不能同时存在,而是要说明它们之间的关系。AI生成时很擅长“自动润色”,会把开发者留下的土名字改得很规范,但这一润色,反而可能把关键对应关系改没了。
我后来会专门让AI输出一张字段对照表,把接口字段、数据库字段、页面名称放在一起。校对时只看这张表,就能发现不少问题。比如巡检结果状态,代码里用0、1、2表示未开始、进行中、已完成,AI一开始写成了TODO、PROCESSING、FINISHED。这种内容如果交上去,就属于典型的“看起来专业,实际不属于这个项目”。
AI最容易帮倒忙的几个地方
第一个坑是编造URL。看到Controller名称叫ReportController,AI可能顺手写一个/api/report/list,但代码里实际映射的是/api/v1/inspection/reports。路径前缀里有没有/v1,横杠和驼峰怎么用,必须以源代码或网关配置为准。别嫌麻烦,软著文档里的接口路径不要求像联调文档那样逐条测试,但至少不能凭空出现。
第二个坑是返回示例过度标准化。不少AI喜欢统一写出code、message、data、success、timestamp、traceId这一套。如果项目里确实有统一返回类,这样写没问题;如果实际只返回code、msg、result,就不要硬加字段。错误信息也一样,项目里定义的是BIZ_4001、TOKEN_EXPIRED,就别改成40001这种模板编号。
第三个坑是把废弃接口也写进去。系统迭代过程中,有些老接口还保留着,只是为了兼容旧版本App。AI拿到历史接口清单后,往往不分新旧,全部列上。我的处理方式是只在正文中保留当前主版本接口,旧接口如果确实要体现版本演进,可以在文档修订记录里简单说明,不展开写,否则审查材料会显得混乱。
第四个坑是文档和截图对不上。软著说明书常配系统界面图,如果前面接口写“设备巡检报告包含温度、振动值、运转状态”,后面截图里却只有检查项、备注和照片,审核人员未必逐项细看,但材料整体可信度会打折。我一般会先定好要展示的页面,再让接口文档围绕页面上出现的数据对象写,不追求把后台所有字段都塞进去。
我现在采用的整理流程
比较稳的做法,是先从代码仓库拉一个干净分支,确认当前申报版本对应的提交记录。然后导出Swagger或接口管理平台的数据,再根据Controller代码补齐缺失说明。把这些材料交给AI时,我会明确要求它不要猜,不确定就留空。生成Markdown后,我再人工核对URL、方法名、字段枚举、鉴权方式和示例。
参数说明部分,AI可以帮忙把零散注释整理成表格,但业务含义要自己填。比如photoType这个字段,AI只能根据名字猜成图片类型,实际上项目里1表示现场照片,2表示铭牌照片,3表示异常照片。这种值只有需求文档或代码枚举里有,必须手动补准。
示例数据也不建议让AI随机生成。我通常从测试环境拿一份脱敏后的真实响应,替换掉手机号、人员姓名、设备编号和单位名称,再让AI调整格式。这样示例既有业务味道,也不会出现“张三”“测试公司001”这种太随意的内容。文件上传接口则要写清楚multipart/form-data,参数是file还是files,图片大小和格式限制按前端校验规则来,不要随便写一个10MB。
文档完成后,我还会做一次交叉检查:源代码里的核心控制器是否能在目录里找到;说明书中的功能模块是否都有对应接口;接口字段是否能在实体类、DTO或VO中找到;截图上显示的列表字段是否和返回示例一致。这个步骤花时间,但比交件后补正轻松得多。
软著材料不是只拼页数
有些人觉得接口文档写得越厚越好,于是让AI把每个字段扩写成一大段,甚至加很多通用安全说明、REST规范介绍。实际没必要。软著申报材料更看重与软件本身的关联,空泛的技术概念堆多了,反而稀释主体内容。真正有用的是能看出这个系统怎么登录、怎么传数据、核心业务怎么流转,以及异常情况下返回什么。
如果项目本身接口不多,也不用硬凑。可以把每个核心接口写扎实,再配合功能说明书、界面截图和源代码材料。若系统涉及第三方对接,比如钉钉消息推送、物联网平台回调或支付通知,可以单独放一小节,把签名方式、回调地址、通知字段和验签处理写清楚。这类内容比重复的增删改查更能体现技术特征。
整理过程中我还会保留一个版本修订记录,写清楚文档对应的软件版本、日期、修改内容。不用写得像商业产品 changelog 那么复杂,简单记录V1.0初版、V1.1增加异常上报接口、V1.2调整统计字段就够。它的作用是让材料有真实项目痕迹,而不是一份临时生成的“万能模板”。
对不常准备软著材料的人,我比较建议先把清单和格式搭好,再用AI提速。像软著Pro这类工具站就适合顺手查一下材料口径和整理思路,尤其是源代码页数、说明书结构、命名一致性这些细节,提前弄清楚能少返工。不过工具只能提高效率,项目里的字段和接口逻辑,还是得自己核对。
说到底,AI生成软件接口文档最适合解决“从无到有、从乱到齐”的问题,却不能替你承担事实核验。把它当成一个手脚很快、格式很整齐、但完全不了解项目背景的助理,反而更好用。你给它真实材料,它能省下半晚排版时间;你只给一个项目名称,它还你一份漂亮但不可靠的文档,最后吃苦的还是自己。