你平时用过哪些AI工具?

典型回答 初级回答:用过DeepSeek、文心一言、通义千问等国产对话式AI工具 中级回答:通过梯子用过国外的AI,如GPT等,并且付费过。 使用过通义灵码等免费编程工具。 高级回答:除了文字对话式AI以外,还用过其他的多模态类型的AI工具,比如Runway、DELL-E、Midjourney、Stable Diffusion、可灵等。 使用过Cursor、Claude Code等付费的编程工具。 牛逼回答:自己部署过AI模型,并尝试过做调优。

March 22, 2026 · 1 min · santu

大模型产生幻觉的原因,如何解决?

典型回答 大模型的“幻觉”指的是 AI 生成了看似合理但实际上错误或编造的信息。例如,它可能会编造不存在的事实、错误引用文献、甚至捏造公司或人物的信息。 幻觉产生原因 语言模型的“填空”机制 Transformer 语言模型本质上是一个 “填空预测器”,它是根据概率预测来选择下一个输出的词,而不是在“思考”正确答案。 训练数据存在缺陷 训练数据本身可能包含 错误信息、不完整数据、偏见信息,导致模型学到不真实的内容。 训练数据可能过时,例如,GPT-4 的数据 截止到 2023 年初,无法回答最新时事。 缺乏事实验证能力 语言模型在生成文本时,并不会主动去 查证答案的真实性。 长文本记忆力有限 由于 上下文窗口有限(如 GPT-4-turbo 约 128k tokens),当文本过长时,AI 可能遗忘前面提到的信息。 解决幻觉的几个方案 1、RAG,通过RAG的方式,让大模型在回答问题之前先检索真实数据,再让模型进行回答 2、Fine-tuning,即微调,通过微调的方式,给模型学习专业领域的知识,让他更好的回答 3、限制AI的回答,比如在提示词中告诉他如果你不知道,直接就回答不知道 4、通过标注和反馈不断优化模型。并把反馈可以给到模型让模型调整。 5、让同一个模型多次生成同一个内容的答案,然后选择一个最终版本。 6、在问题回答之后,让 AI 自己检查自己的答案,并标记不确定的部分。 7、联网, 在 AI 生成答案之前,先通过网络查询最新数据。 8、 让 AI先写下推理过程,再得出最终结论,而不是直接给出答案。

March 22, 2026 · 1 min · santu

如何看待DeepSeek,他能爆火的主要原因是什么?

典型回答 DeepSeek的爆火要从两个方面看,一个是在普通老百姓的视角看,另一个是行业的视角看。 从普通老百姓的视角来看,其实主要给人的感受上有变化是因为他把思考过程展示了出来,在DeepSeek之前,其他的模型也都有会自己的思考过程,包括GPT,但是都没有展示出来,而DeepSeek把他展示了出来,在回答问题之前先把自己的思考过程显示出来,让用户知道这个过程是怎么样的。 还有就是他自身的能力和效果还不错,而且在中文处理能力上甚至还超越GPT等产品。 从专业的视角来看,行业内能引起这么大的波澜,主要还是他的成本更低了,同样的规模的模型,它的成本可以降低到其他模型的1/20,这就能大大的降低对卡(算力)的依赖,而且成本也会更加的低了。在训练费用上只有500多万美元,是GPT-4o十分之一都不到。 还有就是DeepSeek走了一条开源的路,DS-R1是开源的。 另外有一个不容忽视的原因,那就是DeepSeek并没有诞生在传统大厂,而是诞生在一家来自中国的"小公司"(但是其实幻方做量化也很多年了,也屯了很多卡,只不过不算是互联网大厂),他的崛起,符合"咸鱼翻身,挑战强权"的价值观。 当然,DeepSeek也是有很多技术创新的,比如MoE(混合专家模型)、MLA(多投潜在注意力机制)等。 DeepSeek采用Transformer+MoE(Mixture of Experts)组合架构,通过动态激活专家网络(如DeepSeek-V3仅激活370亿参数中的部分)显著降低计算资源消耗。其MoE架构引入共享专家与路由专家的分工:共享专家处理通用知识,路由专家针对特定任务优化,提升训练效率与稀疏性。 此外,通过动态路由机制,模型能根据输入内容自动分配专家资源,实现计算资源的按需分配,综合效率较传统MoE提升30%。

March 22, 2026 · 1 min · santu

什么是Function Calling?

