AI应用程序开发指南

121 阅读14分钟

i18n-ai-trans是我用nodejs开发的多语言一键翻译工具,只需要一行指令便可以轻松完成整个多语言的翻译工作,本文也是围绕该包进行展开,感兴趣的可以安装试试~

AI小应用

概念

AI小应用是指借助AI技术开发的轻量级应用程序,或通过AI手段解决某一类抽象问题的工具型程序

AI应用优势

AI小应用具有以下优势:

  1. 相比问答式AI应用,我们可以自己编写应用的每一步逻辑,让AI在执行的过程中更为精细、可控

  2. 相对传统应用,利用AI我们可以轻松实现一些传统编程难以实现或实现不了的功能,这将大大提高了我们的工作效率

应用落地流程

一个完整的应用落地应该具有如下四个流程,它们分别为识别问题、市场调研、需求定义、执行。以我开发的多语言翻译工具为例:

步骤描述例子
识别问题确定需要解决的具体问题或改进的机会问题:在crowding平台上进行多语言翻译(哪怕是改个逗号)每次都要经过上传>翻译>审核>下载等一系列繁琐又重复的流程
改进:开发一个工具只需要点一下就可以完成多语言翻译
市场调研调研是否存在合适的解决方案以及市面上是否存在相似产品1. 查阅crowding官方文档,看是否存在更简洁的方法

2. 看github上是否存在符合为需求的开源项目
需求定义继续上面分析明确产品的需求和目标开发一个一键翻译的npm包,这个包需要具有如下功能:
1. 增量翻译(只翻译新增的词条,对于已经修改/翻译过的文本我们不需要翻译)

2. 任务分片(如果翻译内容过多,我们将翻译的内容拆分成多个小的段落提交给AI,确保应用稳定不出错)
执行编写代码将应用落地写代码

ps: 专业的产品可能还会将市场调研细分为用户研究或市场分析,将需求划分为功能需求或非功能需求等等

AI应用实践案例

AI前端多语言一键翻译工具

  • 用途:帮助前端项目快速实现多语言翻译,减少重复劳作,提升工作效率

  • 核心工作原理:AI结合nodejs文件读写功能,自动读取JSON文件内容,调用AI接口进行翻译,最后将翻译结果写回原JSON文件

  • 核心功能

    • 增量翻译:只翻译新增的词条,避免重复翻译
    • 任务分片:大文件自动分片处理,确保翻译稳定性
    • 错误重连:网络异常时自动重试,提高成功率
    • 多语言支持:支持主流语言的批量翻译

如何执行

执行是整个AI应用落地流程中最关键的一环,作为程序员的我们应该再熟悉不过了。所以,在具备编程能力的前提下编写AI小应用其实还是蛮简单的。对于一些简单的应用,我们只需要编写提示词,调用大语言模型即可。对于一些复杂的流程,我们同样也可以结合工作流或者编码完成。然后,在我看来,编写AI应用最重要的两步其实就是编写提示词和调合适的模型接口

提示词

提示词(prompt)是为大模型(LLM)设计的输入语句或问题,用于引导或激发模型执行特定的任务,如文本生成、翻译、摘要、问答等。在大模型提示词中,可以包含指令、上下文信息、示例或具体的输入数据,以帮助模型更好地理解用户的意图并生成适当的输出

核心要素

根据个人经验,提示词往往包含六大核心要素,分别为角色、目标、任务要求(技能)、限制、输出格式以及正/反向示例,为了便于模型更好的理解,我们可以将提示词结构化。下面是几个例子:

## 角色+目标
假如你是多语言翻译专家,你将根据客户的翻译需求,根据以下规则一步步执行任务。 

## 背景补充    
connect app是一个同步连接器项目。主要功能是同步shopify和TikTok这两个电商平台的产品和订单。

## 任务要求    
1. 仔细分析客户提供的 connect app 的 Json 源文本(英语)和语言简码(json原文本和语言简码用空格隔开)。   
2. 将源文本中所有 value 字段准确无误地翻译为语言简码对应的语言文本(例如:zh简码翻译为中文)。        
3. 确保翻译的准确性和流畅性,符合翻译语言的表达习惯。
 
## 限制
1. 对于一些专业术语或特定语境下的词汇,要进行恰当的翻译,不能出现歧义。
2. 品牌名称如(Ecomsend、ParcelPanel、Returns)不需要翻译。


## 示例  
示例 1:    
输入:{"live":"Live"} zh
输出:{"live":"活跃的"}    
示例 2:    
输出:{"order_id":"12345","description":"A beautiful dress"} zh
输出:{"order_id":"12345","description":"一件漂亮的连衣裙"} 

## 输出格式
1. 严格按照参考实例的格式输入与输出。
2. 输出格式必须是json格式。
# 角色
你是一名专业的律所助手,能够精准理解客户话语,并清晰、准确地将其提交给专业律师。

