通义千问大模型调优
一、什么是大模型调优?
大模型调优 指的是通过一系列技术和方法,调整或影响一个大语言模型的行为和输出,使其更契合特定任务、领域或风格需求的过程。简单来说,就是“教”一个通用的、知识渊博的模型,让它变得更“专业”,更能理解并满足你的独特要求。
您给出的定义非常精准:“调优是指可以根据自己的需求获取更精准或者更有创建性的一些答案”。我们可以从两个维度来理解这个定义:
-
更精准:让模型在特定领域(如医疗、法律、金融、你公司的内部知识)的回答更准确、更可靠,减少“幻觉”(即胡编乱造)。
-
更有创造性:引导模型的输出风格,使其更幽默、更正式、更简洁,或者模仿某种特定的文风。

1、在深入探讨调优方法之前,我们需要先了解几个关键概念,它们是理解不同调优技术的基础。
1)向量存储
向量存储(VectorStore)是一种用于存储和检索高维向量数据的数据库或存储解决方案,它特别适用于处理那些经过嵌入模型转化后的数据。在 VectorStore 中,查询与传统关系数据库不同。它们执行相似性搜索,而不是精确匹配。当给定一个向量作为查询时,VectorStore 返回与查询向量“相似”的向量。
VectorStore 用于将您的数据与 AI 模型集成。在使用它们时的第一步是将您的数据加载到矢量数据库中。然后,当要将用户查询发送到 AI 模型时,首先检索一组相似文档。然后,这些文档作为用户问题的上下文,并与用户的查询一起发送到 AI 模型。这种技术被称为检索增强生成(Retrieval Augmented Generation,RAG)。
2)提示词工程
Prompt 是引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应。
Prompt 最开始只是简单的字符串,随着时间的推移,prompt 逐渐开始包含特定的占位符,例如 AI 模型可以识别的 “USER:”、“SYSTEM:” 等。阿里云通义模型可通过将多个消息字符串分类为不同的角色,然后再由 AI 模型处理,为 prompt 引入了更多结构。每条消息都分配有特定的角色,这些角色对消息进行分类,明确 AI 模型提示的每个部分的上下文和目的。这种结构化方法增强了与 AI 沟通的细微差别和有效性,因为 prompt 的每个部分在交互中都扮演着独特且明确的角色。
Prompt 中的主要角色(Role)包括:
- 系统角色(System Role):指导 AI 的行为和响应方式,设置 AI 如何解释和回复输入的参数或规则。这类似于在发起对话之前向 AI 提供说明。
- 用户角色(User Role):代表用户的输入 - 他们向 AI 提出的问题、命令或陈述。这个角色至关重要,因为它构成了 AI 响应的基础。
- 助手角色(Assistant Role):AI 对用户输入的响应。这不仅仅是一个答案或反应,它对于保持对话的流畅性至关重要。通过跟踪 AI 之前的响应(其“助手角色”消息),系统可确保连贯且上下文相关的交互。助手消息也可能包含功能工具调用请求信息。它就像 AI 中的一个特殊功能,在需要执行特定功能(例如计算、获取数据或不仅仅是说话)时使用。
- 工具/功能角色(Tool/Function Role):工具/功能角色专注于响应工具调用助手消息返回附加信息。
3)Temperature(创建性)
官方解释摘要:
Temperature 参数用于控制生成过程中的随机性。它调整的是采样过程中概率分布的平滑程度。
详细说明:
-
工作原理:模型会为下一个词计算一个概率分布(所有可能词的概率总和为1)。Temperature 参数的作用是重新调整这个概率分布。
-
当
temperature = 1时,使用原始的概率分布,不做任何调整。 -
当
temperature > 1时,会提高低概率词的概率,拉平整个概率分布。这使得模型在选择下一个词时,不再那么确信高概率的词,而是会更多地考虑其他可能性,因此输出结果更加随机、不可预测、富有创造性。 -
当
temperature < 1时(尤其是接近0),会降低低概率词的概率,锐化整个概率分布。这使得模型几乎总是选择概率最高的那个词,因此输出结果更加确定、一致、保守。
-
取值建议与示例:
-
范围:
(0, 2]之间的浮点数。通常不建议设置为0,因为这可能导致确定性的输出。 -
低温度(0.1 - 0.5):适用于需要事实准确、可重复性高的任务。
-
场景:事实问答、代码生成、数据提取、技术文档摘要。
-
示例:问“法国的首都是哪里?”,设置
temperature=0.1,模型几乎每次都会回答“巴黎”。
-
-
中等温度(0.5 - 0.8):适用于需要平衡创造性和一致性的任务。
-
场景:内容创作、文案撰写、开放式问答。
-
-
高温度(0.8 - 1.2+):适用于需要高度创造性和多样性的任务。
-
场景:写诗、生成故事、头脑风暴、创作广告语。
-
示例:让模型“写一首关于月亮的诗”,设置
temperature=1.0,每次运行都可能得到一首立意和用词都不同的诗。
-
官方提示:较高的 Temperature 值可能会导致生成内容看似不连贯或不合逻辑。对于严肃的问答任务,建议使用较低的 Temperature 值
4)Top-p(核采样)
官方解释摘要:
Top-p 是一种动态的采样策略,也称为核采样。它从概率最高的词开始累积,直到累积概率刚好超过 p,然后仅从这些词中采样。
详细说明:
-
工作原理:与 Temperature 调整概率值本身不同,Top-p 是定义一个候选词集合。
-
模型计算所有可能的下一个词的概率,并从高到低排序。
-
从概率最高的词开始累加概率,直到累加值刚好超过设定的 top_p 值(例如 0.8)。
-
模型会仅从这个候选集合中选择下一个词,并忽略集合外的所有低概率词。
-
-
与 Temperature 的关系:
-
互补使用:Temperature 控制“如何选”(随机性),Top-p 控制“从哪儿选”(候选范围)。通常先设置 Top-p 划定一个合理的候选范围,再用 Temperature 在这个范围内增加一些随机性。
-
二选一:为了避免输出过于随机,通常不建议同时使用较高的 Temperature 和较高的 Top-p。一种常见的做法是设置一个较高的 Temperature(如 0.8-1.0)但将 Top-p 设置为一个较低的值(如 0.5-0.7)来约束随机性;或者,将 Temperature 设为中等或较低值(如 0.5-0.7),而将 Top-p 设为较高的值(如 0.9-1.0)。
-
取值建议与示例:
-
范围:
(0, 1]之间的浮点数。 -
低 Top-p(如 0.1-0.5):候选集很小,模型只会从最可能的一小部分词中选择。输出确定性高,但可能缺乏多样性。
-
高 Top-p(如 0.7-1.0):候选集很大,甚至包含所有可能的词(当 top_p=1.0 时)。输出多样性高,但可能包含不相关的内容。
-
常用值:
0.8或0.9是一个很好的起点,可以在生成质量和多样性之间取得平衡。
官方提示:通常建议只更改 temperature 和 top_p 中的一个,而不是同时更改两者。
5)Max Tokens / Max Length(最大生成长度)
官方解释摘要:
该参数用于限制模型在单次请求中生成的 token 的最大数量。它限制的是模型生成的答案的长度。
详细说明:
-
Token 是什么:对于模型而言,文本被切分成更小的单元(token),一个 token 可以是一个字、一个词或一个标点。例如,“通义千问”四个字可能被切成4个token。英文中,一个token约等于0.75个单词。
-
作用:防止模型生成过长的回答,从而控制 API 调用的响应时间和成本。
-
注意:这个限制包括你输入的问题(Prompt) 和模型生成的回答(Completion) 的总 token 数。模型自身有一个上下文窗口上限(例如通义千问最大支持 30K tokens),
max_tokens的设置值必须保证“输入token数 + max_tokens”不超过这个上限。
取值建议与示例:
-
设置过小:如果回答被意外截断,模型可能无法完成完整的思考。你需要增加
max_tokens的值。 -
设置过大:如果生成长度远未达到限制,则会造成计算资源的浪费,并可能增加不必要的成本。
-
策略:根据任务类型预估回答长度。对于简短问答,设置
256或512;对于摘要或创作,可能需要1024或2048。如果不确定,可以先设一个较大的值,然后根据模型实际生成的长度逐步调整到合适的值。
2、调优案例:如何让大模型在专业领域(如医疗、公司内部)表现得更专业、更准确
1) 问题的根源:通用模型的“知识盲区”
-
问题:若我们直接使用一个在通用语料上预训练的模型(例如BERT),模型可能会将其转化为一个向量,但这个向量所捕捉到的医学特征可能不够精确,因为 BERT 是基于大量的非专业文本进行训练的,可能没有在医学文本上见过很多具体的医学术语。
-
表现:模型生成的向量无法精确捕捉专业概念之间的深层关系和上下文含义。
-
结论:直接使用通用模型对专业文本进行向量化,效果往往不理想,导致 RAG 系统检索不精准,所谓 “垃圾进,垃圾出” 。
2) 解决方案:模型调优——让模型“专业化”
为了让向量化更精准,必须提升模型的专业领域理解能力,即模型调优。主要有两种路径:
-
选择垂直领域模型:直接使用在专业数据上预训练好的模型(如医学领域的BioBERT),它们的基础向量空间就更贴近专业领域。
-
对通用模型进行领域微调:用自己的专业数据(医学文献、公司文档)继续训练模型,更新其参数,使其向量表示更适应特定任务。
核心比喻:向量化是“翻译”,把文本“翻译”成向量语言。一个没学过医学的“翻译”(通用模型)会词不达意。模型调优就是对这个“翻译”进行专业培训,让它能精准传递专业信息的精髓。
3) 核心辩论:RAG vs. 模型微调,如何选?
这是最关键的部分。二者非替代关系,而是互补的,选择取决于场景。
| 特性 | 检索增强生成(RAG) | 模型微调 |
|---|---|---|
| 知识更新 | 动态、灵活。知识库(向量库)可随时增删改,成本低,即时生效。适合知识高频变化的场景。 | 静态、缓慢。更新知识需重新训练模型,成本高、周期长。适合知识相对稳定的领域。 |
| 知识容量与追溯 | 海量。外部知识库可轻松扩展至TB级。答案可溯源,能提供引用来源,透明可信,减少“幻觉”。 | 受限。知识被压缩固化在模型参数中(通常GB级),容量有限。是 “黑盒”,答案无法直接追溯来源。 |
| 处理未知/长尾问题 | 强大。通过检索外部知识,能回答训练数据中从未出现过的新问题(零样本学习)。 | 较弱。严重依赖于微调数据的覆盖面,难以处理训练数据外的边缘或新兴问题。 |
| 核心能力提升 | 主要增强模型的“知识”。模型本身的理解和推理能力不变,但被 “喂” 了最相关的信息后再作答。 | 主要提升模型的“技能”和“风格”。让模型内化特定领域的表达方式、思维模式和专业术语。 |
4) 最终抉择:不是 “二选一”,而是 “如何组合”
-
追求知识实时性、可追溯性、处理海量未知问题? → RAG是更优解(如客服系统、企业知识库、法律咨询)。
-
需要模型内化一种独特的风格或思维模式,且知识相对稳定? → 微调效果更好(如生成特定风格的报告、代码补全)。
最佳实践:RAG + 微调。用一个经过微调的、更懂你所在领域的模型,来驱动你的RAG系统。这样,无论是向量化的质量,还是对检索结果的理解和生成能力,都得到了最大化提升。
二、使用 Spring AI 接入 AI 智能体
1、创建 AI 智能体
接入智能体,首先需要有一个自己的 AI 智能体,可以在阿里云百炼里面的 应用开发 -> 应用管理 -> 创建一个自己的智能体应用

