当前位置: 首页 > news >正文

AI 产品研发的一些思考

从两年前开始做公司现有产品的 AI 化转型尝试,到现在从零到一完成一款 AI native 新产品的研发,踩了不少的坑。记录一下到目前为止的一些想法。

1. 产品层面

1.1 先去融入已有的工作流,别想着上来就颠覆

Eating your own dog food -- is not easy

让公司内部同事去用一个新工具已经很难了,更别提让客户掏钱去“学”一个新玩意儿。当你告诉客户 “在你原来的 workflow 中,某某环节可以大幅提效” 的时候,他可能才会有那么一丁点的兴趣。当客户习惯你的 AI 工具在某一个小环节带来便利的时候,这时候才有可能让他去试一试新鲜玩意儿。

当然,这一切我相信在整个科技行业市场被教育地差不多了以后,状况会改善很多,至于时间是多长,那就见仁见智了。

1.2 不要试图教用户做事,控制好用户预期

我做的产品本质上是一款 code copilot 类型的产品,核心技术是基于开源 LLM 模型做了 continue pre-train,使其能支持某建模仿真软件的 DSL 代码生成,然后围绕 text-to-code 这个思路做了一些工程化的东西(当然,现在大家都称之为 ai agent)。
会写代码、用过 Cursor/Claude Code 类产品的同学肯定都知道,目前 LLM 的能力写函数级/模块级代码是没问题的,但是要从零开始生成一个可运行的代码工程、其中包含脚手架(比如 Java Spring、Python Django 或者 ReactJS 等),别说讲究业务逻辑的正确性了,想一次性编译代码成功/不报错/无 warning 都做不到。

如何更高效使用 LLM 工具提升开发效率,后面再写文章探讨

但是对于客户来讲,你卖给他一个辅助建模的工具,却不能交付可用的建模结果,那就是一个半成品,他不会去尝试理解目前技术前沿的局限性在哪里,也不会去共情你在这个产品上倾注的心血。
因此,在跟客户接触的最开始,就应该控制客户的心理预期、明确产品的定位:建模代码辅助工具,绝对不是建模工程师的替代工具。
(当然,由此引申出来的客户接受度、项目成本、报价策略等变化,就是另一个话题了)

2. 技术层面

2.1 一定不要走在 LLM 基座模型的车轮之下

还记得 OpenAI 刚出 o1 模型的时候,模型内置的思维链非常强大,我当时基于 g1 (一个通过递归调用 LLM 模拟 o1 思维链的库),做了很多产品上的改造,从后端 API 的异步调用、prompt 改造,到前端思维链的步骤细节展示,最终在任务分解功能上有了不错的效果。
但是后来的开源模型迅速跟进了思维链能力,现在 reasoning/thinking 能力几乎已经成为了各大开源/闭源 LLM 的标配,当时做的很多工作都打了水漂。

2.2 技术选型要注意开源库的不成熟性

这里记录两个花了比较多时间才解决的问题:

  • LangChain API 的调试

  • vLLM 的离线部署
    由于客户要求产品必须私有化部署,我们自己微调的模型又想做一些知识产权保护,

2.3 如果有自己的领域数据,千万要用好

这里涉及到具体的技术选型,一条是走模型训练,另一条路是 Context Engineering

  • 模型训练
    在训练之前一定要知道一个风险:基于开源的模型做训练,无论是 SFT 还是 continue pre-train,基座模型的通用能力几乎是一定会下降的。

ref:
1 基于 LLM 的小众脚本语言(某仿真软件 DSL)生成方案
2 paper: Continual Learning for Large Language Models: A Survey

这里就需要权衡做这个训练是否能有正向收益

  • Context Engineering
    • 上下文数据源:以向量检索为代表的 RAG 是其中的一部分,另外还可以有关系型数据库(可以写 MCP 工具来自主查询)、文本(Claude Code 就是通过写正则来做匹配),甚至是知识图谱(这个暂时还没去尝试,后续去验证一下效果)
    • 上下文数据组织形式:这个因人而异、因场景而异,虽然现在 GitHub 上 prompt 的库很多,但是在特定场景下、不同的模型,具体要求都是会有差异的
      举个例子,如果使用 Claude 3.7 sonnet 的 API 来做一个实体提取 + 工具调用,不太需要太多细节,只要约定好返回的数据结构就行了。但是在离线环境下,用 Qwen3:30b 模型,则需要很细致地将数据包含的字段、各个字段的数据类型全都描述清楚。
      同时,离线情况下的 LLM 推理引擎,也对具体的实现代码会有影响。
      在使用 Ollama 推理引擎的时候,只需在初始化 client 的时候指定 json 输出,就能得到结构化的返回:
            params = {'model': model_name,'base_url': base_url,'temperature': temperature,}if format_json:params['format'] = 'json' # 指定这个if max_tokens:params['num_predict'] = max_tokensif repeat_penalty:params['repeat_penalty'] = repeat_penaltyself.client = ChatOllama(**params)

