AI 大模型应用开发全攻略 原创

发布于 2025-4-10 06:42
浏览
0收藏

AI 大模型应用开发作为新兴领域,不断出现新的技术:LLM、Prompt、RAG、Agent、Fine-tuning、MCP 等,本文聚焦 AI 大模型应用开发,带领大家入门,带领大家了解 AI 大模型应用开发的全攻略。

尽管市面上的大语言模型(LLMs)种类繁多,但大家在使用时其实都是通过 API 来与大模型交互的。这些大模型的接口通常遵循一些通用的规范,比如:  OpenAI 的标准。下面,我们就以 OpenAI 接口为例,来聊聊这些大模型都有哪些能力。

当你和大模型交流时,除了可以控制大模型输出的随机性之外,最关键的参数就是 Messages 和 Tools。可以说,现在市面上的各种大模型应用,都是基于这两个参数设计的。

1、Messages - 大模型是如何“记住”对话的?

  • Messages 是一个对话记录的列表,里面的角色包括:

    a.System:代表系统级别的指令,通常用来放置提示词。

    b.User:用户发出的指令。

    c.Assistant:LLM 给出的回复。

不同厂商可能会在这个基础上增加一些额外的定义。

大模型所谓的“记忆”对话,其实是依赖于这个列表来传递信息的。

比如,第一轮对话中我告诉大模型我的名字。


AI 大模型应用开发全攻略-AI.x社区

第二轮对话时,如果问大模型我是谁,它就能“记住”我的名字。这是因为我在 Messages 列表中提供了这个名字信息。


AI 大模型应用开发全攻略-AI.x社区

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


AI 大模型应用开发全攻略-AI.x社区

看完这三张图,我们来总结一下:

为什么大模型能“记住”之前的对话呢?其实,它并不是真的记住了,而是每次请求时,系统都会给它之前对话的内容。大模型的每次请求调用都是无状态的,它的行为完全取决于你每次提供的信息。

那么,大模型的提示词(Prompt)有什么用呢?提示词可以进一步控制(或者说覆盖)大模型的行为,具有高优先级,但同时也存在不稳定的风险。

希望这样的解释能帮助你更好地理解大语言模型的工作原理和它们的应用方式。

2、RAG - 检索增强生成

让我们深入了解一种重要的大模型应用范式:检索增强生成,简称 RAG(Retrieval-Augmented Generation)。

简单来说,RAG 就是利用检索到的知识来提升生成答案的质量。举个例子,假设我手头有一堆关于数据仓库的问题和答案(Q&A),我想基于这些 Q&A 来创建一个问答机器人,让它能够根据这些 Q&A 来回答用户的问题。这个问答机器人的工作流程就是:检索到的 Q&A -> 利用检索到的 Q&A 来回复用户,这正是 RAG 的典型应用场景。显然,RAG 的最终目标是为用户提供可靠的答案。


AI 大模型应用开发全攻略-AI.x社区

构建 RAG 链路相对简单,但要达到好的效果却不容易。从流程中我们可以发现两个关键点:

知识库检索召回:这里需要解决如何检索到最相关、最准确的答案。

基于知识库的 LLM 回答:这里需要解决的是如何让模型在众多知识中给出自信且准确的回答。

这些都是业界正在不断探索的问题,没有统一的标准答案,只有最适合当前业务需求的方案。

3、Tools - 大模型能执行任何工具?

很多同学经常对大语言模型(LLM)的能力有所误解,比如询问大模型是否能执行数据库操作,或者是否能将数据仓库中的数据导入到对象存储等。这些问题通常源于对大模型的“Tools”参数理解不足。

“Tools”是一个工具集合的数组,其中包含了工具的作用描述和所需参数,例如天气查询工具的定义如图示。


AI 大模型应用开发全攻略-AI.x社区

使用这些工具时,通常需要两次调用大模型:

第一次、将用户的查询和工具信息一起提供给模型,模型会根据这些信息推理出需要执行相应的工具及其参数。

后端系统根据大模型的选择结果执行相应的工具,获取结果。

第二次,再次请求大模型,此时上下文中包含了工具执行的结果,大模型基于这些信息生成回复。


AI 大模型应用开发全攻略-AI.x社区

总结一下

大模型本身并不能直接执行任何工具,但能决定接下来要执行哪些工具。一旦做出选择,实际的工具执行将由配合的系统(通常是 Agent)完成并获取结果。

4、ReAct - 推理 + 行动

接下来,我们可以探讨第二个重要的大模型范式:ReAct(推理+行动)。

需要强调的是,大模型的许多范式都是对人类行为的模拟,因此我们可以通过生活中的案例来理解大模型。

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

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