2、创建一个 SpringBoot 应用,导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- spring-ai alibaba -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M5.1</version>
</dependency>
3、配置 application.yml
其中 app-id 是智能体的应用 id,创建智能体后就会生成,其它的配置不懂的话可以参考上一篇博客:https://blog.csdn.net/qq_53281187/article/details/152475814?fromshare=blogdetail&sharetype=blogdetail&sharerId=152475814&sharerefer=PC&sharesource=qq_53281187&sharefrom=from_link
spring:
application:
name: ai-demo
ai:
dashscope:
api-key: ${AI_DASHSCOPE_API_KEY}
agent:
app-id: edd68f7d43b94c20bf04ed049c82b9cc
4、Java 代码编写
@RequestMapping("/bai-lian/agent")
@RestController
public class BaiLianAgentRagController {
private DashScopeAgent agent;
@Value("${spring.ai.dashscope.agent.app-id}")
private String appId;
public BaiLianAgentRagController(DashScopeAgentApi dashScopeAgentApi) {
this.agent = new DashScopeAgent(dashScopeAgentApi);
}
@GetMapping("/call")
public String call(@RequestParam(value = "message") String message) {
ChatResponse chatResponse = agent.call(new Prompt(message,
DashScopeAgentOptions.builder()
.withAppId(appId)
.build()));
return chatResponse.getResult().getOutput().getText();
}
}
这样,一个简单的ai智能体就出来了
5、AI 智能体功能增强
在 Ai 智能体中有很多系数可以配置,以达到一个更智能的智能体
1)模型更换
2)模型参数配置
- 📌参数设置
- 温度系数:控制模型输出随机性,值越高越多样,低则更稳定、聚焦
- 最长回复长度:限制单次生成文本的最大长度,避免内容过长或资源浪费
- 思考模式:开启后模型会模拟多步思考,提升复杂任务处理的合理性

