非技术创始人实战:基于AI网关的LLM智能路由与成本优化 1. 项目概述一个非技术背景创始人的AI网关构建之旅大家好我是来自阿根廷的独立创业者。在开始之前我想先坦诚地告诉大家我不是工程师甚至可以说我的技术背景几乎为零。但就在最近我亲手构建了一个名为 NeuralRouting.io 的 AI 网关后端。是的你没听错我主要依靠与 Claude 的对话一步步将这个想法变成了可运行的代码。这听起来或许有些疯狂但正是这种“门外汉”的视角让我看到了一个在 AI 应用开发中被许多技术团队忽视的巨大成本黑洞模型选择的盲目性。大多数团队在调用大语言模型时几乎条件反射般地选择 GPT-4 这类顶级模型无论请求是简单的天气查询还是复杂的代码生成。这种“一刀切”的策略在原型阶段或许无伤大雅但当应用规模扩大每天处理数百万甚至上亿个 token 时成本差异就会变得触目惊心。想象一下一个每百万 token 成本 30 美元的模型与一个成本仅 0.5 美元的模型它们之间的价差是 60 倍。对于任何希望将 AI 功能产品化并实现盈利的团队来说这都不是一个可以忽略的数字。NeuralRouting 就是为了解决这个问题而生的。它的核心定位是一个智能路由层部署在你的应用程序和众多 LLM 提供商如 OpenAI, Anthropic, Groq 等之间。它的工作不是简单地转发请求而是像一个精明的采购经理为每一笔“采购”即每个用户请求选择性价比最高的“供应商”即 LLM 模型。它通过分析请求的复杂度动态地将请求路由到能够满足质量要求的最经济模型上从而在保证用户体验的同时实现成本的大幅优化。这个项目目前还处于非常早期的阶段。我目前只接入了 OpenAI 和 Groq 的模型还没有真正的用户。我也犯了一个经典的产品错误在与人交流之前自己闭门造了太多功能。现在我正在积极修正这一点寻找真正使用 LLM 的开发者来试用并给我最直接的反馈。无论你是 AI 应用的资深开发者还是刚刚入门的新手如果你正在为 LLM 的 API 成本感到头疼或者对智能路由感兴趣我希望我的这段构建经历、踩过的坑以及初步的解决方案能给你带来一些不一样的启发。2. 核心思路与架构设计为什么是“路由”而非“替换”在深入细节之前我想先花些时间聊聊为什么我选择了“路由”这个方向而不是去微调一个更小的开源模型来替代 GPT-4。这是一个根本性的设计决策理解它有助于你把握整个项目的脉络。2.1 成本优化的两种路径与路由的优势当我们面对高昂的 GPT-4 API 成本时通常有两种主流的优化思路模型替代或优化例如使用微调后的 Llama 3、Qwen 或 DeepSeek 等开源模型试图在特定任务上达到接近 GPT-4 的效果。或者使用量化、蒸馏等技术压缩模型。智能路由与调度不试图替换 GPT-4而是建立一个调度系统根据任务类型将请求分发给不同的模型包括 GPT-4 自身的不同版本如 GPT-4 Turbo以及其他更便宜的专长模型。我选择第二条路基于以下几个核心考量质量确定性的保障对于关键任务或高复杂度请求GPT-4 的质量和可靠性目前仍然是最高的。路由策略可以确保这类请求永远由最强大的模型处理避免了因模型能力不足导致的用户体验下降或业务风险。这是一种“质量兜底”策略。利用模型生态的多样性现在的 LLM 市场不再是 OpenAI 一家独大。Anthropic 的 Claude 在长文本和逻辑推理上表现出色Google 的 Gemini 在某些多模态任务上有优势而像 Groq 这样的提供商凭借其极快的推理芯片在需要低延迟的简单任务上性价比极高。路由网关可以灵活地整合这个多元化的生态博采众长。实现渐进式优化路由策略可以非常精细。我们可以从最简单的规则如所有“翻译”请求走 GPT-3.5-Turbo开始逐步引入更复杂的复杂度评分和实验框架。这种渐进式迭代对非技术背景的我来说更容易管理和验证。规避模型训练的复杂性微调和维护自有模型需要深厚的技术栈机器学习、GPU 集群管理、评估框架这对于 solo founder 来说是极高的门槛。而构建一个 HTTP 路由网关更多是传统的后端开发问题学习曲线相对平缓也有更多现成的工具和云服务可以借助。2.2 NeuralRouting 的核心架构组件基于以上思路我设计的 NeuralRouting 网关包含了以下几个核心组件它们共同协作来实现智能路由和成本控制请求分析器与复杂度评分引擎这是网关的“大脑”。每当一个请求进入它需要快速判断这个请求的“难度”。我的初步实现基于一些启发式规则输入长度过长的输入通常意味着更复杂的上下文。关键词与意图识别通过简单的关键词匹配或轻量级文本分类模型识别请求是否属于“创意写作”、“复杂推理”、“代码生成”、“简单问答”等类别。历史表现数据如果同一个用户或相似请求之前被路由到某个模型并失败了或质量评分低则提高其复杂度评分。 这个评分会映射到一个预设的复杂度等级如 L1 到 L5。L1 代表最简单的任务例如“把‘Hello’翻译成中文”L5 代表最复杂的任务例如“请根据这份财报写一份详细的投资分析报告”。模型路由表这是一个配置中心定义了每个复杂度等级所对应的“候选模型列表”及其优先级。例如L1: [gpt-3.5-turbo,groq-llama3-8b]L2: [gpt-3.5-turbo,claude-3-haiku]L5: [gpt-4-turbo,claude-3-opus] 路由器的策略是从最高优先级的模型开始尝试。如果该模型不可用如超时、频次限制或根据“影子引擎”的反馈其质量不达标则自动降级到列表中的下一个模型。双层级语义缓存这是成本削减的“利器”。很多用户请求在语义上是相似甚至重复的。例如不同用户可能问“今天北京的天气怎么样”和“北京现在天气如何”。直接调用 API 两次是浪费。第一层精确缓存基于请求的原始文本和参数生成哈希键。命中则立即返回速度最快。第二层语义缓存这是更智能的一层。它使用一个轻量级的文本嵌入模型我选用了all-MiniLM-L6-v2因为它小巧且速度快将用户请求转换为一个向量一组数字。当新请求到来时计算其向量与缓存中所有请求向量的余弦相似度。如果相似度超过一个阈值例如 0.95则认为两个请求语义相同直接返回缓存的结果。这能捕捉到那些措辞不同但意图相同的请求大幅提升缓存命中率。影子引擎这是系统持续优化的“学习模块”。它的运作方式很巧妙对于每一笔真实用户请求网关在将其路由到选定的“主模型”进行响应并返回给用户的同时会在后台将同一个请求悄悄地、异步地发送给一个或多个更便宜的“影子模型”。例如一个 L2 复杂度的请求被路由给了gpt-3.5-turbo。同时影子引擎会把这个请求发给groq-llama3-8b和claude-3-haiku。然后系统会收集所有模型包括主模型的响应并使用一套自动化的评估方法比如用 GPT-4 本身作为裁判对比回答质量或者计算关键信息点的重合度来给每个响应打分。这些质量对比数据会被持久化记录。如果数据表明在连续 100 个 L2 请求中claude-3-haiku的质量得分有 95% 的时间不低于gpt-3.5-turbo的 98%但成本只有后者的一半那么路由表就可以自动更新将claude-3-haiku的优先级提高。这样系统就在无人干预的情况下完成了成本优化。辅助功能层包括 PII个人身份信息过滤在请求发送给第三方 API 前自动擦除或替换邮箱、电话等信息速率限制防止单个用户或 API 密钥滥用以及代理循环检测防止某些 AI 代理陷入无限自我调用的死循环。注意这个架构听起来可能有点复杂但我的构建过程是“自下而上”的。我先用最简单的 if-else 语句实现了一个能工作的路由然后一步步添加缓存、影子测试等功能。对于非技术背景的构建者来说切忌一开始就追求完美的架构。先做出一个能解决核心问题哪怕很粗糙的最小可行产品再迭代是唯一可行的路径。3. 关键模块的实操实现与避坑指南作为非技术背景的构建者我最大的挑战就是将上述架构思想转化为实际运行的代码。我主要依靠与 Claude 的对话来编写 PythonFastAPI后端代码。下面我分享几个核心模块的实现要点和我踩过的坑。3.1 使用 FastAPI 搭建网关主干我选择 FastAPI 是因为它简单、快速并且能自动生成交互式 API 文档这对于我调试和后续让用户理解接口非常有帮助。from fastapi import FastAPI, HTTPException, Request from pydantic import BaseModel import httpx import asyncio from typing import Optional import hashlib import json app FastAPI(titleNeuralRouting AI Gateway) # 内存中的简单路由配置和缓存生产环境需用Redis等 ROUTING_TABLE { L1: [gpt-3.5-turbo, groq-llama3-8b], L2: [gpt-3.5-turbo, claude-3-haiku], L3: [gpt-4, claude-3-sonnet], } CACHE {} class LLMRequest(BaseModel): prompt: str model: Optional[str] None # 用户可指定也可由网关决定 max_tokens: int 500 # ... 其他参数 app.post(/v1/chat/completions) async def proxy_request(request: LLMRequest, original_request: Request): 核心代理端点模仿OpenAI API格式 # 1. 计算请求指纹用于精确缓存 request_fingerprint hashlib.md5( f{request.prompt}{request.model}{request.max_tokens}.encode() ).hexdigest() if request_fingerprint in CACHE: print(命中精确缓存) return CACHE[request_fingerprint] # 2. 语义缓存查询此处简化实际需向量化比较 # 假设我们有一个语义缓存查询函数 # cached_response query_semantic_cache(request.prompt) # if cached_response: return cached_response # 3. 复杂度分析 complexity analyze_complexity(request.prompt) candidate_models ROUTING_TABLE.get(complexity, [gpt-3.5-turbo]) # 4. 如果用户未指定模型则按路由表选择 target_model request.model or candidate_models[0] # 5. 准备转发请求 provider, model_name parse_model_identifier(target_model) # 解析出是openai还是groq api_key get_api_key(provider, original_request) payload request.dict(exclude_noneTrue) payload[model] model_name # 6. 发送请求带重试和降级逻辑 response await send_with_fallback( providerprovider, payloadpayload, api_keyapi_key, fallback_modelscandidate_models[1:] if not request.model else [] ) # 7. 写入缓存 CACHE[request_fingerprint] response # 同时触发影子引擎异步不阻塞主响应 asyncio.create_task(shadow_engine_execute(request.prompt, complexity, candidate_models)) return response实操心得与踩坑点异步编程的陷阱FastAPI 默认支持异步。在调用外部 API 时一定要使用async/await和httpx.AsyncClient否则一个慢速的 API 响应会阻塞整个网关导致性能急剧下降。这是我遇到的第一个性能瓶颈。错误处理与降级网络请求可能失败、API 可能超时、密钥可能达到限额。你的send_with_fallback函数必须包含健壮的错误处理。我的逻辑是先尝试首选模型如果失败捕获特定异常如HTTPStatusError、TimeoutException则记录日志并自动尝试路由表中的下一个候选模型。务必设置总超时时间避免用户请求一直挂起。解析模型标识符我设计了一个简单的模型标识符格式如openai:gpt-4-turbo或groq:llama3-8b。这样在路由表中可以灵活配置而转发请求时又能知道该调用哪个供应商的哪个端点、使用哪个 API 密钥。3.2 实现语义缓存从概念到代码语义缓存是节省成本最有效的模块之一但实现起来需要一些技巧。# 这是一个简化的语义缓存服务类示例 from sentence_transformers import SentenceTransformer import numpy as np from sklearn.metrics.pairwise import cosine_similarity import pickle import time class SemanticCache: def __init__(self, model_nameall-MiniLM-L6-v2, similarity_threshold0.95, ttl3600): self.encoder SentenceTransformer(model_name) self.threshold similarity_threshold self.ttl ttl # 缓存存活时间秒 self.cache_entries [] # 实际应用应用用数据库 self.embeddings_cache [] def get_embedding(self, text): # 编码文本为向量 return self.encoder.encode(text, normalize_embeddingsTrue) def query(self, prompt): prompt_embedding self.get_embedding(prompt) if not self.embeddings_cache: return None # 批量计算余弦相似度 similarities cosine_similarity([prompt_embedding], self.embeddings_cache)[0] max_sim_idx np.argmax(similarities) max_sim similarities[max_sim_idx] if max_sim self.threshold: cached_item self.cache_entries[max_sim_idx] # 检查是否过期 if time.time() - cached_item[timestamp] self.ttl: print(f命中语义缓存相似度: {max_sim:.4f}) return cached_item[response] else: # 过期则移除 self.cache_entries.pop(max_sim_idx) self.embeddings_cache np.delete(self.embeddings_cache, max_sim_idx, axis0) return None def store(self, prompt, response): embedding self.get_embedding(prompt) self.embeddings_cache.append(embedding) self.cache_entries.append({ prompt: prompt, response: response, timestamp: time.time(), embedding: embedding # 可选存储以备后用 }) # 生产环境需要定期清理过期条目和控制内存增长注意事项嵌入模型的选择all-MiniLM-L6-v2是一个很好的起点它只有 80MB 左右速度快质量对于相似性匹配足够。不要在网关上使用巨大的嵌入模型如text-embedding-3-large那会引入不可接受的延迟。相似度阈值这个值需要调优。设得太高如 0.99缓存命中率会很低设得太低如 0.8可能会把语义不同的请求误判为相同返回不相关甚至错误的答案这是灾难性的。建议从 0.92 开始通过影子引擎收集一批数据人工检查命中/未命中的案例来调整。向量搜索的性能当缓存条目达到数万甚至更多时在内存中进行线性搜索cosine_similarity会变慢。生产环境需要引入专业的向量数据库如Qdrant、Weaviate或Pinecone它们支持高效的近似最近邻搜索。缓存失效LLM 的答案可能随时间变化例如问“现在几点”。我的策略是为缓存条目设置 TTL生存时间并且对于某些高度时间敏感或带有随机性的请求如“给我讲个笑话”可以绕过缓存。3.3 影子引擎让系统自我进化影子引擎的实现关键在于“异步”和“非阻塞”。它绝不能影响真实用户的请求响应时间。import asyncio from typing import List, Dict import logging from .models import QualityScore # 假设有一个数据模型 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) async def shadow_engine_execute(prompt: str, complexity: str, candidate_models: List[str]): 异步执行影子请求 if len(candidate_models) 2: return # 没有其他模型可对比 primary_model candidate_models[0] shadow_models candidate_models[1:] # 1. 并行发起所有影子请求 shadow_tasks [] for model in shadow_models: task call_llm_provider_async( promptprompt, modelmodel, is_shadowTrue # 标记为影子请求可能使用不同的速率限制 ) shadow_tasks.append(task) # 等待所有影子请求完成设置一个较长的超时因为不阻塞主流程 try: shadow_responses await asyncio.gather(*shadow_tasks, return_exceptionsTrue) except Exception as e: logger.error(f影子引擎并行请求失败: {e}) return # 2. 评估质量这里是一个简化示例 # 理想情况将主模型响应和所有影子响应一起发送给一个“裁判模型”如GPT-4进行盲评打分。 # 初期简化版可以计算影子响应与主响应在关键信息上的重合度或使用一些启发式规则。 evaluation_results [] for model, response in zip(shadow_models, shadow_responses): if isinstance(response, Exception): logger.warning(f影子模型 {model} 请求异常: {response}) continue # 假设我们有一个评估函数 score evaluate_response_quality(ground_truth_promptprompt, candidate_responseresponse) evaluation_results.append({ model: model, response: response, score: score, complexity: complexity }) # 3. 持久化评估结果存入数据库 await save_shadow_results_to_db(prompt, primary_model, evaluation_results) # 4. 可选定期分析任务另一个后台进程会定期分析这些数据 # 例如每积累100条同复杂度等级的数据就计算一次各模型的平均得分和成本。 # 如果某个影子模型在质量如得分95%主模型和成本成本70%主模型上综合胜出 # 则可以自动或经人工审核后更新路由配置。核心要点异步与隔离使用asyncio.create_task或后台任务队列如 Celery、RQ来执行影子请求。确保影子请求使用的 API 密钥和速率限制与主请求隔离避免影响生产流量。评估是难点自动评估 LLM 回答质量本身就是一个难题。初期可以采用一些简单方法使用 GPT-4 作为裁判将问题和多个回答匿名化后让 GPT-4 打分。这本身有成本但可以只对一小部分流量进行。基于规则的检查对于事实性问题检查回答中是否包含关键实体对于代码生成检查语法是否正确。人工标注样本定期抽样人工标注质量用于校准自动评估系统。数据驱动决策不要根据一两个例子就匆忙修改路由表。必须积累足够的统计样本不同复杂度、不同类型的问题确保结论是稳健的。可以设置一个置信度阈值比如“在最近 500 个 L2 请求中模型 A 在 95% 的置信区间下质量不劣于模型 B”再进行切换。4. 非技术背景下的开发、部署与运维挑战作为一个“非工程师”整个开发运维流程充满了挑战。以下是我如何解决这些问题的经验。4.1 开发工作流与 AI 结对编程我的整个后端代码几乎都是通过与 Claude主要是 Claude 3 Opus对话完成的。我的工作流如下定义清晰的需求我会先用自然语言非常详细地描述我想要的功能。例如“我需要一个 FastAPI 端点它接收一个类似 OpenAI 的聊天请求然后根据请求内容的长度和关键词判断复杂度再从一张配置表里选择一个模型最后把请求转发给对应的供应商 API。”迭代式代码生成Claude 会给我一段代码。我首先尝试在本地运行。几乎一定会遇到导入错误、语法错误或逻辑错误。错误驱动的学习我将完整的错误信息粘贴回对话。Claude 会解释错误原因并给出修正后的代码。这个过程重复无数次。通过这种方式我被动地学习了 Python 语法、FastAPI 结构、异步编程、HTTP 客户端使用等知识。模块化与重构当单个文件变得庞大时我会要求 Claude 帮助我将代码重构为多个模块例如routing.py,cache.py,shadow_engine.py并解释模块之间如何导入和协作。编写测试这是 AI 辅助编程的薄弱环节。Claude 可以生成一些基础的单元测试示例但复杂的逻辑和集成测试仍需我根据对业务的理解来设计和补充。我使用pytest从最简单的开始确保核心路由逻辑正确。重要心得不要指望 AI 一次性能给你完美的、生产就绪的代码。它的作用是作为一个理解力超强、不知疲倦的初级程序员将你的想法快速具象化。你作为“产品经理”和“系统架构师”的角色至关重要必须对系统流程、边界条件和异常情况有清晰的思考并持续用这些问题去“拷问”AI引导它生成更健壮的代码。4.2 部署与托管选择“省心”的方案我没有能力管理服务器。我的选择是后端服务Vercel或Railway。它们对 Python/Node.js 应用的支持非常好关联 GitHub 仓库后可以自动部署。特别是 Vercel它的 Serverless Functions 非常适合这种 API 网关类应用自动扩缩容我只需要关心代码。虽然冷启动可能带来一点延迟但对于早期项目完全可以接受。数据库Supabase或PlanetScale。我需要存储路由配置、缓存数据如果不用 Redis、影子引擎的实验结果。Supabase 提供了开箱即用的 Postgres并带有易用的管理界面和客户端库让我不用写原始的 SQL 语句也能操作数据。向量数据库用于语义缓存Qdrant Cloud。当我需要将语义缓存扩展到更大规模时Qdrant 提供了免费的云集群并且有简单的 Python SDK集成起来相对容易。监控与日志Sentry错误监控和Logtail日志聚合。这些服务都有慷慨的免费套餐能帮我捕捉运行时错误和查看 API 调用日志是运维的“眼睛”。部署踩坑记 最大的坑是环境变量和依赖管理。我的代码需要访问多个 API 密钥OpenAI, Groq。在本地我用.env文件。但在 Vercel 上必须通过其网站界面设置环境变量。有一次部署后所有 API 调用都失败排查了半天才发现是环境变量名称在代码和平台上设置的不一致。教训将环境变量名集中定义在一个config.py文件中并在部署文档中明确列出所有需要的变量。4.3 配置管理与安全性路由配置最初我把路由表硬编码在 Python 字典里每次修改都要重新部署。这很不灵活。后来我将其移到了 Supabase 数据库的一张配置表中。这样我可以通过一个简单的管理页面甚至直接改数据库来动态调整路由策略无需重启服务。API 密钥管理绝对不要将密钥写在代码或提交到 GitHub。我使用 Vercel 的环境变量管理。在代码中通过os.getenv(OPENAI_API_KEY)来读取。对于多租户场景未来方向需要考虑更安全的密钥存储和分发机制。限流与防滥用我使用slowapi或FastAPI的中间件来实现基于 IP 或 API 令牌的速率限制。这对于防止资源被刷和保证服务稳定至关重要。初期可以设置得宽松一些但必须有这个机制。5. 当前困境、反思与后续规划尽管我已经构建了一个可以运行的系统但正如开头所说我陷入了典型的“创始人困境”在缺乏外部反馈的情况下构建了太多自以为有用的功能。5.1 我卡在什么地方功能优先级模糊我实现了双级缓存、影子引擎、PII 过滤、Agent 循环检测……但对于一个早期用户来说他最核心的需求真的需要这么多吗也许他只需要一个能根据规则如“所有总结类请求用 Haiku”自动切换模型的简单代理。过度工程化增加了系统的复杂度和维护负担也延长了推向市场的时间。验证循环缺失我没有在构建早期就找到一两个愿意试用的开发者获取关于“路由准确性”和“成本节省效果”的真实反馈。影子引擎产生的数据因为没有真实流量只是空中楼阁。我不知道我的复杂度评分算法是否有效也不知道我的缓存策略在实际应用中命中率如何。市场定位不清晰NeuralRouting 是作为一个面向开发者的 SaaS 服务还是一个可以自托管的企业解决方案定价策略该如何设计是按请求量还是按节省的成本分成这些问题我都没有答案。技术债与信心由于代码完全靠 AI 辅助编写虽然功能实现了但我对代码底层的理解并不深刻。当出现一个复杂的 bug 时调试过程非常痛苦我需要反复向 Claude 描述现象尝试不同的解决方案效率很低。这让我对系统的稳定性和扩展性缺乏信心。5.2 我的调整与下一步行动认识到这些问题后我正在进行如下调整做减法推出 MVP我计划下线影子引擎、PII 过滤等高级功能只保留最核心的可配置规则路由和基础的精确缓存。推出一个极简的、稳定的 V1.0 版本。这个版本允许用户通过一个 YAML 文件或 Web 界面自定义几条简单的路由规则例如prompt 包含“翻译” - 使用 gpt-3.5-turbo。寻找早期试用者我正在积极参与 AI 开发者社区如 Discord 服务器、Reddit 的 r/MachineLearning 等免费为前 10 位注册用户提供足够额度的服务唯一的要求是他们愿意与我定期沟通分享他们的使用场景、节省的成本以及遇到的问题。建立验证指标与早期用户一起定义几个关键指标来验证价值成本节省百分比原直接使用贵模型成本 - 经网关路由后成本/ 原成本。路由准确率抽样检查被路由到便宜模型的请求其回答质量是否仍被用户接受。缓存命中率看看语义缓存在实际中能带来多少额外的节省。从“建造者”转向“沟通者”我强迫自己每天花至少一半的时间不是在写代码而是在与潜在用户交流了解他们的工作流、他们的痛点以及他们对于“智能路由”这个概念的直观理解。这能帮助我重新聚焦在真正重要的问题上。5.3 给同样非技术背景的构建者的建议如果你也想用 AI 辅助工具构建一个技术产品以下是我血泪教训换来的建议从“可演示”开始而非“可扩展”你的第一个目标不是建立一个完美的架构而是做出一个哪怕再简陋、再“脏”的、但能向一个人演示核心价值点的东西。一个能运行的脚本比一个设计精美但未完成的系统强一百倍。与 AI 对话时要像对待一个极其聪明但缺乏常识的新人你必须给出极度精确的指令。不要只说“加个缓存”要说“我想在 FastAPI 应用里加一个内存缓存当收到完全相同的请求时直接返回之前的响应。请用 Python 字典实现并考虑设置一个最大条目限制比如 1000 条。”尽早且频繁地获取反馈在你写完第一行代码之前就应该能找到一个人向他描述你的想法。在你有一个勉强能用的原型时就让他试用。他们的“看不懂”和“用不起来”是你最宝贵的修正器。拥抱“胶水代码”你不必从头发明一切。大量使用成熟的云服务、开源库和 API。你的核心价值是独特的业务逻辑比如我的复杂度评分算法其他如数据库连接、用户认证、部署尽量用第三方服务搞定。你的目标是拼接出一个能创造价值的产品而不是成为一名全栈大师。构建 NeuralRouting 的过程是一次疯狂的旅程。它让我深刻体会到在当今的 AI 辅助下技术背景不再是构建数字产品的绝对壁垒。真正的壁垒在于你是否能精准地定义一个有价值的问题是否能以最小的代价验证解决方案以及是否有毅力在充满不确定性和自我怀疑的路上持续前行。我的旅程还在继续卡住的地方正是下一个起点。如果你也在构建什么有趣的东西无论是否与技术相关欢迎交流我们都在摸着石头过河。