借助DeepSeek之东风扬帆AI海洋(一):快速入门AI必备技术

231 阅读22分钟

现象级爆发:DeepSeek如何点燃2025中国AI革命
2025年春节,国产大模型DeepSeek以黑马之姿跃升为现象级顶流。拜年串门时,人们茶余饭后三句不离两大热词——"你家AI助理用DeepSeek了吗?"和"哪吒2票房破纪录没?"。节后首个工作日,阿里云、腾讯云等巨头集体官宣深度适配DeepSeek,让这波AI热潮直接冲上热搜榜首。

这场全民狂欢背后,是DeepSeek用实力书写的技术传奇:凭借比肩GPT-4的模型能力与全面开源策略,它一举打破"国产大模型总差口气"的行业魔咒。从大学生用AI写论文到企业开发智能客服,DeepSeek点燃全民AI热潮,将国内AI应用化进程推向全新高度。业界公认,2025年将成为中国AI应用爆发的元年。

破局者登场:打破技术天花板
回溯2024年下半年,AI开发逐渐形成以Agent(智能体)和RAG(检索增强生成)为双引擎的技术范式。虽然各类开发框架层出不穷,但本质仍是万变不离其宗——受限于大模型自身能力,再精巧的架构也难为无米之炊。彼时国内开发者面临两难困境:出海项目尚可调用GPT,境内项目却因模型瓶颈,效果始终在及格线上徘徊。

DeepSeek的横空出世彻底改写游戏规则。这个真正比肩GPT的国产大模型,让沉淀多年的开发框架终于找到完美搭档。就像安卓系统遇上骁龙芯片,开发者们突然发现:同样的Agent工作流,响应速度提升40%;原本勉强的多轮对话,现在竟能处理10层逻辑嵌套。技术社区沸腾了——我们终于站上了巨人的肩膀。

DeepSeek和“民用级”程序员

近期,随着DeepSeek模型的爆火, 模型蒸馏  这一专业术语频繁进入公众视野。为了让大家更好地理解这一概念,我们不妨借用金庸先生《射雕英雄传》中的故事和人物来形象地解释。

蒸馏是什么?

首先,什么是模型蒸馏呢?在《射雕英雄传》中,洪七公是江湖上赫赫有名的北丐,他武功高强、见识广博、内力深厚,就像经过海量数据训练的大模型,拥有强大的知识储备和计算能力。然而,大模型的训练和部署成本极高,正如洪七公的武功,不是人人都能轻易练成的。
但洪七公总需要收徒传艺,将丐帮武学传承下去。为此,他必须将武功以“浓缩”的方式传授给徒弟,在保证一定精度的同时,大幅降低对内力的要求。例如,他将打狗棒法传给了黄蓉,将降龙十八掌传给了郭靖,这便是模型蒸馏技术的生动体现。
黄蓉等小模型,虽然武功不及洪七公,但胜在没有洪七公那么大的江湖名望(部署和推理成本低),因此在对付三流的沙通天、灵智上人之类的小角色时,没有江湖前辈欺负后辈的心理包袱。

以 DeepSeek 发布的六个蒸馏模型为例,满血版 671B 参数量的 DeepSeek R1 就是洪七公,而洪七公针对不同尺寸的徒弟模型进行武功蒸馏,这些徒弟模型包括:

天赋、内功基础对应模型
五代长老Qwen2.5-Math-1.5B
六代长老Qwen2.5-Math-7B
七代长老Llama-3.1-8B
八代长老Qwen2.5-14B
九代长老Qwen2.5-32B
黄蓉Llama-3.3-70B-Instruct

经过蒸馏后便得到了新模型:

新模型
DeepSeek-R1--Distill-Qwen-1.5B
DeepSeek-R1--Distill-Qwen-7B
DeepSeek-R1--Distill-Llama-8B
DeepSeek-R1--Distill-Qwen-14B
DeepSeek-R1--Distill-Qwen-32B
DeepSeek-R1--Distill-Llama-70B

