SpringAI + DeepSeek大模型應用開發 - 初識篇

一、認識AI

1. AI的發展

AI,人工智能(Artificial Intelligence),使機器能像人類一樣思考、學習和解決問題的技術。

2. 大模型及其原理

自然語言處理(Natural Language Processing, NLP)中,有一項關鍵技術叫Transformer,這是一種先進的神經網絡模型,是現如今AI高速發展的最主要原因。我們所熟知的大模型(Large Language Models, LLM),例如GPT、DeepSeek底層都是采用Transformer神經網絡模型。

  • 機器翻譯

  • 語音識別

  • 文生圖

  • 推理預測

二、大模型應用開發

1. 模型部署

(1)使用方式

云部署本地部署開發API
優點
  • 前期成本低
  • 部署維護簡單
  • 彈性擴展
  • 全球訪問
  • 數據安全
  • 不依賴外部網絡
  • 長期成本低
  • 高度定制
  • 前期成本極低
  • 無需部署
  • 無需維護
  • 全球訪問
缺點
  • 數據隱私問題
  • 網絡依賴
  • 長期成本高
  • 初始成本高
  • 維護復雜
  • 部署周期長
  • 數據隱私
  • 網絡依賴
  • 長期成本高
  • 定制限制

(2)云服務

云平臺公司地址
阿里百煉阿里巴巴大模型服務平臺百煉控制臺
騰訊TI平臺騰訊騰訊云TI平臺 _機器學習平臺_全棧式人工智能開發服務平臺-騰訊云
千帆平臺百度百度智能云千帆大模型平臺
SiliconCloud硅基流動SiliconFlow
火山方舟-火山引擎字節跳動火山方舟-火山引擎

(3)開發大模型服務

①登錄阿里百煉控制臺,領取免費額度

②創建API Key

(4)本地部署

?本地部署最簡單的一種方案就是使用ollama,官網地址:Download Ollama on Windows

①下載安裝ollama

②根據自己的顯存選擇合適的模型

③測試

2. 調用大模型

2.1 大模型接口規范

以下是DeepSeek官方給出的一段API示例代碼:

# Please install OpenAI SDK first: `pip3 install openai`from openai import OpenAI# 1.初始化OpenAI客戶端,要指定兩個參數:api_key、base_url
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")# 2.發送http請求到大模型,參數比較多
response = client.chat.completions.create(model="deepseek-chat", # 2.1.選擇要訪問的模型messages=[ # 2.2.發送給大模型的消息{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "Hello"},],stream=False # 2.3.是否以流式返回結果
)print(response.choices[0].message.content)

(1)接口說明

  • 請求方式:通常是POST,因為要傳遞JSON風格的參數
  • 請求路徑,與平臺有關
    • DeepSeek官方平臺:https://api.deepseek.com
    • 阿里云百煉平臺:https://dashscope.aliyuncs.com/compatible-model/v1
    • 本地ollama部署的模型:http://localhost:11434
  • 安全校驗:開發平臺都需要提供API_KEY來校驗權限,本地ollama則不需要
  • 請求參數:參數很多,比較常見的有:
    • model:要訪問的模型名稱
    • messages:發送給大模型的消息,是一個數組,其中的消息要包含兩個屬性
      • role:消息對應的角色
      • content:消息內容,也稱為提示詞(Prompt),也就是發送給大模型的指令
    • stream:true,代表響應結果流式返回;false,代表響應結果一次性返回,但需要等待
    • temperature:取值范圍[0, 2),代表大模型生成結果的隨機性,越小隨機性越低。DeepSeek-R1不支持。

測試:打開Postman進行測試

(2)提示詞角色

通常消息的角色有三種:

角色描述示例
system優先于user指令之前的指令,也就是給大模型設定角色和任務背景的系統指令你是一個樂于助人的編程助手,你以光頭強的風格來回答用戶的問題
user終端用戶輸入的指令(類似于你在ChatGPT聊天框輸入的內容)寫一首關于Java編程的詩
assistant由大模型生成的消息,可能是上一輪對話生成的結果注意,用戶可能與模型產生多輪對話,每輪對話模型都會生成不同結果

