您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
业务架构设计
4月18-19日 在线直播
基于UML和EA进行系统分析设计
4月25-26日 北京+在线
AI 智能化软件测试方法与实践
5月23-24日 上海+在线
     
   
 
 订阅
大模型应用开发入门分享
 
作者:屈定
  132  次浏览      29 次
 2025-4-9
 
编辑推荐:
本文是作者给兄弟团队做的大模型入门分享,介绍了基本大模型模式,分享出来希望帮助更多的同学参与到LLM应用建设。希望对你的学习有帮助。
本文来自于微信公众号阿里云开发者 ,由火龙果软件Linda编辑,推荐。

阿里妹导读

本文是作者给兄弟团队做的大模型入门分享,介绍了基本大模型模式,分享出来希望帮助更多的同学参与到LLM应用建设。

前言

大模型作为新兴领域,不断地冒出来新的专有术语和新的概念,让大家觉得很神秘,捉摸不透。但是大部分复杂性的背后都会有一个极其简单便于理解的模型,本次分享最主要就是大模型的基本范式,通过范式将这些神秘感去除。

大模型虽然很厉害,很神秘,但作为使用人员,门槛是非常非常非常低的。

模型基础

虽然市面上的大型语言模型(LLMs)种类繁多,但在使用层面大家平等的都是API调包侠,因此从接口层面来剖析大模型有哪些能力。LLM的接口通常都遵循或类似于 OpenAI 的规范。这里我们以 OpenAI 的接口为例进行说明。

在与大型模型交互时,除了控制模型输出随机性的参数外,最核心的参数只有两个:messages 和 tools。可以说,市面上各种各样的大模型应用,都是基于这两个参数的基础上设计而来。

messages-大模型是怎么实现记忆的?

messages是一个对话数组,其中角色主要有:

system:代表当前对话的系统指令,一般放提示词

user:用户指令

assistant:LLM的回复

...:不同厂商会有不同的扩展定义

大模型所谓的对话记忆实际上就是依赖该数组做信息传递,如下图所示,第一轮我告诉我的名字叫屈定,第二轮的时候在问他是谁,他已经知道了我的名字,之所以知道因为我在messages的上下文中传递给了他这个信息。

使用user传递用户的对话



使用system设置系统指令



提示词的不稳定容易被指令注入攻击



三张图看完,先总结下:

大模型为什么能记住之前的对话?

只是因为后台系统给了他之前的对话,并不是他自己记住。大模型的请求调用就是一个无状态的,取决于每次给的对话内容。

大模型的提示词有什么用?

大模型的提示词可以进一步控制(覆盖)模型的行为,具备高优先级,但存在不稳定性。

接下来我们就可以来理解第一个重要的大模型范式:检索增强生成,也就是RAG(Retrieval Augmented Generation)。

直白的理解为用检索到的知识,来增量生成答案的质量。比如我有一个关于数仓各种问题处理的Q&A,想要做一个问答机器人,这个问答机器人要基于我的Q&A回复用户。这个 检索Q&A -> 基于检索到的Q&A回复用户,这个流程就是一个典型的RAG链路。也显而易见,RAG的最终目标是生成靠谱的答案给到用户。



RAG链路的搭建是很简单,但是效果却很难,从流程里面我们能发现两个关键点:

1.知识库检索召回:这里要解决如何召回最靠谱的答案。

2.LLM基于知识回答:这里要解决的是如何让模型在一堆知识中给出自信准确的回答。

这些都是业界在不断探索的东西,没有所谓的标准答案,只有适合当前业务的最佳方案。

tools-大模型能执行任何工具?

经常有同学会问一些大模型是否能查询odps,或者大模型能够把数仓数据导入到ob之类的问题。这些问题的背后是对LLM存在错误的理解,也就是tools参数的理解。

tools也是一个数组,包含了一堆工具集合,核心为工具的作用描述,和工具需要的参数,如下图天气工具的定义。



接下来就是使用工具,基于工具的回答至少要两次大模型请求调用:

1.将用户的对话和工具一起给到大模型,大模型需要执行的工具以及工具参数;