思考 (Reasoning): 需要调研外部大模型框架,明确调研目标是了解行业内的主要框架、特点和应用场景。需要先明确有哪些主流框架,然后针对性地收集资料。
行动 (Acting):
行动: 使用互联网搜索“主流大模型框架 2024/2025”、“开源大模型框架”。
观察 (Observation):
观察: 搜索结果显示:PyTorch、TensorFlow、JAX等是主流框架,还有一些新兴框架如 MindSpore、Paddle 等。

思考 (Reasoning): 我已经拿到了想要的资料,接下来使用思维导图搭建汇报思路
行动 (Acting):
行动: 使用思维导图工具,搭建报告的初步框架,包括:框架名称、开发语言、主要特点、优势、劣势、应用场景。
观察 (Observation):
观察: 初步框架包括:框架名称、开发语言、主要特点(动态图/静态图、分布式训练支持等)、优势、劣势、应用场景(NLP、CV等)。

思考 (Reasoning): 信息基本收集完毕,需要将所有信息整理成结构化的报告,并使用PPT进行总结和分析。
行动 (Acting):
行动: 使用PPT工具,将思维导图中的内容整理成PPT,并撰写文字说明。
观察 (Observation):
观察: 完成了PPT初稿,内容比较全面,但需要进行排版美化。

这个思考的流程就是 ReAct 模式。


AI 大模型应用开发全攻略-AI.x社区

5、Agent - 自主完成复杂任务

许多人可能已经注意到,大模型在数学计算方面并不擅长,如果直接用它们来做计算器,很容易出现错误。


AI 大模型应用开发全攻略-AI.x社区

这里,我们用 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_versinotallow="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.


AI 大模型应用开发全攻略-AI.x社区

之前有朋友问到,在这种流程中,大语言模型(LLM)究竟扮演了什么角色?大模型最突出的能力是理解自然语言并进行推理,我们可以尝试将规则进一步复杂化,比如用“张三”来代表减法,“李四”代表加法,“王二”代表乘法。那么,问题“张三(李四(王二王24))”等于多少呢?如果要求一步步计算,尽管表现可能仍有不足,但大模型展现出了对自然语言的容错能力,能够像人类一样去思考,而不是遵循一成不变的逻辑。

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.

6、Fine-tuning 微调- 让大模型具备精确处理公司任务的能力

让我们通过一个具体的生产案例来说明这一点。当我们为 World First 提供客服服务时,遇到了很多特殊的业务知识,例如,用户在万里汇下载的银行对账单并不等于下载交易流水单。这里涉及到具体的业务背景:银行对账单是亚马逊要求的账户证明文件。这类业务背景知识对于大模型来说很难掌握,这时就需要引入微调(Fine-tuning),将这部分知识整合到大模型中。

目前,业界的主流做法正在逐渐减少对微调的依赖,因为这个过程既耗时又费力,而且不总是能带来预期的正面效果。更多的工程实践倾向于将提示词(Prompt)复杂化和动态化,在工程上做更多的容错处理工作。

7、Prompt 提示词工程- 说人话

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

调优提示词有三种实践方式:直接使用提示词、提示词中引入 CoT(Chain-of-Thought)、提示词中引入动态 Few-Shot。

大语言模型(LLM)确实能够引发工作方式和思考模式的重大变革,它们让问题的解决方式变得依赖于你的创造力。然而,业务成效并不完全依赖于大模型。许多人误以为拥有了 LLM,就能轻松解决业务效果、开发效率和交付质量等问题,这种将所有问题都推给 LLM 的想法是一个很大的误区。

以客服场景为例,最初大家都认为客服是非常适合应用大型模型的场景,我最初也是这么认为的。但深入实践后发现事实并非如此,特别是在对专业度和准确率有明确要求的场景中。客服作为售后服务,用户带着问题和情绪而来,他们需要的是明确的解决方案,而不是机械式的安慰和模糊的答案。因此,业务能力和人性化是客服成功的关键因素。确定这些关键因素后,再去思考 LLM 能在这些方面带来哪些帮助,然后构建你的解决方案,这样的应用方式才是可靠的。

简而言之,大模型可以是一个强大的工具,但它们并不是万能的。在构建解决方案时,我们需要综合考虑业务需求、用户期望和模型的能力,以确保我们提供的服务既有效又人性化。


本文转载自公众号玄姐聊AGI  作者:玄姐

原文链接:​​https://mp.weixin.qq.com/s/ER_LnXDoskWBkR0ssVePQA​

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2025-4-10 06:42:03修改
收藏
回复
举报
回复
相关推荐