其中System類型的消息非常重要,影響了后續AI會話的行為模式。比如,我們會發現,當我們詢問這些AI對話產品“你是誰”這個問題的時候,每個AI的回答都不一樣,這是怎么回事呢?

這其實是因為AI對話產品并不是直接把用戶的提問發送給LLM,通常都會在user提問的前面通過System消息給模式設定好背景。因此,不同的大模型由于System設定不同,回答的答案也不一樣。

示例:

## Role
System: 你是一家名為《黑馬程序員》的職業教育培訓公司的智能客服,你的名字叫小黑。請以友好、熱情的方式回答用戶問題。
## Example
User: 你好
Assisant: 你好,我是小黑,很高興認識你!😊 你是想了解我們的課程信息,還是有其他關于職業培訓的問題需要咨詢呢?無論什么問題,我都會盡力幫你解答哦!

(3)會話記憶問題

這里還有一個問題:我們為什么要把歷史消息都放入Messages中,形成一個數組?

  • 答:這是因為大模型是沒有記憶的,因此我們調用API接口與大模型對話時,每一次對話信息都不會保留,多次對話之間都是獨立的,沒有關聯的。

但是大家可能發現了,我們日常使用的AI對話產品卻能夠記住每一輪對話信息,根據這些信息進一步回答,這是怎么回事呢?

  • 答案就是Messages數組。我們只需要每一次發送請求時,都把歷史對話中每一輪的User消息、Assistant消息都封裝到Messages數組中,一起發送給大模型,這樣大模型就會根據歷史對話信息進一步回答,就像是擁有了記憶一樣。

示例:

System: 你是一家名為《黑馬程序員》的職業教育培訓公司的智能客服,你的名字叫小黑。請以友好、熱情的方式回答用戶問題。User: 你好,我是小明
Assisant: 你好小明,我是小黑,很高興認識你!😊 你是想了解我們的課程信息,還是有其他關于職業培訓的問題需要咨詢呢?無論什么問題,我都會盡力幫你解答哦!User: 幫我寫一個跟我名字有關的詩
Assisant: 好的,下面是以你的名字寫的詩:
小明啊小明,名字真明亮,
如晨曦初現,驅散了黑暗。
心中有火焰,智慧放光芒,
在求知路上,你是那最亮的星。像清澈溪流,繞過知識山崗,
帶著勇氣和希望,不斷向前方。
你的每一步,都閃耀著堅強,
未來的大門,正為你而敞開。無論走到哪,世界因你更晴朗,
小明啊小明,愿你永遠這樣,
保持那份純真,還有對夢想的向往,
人生的旅途上,成為自己的太陽。

3. 大模型應用

大模型應用是基于大模型的推理、分析、生成能力,結合傳統編程能力,開發出的各種應用。

傳統應用AI大模型
核心特點基于明確規則的邏輯設計,確定性執行,可預測結果基于數據驅動的概率推理,擅長處理模糊性和不確定性
擅長領域

1. 結構化計算

  • 例:銀行轉賬系統(精確的數值計算、賬戶余額增減)
  • 例:Excel公式(按固定規則處理表格數據)

2. 確定性任務

  • 例:排序算法(快速排序、冒泡排序),輸入與輸出關系完全可預測

3. 高性能低延遲場景

  • 例:操作系統內核調度、數據庫索引查詢,需要毫秒級響應

1. 自然語言處理

例:ChatGPT生成文章、翻譯語言,或客服機器人理解用戶意圖

2. 非結構化數據分析

例:醫學影像識別(X光片中的腫瘤檢測),或語音轉文本

3. 創造性內容生成

例:Stable Diffusion生成符合描述的圖像,或AI作曲工具創作音樂

4. 復雜模式預測

例:股票市場趨勢預測(基于歷史數據關聯性,但需要注意可靠性限制)

不擅長領域

1. 非結構化數據處理

  • 例:無法直接理解用戶自然語言提問(如“幫我寫一首關于秋天的詩”)

2. 模糊推理與模式識別

  • 例:判斷一張圖片是“貓”還是“狗”,傳統代碼需手動編寫特征提取規則,效果差