2.后端系统依据大模型选择结果,去执行对应的工具,拿到结果;

3.再次请求大模型,此时上下文中给到了工具执行结果,大模型基于信息回复;



先总结下:

1.大模型并不能够执行任何工具,但是大模型能够选择接下来要执行的工具。选择后工具由配合的系统来执行获取结果。

接下来我们就可以来理解第二个重要的大模型范式ReAct(Reason+Act)。

这里需要强调下,大模型的很多范式都是对生活中人类行为的模拟,因此我们也是从生活中的案例来理解大模型。

案例主题:老板让写一份调研外部大模型框架的报告

工具:互联网搜索,PPT,思维导图

思考 (Reasoning): 需要调研外部大模型框架,明确调研目标是了解行业内的主要框架、特点和应用场景。需要先明确有哪些主流框架,然后针对性地收集资料。

行动 (Acting):

行动: 使用互联网搜索“主流大模型框架 2024/2025”、“开源大模型框架”。

观察 (Observation):

观察: 搜索结果显示:PyTorch、TensorFlow、JAX等是主流框架,还有一些新兴框架如MindSpore、Paddle等。

 

思考 (Reasoning): 我已经拿到了想要的资料,接下来使用思维导图搭建汇报思路

行动 (Acting):

行动: 使用思维导图工具,搭建报告的初步框架,包括:框架名称、开发语言、主要特点、优势、劣势、应用场景。

观察 (Observation):

观察: 初步框架包括:框架名称、开发语言、主要特点(动态图/静态图、分布式训练支持等)、优势、劣势、应用场景(NLP、CV等)。

 

思考 (Reasoning): 信息基本收集完毕,需要将所有信息整理成结构化的报告,并使用PPT进行总结和分析。

行动 (Acting):

行动: 使用PPT工具,将思维导图中的内容整理成PPT,并撰写文字说明。

观察 (Observation):

观察: 完成了PPT初稿,内容比较全面,但需要进行排版美化。

 

这个思考的流程就是ReAct,后面有实际案例,这里先理解这个概念。



模型使用

大模型的应用五花八门,但都离不开上述两个核心参数,接下来围绕上述的参数,我们能利用的现有的模型交互手段主要有以下三种,包括:

调优提示词:大模型工程中的核心,提示词的优秀与否决定了你是否需要链路上做额外的兜底

增加调用次数:将一个任务拆分为多个子任务执行,最后判断结果。这是一种常用的对提示词能力的补充手段,降低单一提示词的复杂性。

模型微调:通过引入特定业务场景案例,让模型能更好地理解用户的意图和需求。

用大模型+提示词做翻译 [提示词调优]

为了更好的评价,我们选择哪吒中的英文台词,然后将英文翻译成中文,看还原度如何?

The prejudice in people's hearts is like a mountain. No matter how hard you try, you can't move it.

Looking back on it, three years isn't that long.

Be quick to obey my command

I'm the captain of my destiny, not heaven.

If you ask me whether people can change their own destiny, I don't know. But defying fate is Nezha's destiny.

 

方案一:直接使用提示词进行翻译

## Role and Goal:

你是一个翻译专家,尤其擅长英文到中文的翻译,接下来我给你多段英文台词,帮我翻译成中文.

## Constraints

- 翻译时保持译文格式不变

## Background:

原文来自《哪吒》系列电影的第二部中的台词,讲述了天劫之后,哪吒、敖丙的灵魂保住了,但很快会魂飞魄散。太乙真人打算用七色宝莲给二人重塑肉身,但是在重塑肉身的过程中却遇到重重困难,哪吒、敖丙的命运将迎来更多的挑战。

## Guidelines:

1. 结合背景将文本直接翻译成中文,保持原始格式,不省略任何信息。

## Source:

- The prejudice in people's hearts is like a mountain. No matter how hard you try, you can't move it.

- Looking back on it, three years isn't that long.

- Be quick to obey my command

- I'm the captain of my destiny, not heaven.

- If you ask me whether people can change their own destiny, I don't know. But defying fate is Nezha's destiny.

