SpringAI+DeepSeek大模型应用开发实战

内容来自黑马程序员

这里写目录标题

认识AI和大模型

  • AI的发展
    AI,人工智能(Artificial Intelligence),使机器能够像人类一样思考、学习和解决问题的技术。
  • 大语言模型

我们所熟知的大模型 (Large Language Models, LLM),例如GP、DeepSeek底层都是采用Transformer神经网络模型。

  • Transformer

大模型应用开发

模型部署方案对比

模型部署-云服务

国内知名的云服务平台都提供了全球知名的大模型的私有部署功能,甚至还提供了这些模型的API开发平台,无需部署就能提供。

云平台 公司 地址
阿里百炼 阿里巴巴 https://bailian.console.aliyun.com
干帆平台 百度 https://console.bce.baidu.com/qianfan/overview
腾讯TI平台 腾讯 https://cloud.tencent.com/product/ti
SiliconCloud 硅基流动 https://siliconflow.cn/zh-cn/siliconcloud
火山方舟-火山引擎 字节跳动 https://www.volcengine.com/product/ark

模型部署-本地部署

本地部署最简单的一种方案就是使用ollama,官网地址:https//ollama.com

调用大模型

以下是DeepSeek官方给出的一段API实例代码:

python 复制代码
# Please install OpenAI SDK first: `pip3 install openai`

from openai import OpenAI

client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
    ],
    stream=False
)

print(response.choices[0].message.content)

什么是大模型应用

传统应用和大模型应用

大模型应用是基于大模型的推理、分析、生成能力,结合传统编程能力,开发出的各种应用。

大模型应用

大模型 对话产品 公司 地址
GPT-3.5、GPT-4o ChatGPT OpenAI https://chatgpt.com/
Claude 3.5 Claude AI Anthropic https://claude.ai/chats
DeepSeek-R1 DeepSeek DeepSeek https://www.deepseek.com/
文心大模型3.5 文心一言 百度 https://yiyan.baidu.com/
星火3.5 讯飞星火 科大讯飞 https://xinghuo.xfyun.cn/desk
Qwen-Max 通义千问 阿里巴巴 https://tongyi.aliyun.com/qianwen/
Moonshoot Kimi 月之暗面 https://kimi.moonshot.cn/
Yi-Large 零一万物 零一万物 https://platform.lingyiwanwu.com/

大模型应用开发技术架构




SpringAI

对话机器人

快速入门

  1. 引入依赖
xml 复制代码
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-bom</artifactId>
			<version>${spring-ai.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
  1. 配置模型
yml 复制代码
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:7b
yml 复制代码
spring:
  ai:
    openai:
      base-url: https://dashscope.aliyuncs.com/compatible-model
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: qwen-max # 模型名称
          temperature: 0.8 # 模型温柔度,值越大,输出结果越随机
  1. 配置客户端
java 复制代码
   @Bean
   public ChatClient chatClient(OllamaChatModel model){
       return ChatClient.builder(model)
               .defaultSystem("你是可爱的助手,名字叫小团团")
               .build();
   }
java 复制代码
 String content = chatClient.prompt()
          .user("你是谁?")
          .call()
          .content();

// 流式
Flux<String> content = chatClient.prompt()
           .user("你是谁?")
           .stream()
           .content();

会话日志

SpringAI利用了AOP原理提供了AI会话是的拦截、增强等功能,也就是Advisor。

java 复制代码
@Bean
public ChatClient chatClient(OllamaChatModel model){
    return ChatClient.builder(model)   // 创建ChatClient工厂实例
            .defaultSystem("你是可爱的助手,名字叫小团团") 
            .defaultAdvisors(new SimpleLoggerAdvisor()) // 配置日志Advisor
            .build(); // 构建ChatClient实例
}

会话记忆

大模型是具备记忆能力的,要想让大模型记住之前聊天的内容,唯一的办法就是把之前聊天的内容与新的提示词一起发给大模型。

python 复制代码
from openai import OpenAI

#1.初始化OpenAI客户端
from openai import OpenAI

#1.初始化OpenAI客户端
client = OpenAI(
    api_key="<DeepSeek API Key>",
    base_url="https://api.deepseek.com")

#2.发送http请求到大模型
response = client.chat.completions.create(
    model="deepseek-r1",
    temperature=0.7,
    messages=[
        {"role":"system","content":"你是一个热心的AI助手,你的名字叫小团团"},
        {"role":"user","content":"你好,你是谁? "},
    ],
    stream=False
)
# 3.打印返回结果
print(response.choices[o].message.content)
  1. 定义会话存储方式
java 复制代码
 public interface ChatMemory {
     void add(String conversationId, List<Message> messages);

     List<Message> get(String conversationId, int lastN);

     void clear(String conversationId);
 }
java 复制代码
   @Bean
   public ChatMemory chatMemory(){
       return new InMemoryChatMemory();
   }
  1. 配置会话记忆
java 复制代码
 @Bean
 public ChatClient chatClient(OllamaChatModel model){
     return ChatClient.builder(model)
             .defaultSystem("你是可爱的助手,名字叫小团团")
             .defaultAdvisors(
                     new SimpleLoggerAdvisor(),
                     new MessageChatMemoryAdvisor(chatMemory())
             )
             .build();
 }
  1. 添加会话id
java 复制代码
Flux<String> content = chatclient.prompt()
    .user("你好,我叫小明")
    .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId))
    .stream()
    .content();

添加会话id到AdvisorContext上下文中

相关推荐
海豚调度5 小时前
Linux 基金会报告解读:开源 AI 重塑经济格局,有人失业,有人涨薪!
大数据·人工智能·ai·开源
令狐少侠20115 小时前
ai之RAG本地知识库--基于OCR和文本解析器的新一代RAG引擎:RAGFlow 认识和源码剖析
人工智能·ai
小屁妞10 小时前
Spring AI Alibaba智能测试用例生成
ai·测试用例生成·ai生成测试用例
tonngw12 小时前
DeepSeek 帮助自己的工作
ai
张彦峰ZYF1 天前
从检索到生成:RAG 如何重构大模型的知识边界?
人工智能·ai·aigc
难受啊马飞2.01 天前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习
运器1231 天前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
虾条_花吹雪1 天前
2、Connecting to Kafka
分布式·ai·kafka
DeepSeek大模型官方教程1 天前
NLP之文本纠错开源大模型:兼看语音大模型总结
大数据·人工智能·ai·自然语言处理·大模型·产品经理·大模型学习
程序员鱼皮1 天前
Cursor 1.2重磅更新,这个痛点终于被解决了!
ai·程序员·编程·agent·软件开发