3. 動態適應性

  • 例:若用戶需要頻繁變化(如電商促銷規則每天調整)需不斷修改代碼。

1. 精確計算

  • 例:AI可能錯誤計算"12345 × 6789"的結果(需依賴計算器類傳統程序)

2. 確定性邏輯驗證

  • 例:驗證身份證號碼是否符合規則(AI可能生成看似合理但非法的號碼)

3. 低資源消耗場景

  • 例:嵌入式設置(如微波爐控制程序)無法承受大模型的算例需要

4. 因果推理

  • 例:AI可能誤判“公雞打鳴導致日出”的因果關系

傳統應用開發和大模型有著各自擅長的領域:

  • 傳統編程:確定性、規則化、高性能,適合數學計算、流程控制等場景。
  • AI大模型:概率性、非結構化、泛化性,適合語言、圖像、創造性任務。

兩者之間恰好是互補的關系,兩者結合則能解決以前難以實現的一些問題:

  • 混合系統(Hybrid AI)
    • 用傳統程序處理結構化邏輯(如支付校驗),AI處理非結構化任務(如用戶意圖識別)。
    • 示例:智能客服中,AI理解用戶問題,傳統代碼調用數據庫返回結果
  • 增強可解釋性
    • 結合規則引擎約束AI輸出(如法律文檔生成時強制符合條款格式)。
  • 低代碼/無代碼平臺
    • 通過AI自動生成部分代碼(如Github Copilot),降低傳統開發門檻。

在傳統應用開發中介入AI大模型,充分利用兩者的優勢,既能利用AI實現更加便捷的人機交互,更好地理解用戶意圖,又能利用傳統編程保證安全性和準確性,強強聯合,這就是大模型應用開發的真諦!綜上所述,大模型應用就是整合傳統程序和大模型的能力和優勢來開發的一種應用。

大模型對話產品公司地址
GPT-3.5、GPT-4oChatGPTOpenAIhttps://chatgpt.com/
Claude 3.5Claude AIAnthropichttps://claude.ai/chats
DeepSeek-R1DeepSeekDeepSeekhttps://www.deepseek.com/
文心大模型3.5文心一言百度https://yiyan.baidu.com/
星火3.5訊飛星火科大訊飛https://xinghuo.xfyun.cn/desk
Qwen-Max通義千問阿里巴巴https://tongyi.aliyun.com/qianwen/
MoonshootKimi月之暗面https://www.kimi.com/
Yi-Large零一萬物零一萬物https://platform.lingyiwanwu.com/

常見應用領域:

4. AI應用開發技術框架

4.1 技術架構

4.1.1 Prompt問答

特征:

  • 利用大模型推理能力完成應用的核心功能

應用場景:

  • 文本摘要分析
  • 輿情分析
  • 坐席檢查
  • AI對話

4.1.2 Agent + Function Calling

大模型雖然可以理解自然語言,更清晰弄懂用戶意圖,但是確無法直接操作數據庫、執行嚴格的業務規則。這個時候我們就可以整合傳統應用大于大模型的能力。

特征:

  • 將應用端業務能力與AI大模型推理能力結合,簡化復雜業務功能開發

應用場景:

  • 旅行指南
  • 數據提取
  • 數據聚合分析
  • 課程顧問

簡單來說,可以分為以下步驟:

  • 我們可以把傳統應用中的部分功能封裝成一個個函數(Function);
  • 然后在提示詞中描述用戶的需求,并且描述清除每個函數的作用,要求AI理解用戶意圖,判斷什么時候需要調用哪個函數,并且將任務拆解為多個步驟(Agent);
  • 當AI執行到某一步,需要調用某個函數時,會返回要調用的函數名稱、函數需要的參數信息;
  • 傳統應用接收到這些數據以后,就可以調用本地函數,再把函數執行結果封裝為提示詞,再次發送給AI;
  • 以此類推,逐步執行,直到達成最終結果。

4.1.3?RAG(Retrieval Augmented Generation)

RAG(Retrieval-Augmented Generation)叫作檢索增強生成。簡單來說就是把信息檢索技術和大模型結合的方案。