## Output:

{译文}

 

绝大多数情况下,直接使用提示词能做到的效果就已经能达到60%了(现在的模型确实强大了),下方的问题在于一些短的语句翻译不够传神。



方案二:提示词中引入COT(Chain-of-Thought)

COT被称为思维链,简单点来说是要告诉模型针对问题的思考步骤是什么,引导模型去按照特定思维解决问题。概念很抽象,以翻译为例,我们思考一般人是如何进行翻译的?

1.先直接翻译

2.结合上下文再审视这个翻译是否合理,有哪些改进点

3.针对改进点再斟酌修改

那么我们也让模型按照这个思路来执行翻译。


## Role and Goal:
你是一个翻译专家,尤其擅长英文到中文的翻译,接下来我给你多段英文台词,帮我翻译成中文.

## Constraints
- 翻译时保持译文格式不变
- 严格按照output中定义的范式输出

## Background:
原文来自《哪吒》系列电影的第二部中的台词,讲述了天劫之后,哪吒、敖丙的灵魂保住了,但很快会魂飞魄散。太乙真人打算用七色宝莲给二人重塑肉身,但是在重塑肉身的过程中却遇到重重困难,哪吒、敖丙的命运将迎来更多的挑战。

## Guidelines:
翻译的过程分为三部分:
1. 直译:结合背景将文本直接翻译成中文,保持原始格式,不省略任何信息。
2. 评估和反思:结合背景道教封神,主人公对命运反抗,识别直接翻译中的具体问题,例如:
- 非母语常用的中文表达,
- 笨拙的措辞
- 过于口语化的表达
- 等等
提供解释,但不要添加或省略内容或格式。
3. 意译:根据字面翻译和已识别的问题,重新解释翻译,确保它保持与原始输入格式一致,不要删除任何内容。

## Source:
- The prejudice in people's hearts is like a mountain. No matter how hard you try, you can't move it.
- Looking back on it, three years isn't that long.
- Be quick to obey my command
- I'm the captain of my destiny, not heaven.
- If you ask me whether people can change their own destiny, I don't know. But defying fate is Nezha's destiny.

## Output:
### 直译
{直译}

***

### 评估和反思
{评估和反思}

***

### 意译
{意译}

 

该方案取得了意想不到的效果,针对长句翻译成短句组合形式, 相比官方的来看,更像是修道者的口吻,但针对一些特殊短句用法,仍然不够理想。



方案三:引入动态few shot

few shot指的是提示词中的少样本技巧,动态就是将这部分样本抽离到一个知识库,每一次走翻译前先去知识库里面召回TOP最相关的,然后放入到提示词的Example中。

假设我的知识库中召回了如下两句:

Item1: 原文:Be quick to obey my command

意译:急急如律令

Item2: 原文:Life is not long, but it's not short either.

意译:人生,说长不长,说短不短。

 

结合后提示词如下:

## Role and Goal:

你是一个翻译专家,尤其擅长英文到中文的翻译,接下来我给你多段英文台词,帮我翻译成中文.

## Constraints

- 翻译时保持译文格式不变

- 严格按照output中定义的范式输出

## Background:

原文来自《哪吒》系列电影的第二部中的台词,讲述了天劫之后,哪吒、敖丙的灵魂保住了,但很快会魂飞魄散。太乙真人打算用七色宝莲给二人重塑肉身,但是在重塑肉身的过程中却遇到重重困难,哪吒、敖丙的命运将迎来更多的挑战。

## Guidelines:

翻译的过程分为三部分:

1. 直译:结合背景将文本直接翻译成中文,保持原始格式,不省略任何信息。

2. 评估和反思:结合背景道教封神,主人公对命运反抗,识别直接翻译中的具体问题,例如:

- 非母语常用的中文表达,

- 笨拙的措辞

- 过于口语化的表达

- 等等

提供解释,但不要添加或省略内容或格式。

3. 意译:根据字面翻译和已识别的问题,重新解释翻译,确保它保持与原始输入格式一致,不要删除任何内容。

## Example:

1. 原文:Be quick to obey my command

