惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Last Week in AI
Last Week in AI
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
V
Visual Studio Blog
宝玉的分享
宝玉的分享
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园 - 聂微东
S
SegmentFault 最新的问题
博客园 - 司徒正美
罗磊的独立博客
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
小众软件
小众软件
Jina AI
Jina AI

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理,
我把AI接进了自己做的产品——踩了四个坑
YM · 2026-03-28 · via 人人都是产品经理

从技术小白到产品思考者,一次API对接的曲折历程揭示了产品开发的深层逻辑。本文通过四个真实踩坑案例,揭秘开发者面对API Key配置、前后端通信、CORS跨域和数据处理时遇到的技术障碍如何转化为产品设计洞察,展现从概念验证到MVP落地的关键跃迁。

我以为这很简单

大概半小时的事。

然后我花了一整天。

踩了四个坑,每一个坑在当时都觉得是末日,回头看每一个都是必修课。

第一个坑:API Key放哪里

调用AI的API,第一步是要有一个Key——相当于你的身份证,证明你有权限调用这个服务。

我拿到Key之后,第一个问题出现了:这个东西放哪里?

我问Copilot,它告诉我要放在.env文件里,不能直接写在代码里,因为代码可能会被别人看到,Key泄露了就麻烦了。

我听懂了这个逻辑。就像学生的考试答案不能写在黑板上一样,有些东西要放在只有你自己能看到的地方。

但我不知道.env文件是什么,也不知道怎么创建,也不知道创建了之后代码怎么读取它。

Copilot一步步告诉我:在项目根目录创建一个叫.env的文件,在里面写API_KEY=你的key,然后在代码里用process.env.API_KEY来读取它。

我照做了。

然后发现.env文件在VS Code里根本不显示——因为它是隐藏文件。

我以为自己创建失败了,又创建了一次,又找不到,又创建了一次。

最后Copilot告诉我:它存在,只是默认隐藏,你需要在VS Code设置里开启显示隐藏文件。

我打开设置,找到选项,勾上,三个.env文件同时出现了。

这件事让我意识到的第一个产品问题:

一个真实的用户,在部署这个系统的时候,会遇到同样的困惑。

API Key的配置方式,对我这样的非技术用户来说,是一个真实的使用门槛。如果这个系统将来要给其他老师用,这个步骤要么彻底自动化,要么要有一个傻瓜式的配置界面——让用户直接在页面上粘贴Key,而不是去创建隐藏文件。

这是我第一次用产品经理的眼睛看自己踩的坑。

第二个坑:请求发出去了,但没有返回

Key配好了,我在前端写了一个按钮,点击之后向后端发送请求,后端拿到学生输入,调用AI,返回诊断结果。

逻辑很清晰。

我点击了按钮。

页面没有任何反应。

不是报错,是什么都没有。那个诊断结果区域空白着,像一块没有擦干净的黑板。

我打开了浏览器的开发者工具(Copilot告诉我按F12),看到了网络请求的记录。请求确实发出去了,状态是pending——挂起,一直在等待,没有返回。

我把这个状态描述给Copilot,它问我:你的后端服务启动了吗?

我愣了一下。

我以为前端跑起来了,后端就自动跑起来了。

它没有。

前端和后端是两个独立的服务,需要分别启动。我一直只启动了前端,后端从来没有运行过。所以前端发出的请求,到了一个没有人接收的地址,就这样挂在那里等待,永远等不到回应。

我打开了另一个终端窗口,启动了后端服务。

再次点击按钮。

这次有反应了——但是报错了。

这件事让我意识到的第二个产品问题:

前后端分离的架构,对开发者来说是常识,对用户来说是负担。

如果这个系统要部署给真实的学校使用,”需要同时启动两个服务”这件事,是一个必须解决的工程问题,不能依赖用户自己去理解。要么合并成一个服务,要么做一个一键启动的脚本。

这不是技术问题,是产品决策。

第三个坑:跨域问题,CORS报错

后端启动了,请求发出去了,但报错了。

错误信息是:Access to fetch at ‘http://localhost:8000’ from origin ‘http://localhost:3000’ has been blocked by CORS policy。

我把这段话粘给Copilot,问它这是什么意思。

它解释说:浏览器有一个安全机制,默认不允许一个地址的页面去请求另一个地址的数据。我的前端跑在localhost:3000,后端跑在localhost:8000,浏览器认为这是两个不同的”源”,所以拦截了请求。

我理解这个逻辑:就像学校规定学生不能随便去其他班级拿东西,需要有授权。

解决方法是在后端加一个配置,告诉浏览器”我允许来自localhost:3000的请求”。

Copilot给了我具体的代码,我加进去,重启后端,再次点击按钮。