典型回答 **Function Calling都是一种让大模型会使用工具的方案。**如果一个大模型不会用工具,那就只能是一个简单的对话机器人,并且只能根据以往训练的数据进行对话。 如果你想让给大模型能够帮你联网查询、帮你操作本地文件、帮你调外部服务,都需要让他会用工具,而Function Call,MCP、A2A都是可以让大模型更好的使用工具的技术方案。 Function Call是Open AI提出的,最开始时只针对自家的GPT用的,他需要先通过结构化的方式定义出来有哪些工具。如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 import json def get_current_temperature(location: str, unit: str = "celsius"): """Get current temperature at a location. Args: location: The location to get the temperature for, in the format "City, State, Country". unit: The unit to return the temperature in. Defaults to "celsius". (choices: ["celsius", "fahrenheit"]) Returns: the temperature, the location, and the unit in a dict """ return { "temperature": 26.1, "location": location, "unit": unit, } def get_temperature_date(location: str, date: str, unit: str = "celsius"): """Get temperature at a location and date. Args: location: The location to get the temperature for, in the format "City, State, Country". date: The date to get the temperature for, in the format "Year-Month-Day". unit: The unit to return the temperature in. Defaults to "celsius". (choices: ["celsius", "fahrenheit"]) Returns: the temperature, the location, the date and the unit in a dict """ return { "temperature": 25.9, "location": location, "date": date, "unit": unit, } def get_function_by_name(name): if name == "get_current_temperature": return get_current_temperature if name == "get_temperature_date": return get_temperature_date TOOLS = [ { "type": "function", "function": { "name": "get_current_temperature", "description": "Get current temperature at a location.", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": 'The location to get the temperature for, in the format "City, State, Country".', }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": 'The unit to return the temperature in. Defaults to "celsius".', }, }, "required": ["location"], }, }, }, { "type": "function", "function": { "name": "get_temperature_date", "description": "Get temperature at a location and date.", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": 'The location to get the temperature for, in the format "City, State, Country".', }, "date": { "type": "string", "description": 'The date to get the temperature for, in the format "Year-Month-Day".', }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": 'The unit to return the temperature in. Defaults to "celsius".', }, }, "required": ["location", "date"], }, }, }, ] MESSAGES = [ {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant.\n\nCurrent Date: 2024-09-30"}, {"role": "user", "content": "What's the temperature in San Francisco now? How about tomorrow?"}, ] 其中的TOOLS部分就是关于工具的定义,对于每个工具,它是一个具有两个字段的JSON object: ...

March 22, 2026 · 3 min · santu

了解Spring AI吗,他都能干什么?

典型回答 Spring ai是Spring官方推出的ai应用开发框架,最近(2025年5月20)刚刚发布1.0版本,他的主要作用就是通过提供各种API的封装来降低用Java开发大模型应用的门槛。 与大型语言模型集成 Spring通过简单的配置快速集成 OpenAI、Azure OpenAI、HuggingFace、Ollama、Mistral、Google Gemini 等主流 LLM 服务。 1 2 3 ChatClient chatClient = ... // 自动注入或配置 ChatResponse response = chatClient.call("帮我写一个天气查询的API"); System.out.println(response.getResult().getOutput()); 提供了ChatClient和ChatModel和大模型进行对话 ChatModel API 让应用开发者可以非常方便的与 AI 模型进行文本交互,它抽象了应用与模型交互的过程,包括使用 Prompt 作为输入,使用 ChatResponse 作为输出等。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @RestController public class ChatModelController { private final ChatModel chatModel; public ChatModelController(ChatModel chatModel) { this.chatModel = chatModel; } @RequestMapping("/chat") public String chat(String input) { ChatResponse response = chatModel.call(new Prompt(input)); return response.getResult().getOutput().getContent(); } } ChatClient 提供了与 AI 模型通信的 Fluent API,它支持同步和反应式(Reactive)编程模型。与 ChatModel、Message、ChatMemory 等原子 API 相比,更加灵活,代码更精简。 ...

March 22, 2026 · 2 min · santu

什么是大模型的微调,和预训练有什么区别?

典型回答 大模型是怎么来的?其实就是预训练来的,包括现在的GPT、Deepseek这些大模型。通过海量通用数据来训练模型,让模型具有掌握语法、常识和基础语义。 预训练的成本是巨高的,首先需要有海量数据(TB 级),然后还需要极高的算力,进行长时间的模型训练,基本上只有大厂才能玩得起。 而微调,是在预训练模型的基础上,用特定领域或任务的数据调整模型参数,使其适应具体场景(如医疗问答、法律文本分析)。 相比于预训练,他只需要少量的数据 (MB~GB 级),相对的训练算力也会低很多。可以说预训练的目的是获得一个通用模型,而微调的目的是获得一个专用模型。 其实,我们常用的提示词,也可以算作是微调的一种,只不过他相对简单,并不需要调整模型参数来完成,目的是让模型能够更好的回答我们的问题,所以有一种微调叫做Prompt Tuning。 随着模型规模变大,完整微调(也叫全参)成本也变高,出现了很多轻量级微调方式: LoRA(Low-Rank Adaptation) PEFT(Parameter-Efficient Fine-Tuning) Adapter、Prefix Tuning 指令微调(Instruction Tuning) RLHF(人类反馈强化学习) 这些方法通常只更新模型的一部分参数,大大减少资源消耗。

March 22, 2026 · 1 min · santu

什么是ReAct Agent

典型回答 ReAct Agent是一种在解决问题的时候,参考人类的 思考 + 行动 + 观察 → 再思考 → 再行动……这一过程,让 LLM 在每一步交替输出: Thought(思考):分析当前状态、制定下一步计划 Action(行动):调用工具(如搜索、计算、API) Observation(观察):接收工具返回的结果 针对用户的提问,LLM会先进行思考(Thought),指定行动计划,行动计划中包括使用哪些工具,接着进行工具执行(Action),在工具执行之后,观察(**Observation)**工具执行的结果,基于结果继续思考后续的行动计划。如果需要执行工具就继续执行,直到LLM认为所有行动都做完了为止。 想要实现ReAct Agent,有两个关键点: 1、要让LLM按照ReAct的方式运行。 2、我们需要通过代码让Agent的"思考结果"、“行动"等串起来。 ReAct Prompt 想要让你的Agent能够按照思考 + 行动 + 观察的思路运行,提示词必须要给出说明,这是至关重要的一步,如果没有这一步,别的做了再多都是白搭。 以下是一个典型的ReAct System Prompt : 1 2 3 4 5 6 7 8 9 10 你是一个基于React架构(Reasoning-Act-Observation)的智能助手,你擅长使用工具帮我解决问题。 你的工作流程是: 思考:基于当前获得的信息进行推理和反思,明确下一步行动的目标。 行动:用于表示需要调用的工具,每一步行动必须是以下两种之一: 1、工具调用 [Function Calling]:根据任务需要,确定调用工具。 2、输出答案 [Finish]:得出明确答案后使用此操作,返回答案并终止任务。 观察:记录前一步行动的结果。 你可以进行多轮推理和检索,但必须严格按照上述格式进行操作,尤其是每一步“行动”只能使用上述两种类型之一。 按照以上提示词运行的话,一个LLM每一轮的运行输出结果有两种情况: 1、工具调用 2、得到最终解决 ...

March 22, 2026 · 1 min · santu

在Java项目中集成大模型,用什么框架?

典型回答 在Java应用中想要集成LLM,一般有以下几个选择: 1、自己手撕,直接调用API 2、使用Spring AI 3、使用LangChain4j 4、使用Spring AI Alibaba 5、使用agentscope-java 首先第一个肯定不建议,因为LLM开发的话,一般不仅需要对接模型,还需要做对话记忆、工具调用、RAG等等的,这些如果要自己对接模型API的话,都要从头写一遍,成本太高了。 另外几个框架,Spring AI是比较基础的一个框架,是Spring官方的一个LLM集成框架,但是他的功能非常有限,只有简单的chatMode、ChatClient等基础封装。适合做一些简单的项目使用。 LangChain4j是一个对标Python中的LangChain的框架,但是功能肯定不如LangChain,很多功能都是阉割的,但是他在RAG这方面的支持,比Spring AI要强得的多。如果你想在Java中做一个rag,建议使用LangChain4j 如果你要做Agent开发,尤其是多智能体、复杂的Agent的话,建议使用Spring AI Alibaba或者agentscope-java,这两个都是alibaba推出的智能体框架,方便java开发者构建智能体的,主要区别是Spring AI Alibaba是基于Spring AI做的扩展,主要是为了完善spring ai的能力。agentscope是致力于做智能体搭建的。 以下是我的AI实战课中给大家做的简单总结(暂不包含agentscope): 能力 LangChain4j Spring AI Spring AI Alibaba 是否依赖 Spring ❌ 可独立使用 ✔️ 深度集成 ✔️ 深度集成 模型调用复杂度 ✔️ 支持高层次API,快速实现LLM调用 ❌只支持ChatModel和ChatClient ✔️ 除Spring AI功能外,有更多增强API 结构化输出 ✔️ 强(JSON Schema) ✔️ 基础支持 ✔️ 增强版 RAG 支持 ✔️ 全链路 ✔️ 基础 ✔️ 企业级增强 智能体(Agent) ❌ 需手动实现 ❌ 需手动实现 ✔️ 基于Graph实现了ReAct,支持 Multi-Agent等。 工作流编排 ⚠️ 简单 Chain ❌ 无 ✔️ Graph 引擎(核心优势) 阿里云集成 ✔️ Qwen/DashScope ❌ 无官方支持 ✔️ 深度集成(百炼、OSS、Nacos) 生产可观测性 ⚠️ 需自行集成 ✔️ Micrometer ✔️ ARMS/SLS 原生 生态依赖 ✔️ 我依赖要求 ✔️ 我依赖要求 ⚠️依赖阿里百炼 非 Spring/或者Spring Boot版本低于3.0,纯Java项目项目→ 选 LangChain4j ...

March 22, 2026 · 1 min · santu

Skill和MCP有什么区别?

典型回答 ✅什么是MCP? ✅什么是Agent Skill? MCP是由Anthropic推出的开源标准协议,用于统一大模型与外部数据源、工具之间的连接方式。它解决了“数据孤岛”和“接口碎片化”问题。就像USB-C接口统一了充电标准一样,MCP让Agent可以通过统一的协议访问数据库、文件系统、API或其他AI服务,而无需为每个工具编写特定的适配代码。 MCP是工具和Agent之间的协议,通过MCP,我们可以方便的引入外部工具,所以,Agent中引入的MCP可以认为一套工具箱。 而这些工具具体怎么用,该先用哪个,再用哪个,是需要考Skill来帮我们搞定的。 Skill是封装了特定任务执行逻辑、Prompt工程、知识库和执行脚本的标准化模块。Anthropic在2025年将其确立为开放标准,旨在让AI像人类学习技能一样扩展能力。 一个Agent可以挂载多个Skills,从而具备多面手的能力。Skill文件(如 SKILL.md)通常包含任务描述、输入输出规范、参考知识和执行步骤。 总结下,Agent就是干活的人,MCP就是你能用的那些工具,Skill就是告诉你这活该怎么干、

March 22, 2026 · 1 min · santu

SpringAI中ChatModel和ChatClient有啥区别?

典型回答 在 Spring AI 框架中,ChatModel 和 ChatClient 是构建LLM应用的两个核心抽象概念,它们分别代表了底层驱动能力和高层应用编排。 **ChatModel** 是引擎:负责直接与 AI 模型提供商(如 OpenAI、Azure、本地模型)通信,处理底层的请求和响应。 **ChatClient** 是驾驶舱/控制台:建立在 ChatModel 之上,为开发者提供流畅的 API(Fluent API),用于编排对话流、管理上下文、调用工具(Function Calling)以及处理响应转换。 ChatModel是 Spring AI 的核心API,直接对接具体的 LLM 提供商,如有具体的实现: OpenAiChatModel, AzureAiChatModel,负责将 Spring AI 统一的 ChatRequest 转换为特定厂商的 API 请求格式。负责接收厂商的原始响应并转换为统一的 ChatResponse。 他就像 JDBC 中的 Connection 或 Statement,或者 HTTP 客户端中的 RestTemplate/WebClient 底层执行器。它只管“发出去”和“收回来”,不管业务逻辑怎么串。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @Autowired private ChatModel chatModel; // 注入具体的实现,如 OpenAiChatModel public String getWeather(String city) { // 1. 手动构建消息列表 List<Message> messages = new ArrayList<>(); messages.add(new UserMessage("今天 " + city + " 的天气怎么样?")); // 2. 构建请求 ChatRequest request = ChatRequest.builder() .messages(messages) .build(); // 3. 调用底层模型 ChatResponse response = chatModel.call(request); // 4. 手动解析响应内容 return response.getResult().getOutput().getText(); } ChatClient 是基于 ChatModel 构建的高级抽象,旨在简化应用开发。提供 .prompt(), .system(), .user(), .call() 等链式调用方法。好包括: ...

March 22, 2026 · 2 min · santu

留言给博主