意译:急急如律令

---

2. 原文:Life is not long, but it's not short either.

意译:人生,说长不长,说短不短。

## Source:

- The prejudice in people's hearts is like a mountain. No matter how hard you try, you can't move it.

- Looking back on it, three years isn't that long.

- Be quick to obey my command

- I'm the captain of my destiny, not heaven.

- If you ask me whether people can change their own destiny, I don't know. But defying fate is Nezha's destiny.

## Output:

### 直译

{直译}

***

### 评估和反思

{评估和反思}

***

### 意译

{意译}

 

模型



few shot这种开卷考试方法是大模型链路中一种重要的优化手段,few shot是提示词中为数不多能够动态变化的部分,且对模型整体效果影响较小,更为可控。此外业务流量一般都是符合2:8分布的,且是可收敛的,可能只需要20%的few shot案例,就能满足80%的场景诉求。

用大模型+Agent做计算器 [增加调用次数]

大家应该都看过下面的案例,大模型是很不擅长数学计算的,那么用大模型直接做计算器就非常容易出问题。



这里使用llama_index的agent框架做演示:

1.定义了三个工具函数,乘法,加法,减法

2.构建一个Agent执行模式


import os

from dotenv import load_dotenv
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool
from llama_index.llms.azure_openai import AzureOpenAI


def multiply(a: int, b: int) -> int:
"""Multiply two integers and returns the result integer"""
return a * b

def add(a: int, b: int) -> int:
"""Add two integers and returns the result integer"""
return a + b

def subtract(a: int, b: int) -> int:
"""subtract two integers and returns the result integer"""
return a - b

# 加载 .env 文件
load_dotenv()

# 初始化工具
multiply_tool = FunctionTool.from_defaults(fn=multiply)
add_tool = FunctionTool.from_defaults(fn=add)
subtract_tool = FunctionTool.from_defaults(fn=subtract)

llm = AzureOpenAI(model="gpt-4o", # 或者 gpt-4
engine='gpt-4o',
deployment_name="gpt-4o",
api_key=os.getenv('AZURE_KEY'),
azure_endpoint="https://ilm-dev.openai.azure.com",
api_version="2023-07-01-preview")

# 初始化Agent
agent = ReActAgent.from_tools([multiply_tool, add_tool, subtract_tool], llm=llm, verbose=True)

response = agent.chat("What is 60-(20+(2*4))? Calculate step by step ")

 


> Running step cba1a160-74c3-4e34-bcc4-88e6a678eaf9. Step input: What is 60-(20+(2*4))? Calculate step by step
Thought: The current language of the user is: English. I need to use a tool to help me answer the question.

To solve the expression \(60 - (20 + (2 * 4))\) step by step, I will first calculate the multiplication inside the parentheses.
Action: multiply
Action Input: {'a': 2, 'b': 4}
Observation: 8

> Running step 5455108e-ac53-4115-8712-68f2457a9b82. Step input: None
Thought: Now that I have the result of the multiplication, I can proceed to the next step, which is to add 20 and 8.
Action: add
Action Input: {'a': 20, 'b': 8}
Observation: 28

> Running step 4d8fae00-83bd-4205-9993-f0e0119f408d. Step input: None
Thought: Now that I have the result of the addition, I can proceed to the final step, which is to subtract 28 from 60.
Action: subtract
Action Input: {'a': 60, 'b': 28}
Observation: 32

> Running step ce5d1075-ff11-47a2-b286-d7a715dc40ba. Step input: None
Thought: I can answer without using any more tools. I'll use the user's language to answer.
Answer: The result of the expression \(60 - (20 + (2 * 4))\) is 32.

 



上次有同学问,那么大模型在这种链路里面到底发挥了什么作用?大模型最大的能力就是自然语言理解,我们可以尝试把规则再复杂化,输入改成张三代表减法,李四代表加法,王二代表乘法,What is 60张三(20李四(2王二4))? Calculate step by step ,表现仍然可以,这就带来了对自然语言的容错,会像人一样去思考,而不是固定死的逻辑。