这次没有CORS报错了。

但返回的数据,没有正确显示在页面上。

这件事让我意识到的第三个产品问题:

CORS是一个纯粹的工程配置问题,但它暴露了一个更深层的产品问题:开发环境和生产环境的差异。

在本地开发时,前后端跑在不同端口,CORS是必须处理的。但部署到真实服务器上,如果前后端在同一个域名下,这个问题就消失了。

我在本地花了时间解决的问题,在真实部署时可能根本不存在。反过来,真实部署时会出现我在本地从来没遇到过的问题。

这让我开始理解,为什么产品从”能跑”到”能用”之间,有那么大的距离。

第四个坑:返回的格式和前端对不上

后端返回数据了。

但页面上显示的是一堆乱码——不是乱码,是原始的JSON字符串,直接被塞进了一个文本框里展示,没有任何格式。

{“mastery_assessment”:{“level”:”misconception”,”evidence”:”汽车开得越快,惯性就越大”},”cognitive_block”:{“type”:”quantitative_confusion”,”description”:”混淆惯性与动能”},”guided_questions”:[“一辆静止的大货车和一辆高速行驶的自行车,哪个惯性更大?”]}

这就是页面上显示的东西。

我设计的界面应该是:掌握等级用一个彩色标签显示,阻滞点描述在一个独立的区域,引导问题用列表展示。

但前端代码不知道怎么解析这个JSON,它只是把整个字符串扔进了一个div里。

这是前端代码的问题,不是后端的问题。AI返回的格式是对的,但前端不知道怎么读它。

Copilot帮我修改了前端的数据处理逻辑,把JSON解析出来,把每个字段映射到对应的界面元素。

改完之后,我重新点击了”开始诊断”。

它真的动了

输入框里是那句话:

“老师,汽车开得越快,惯性就越大,不然为啥高速行驶时刹车要滑那么远才停得下来?”

点击按钮。

页面右侧的结果区域开始加载,有一个转圈的动画——这次不是假的,是真的在等待AI返回。

大概三秒钟之后,结果出现了。

掌握等级标签显示”错误概念”,用红色背景。阻滞点描述:”将制动距离长归因于惯性变大,混淆了惯性与动能。”引导问题用列表排列,第一条是:”一辆静止的大货车和一辆高速行驶的自行车,哪个惯性更大?”

这不是模拟数据。

这是AI真正读取了学生的输入,调用了我写的诊断逻辑,返回的真实分析结果。

我在这个界面前坐了很久。

不是因为激动,是因为突然意识到一件事——

这个东西,现在是真的了。

从PM角度看,这一步意味着什么

跑通API对接,在技术上意味着前后端联通了,系统闭环了。

但从产品经理的角度看,这一步意味着的是完全不同的事情。

它意味着,这个产品从”概念”变成了”假设验证”。

在这之前,我有一个想法:AI可以分析学生的物理错误概念。我用Prompt验证了这个想法在逻辑上是可行的。但那是在对话框里,是我一个人知道的事。

现在,这个想法有了一个可以让别人体验的形态。

我可以把这个页面的地址发给另一个物理老师,让他输入自己课堂上听到的学生错误,看看系统能不能给出有价值的诊断。

这是一个质的变化。

从”我觉得这个想法可行”,到”我可以让别人来验证这个想法是否真的有用”。

这就是MVP和POC的区别。POC验证技术可行性,MVP验证用户价值。

我现在手里拿着的,是一个非常粗糙的MVP。

这四个坑,教会了我一件事:

每一个技术问题背后,都藏着一个产品问题。

API Key不知道放哪里 → 配置流程对非技术用户不友好,需要产品化。

请求没有返回 → 前后端分离的架构,部署复杂度是用户成本。

CORS报错 → 开发环境和生产环境的差异,是产品上线前必须提前考虑的。

返回格式对不上 → 前后端的数据契约,需要在开发开始之前就定义清楚,而不是等到联调的时候再发现。

这些东西,在任何一本产品经理的教材里都有讲。但我是踩进去、爬出来之后,才真正理解它们是什么意思的。

接下来,系统现在能跑了,但还很脆。

我测试了几条输入,发现有两个问题:

第一,网络慢的时候,等待时间超过五秒,页面没有任何提示,用户不知道系统是在处理还是卡死了。

第二,如果输入的内容不是物理相关的,系统会强行给出一个诊断,置信度虚高的问题还没有解决。

这两个问题,一个是体验问题,一个是准确性问题。

下一步要解决的,是把这个粗糙的MVP,变成一个真正可以给真实老师试用的东西。

这意味着我需要第一个真实用户。

不是我自己,是另一个物理老师。

本文由 @YM 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议