在调用业务逻辑侧,通过提示词简单指定想要的数据结构就行了:

make_reasoning_call([SystemMessage("""You are an expert AFSIM code assistant. 根据AFSIM平台规范,从场景描述中提取平台的基本属性信息。
根据AFSIM技术参考文档,平台属性(Attributes)是平台的固有特征和身份标识,定义了平台的基本身份和物理特征:
**基本身份属性:**
- type: 平台具体类型(使用准确的军事装备型号,如 F-16C, Su-34, SA-20, T-72, Aegis_Destroyer等)
- platform_category: 每个平台的平台类型(air/ship/ground)用于匹配预置模型- air: 航空平台(飞机、直升机、无人机等)- ship: 海上平台(军舰、潜艇等)- ground: 地面平台(坦克、导弹系统、雷达等)
- affiliation: 阵营归属,必须使用AFSIM标准值(red, blue, neutral, white)
- commander: 指挥关系,指定上级指挥平台或指挥单位名称**物理特征信号(Signatures):**
这些特征定义了平台在特定观察角度下被传感器探测到的脆弱性:
- radarSignatures: 雷达截面积(RCS)和雷达特征,直接影响雷达探测概率和距离
- opticalSignatures: 光学特征信号,包括可见光反射率、伪装涂装、视觉外观等
- infraredSignatures: 红外特征信号,包括热辐射强度、光谱特性、发动机热源等返回 JSON 格式:
```json
{"type": "Su-34","affiliation": "red","platform_category": "air","commander": "air_command_center_1","radarSignatures": "medium to low RCS due to modern design, ~10-15 m² frontal aspect","opticalSignatures": "standard military camouflage paint, medium visual signature during daylight","infraredSignatures": "twin AL-32FN engine heat signature, high IR emissions during afterburner use"
}```
"""),HumanMessage(f"""场景描述:
{origin_requirement}
请根据AFSIM平台属性规范,提取 {platform} 的基本属性信息。注意使用准确的军事装备型号作为type,阵营使用标准值(red/blue/neutral/white),并正确分类platform_type。
""")])

但如果推理引擎用的是 vLLM,则不仅要在 prompt 中描述清楚数据结构,还要用 pydantic 库来定义输出的数据类型:

class PlatformAttributesModel(BaseModel):type: str | None = Noneaffiliation: str | None = Noneplatform_category: str | None = Nonecommander: str | None = NoneradarSignatures: str | None = NoneopticalSignatures: str | None = NoneinfraredSignatures: str | None = Nonemake_reasoning_call([SystemMessage("..."), HumanMessage("...")], response_format=PlatformInformationModel)

先写到这里,这篇文章断断续续写了蛮久,一直躺在草稿箱中,先发出来吧,后面有了新想法再补充

http://www.hskmm.com/?act=detail&tid=26356

相关文章:

  • 3.模块化与MVVM设计模式
  • 2025舒适轮胎厂家、静音轮胎厂家企业品牌权威推荐榜:静音技术与驾乘体验口碑之选
  • 幻想是最廉价的止疼药
  • 20251005 耳朵龙字符串
  • 玩转树莓派屏幕之五:自定义LCD屏幕显示
  • AtCoder ARC207 总结
  • 2025.10.7模拟赛
  • 详细介绍:ZLG ZCANPro,ECU刷新,bug分享
  • 好好学习, 天天向上
  • 2.洋葱开发法
  • OpenStack搭建
  • OpenStack实验过程
  • 2025.10.7+7
  • oppoR9m刷Linux系统:VCOM模式备份系统与基带IMEI/NVRAM/QCN
  • 两个开源中国象棋引擎的编译
  • 推荐一款Swift开发框架- Aquarius
  • 1.如何导入Aquarius开发框架
  • 课程作业(10月8日)
  • 帮宣——可控核聚变
  • 浅谈导数
  • 洛谷P5304 [GXOI/GZOI2019] 旅行者(二进制分类技巧)
  • 英语_阅读_AI Robot_待读
  • 【C++】AVL树的概念及完成(万字图文超详解)
  • 打造自主学习的AI Agent:强化学习+LangGraph代码示例
  • 关于二分
  • NKOJ全TJ计划——NP11721
  • 印度全球能力中心2030年展望与技术基建规划
  • NOI Linux 食用教程
  • 详细介绍:基于 Android 和 JBox2D 的简单小游戏
  • 基于深度学习的语音识别高效的系统设计与实现