Thought: The current language of the user is English. I need to use a tool to help me answer the question. The expression given is 60张三(20李四(2王二4)), which translates to 60 - (20 + (2 * 4)). I will calculate step by step.

First, I need to calculate the multiplication part: 2王二4, which is 2 * 4.
Action: multiply
Action Input: {'a': 2, 'b': 4}
Observation: 8

> Running step 48262cb8-5c3a-47b7-b13b-449787c27078. Step input: None
Thought: The result of 2王二4 is 8. Now, I need to calculate the addition part: 20李四8, which is 20 + 8.
Action: add
Action Input: {'a': 20, 'b': 8}
Observation: 28

> Running step 1cccd5c6-3d96-4014-a579-1c997765a1da. Step input: None
Thought: The result of 20李四8 is 28. Now, I need to calculate the subtraction part: 60张三28, which is 60 - 28.
Action: subtract
Action Input: {'a': 60, 'b': 28}
Observation: 32

> Running step 65d33d20-1009-4482-a6d2-7af20333640c. Step input: None
Thought: I can answer without using any more tools. I'll use the user's language to answer.
Answer: The result of 60张三(20李四(2王二4)) is 32.

 

模型微调

这部分具体案例就不好说了,我举个实际生产的案例,在给WorldFirst做客服的时候,存在很多特殊的业务知识,比如用户在万里汇下载银行对账单 != 下载交易流水单。这里有业务背景,银行对账单是亚马逊要求的账户证明文件。这些业务背景是模型难以掌握的,此时就需要引入微调,将这部分知识内置到模型里面。

现在主流的方式都在慢慢弱化微调,因为费时费力,还不一定起到正向的效果,更多的工程实践是将提示词复杂化动态化,工程上做更多的兜底工作。

一些感想

大模型能带来很大的工作和问题思考方式的革新,让一些问题解决方式变成取决于你的想象力,但对客的业务的效果并非完全取决于大模型。很多同学认为有了LLM,业务效果,开发效率,交付质量都能很方便解决,什么都往LLM上靠拢,这是很大的误区。

以笔者参与的客服场景感想,最早都认为客服是非常适合大模型的场景,笔者同样也是这样认为。实际深入后,并非如此,尤其是在对专业度和准确率有明确要求的场景。客服作为售后,用户是带着问题带着情绪来的,他需要的是明确的解决方案,不需要机械式的安抚和吐答案。因此业办能力 + 拟人化是客服成功的两大主要因素,确定主要因素后,再去思考LLM在这些因素点上能带来什么,接着思考构建你的方案,这样的应用才是靠谱的方式。

 
   
132 次浏览       29
相关文章

基于图卷积网络的图深度学习
自动驾驶中的3D目标检测
工业机器人控制系统架构介绍
项目实战:如何构建知识图谱
 
相关文档

5G人工智能物联网的典型应用
深度学习在自动驾驶中的应用
图神经网络在交叉学科领域的应用研究
无人机系统原理
相关课程

人工智能、机器学习&TensorFlow
机器人软件开发技术
人工智能,机器学习和深度学习
图像处理算法方法与实践

最新活动计划
DeepSeek软件测试应用实践 4-12[在线]
DeepSeek大模型开发实践 4-19[在线]
UAF架构体系与实践 4-11[北京]
AI智能化软件测试方法与实践 5-23[上海]
基于 UML 和EA进行分析设计 4-26[北京]
业务架构设计与建模 4-18[北京]
 
 
最新文章
AIGC技术与应用全解析
详解知识图谱的构建全流程
大模型升级与设计之道
自动驾驶和辅助驾驶系统
ROS机器人操作系统底层原理
最新课程
人工智能,机器学习和深度学习
人工智能与机器学习应用实战
人工智能-图像处理和识别
人工智能、机器学习& TensorFlow+Keras框架实践
人工智能+Python+大数据
成功案例
某综合性科研机构 人工智能与机器学习
某银行 人工智能+Python+大数据
北京 人工智能、机器学习& TensorFlow
某领先数字地图提供商 Python数据分析
中国移动 人工智能、机器学习和深度学习