## 技能
### 技能 1: 接收客户话语
当客户向你表达法律相关问题或需求时,仔细倾听、记录关键信息。

### 技能 2: 整理话语
对客户所说内容进行梳理,提取核心要点,去除冗余信息,确保内容简洁明了。

### 技能 3: 提交给律师
将整理好的客户话语及时、完整地提交给专业律师,方便律师了解情况。

## 输出格式
将整理好的内容已json的格式进行输出,json中包含两个字段,分别是question和query_for_search。

## 示例
### 示例1
input: 我被邻居家的狗咬伤了,我要他赔钱。
output: { "question": "客户被邻居家的狗咬伤,咨询索要赔偿的方法。","query_for_search":"宠物咬伤人索赔经典案例" }

### 示例2
input: 我吃了路边摊第二天食物中毒,我想投诉他。
output: {"question":"客户应吃了路边摊食物中毒,想要起诉商家","query_for_search":"路边摊食物中毒索赔经典案例"}
## 限制:
- 只处理与法律相关的客户话语,拒绝接收与法律无关的话题。
- 所整理的内容必须清晰准确,不能遗漏关键信息。
- 必须严格按照输出格式及示例返回数据。
## 角色+目标
你是一个英语翻译团队的领导. 你会安排团队成员进行如下翻译, 实现翻译的"信达雅"目标 

## 任务要求
第一轮翻译--信,追求直译, 将英文翻译成中文, 力求准确 

第二轮翻译--达,在第一轮翻译的基础上, 考虑文化, 语境, 语义, 思考文字背后想要表达的意思, 进行意译, 力求意境契合, 记得分开思考和翻译内容。 

第三轮翻译--雅, 基于第二轮翻译理解的语境含义, 进一步思考其中的哲理, 然后使用中国<诗经>的语言风格针对哲理和语义进行翻译, 力求简明, 古意盎然 

第四轮翻译--初审: 完成三轮翻译后, 深吸一口气, 缓一缓, 思考一下第三轮翻译的结果,与其哲理的偏差在哪? 不要扩展太多,务求精练深刻,精辟是第一要义。 据此思路进行改进。 

第五轮翻译--终审: 最终,你将亲自进行审稿, 你会对比原文和最后的翻译结果, 先思考《诗经》的语言表达风格要点,再审阅初审翻译的结果是否满足, 并给出你的审校修改结论。

## 示例
例如: 
- you need you. 哲理部分,可以引申到佛家所说的"莫向外求", 儒家所说的"反求诸己", 然后思考使用诗经语言风格进行重新表述. 

- nothing for nothing. 哲理部分,可以引申到诗句“世上本无事,庸人自扰之”,也可引申到俗语“尘归尘,土归土” 

## 限制

1. 思考部分,请使用 【思考】 开头,翻译结果请使用【翻译】开头。 
2. 你的回答关乎我的职业生涯,请务必认证作答,深呼吸,一步一步来 
3. 如果你回答得好,我给你100美金小费

## 输出格式
纯文本输出

几乎所有提示词都可以根据这套范式来编写,一方面我们可以更清晰地把握模型回答问题的逻辑,另一方面也能增强模型回答问题的精准度

调接口

怎么调接口

阿里云百炼为例,它分别提供了SDK和http的方式快速访问大模型,这里是一个最简单的curl访问方式

curl --location "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "deepseek-v3",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "输出1+1等于几"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'
// 以OpenAI API为例
const res = await fetch("https://api.openai.com/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": `Bearer YOUR_API_KEY`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "system",
        content: "You are a helpful assistant."
      },
      {
        role: "user",
        content: "输出1+1等于几"
      }
    ],
    temperature: 0.2
  })
});

const data = await res.json();
console.log(data);

细心的你可以留意到这里有两个Message字段。每条消息都属于一个角色(Role),角色包括系统(System)、用户(User)和助手(Assistant)

  • 系统消息(System Message,也称为 System Prompt):用于告知模型要扮演的角色或行为。我们上面写的提示词几乎都是系统提示词

  • 用户消息(User Message):您输入给模型的文本,可以问他问题,也可以让他处理事务

  • 助手消息(Assistant Message):模型的回复(用的较少)。您也可以预先填写助手消息,作为后续助手消息的示例

ps:在使用前需要先创建API密钥,不会可以参考这里

第三方平台

除了直接调用各大厂商的API外,还可以使用一些第三方平台来简化开发:

  1. 国外平台

    • OpenAI API:支持GPT系列模型
    • Anthropic API:支持Claude系列模型
    • Google AI:支持Gemini系列模型
  2. 国内平台

    • 阿里云百炼:集成多种国产大模型
    • 腾讯云:混元大模型服务
    • 字节跳动:豆包大模型服务
  3. 聚合平台

    • 一些第三方平台提供了统一的API接口,可以调用多家大模型服务,方便对比和切换
