05-07 Spring AI 核心特性:流式输出
✅Spring AI 核心特性:流式输出
前面讲过不用Sping AI,在Java中做流式输出的方案,主要是基于SSE,之前讲Spring AI的例子的时候,其实也提到过。
比如ChatModel中通过stream方法可以做流式输出,是因为他实现了StreamingChatModel接口中。
123456789101112131415161718192021222324@RestController@RequestMapping("/ai/output")public class StreamOutputController implements InitializingBean { @Autowired private DashScopeChatModel chatModel; private ChatClient chatClient; @RequestMapping("/stream/chat") public Flux<String> streamChat(@RequestPa ...
05-06 Spring AI 核心特性:提示词工程
✅Spring AI 核心特性:提示词工程前面我们有一整个章节专门给大家介绍了提示词工程,那么,在Spring AI中如何利用这些提示词的技巧呢?
系统提示词和用户提示词首先,Spring AI遵循了Open AI的规范,提示词分为系统提示词和用户提示词。分别是system和user,比如:
1234567891011121314151617181920212223242526272829303132333435363738@RestController@RequestMapping("/ai/prompt")public class PromptEngineerController implements InitializingBean { @Autowired private DashScopeChatModel chatModel; private ChatClient chatClient; //预设角色 @GetMapping("/chat") public Flux<Stri ...
05-05 开发必备的Spring AI核心概念
✅开发必备的Spring AI核心概念我们要用Spring AI,最重要的功能就是我们要用大模型,所以模型(Model)肯定是Spring AI中最最最核心的一个概念了。
在Spring AI中支持很多模型,根据模型的功能分成了”Chat Model”、”Embedding Model”、”Image Model”、”Audio Model”等。
ChatModel其中,ChatModel就是专门和对话模型对接的一套接口。定义了与支持对话功能的语言模型交互的统一方式。它抽象了不同厂商(如 OpenAI、Anthropic、Cohere、Azure OpenAI、Hugging Face 等)的具体实现,统一使用方法,让开发者不需要关注底层调用细节。
无论底层使用的是 OpenAI 的 GPT-4,还是用百炼这种平台对接开源模型,或者是本地部署的 Ollama,你都可以通过相同的 ChatModel 接口来调用它们。
123456789101112131415161718192021222324252627public interface ChatMo ...
05-04 接入Spring AI 与Spring AI Alibaba
✅接入Spring AI 与Spring AI Alibaba
前面在介绍百炼的时候,我们讲过可以通过curl发起一个http请求完成的百炼上面的模型的调用。我们这里主要是想把百炼通过springboot的方式同时接入Spring AI Alibaba和Spring AI。
使用Spring AI Alibaba做接入,可以快速的同时接入Spring AI和Spring AI Alibaba,也可以更加方便我们做模型开发,以及调用百炼上的模型。
但是这么做也有个缺点,那就是如果Spring AI的版本更新比较快,而Spring AI Alibaba没那么快的话,可能就没办法快速的用上新版本的特性了。
首先,我们先增加以下依赖(先不用管他是干啥的,后面会讲,先照做)
1234567891011121314151617<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud.ai</groupId> & ...
05-03 LLM应用开发框架:LangChain
✅LLM应用开发框架:LangChainLangChain 是一个非常知名的开源框架,他的主要作用是简化基于大型语言模型构建应用程序的过程。它提供了一套模块化、可组合的工具和抽象,帮助开发者将 LLM 与外部数据源、记忆机制、工具调用等能力结合起来,从而构建更强大、更智能的应用,如问答系统、Agent、文档分析工具、聊天机器人等。
降低开发复杂度:避免重复造轮子,快速搭建 LLM 应用原型。
模块化设计:各组件解耦,易于替换和扩展。
支持 RAG 架构:轻松接入私有知识库,提升回答准确性。
生态丰富:支持数十种 LLM、向量数据库、文档格式等。
社区活跃:持续更新,文档完善,案例丰富。
LangChain 的核心功能
模型 I/O
封装了对主流 LLM(如 OpenAI、Anthropic、Hugging Face 等)的统一接口。
支持提示模板(PromptTemplate)和输出解析(OutputParser)。
链(Chains)
允许将多个组件(如提示 + 模型 + 解析器)串联成工作流。
数据连接
提供文档加载器(Doc ...
05-02 基于SSE实现大模型流式输出
✅基于SSE实现大模型流式输出上一节我们介绍用HTTP Client方式调用大模型的时候,提到了说页面返回比较慢,是因为我们没有做流式输出。
所谓流式输出,其实就是不需要等全部内容都返回后一起展示出来,而是可以在过程中一部分一部分的展示出来。现在主流的AI对话工具都是用的流式输出的方式,这样可以减少用户的等待时间,用户体验更好。
做流式输出,最常见的方式就是SSE,即Server-Sent Events,这是一种服务器向客户端推送数据的 Web 技术,它基于 HTTP 协议,允许服务器单向地向客户端发送数据流。
因为它能推送,所以可以一个字一个字推送,那么客户端上面就可以是一个字一个字的显示了。
你提供的内容是一个 HTTP 请求报文,具体是客户端(比如浏览器或某个程序)向服务器发起的一个请求,目的是建立一个 Server-Sent Events (SSE) 连接。
SSE
SSE 肯定也是基于 HTTP 协议的,浏览器向服务器发起一个 HTTP 请求。该请求是一个标准的 HTTP 请求,但需要保持长连接,直到服务器向客户端推送数据。
比如用curl的方式,向 ...
05-01 Java中大模型调用的多种方式
✅Java中大模型调用的多种方式我们要讲的是基于Java的大模型应用开发,那么就需要介绍下在java中怎么和大模型交互。
坐稳扶好,正式开始进入代码部分了。**(注意, 我们的项目JDK要求最低是JDK17,建议用JDK 21)**
在前面介绍百炼的时候,我们讲过,可以通过curl来调用模型的:
12345678910111213141516curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \-H "Authorization: Bearer $DASHSCOPE_API_KEY" \-H "Content-Type: application/json" \-d '{ "model": "qwen-plus", "messages": [ { "role": " ...
04-07 理解 OpenAI API
✅理解 OpenAI API这一章节介绍了很多和提示词有关的内容,提示词的好坏决定着模型的输出效果,但是其实,模型是否能正常输出,以及输出的效果好不好,还有一些其他的参数也会有所影响。
这一篇我们介绍下其他一些和模型输出有关的内容,重点讲解下我们后续课程中会高频使用到的OpenAI 的API。
OpenAI API 几乎是所有基于大模型应用开发的底层基础(有部分大模型有自己的标准,比如早期Azure的大模型与OpenAI的并不兼容)。无论构建什么样的智能应用场景,开发的核心逻辑始终围绕这个API 的组合调用展开的。在很多智能体框架中,如SpringAI、Langchain、Autogen等等,他们都很好的对这个API进行了深度封装,但是不论框架如何封装设计,最终都会归结为向大模型的 API 接口发送一个格式化的 HTTP 请求。甚至,我们可以只用一个httpclient即可开展我们的智能体应用开发。
目前主流的大模型几乎都已经完全兼容OpenAI的接口规范(https://platform.openai.com/docs/overview ),OpenAI API 已成为事 ...
04-06 nof1提示词工程案例
✅nof1提示词工程案例我们拿一个最近比较火的例子,来说明一下提示词工程的重要性,最近,https://nof1.ai/ 很火,这是一个国外公司做的,给每个大模型1万美金的初始金额,让他们可以自己操作加密货币。然后展示他们的收益情况。
这个东西的实现就是完全依靠提示词工程的,使用的都是未经过任何微调的基模做的,也没有做任何的对话记忆。在他的网站上我们能看到他的用户提示词,但是看不到系统提示词,但是网上也有人通过文档和交易行为推断出系统提示词的核心结构。
系统提示词:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283You are an autonomous cryptocurrency trading agent operating in live markets on the Hyperliquid dece ...
04-05 Prompt评测方法
✅Prompt评测方法
当我们设计开发出了一个提示词后,是否能让大模型给出我们想要的、高质量的回答。那就需要一套方法来评估它是否真的有效,或者说是绝大多数场景下是有效的。大模型提示词的评测方法主要分为两类:人工评测 和 自动评测。
针对提示词的评测,其实主要还是靠人工评测的,所谓的炼丹过程,就是提示词调优的过程,只有一次一次的根据问答结果,不断的调整,才能让提示词更好,而一个提示词到底好不好,很多时候机器不如人的感受更加直接和明显。
人工评测
利用行业专家或目标用户,根据他们的主观判断、专业知识和实际体验,对模型输出的质量进行主观评估和打分。人工评测就是评测的最权威、最可靠的评估方式,最贴近实际用户的体验,但缺点是成本高、耗时长。
人工评测通过人工打分或标注来评估模型输出质量,更能捕捉文本的主观质量。
评测维度在设计人工评测标准时,可以从以下几个维度入手(不同任务的侧重点不一样):
Field
Value
维度
说明
相关性
输出是否与提示词要求紧密相关,没有偏题。
准确性
信息是否真实、无错误,没有胡编乱造。
逻辑性
思维是否连贯、结 ...