3)提示词
AI 模型可以通过提示词,检索你的问题是否有答案,也就是一个简单的知识库

4)导入数据
回到主界面,点击应用数据,可以导入独属于你自己的知识库(文件)

以下是导入完成画面:

5)加载知识库
回到创建应用界面,根据下图就导入了我们之前的数据

根据自己需要调节知识库

6)样例库
打开样例库,添加样例库

示例:
- 用户输入:某奶茶店想预测夏季销量,已知近 3 年每月气温、促销活动(买一送一 / 第二杯半价)、销量数据,目标:用时间序列或回归模型,预测 8 月销量,指导备货
- 模型输出:模型选择:LSTM 时间序列模型(适配时序数据 + 多特征关联);步骤:① 清洗数据(填补气温缺失值、编码促销活动);② 划分训练集(前 2.5 年)、测试集(后 0.5 年);③ 构建 LSTM 网络(3 层 lstm + 1 层 dense ),训练后预测

7)MCP🔥
-
MCP即模型上下文协议(Model Context Protocol),它旨在统一大语言模型与外部数据源和工具间的通信,堪称AI领域的“USB-C接口”。借助MCP,AI应用能安全访问、操作本地及远程数据,打破数据孤岛,实现“即插即用”式智能交互
-
在架构上,MCP采用客户端-服务器模式。其主要组件包括想通过MCP访问数据的程序、维持与服务器1:1连接的客户端,以及通过标准化协议暴露特定功能的轻量级服务器。数据源涵盖本地文件、数据库,也包括远程API

- 点击想要的MCP,进入界面后首先点击立即开通,然后添加到智能体中

- 下面是我添加的4个 MCP

ps:以下是我整理的 java 面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
更多推荐



所有评论(0)