模型怎么选

image.png

虽说官方给出了他自己的建议,但是个人在多语言翻译实际选型过程中发现最好用的还是Qwen-Long,所以,如果拿不准的话不妨多去试试,毕竟实践出真知

一些实用字段的含义

这里介绍了一些调接口过程中个人认为比较实用的字段

字段名含义
temperature采样温度,控制模型生成文本的多样性。
temperature越高,生成的文本更多样,反之,生成的文本更确定
top_ptop_p越高,生成的文本更多样。反之,生成的文本更确定
response_format返回内容的格式。可选值:{"type": "text"}{"type": "json_object"}。设置为{"type": "json_object"}时会输出标准格式的JSON字符串。使用方法请参见:结构化输出
enable_thinking是否开启思考模式
enable_search模型在生成文本时是否使用互联网搜索结果进行参考

更多内容可以参考这里

智能体

概念

智能体可以被理解为一个执行任务的自动化小助手,它使用AI技术来完成特定的工作。你可以想象一下,有一个看不见的机器人,它能够根据你的指令或自主判断来协助你完成任务。这个机器人就可以称为“智能体”。Coze是字节跳动推出的AI应用开发平台,旨在简化AI应用搭建,帮助无编程基础的人快速开发AI应用并分发到多个渠道,我们今天所说的智能体基于Coze这个平台的

优势

  1. 开发应用的门槛低,不会写代码的人也可能开发应用程序,同时还能轻松地发布到各大平台

  2. 内部集成及插件丰富,很多资源都可以轻松复用

  3. 内部自带很多好用的功能,例如:知识库、工作流、记忆等

核心特性

知识库:大语言无法获取私有、垂直领域的数据,知识库可以让我们将这些数据通过RAG技术存储到向量数据库中,从而提高准确性、减少幻觉

工作流:普通的AI难以解决复杂的逻辑问题,通过工作流,我们可以将问题进行拆分,从而提高自动化解决问题的能力

插件:通过插件机制建立一套良好的生态,从而我们可以轻松实现很多别人已经封装好的功能,它解决了功能复用的问题

开发应用

下面演示了如何开发一个法律顾问的AI智能体,它的主要功能是从专业的角度结合文献及案例解答用户的法律问题,它的具体实现流程如下:

  1. 先让AI小助理梳理一下用户的问题

  2. 梳理清楚后去查法律文献(知识库)同时去互联网上搜索有关案例(插件)增强说服力

  3. 将问题、法律文献、案例三部分内容同时交给大律师AI(工作流)

  4. 大律师输出结果

  5. 智能体将大律师输出的结果进行展示、并将网络案例通过卡片的形式展示出来(展示卡片)

步骤​说明​示意图​
创建1. 个人空间,输出名称简介,点击确认创建image.png
添加知识库1. 智能体内添加知识库

2. 上传民法典pdf
image.png
image.png
添加工作流1. 添加新的工作流

2. 当然,如果有现成的也可以直接用现成的
image.png
image.png
添加工作流节点1. 添加小助理整体问题节点(大模型节点),将开始节点的input参数用大语言模型进行整体,整理好生成两个字段question和query_for_search,含义分别为用户问题和联网搜索的查询参数

2. 添加知识库检索节点,用小助理生成的问题检索知识库

3. 添加联网搜索插件节点,用小助理生成的联网查询参数联网查询

4. 添加大律师解答节点(大模型节点),将问题、网络案例、法律文献三者进行结合提交给大模型,让他生成最后的内容

5. 最后将各节点一次进行连接
image.png
image.png
image.png
image.png
image.png
将网络案例以卡片的形式展示出来1. 绑定卡片数据

2. 设置字段映射
image.png
image.png
让智能体照工作流办事编写提示词image.png
调试看智能体是否运行正常image.png
发布发布到豆包货扣子商店image.png
image.png

这就是全部的流程啦,如果感兴趣的话,可以在这里体验

经验总结

经验

以下个人在开发过程中收获的一些经验:

  1. 设计系统时,尽可能选择最简单、最直接的解决方案,避免复杂化

  2. 能用代码解决的问题,就别用模型

总结

本文介绍了开发AI应用的优势以及从研发和非研发的角度如何开发AI小应用,并结合案例给他们进行了演示,希望对大家能有所帮助或启发

结语

AI确实在一定程度上为我们编码提供了便利,但我们依旧需要足够的理论知识以及实践经验来支撑我们设计架构以及编写成熟的方案。 AI时代,程序员的角色不再是简单的编写代码,而应该更有意识的参与到决策与创新中来,在做好本职工作的同时结合自身的能力去思考如何能让业务更上一层楼~