总而言之,每个徒弟的天资与修为各不相同。基础越扎实,其潜力就越大,也越能从师门中汲取精髓,从而更接近师父的境界。洪七公授徒的秘诀在于:他首先以身作则,亲自演练一遍,随后让徒弟们依样模仿。然而,他并不主张机械记忆,而是传授思维之道,引导徒弟们体会内力流转的精妙,最终达到招式随心而动的境界。在模型蒸馏的领域,这种  “思维之道”  有一个专业的术语,叫作  软标签  。它并非直接告诉小模型“这就是正确答案”,而是通过大模型的输出,提供各类别的概率分布。小模型通过学习这些概率分布,能够领悟类别之间细微的差别。
在拜入洪七公门下之前,徒弟们大多已具备一定的武学根基,因此在修习洪七公的武艺时,往往会融入自己的理解和见解,这便是所谓的  硬标签  。在实际的蒸馏过程中,徒弟们既要努力学习师父的绝技,又要避免与自身原有的内力相冲突,否则可能会走火入魔。因此,必须在“软标签”与“硬标签”之间找到一个平衡点。一旦找到合适的标准,就需要反复锤炼,直至技艺炉火纯青。此时,徒弟们便可出师,自立门户。
以上便是对模型蒸馏的一种通俗解读。对于我们这些从事应用开发的程序员来说,无需深究其背后的复杂原理,只需大致理解其概念,并能够熟练运用,就已经足够了。

“民用级”程序员是什么?

在元旦前夕,一则重磅消息在科技圈引发了热议:雷军以千万年薪从DeepSeek挖角了一位95后AI天才——罗福莉。罗福莉是DeepSeek-V2模型的核心开发者之一,曾深度参与其研发工作。消息曝光后,DeepSeek研发团队的背景也随之曝光。这些成员大多是95后、00后,且多数毕业于清华、北大等顶尖学府,拥有博士学位。令人惊叹的是,他们中的许多人甚至在本科入学的前两三个月,就已经发表了达到博士毕业水平的论文。
然而,对于我们这些并非“罗福莉”式高精尖人才的普通人来说,如何用好AI、更新思维方式、借助AI推动应用开发、将AI融入产品,才是我们真正需要关注的重点。这正是“民用级”程序员的使命,而我也是其中一员。本文正是为“民用级”程序员而写。
那么,如何使用DeepSeek呢?答案其实很简单——一个字: “用”
如果你想要体验DeepSeek模型的强大能力,可以直接访问官网(DeepSeek | 深度求索),点击“开始对话”,即可免费体验官方版本的DeepSeek-V3,以及满血版671B的DeepSeek-R1。默认情况下,系统会调用DeepSeek-V3模型,它适合聊天对话、文章撰写、翻译、客服问答以及常规代码生成等任务。如果你需要更强大的推理能力,只需点击“深度思考(R1)”,即可切换到DeepSeek-R1。DeepSeek-R1是基于满血版DeepSeek-V3 671B经过强化训练和微调而来的版本,擅长逻辑推理,常用于科研分析、金融策略生成、编程开发等需要复杂逻辑推理的场景。
此外,官方版本的模型还支持联网搜索功能,这一功能在Kimi、通义千问等平台中也很常见。其原理是通过提示词,让大模型调用浏览器API搜索相关内容,然后对搜索结果进行整合和思考,最终生成回复。因此,回复内容的质量在很大程度上取决于所调用的浏览器API的性能。
对于“民用级”程序员而言,DeepSeek不仅是一个强大的工具,更是一位能够帮助我们提升效率、拓展思维的伙伴。无论是日常开发任务,还是复杂的技术难题,DeepSeek都能为我们提供有力的支持。

学了 DeepSeek 以后能帮我们做什么

提升个人价值