大模型從知識角度存在很多限制:

  • 時效性差:大模型訓練比較耗時,其訓練數據都是舊數據,無法實時更新
  • 缺少專業領域知識:大模型訓練數據都是采集的通用數據,缺少專業數據

可能會有同學說,把最新的數據或者專業文檔都拼接到提示詞,一起發給大模型不就可以了嗎。

現在的大模型都是基于Transformer神經網絡,Transformer的強項就是所謂的注意力機制。它可以根據上下文來分析文本含義,所以理解人類意圖更加準備。

但是,這里的上下文的大小是有限制的,GPT3剛出來的時候,僅支持2000個token的上下文。現在領先一點的模型支持的上下文數量也不超過200k token,所以海量知識庫數據是無法直接寫入提示詞的。

怎么辦呢?RAG技術正是來解決這一問題的。

RAG就是利用信息檢索技術來拓展大模型的知識庫,解決大模型的知識限制。整體來說RAG分為兩個模塊:

檢索模塊(Retrieval):負責存儲和檢索拓展的知識庫

  • 文本拆分:將文本按照某種規則拆分為很多片段
  • 文本嵌入(Embedding):根據文本片段內容,將文本片段歸類存儲
  • 文本檢索:根據用戶提問的問題,找出最相關的文本片段

生成模塊(Generation):

  • 組合提示詞:將檢索到的片段與用戶提問組織成提示詞,形成更豐富的上下文信息
  • 生成結果:調用生成式模型(例如DeepSeek)根據提示詞,生成更準確的回答

由于每次都是從向量庫中找出與用戶問題相關的數據,而不是整個知識庫,所以上下文就不會超過大模型的限制,同時又保證了大模型回答問題是基于知識庫中的內容。

離線步驟:

  • 文檔加載
  • 文檔切片
  • 文檔編碼
  • 寫入知識庫

在線步驟:

  • 獲得用戶問題
  • 檢索知識庫中相關知識片段
  • 將檢索結果和用戶問題填入Prompt模板
  • 用最終獲得的Prompt調用LLM
  • 由LLM生成回復

應用場景:

  • 個人知識庫
  • AI客服助手

4.1.4 Fine-tuning

Fine-tuning就是模型微調,就是在預訓練大模型(比如DeepSeek、Qwen)的基礎上,通過企業自己的數據做進一步的訓練,使大模型的回答更符合自己企業的業務需求。這個過程通常需要在模型的參數上進行細微的修改,以達到最佳的性能表現。

在進行微調使,通常會保留模型的大部分結構和參數,只對其中的一小部分進行調整。這樣做的好處是可以利用預訓練模型已經學習到的知識,同時減少了訓練時間和計算資源的消耗。微調的過程包括以下幾個關鍵步驟:

  • 選擇合適的預訓練模型:根據任務的需求,選擇一個已經在大量數據上進行預訓練的模型,如Qwen-2.5
  • 準備特定領域的數據集:收集和準備與任務相關的數據集,這些數據將用于微調模型。
  • 設置超參數:調整學習率、批次大小、訓練輪次等超參數,以確保模型能夠有效學習新任務的特征。
  • 訓練和優化:使用特定任務的數據對模型進行訓練,通過前向傳播、損失計算、反向傳播和權重更新等步驟,不斷優化模型的性能。

模型微調雖然更加靈活、強大,但是也存在一些問題:

  • 需要大量的計算資源
  • 調參復雜性高
  • 過擬合風險

總之,Fine-tuning成本較高,難度較大,并不適合大多數企業。而且前面三種技術方案已經能夠解決常見問題了。

4.2 技術選項

從開發成本由低到高來看,四種方案排序如下:

Prompt < Function Calling < RAG < Fine-tuning

所以我們在選擇技術時,通常也應該遵循“在達成目標效果的前提下,盡量降低開發成本”這一首要原則。然后可以參考以下流程來思考:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85379.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++第八天-多態

虛函數虛析構函數純虛函數與抽象類 多態實現的條件&#xff1a;&#xff08;1&#xff09;公有繼承 &#xff08;2&#xff09;派生類重寫基類虛函數 &#xff08;3&#xff09;基類指針/引用指向派生類對象 虛函數不能是構造函數&#xff0c;不能是靜態函數&#xff0c;不能…

