从 0 到 1 开发 AI Agent
从零到一:AI Agent(智能体)开发完全指南
基于 Spring Boot + LangChain4j 的智能体系统开发教程
📚 教程概览本教程将带你从零开始构建一个完整的AI Agent系统,包含多Agent协作、实时通信、Web界面等现代AI应用的核心功能。
🎯 学习目标
理解AI Agent的核心概念和架构
掌握多Agent协作系统的设计
🛠️ 技术栈
后端: Spring Boot 2.7.18 + LangChain4j 1.0.1
前端: Bootstrap 5 + WebSocket
AI模型: Qwen plus
🤖 AI Agent基础概念与原理什么是 AI Agent(智能体)?AI Agent(智能体)是一个能够感知环境、做出决策并执行行动的智能系统。它结合了人工智能、自然语言处理和工具调用能力,能够自主完成复杂任务。Agent 代表了人工智能从被动响应到主动智能体的重要演进。
核心特征与原理1. 自主性(Autonomy)
定义: Agent能够独立做出决策并执行行动,无需持续的人工干预
原理: 基于预设的目标函数和约束条件,Agent自主选 ...
Cursor 使用指南
目录
掌握 Cursor 基础
如何有效获得更高品质的回复
实战运用
MCP 入门与应用
掌握 Cursor 基础1. Cursor 安装与基本设置什么是 Cursor?Cursor 是一款 AI 驱动的代码编辑器 (IDE),专为开发者设计,能够理解你的代码和意图,提供代码补全、重构建议,甚至可以帮你生成完整的代码片段。在进入 AI 代理时代后,Cursor 的 AI 代理功能,进一步以自动化的方式,协助开发者完成任务。
下载安装
访问官网:前往 cursor.sh
选择版本:根据操作系统下载对应版本
安装程序:运行安装程序,按照向导完成安装
首次启动:启动 Cursor,完成初始设置
初始配置# 安装完成后,首次启动会引导你进行以下配置:1. 选择主题(深色/浅色)2. 配置 AI 模型(Claude 3.5 Sonnet 或其他)3. 设置快捷键偏好4. 选择扩展插件
2. AI 程式助手 (Coding Assistant) 与 AI 代理 (Coding Agent) 有什么不同?AI 程式助手 (Coding Assistant)
交互方式:对话式交互,需要你主动提问 ...
提示工程
概述提示工程(Prompt Engineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语言模型(Large Language Model, LLM)用于各场景和研究领域。
提示工程不仅仅是关于设计和研发提示词。它包含了与大语言模型交互和研发的各种技能和技术。提示工程在实现和大语言模型交互、对接,以及理解大语言模型能力方面都起着重要作用。用户可以通过提示工程来提高大语言模型的安全性,也可以赋能大语言模型,比如借助专业领域知识和外部工具来增强大语言模型能力。
比如
写一篇产品经理的演讲稿,注意使用以下词汇: 赋能,抓手,中台,闭环,落地,漏斗,沉淀,给到,同步,对齐,对标,迭代,拉通,打通,升级,交付,聚焦,倒逼,复盘,梳理,方案,联动,透传,咬合,洞察,渗透,兜底,解耦,耦合,复用,拆解非常好!以下是针对**技术人员听众**的**数据传输产品产品经理演讲稿**,语言更偏技术导向、逻辑严谨,同时融合了您提供的专业词汇,适合在技术大会、内部架构分享或研发团队交流中使用。---# 数据传输产品演进与实践:从解耦到赋能的技术闭环各位技术同仁,大家好!我是本次分享的数据传输产品负 ...
AI 基础概念介绍
总览
人工智能系统分为三个级别:大型语言模型 (LLM)、人工智能工作流(AI Workflows)和人工智能代理(AI Agents),每个级别代表着不断增加的自主性和复杂性。
LLMs: 这些模型根据用户提示生成响应(Input → Output),但缺乏自主性或独立行动的能力。
AI Workflows: AI Workflow 使用预定义逻辑自动执行重复性任务(Input → Predefined Path → Output),虽然提高了效率,但缺乏针对创造性或动态场景的灵活性和适应性。
AI Agents 是最先进的,能够独立推理、行动和迭代以实现复杂的目标(Goal → Reason → Act → Iterate → Final Output),并且有检索增强生成 (RAG) 和 ReAct 等框架加持。
基础概念AI 中的流式响应流式响应允许 AI 系统在计算响应的同时逐步生成并显示输出。系统无需等待整个响应生成后再显示,而是在 chunks 数据(tokens)准备就绪时发送它们。此功能使交互感觉更流畅、更自然,就像进行真实的对话一样。
流式响应是如何工 ...
精要主义读后感(一)
精要主义:在纷繁世界中找回人生的掌控力引言在这个信息爆炸、选择过剩的时代,我们似乎从未如此“忙碌”,却又从未如此“空虚”。社交媒体上的焦虑、工作与生活的失衡、目标与行动的脱节,都在提醒我们:“多即是少”的陷阱正在吞噬我们的专注力与幸福感。《精要主义》(Greg McKeown 著)一书如同一剂清醒药,直指现代人的核心困境——如何从“疲于奔命”转向“精准发力”。它的答案简单却深刻:“更少,但更好”(Less but Better)。
一、精要主义的本质:选择与放弃的智慧精要主义不是简单的“断舍离”,而是一种系统性思维,主张通过 “探索、排除、执行” 三步骤,筛选出真正重要的事务,并为其投入全部精力。其核心逻辑在于:
“选择”的力量: 人生中90%的忙碌源于被动接受外界安排,而精要主义者主动掌握选择权,拒绝被“他人的优先级”绑架。
“甄别”的智慧: 大多数事务只是“无意义的多数”,真正能创造价值的仅占20%。正如林语堂所言:“生之智慧,在于摒弃不必要之事”。
“取舍”的勇气: 成功常成为失败的催化剂。例如,事业上升后机会增多,若全盘接受反而导致精力分散,最终瓦解最初的专注点。
二、实践精要 ...
数据结构的存储方式
数据结构的存储方式数据结构的存储方式只有两种,数组(顺序存储)、链表(链式存储)
队列、栈:既可以用数组实现也可以用链表实现
图:邻接表就是链表,邻接矩阵就是二维数组。邻接矩阵判断连通性迅速,并可以进行矩阵运算解决一些问题,但是如果图比较稀疏的话很耗费空间。邻接表比较节省空间,但是很多操作的效率上肯定比不过邻接矩阵。
邻接表和邻接矩阵是图(graph)这种数据结构的两种常见表示方法。它们各自有优缺点,适用于不同的场景。下面分别介绍这两种表示方法。
邻接矩阵定义:邻接矩阵是一个二维数组(或矩阵),用来表示图中顶点之间的连接关系。对于一个包含n个顶点的图,它的邻接矩阵是一个n×n的矩阵A,其中A[i][j]的值代表从顶点i到顶点j是否存在边。对于无权图,如果顶点i和顶点j之间有边,则A[i][j] = 1;否则A[i][j] = 0。对于有权图,A[i][j]则存储的是边(i, j)的权重,而如果不存在这样的边,通常会用一个特殊的值(如无穷大或0)来表示。优点:
简单直观,容易理解和实现。
检查两个顶点之间是否存在边的时间复杂度为O(1)。
对于稠密图(即边数接近最大可能值的图),使用 ...
MySQL Online DDL 原理
❝
MySQL原生Online DDL是MySQL数据库提供的一项功能,它允许在不中断数据库服务的情况下执行数据定义语言(DDL)操作。
❞
一、背景与意义在传统的数据库系统中,执行DDL操作时通常需要锁定表,以防止数据不一致。然而,这种锁定会导致表在DDL操作期间不可用,从而影响数据库的可用性。MySQL原生Online DDL解决了这个问题,它允许DDL操作在表仍然可用时执行,大大提高了数据库的可用性,特别是对于需要24/7高可用性的应用来说,这是一个重要的特性。
二、工作机制MySQL原生Online DDL的工作机制涉及多个步骤和内部原理:
1. 准备阶段
「检查与评估」:在执行DDL操作之前,MySQL会进行一系列的检查和评估工作。这包括验证DDL操作的语法正确性、检查用户权限以及评估所需资源等。
「选择执行策略」:根据DDL操作的类型和表的结构,MySQL会选择一个合适的执行策略。这通常涉及决定是使用COPY算法、INPLACE算法还是INSTANT算法。
2. 执行DDL操作
「COPY算法」:
「创建临时表」:首先,MySQL会创建一个与原始表结构相似的新临时表。 ...
追源索骥:透过源码看懂Flink核心框架的执行流程
追源索骥:透过源码看懂Flink核心框架的执行流程
前言Flink是大数据处理领域最近很火的一个开源的分布式、高性能的流式处理框架,其对数据的处理可以达到毫秒级别。本文以一个来自官网的WordCount例子为引,全面阐述flink的核心架构及执行流程,希望读者可以借此更加深入的理解Flink逻辑。
本文跳过了一些基本概念,如果对相关概念感到迷惑,请参考官网文档。另外在本文写作过程中,Flink正式发布了其1.5 RELEASE版本,在其发布之后完成的内容将按照1.5的实现来组织。
1.从 Hello,World WordCount开始首先,我们把WordCount的例子再放一遍:
public class SocketTextStreamWordCount {public static void main(String[] args) throws Exception { if (args.length != 2){ System.err.println("USAGE:\nSocketTextStreamWordCount ...
CockroachDB分布式事务解析
事务层事务层实现了对并发操作的ACID事务支持。
CRDB事务分为两个阶段:
write & reads,即事务执行阶段,当进行写操作时,CRDB并不会直接对硬盘的数据进行修改,而是使用另外两个东西来进行辅助,这两个东西也避免了锁的使用:
Transaction record,存储在range第一个被修改的key处,表明了修改当前key的事务所处的状态:PENDING,COMMITTED或者ABORTED。第一个状态表示事务正在进行;第二个状态表示事务已经提交;第三个表示事务已经丢弃,正在进行重试或者rollback。
Write intents,对数据的修改写在这里,此外还带一个指向transaction record的指针,来表明这些数据当前或者之前被一个事务修改过,其他事务根据这个状态来决定对这些数据的下一步操作。产生一个新的write intent前需要检查这一块数据有没有更晚时间戳的提交值,如果有的话该事务需要被重新开始。
当进行读操作时,会检查所读的每块数据的write intent,如果不存在,那么直接读以前的mvcc数据就行了,如果有write in ...
Java资源大全
Java资源大全中文版我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。伯乐在线已经把 awesome-java 资源列表翻成中文后发布于 ImportNew。
Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。
我们要做什么?
基于 awesome-java 资源列表,我们将对各个资源项进行编译整理。
整理后的内容,将收录在伯乐在线资源频道。可参考已整理的内容:
《OWNER:Java配置文件解决方案》
《Spring Boot:简化Spring应用初始搭建以及开发过程》
《SonarQube:开源的代码质量管理工具》
如何参与本项目?
如何为列表贡献新资源?欢迎大家为列表贡献高质量的新资源,提交PR时请参照以下要求:
请确保推荐的资源自己使用过
提 ...