程序员群体是终身学习的群体,必须与时俱进,紧跟前沿技术动态。尤其是一些连非技术人员都广泛关注的热门话题,其背后的技术原理和应用场景,我们更需要深入掌握,以便随时应对实际需求。
如今,DeepSeek 的部署、微调与应用等话题热度极高。掌握这些知识,不仅能帮助我们解决更多实际问题,更能显著提升个人价值。例如,有些公司从业务角度出发,希望在公司内部自主部署、微调并蒸馏 DeepSeek 模型,以满足特定需求;有些场景下,如开发 RAG 对话系统,70B 规模的模型就已足够强大;还有些公司则希望通过展示 DeepSeek 的部署能力,向客户彰显自身技术实力。毕竟,DeepSeek 完全开源且可商用,这意味着任何人都可以自主部署,这也为程序员提供了更多展现能力的机会。

用 AI 改造现有业务

作为“民用级”程序员,我们的核心使命是开发应用、打磨业务,为用户提供高效、稳定的服务。在这个过程中,DeepSeek和AI Agent(智能体)等技术可以成为强大的智能桥梁,帮助我们将传统业务升级为智能化业务,实现效率与体验的双重提升。
运维是应用开发中不可或缺的环节,但传统运维方式往往依赖人工分析报错信息、日志和事件,耗时耗力且容易出错。如果引入AI技术,这一过程将焕然一新。AI可以根据报错信息自动抓取相关日志,快速分析问题并精准定位,甚至在某些场景下自动修复问题。整个过程,我们只需简单说一句“xx报错了,请帮我分析一下原因”,AI就能像一位经验丰富的运维专家一样,迅速响应并解决问题。这种“喊一声”就能完成的运维方式,不仅大幅减少了程序员的加班时间,还显著提升了运维效率和系统稳定性。
我们开发的业务系统,虽然从技术角度来看已经足够友好,但实际使用中,客户往往因为不熟悉业务逻辑而难以顺利操作。这时,AI可以成为用户与系统之间的“翻译官”。通过在前端界面引入自然语言交互功能,用户可以直接用自然语言表达需求,比如“我想查询订单状态”或“我想修改收货地址”,系统则会以自然语言形式即时反馈结果。这种交互方式不仅降低了用户的学习成本,还提升了操作效率,让用户感受到真正的智能化服务。同时,这种改进也能有效降低因操作困难带来的用户流失,提升客户满意度。

个人创业

最后,我们再谈谈个人创业的问题。个人创业其实只会技术是不够的,还需要懂业务,有资源(客户等)以及有一定的经济基础。
如果这几点恰好你都能满足,那 AI 就可以帮你做很多事情。比如,可以通过模型微调、精调等做出一个私有化模型,之后去做一些行业应用,比如 AI 医疗、AI 炒股等等,也可以去做一些工作流之类的应用,比如短视频转爆款小红书文案等等。有了 AI 的加持,不一定人人都能成为开发者,但善于借力 AI 新技术的朋友,肯定在抓住机遇方面更占优势。
通过将AI技术融入现有业务流程,我们不仅能优化用户体验,还能重构内部工作流程。无论是运维的自动化,还是交互的自然化,AI都在帮助我们实现从“工具使用”到“价值创造”的跨越。 对于“民用级”程序员来说,AI不再是遥不可及的黑科技,而是触手可及的智能助手。它让我们能够更专注于业务逻辑的创新,而非繁琐的重复性工作。通过AI赋能,我们不仅能提升业务效率,还能为用户创造更多价值,真正实现技术驱动业务的愿景。

如何学习DeepSeek与AI应用开发:从“知道”到“做到”