全景圖渲染Vue3+TS使用Photo Sphere Viewer插件實現

1.Photo Sphere Viewer插件安裝: title=插件安裝 體驗AI代碼助手 代碼解讀復制代碼npm install photo-sphere-viewer -S 或 yarn add photo-sphere-viewer -S 2.原始全景圖展示 初始化標簽容器 體驗AI代碼助手 代碼解讀復制代碼 // 全景圖的根節點必須要具備寬高 TS引用,創建…

Redis之分布式鎖(3)

這篇文章我們來詳細介紹一下如何正確地基于Redis實現分布式鎖。 基于Redis的分布式鎖實現 組件依賴 首先通過Maven引入Jedis開源組件&#xff0c;在pom.xml文件加入下面的代碼&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId&g…

Java課堂筆記11

三個修飾符 一、abstract&#xff08;抽象&#xff09; 1.抽象方法只能在抽象的類里&#xff0c;只有方法的聲明&#xff0c;沒有方法的實現。&#xff08;沒有{}直接&#xff1b;結尾&#xff09;。 2.abstract修飾的類稱為抽象類。 注意&#xff1a;&#xff08;1&#x…

Linux 核心知識點整理(高頻考點版)

一、編譯與工具鏈 GCC 編譯流程 四階段&#xff1a;預處理&#xff08;-E&#xff0c;處理頭文件 / 宏&#xff09;→ 編譯&#xff08;-S&#xff0c;生成匯編&#xff09;→ 匯編&#xff08;-c&#xff0c;生成目標文件&#xff09;→ 鏈接&#xff08;生成可執行程序&…

輕量化社交管理方案:Skout與云手機的巧妙搭配

在移動社交時代&#xff0c;許多用戶開始嘗試通過多賬號管理來拓展社交圈層。近期測試了Skout社交平臺與亞矩陣云手機的搭配使用&#xff0c;發現這個組合為輕量級社交賬號管理提供了一個值得關注的解決方案。 基礎功能介紹 這套組合的核心優勢在于&#xff1a; 通過云手機實…

ETL連接器好用嗎?如何實現ETL連接?

目錄 一、ETL連接器的功能和優勢 1. 數據抽取能力 2. 數據轉換功能 3. 數據加載功能 4. 優勢總結 二、實現ETL連接的步驟 1. 需求分析 2. 選擇合適的ETL連接器 3. 配置數據源和目標系統 4. 設計ETL流程 5. 開發和測試ETL任務 6. 部署和監控ETL任務 三、ETL連接器在…

uniapp實現聊天中的接發消息自動滾動、消息定位和回到底部

前言 前言無需多言&#xff0c;想必大家對聊天軟件的功能已經很熟悉&#xff0c; 這里不做過多贅述&#xff0c;筆者通過uniapp實現聊天中的接發消息自動滾動、消息定位和回到底部。 代碼實現 <template><view class"chat-container"><!-- 消息列表…

MyBatisMyBatis plus

整合 MyBatis 到 Spring 或 Spring Boot 項目中&#xff0c;可以極大地簡化開發流程&#xff0c;尤其是當使用 Spring Boot 時&#xff0c;它提供了自動配置功能&#xff0c;使得集成更加簡便。 在 Spring Boot 中整合 MyBatis 1. 添加依賴 首先&#xff0c;在 pom.xml 文件中…

Stable Diffusion 實戰-手機壁紙制作 第二篇:優化那些“崩臉”和“馬賽克”問題,讓圖像更加完美!

歡迎回來!在《StableDiffusion實戰-手機壁紙制作》系列的第一篇中,我們成功完成了基礎操作,制作出了令人炫目的手機壁紙。 今天,我們將進入一個更高階的領域——優化處理。因為誰不想讓生成的藝術品更完美呢?尤其是避免“崩臉”和“馬賽克”這種讓人抓狂的問題! 創作的路…

408第一季 - 數據結構 - B樹與B+樹