有句古话说得好:“知行合一”。真正有价值的知识,是那些能够被你实际运用的知识,而不仅仅是存储在脑海中的信息。在AI时代,这一点尤为重要。因此,我建议你将学习重点放在思想、手法和应用方案上,而不仅仅是理论知识。以下是一些具体的学习建议:
1. 深入理解模型与技术,学会灵活运用 不要仅仅满足于简单使用DeepSeek,而是要深入理解不同模型和技术的特点。例如,DeepSeek-V3适合聊天对话、文章撰写等任务,而DeepSeek-R1则擅长逻辑推理和复杂任务。学会根据项目需求选择合适的模型,才能举一反三,将所学知识灵活应用到实际工作中。
2. 实践出真知:从“眼到”到“手到”  学习AI应用开发,光靠“看”是远远不够的,必须亲自动手实践。通过实际项目或实验,将理论知识转化为实战能力。例如,尝试用DeepSeek优化现有业务流程,或者开发一个基于AI的智能交互功能。只有在实践中,你才能真正掌握技术的精髓。
3. 掌握快速学习的方法论 AI领域的技术更新速度极快,新模型、新工具层出不穷。因此,掌握快速学习的方法论至关重要。例如,学会高效阅读技术文档、关注行业动态、参与技术社区讨论等。通过这些方法,你可以在面对新技术时更加从容,迅速将其应用到实际工作中。
4. 培养解决问题的思维方式 AI技术的核心价值在于解决实际问题。因此,学习过程中要注重培养解决问题的思维方式。例如,如何将AI技术与现有业务结合?如何通过AI提升用户体验?如何优化内部工作流程?这些问题不仅能帮助你更好地理解技术,还能让你在实战中游刃有余。

Function Calling与ReAct:如何让大模型更智能

尽管DeepSeek等大模型在AI领域表现出色,但它们并非万能。尤其是在面对垂直领域的专业知识或实时性较强的信息时,大模型往往显得力不从心。例如,如果用户询问“今天北京的天气如何?”,大模型无法直接回答,因为它缺乏实时天气数据。这时,我们需要让大模型具备与外界交互的能力,比如调用高德天气的API来获取实时天气信息。为此,OpenAI提出了Function Calling机制,使大模型能够根据需求调用外部工具,从而解决这类问题。

什么是 Agent?

Agent并不是一种具体的技术,而是一种AI设计模式,旨在让大模型变得更聪明。就像传统编程中的设计模式(如单例模式、工厂模式)一样,Agent模式是一种提高效率的“套路”。
大模型的设计灵感来源于人脑,因此它也会像人类一样,有时会急于求成或犯错。2023年,一条被称为“封神”的提示词——“请一步步地思考”——在AI社区广为流传。这条提示词的专业名称是思维链(Chain-of-Thought, CoT),它可以看作Agent思想的前身。当时,人们还未完全解决大模型与外界交互的问题,而CoT则为大模型提供了一种分步思考的框架。

什么是 ReAct

ReAct是Reason(推理)与Act(行动)的结合,可以理解为思维链 + 外部工具调用。 ReAct的核心思想是让大模型将复杂问题拆解为多个小问题,逐步解决。在每一步中,大模型会尝试调用外部工具,并根据工具的反馈结果判断是否需要重新调用工具。例如,如果用户询问“今天北京的天气如何?”,大模型会先调用天气API获取数据,如果API返回错误或无效结果,大模型会重新尝试调用,直到获得正确的答案。
这种机制类似于人类的行为:如果你问我“1+1等于几?”,我回答“3”,你可能不会质疑我的能力;但如果我直接忽略你的问题,或者回答“你问错人了”,你就会尝试重新提问。
由于ReAct简单易用,仅需一条提示词即可实现,且效果显著,因此在项目中非常受欢迎。当然,除了ReAct,还有许多更复杂的Agent设计模式可供选择。

ReAct Prompt 模板