B樹 性質 可以看見一個節點可以有多個數字了 然后也滿足左小右大的特征 然后所有的葉子節點都在同一層&#xff0c;然后2個數字的節點就可以有3個分支 然后呢&#xff0c;每個節點里面到底有幾個數字是有規定的公式的 就這個公式&#xff0c;m是5階的&#xff0c;算出來是2和…

SSRF5 Gopher 協議對內網 Web 服務進行 sql 注入 GET 類型和POST類型

實驗環境&#xff1b; Centos7.6上同時安裝sqli-lib和pikachu 一.Gopher 協議對內網 Web 服務進行 sql 注入 GET 類型 我們先訪問sqli-lib第1關 然后我們構造URL&#xff1a; http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlhttp://192.168.112.12/sql…

Python打卡DAY31

DAY31&#xff1a;文件的規范拆分和寫法 恩師浙大疏錦行 知識點&#xff1a; 規范的文件命名規范的文件夾管理機器學習項目的拆分編碼格式和類型注解 一、機器學習項目流程&#xff1a; 1、數據加載&#xff1a;從文件、數據庫、API 等獲取原始數據。 - 命名參考&#xff1a;…

字符串大數 -減法

描述 以字符串的形式讀入兩個數字&#xff0c;編寫一個函數計算它們的和&#xff0c;以字符串形式返回。 代碼實現 大小判斷&#xff1a;a - b 與 b - a 的絕對值相等將大的數放前面&#xff0c;抽離出結果的符號 import random s, t str(random.randint(1000, 9999)), s…

android google tts如何不聯網內部預置多國語音包

在內置Google GMS服務的設備中&#xff0c;可以正常使用TTS&#xff0c;并且可以聯網下載多國的語音包。然而&#xff0c;對于未通過GMS認證&#xff0c;只能使用基礎的TTS英語播報&#xff0c;而且聯網后是無法下載語音包的&#xff0c;會提示需要google service。本文基于以上…

Java 全棧開發學習:從后端基石到前端靈動的成長之路

目錄 一、開篇&#xff1a;與 Java 全棧的初遇 二、后端學習&#xff1a;SpringBoot 構建穩健基石 &#xff08;一&#xff09;SpringBoot3 入門&#xff1a;簡約而不簡單的啟程 &#xff08;二&#xff09;Spring Boot Web 應用開發&#xff1a;構建交互橋梁 &#xff08;…

AquaCrop模型源代碼分析、模型優化與敏感性分析、未來氣候變化影響分析

AquaCrop是由世界糧食及農業組織&#xff08;FAO&#xff09;開發的一個先進模型&#xff0c;旨在研究和優化農作物的水分生產效率。這個模型在全球范圍內被廣泛應用于農業水管理&#xff0c;特別是在制定農作物灌溉計劃和應對水資源限制方面顯示出其強大的實用性。AquaCrop 不…

開源模型應用落地-讓AI更懂你的每一次交互-mem0-QDrant-Streamlit(一)

一、前言 在人工智能迅猛發展的今天,大型語言模型(LLM)已經成為各行各業的重要工具。然而,盡管這些模型在生成文本、理解語義等方面表現出色,但它們仍然面臨一個關鍵挑戰——缺乏持久的記憶能力。傳統的對話系統往往只能基于當前對話輪次進行回應,無法有效保留和利用歷史…

RPC - Response模塊

Requestor 類是一個請求-響應管理器&#xff0c;負責發送請求并處理響應&#xff0c;支持三種交互模式&#xff1a;同步、異步和回調。它跟蹤所有發出的請求&#xff0c;當響應到達時將其匹配到對應的請求并進行處理。 newDescribe 函數解析 newDescribe 函數負責創建和注冊一…

超高速10G采集卡

超高速10G采集卡是一款高端14位數據采集平臺&#xff0c;旨在滿足最具挑戰性的測量環境。 特性: 單通道和雙通道操作 單通道10GSPS或雙通道5GSPS 7 GByte/s持續數據傳輸速率開放式FPGA支持實時DSP 脈沖檢測固件選項波形平均固件選項 特征 單通道和雙通道工作模式雙通道5G…