要让大模型具备ReAct能力,我们需要在提问时使用ReAct Prompt,从而引导大模型以ReAct的方式思考和解决问题。
这里推荐一个非常实用的网站——LangChain Hub。LangChain是目前社区最热门的AI应用开发框架,而LangChain Hub则是其官方提供的Prompt仓库。该仓库包含了丰富的Prompt模板,并支持分类搜索,用户可以轻松找到所需的Prompt。
例如,在搜索框中输入“react”,即可找到多条ReAct相关的Prompt。你也可以通过右侧的分类筛选功能快速定位目标。
特别推荐LangChain官方提供的一个ReAct Prompt模板,链接为:LangSmith (langchain.com)。以下是该模板的核心原理分析:

  1. 分步思考:通过提示词引导大模型将问题拆解为多个步骤。 2. 工具调用:在每一步中,大模型会根据需要调用外部工具。 3. 反馈调整:根据工具返回的结果,大模型会判断是否需要重新调用工具或调整策略。 通过这种方式,ReAct Prompt能够显著提升大模型的智能水平,使其在复杂任务中表现得更加可靠和高效。

下面来分析下LangSmith原理:

{instructions}

TOOLS:
------

You have access to the following tools:

{tools}

To use a tool, please use the following format:

Thought: Do I need to use a tool? Yes Action: the action to take, should be one of [{tool_names}] Action Input: the input to the action Observation: the result of the action

When you have a response to say to the Human, or if you do not need to use a tool, you MUST use the format:

Thought: Do I need to use a tool? No Final Answer: [your response here]

Begin!

Previous conversation history:
{chat_history}

New input: {input}
{agent_scratchpad}

ReAct Prompt模板解析:

如何让大模型“思考”与“行动”

在这段ReAct Prompt模板中,{instructions}的作用是为大模型设定一个“人设”,即明确它的角色和任务。接着,模板告诉大模型可以使用{tools}中定义的工具。因此,{tools}部分需要填入工具的描述,我们会在后文详细介绍如何编写这些描述。
模板的核心在于引导大模型按照规定的格式进行思考和行动,从而赋予它推理和规划的能力。这种能力正是将大模型转变为Agent的关键。以下是模板的具体执行步骤:
1. Thought(思考) : 大模型在接收到问题后,首先会思考应该如何解决。这一步类似于人类的“头脑风暴”,大模型会分析问题的本质,并规划下一步的行动。 2. Action(行动) : 大模型会从{tools}列表中选择合适的工具来解决问题。因此,{tools_name}中需要填入工具的名称。这一步类似于人类选择工具来完成特定任务。 3. Action Input(行动输入) : 工具可以理解为函数,通常需要输入参数。在Action Input中,大模型会填入工具函数所需的输入参数。这一步确保工具能够正确执行。 4. Observation(观察) : 填入工具执行的结果,大模型会根据这些结果判断是否已经解决了问题,或者是否需要进一步调整。这一步类似于人类根据工具的使用效果来决定下一步行动。

由于Agent会将复杂问题拆解为多个子问题,因此从Thought到Observation的过程可能会重复多次,直到大模型认为已经得到了最终的答案。这时,模板会进入第二个Thought,表示大模型认为问题已经解决,并在Final Answer中输出最终答案。
此外,模板还支持在{chat_history}中填入历史对话记录,以帮助大模型理解上下文。还有一个{agent_scratchpad},用于记录Agent的思考过程。虽然这个剪贴板可以不填,但它为开发者提供了一个记录和分析Agent行为的工具。

ReAct的执行过程:人机协作的典范

ReAct的执行过程本质上是一个人与大模型协作的过程。在Action和Action Input中,大模型会告诉人类需要执行什么工具以及工具的输入参数是什么。具体的工具执行则由人类完成。人类完成工具执行后,将结果填入Observation,反馈给大模型。大模型根据反馈继续思考,直到最终得出Final Answer。
ReAct Prompt模板通过分步思考和工具调用,赋予了大模型更强的推理和规划能力。它不仅让大模型能够解决复杂问题,还通过人机协作的方式,将人类的智慧与AI的计算能力结合起来。对于开发者来说,掌握ReAct模板的使用方法,无疑是提升AI应用开发效率的关键。

代码示例

案例在阿里云百炼平台上可以直接查看:Function Calling

备注:API KEY申请方式请参见阿里云平台介绍。

from dotenv import find_dotenv, load_dotenv用法请自行查询下,这个适用于加载.env中配置的base url和api key。

import json
import random
from datetime import datetime

from openai import OpenAI
from dotenv import find_dotenv, load_dotenv

_ = load_dotenv(find_dotenv())

client = OpenAI()

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "当你想知道现在的时间时非常有用。",
            "parameters": {}
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "当你想查询指定城市的天气时非常有用。",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                    }
                }
            },
            "required": [
                "location"
            ]
        }
    }
]


# 模拟天气查询工具。返回结果示例:“北京今天是雨天。”
def get_current_weather(arguments):
    # 定义备选的天气条件列表
    weather_conditions = ["晴天", "多云", "雨天"]
    # 随机选择一个天气条件
    random_weather = random.choice(weather_conditions)
    # 从 JSON 中提取位置信息
    location = arguments["location"]
    # 返回格式化的天气信息
    return f"{location}今天是{random_weather}。"


# 查询当前时间的工具。返回结果示例:“当前时间:2024-04-15 17:15:18。“
def get_current_time():
    # 获取当前日期和时间
    current_datetime = datetime.now()
    # 格式化当前日期和时间
    formatted_time = current_datetime.strftime('%Y-%m-%d %H:%M:%S')
    # 返回格式化后的当前时间
    return f"当前时间:{formatted_time}。"


# 封装模型响应函数
def get_response(messages):
    completion = client.chat.completions.create(
        model="qwen-max",  # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        messages=messages,
        tools=tools
    )
    return completion


def call_with_messages():
    print('\n')
    messages = [
        {
            "content": input('请输入:'),  # 提问示例:"现在几点了?" "一个小时后几点" "北京天气如何?"
            "role": "user"
        }
    ]
    print("-" * 60)
    # 模型的第一轮调用
    i = 1
    first_response = get_response(messages)
    assistant_output = first_response.choices[0].message
    print(f"\n第{i}轮大模型输出信息:{first_response}\n")
    if assistant_output.content is None:
        assistant_output.content = ""
    messages.append(assistant_output)
    # 如果不需要调用工具,则直接返回最终答案
    if assistant_output.tool_calls == None:  # 如果模型判断无需调用工具,则将assistant的回复直接打印出来,无需进行模型的第二轮调用
        print(f"无需调用工具,我可以直接回复:{assistant_output.content}")
        return
    # 如果需要调用工具,则进行模型的多轮调用,直到模型判断无需调用工具
    while assistant_output.tool_calls != None:
        # 如果判断需要调用查询天气工具,则运行查询天气工具
        tool_info = {"content": "", "role": "tool", "tool_call_id": assistant_output.tool_calls[0].id}
        if assistant_output.tool_calls[0].function.name == "get_current_weather":
            # 提取位置参数信息
            argumens = json.loads(assistant_output.tool_calls[0].function.arguments)
            tool_info["content"] = get_current_weather(argumens)
        # 如果判断需要调用查询时间工具,则运行查询时间工具
        elif assistant_output.tool_calls[0].function.name == 'get_current_time':
            tool_info["content"] = get_current_time()
        tool_output = tool_info["content"]
        print(f"工具输出信息:{tool_output}\n")
        print("-" * 60)
        messages.append(tool_info)
        assistant_output = get_response(messages).choices[0].message
        if assistant_output.content is None:
            assistant_output.content = ""
        messages.append(assistant_output)
        i += 1
        print(f"第{i}轮大模型输出信息:{assistant_output}\n")
    print(f"最终答案:{assistant_output.content}")


if __name__ == '__main__':
    call_with_messages()

借助DeepSeek之东风扬帆AI海洋(二):无GPU服务器部署DeepSeek