AI Agent(从 Chatbot 到生产级 Agent)

AI Agent(从 Chatbot 到生产级 Agent) AI Agent是LLM应用的高级形态,能够自主规划、执行任务并与环境交互。 经典论文: Yao, S., et al. (2022). “ReAct: Synergizing Reasoning and Acting in Language Models.” ICLR. [论文链接] - ReAct框架,Agent核心范式 Wei, J., et al. (2022). “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.” NeurIPS. [论文链接] Wang, G., et al. (2024). “A Survey on Large Language Model based Autonomous Agents.” arXiv. [论文链接] - Agent综述 一、整体演进路径 Chatbot → Tool Use → Agent → Production Agent(工业级) 演进说明: Chatbot: 仅能对话,无法执行外部操作 Tool Use: 能调用单一工具 Agent: 能自主规划并执行多步骤任务 Production Agent: 工业级,具备错误处理、权限控制、监控等能力 二、核心概念拆解 1️⃣ Chatbot LLM + Prompt ...

March 14, 2026 · Xiao Xiangtao

Prompt Engineering

Prompt Engineering https://www.coursera.org/learn/chatgpt-prompt-engineering-for-developers-project/home/welcome Prompt Engineering(提示工程)是设计和优化输入提示(prompts)以引导大语言模型生成期望输出的技术。这一领域随着GPT-3的发布而兴起,是连接用户意图与模型能力的关键桥梁。 经典论文: Brown, T. B., et al. (2020). “Language Models are Few-Shot Learners.” NeurIPS. [论文链接] - GPT-3论文,首次系统展示了prompt engineering的潜力 Wei, J., et al. (2022). “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.” NeurIPS. [论文链接] 1. Prompting Principles(提示原则) Principle 1: Write clear and specific instructions(编写清晰具体的指令) 清晰性(Clarity)和具体性(Specificity)是prompt设计的核心原则。研究表明,模糊的指令会导致模型输出不确定性增加,而具体的指令能显著提升输出质量。 Tactic 1: Use delimiters to clearly indicate distinct parts of the input 分隔符(如 ```、"""、—、<>)能帮助模型识别输入的不同部分,避免混淆。这在处理包含多段文本或代码的任务时尤为重要。 Tactic 2: Ask for a structured output 要求结构化输出(如JSON、HTML、Markdown表格)便于后续程序处理,是构建AI应用的最佳实践。 ...

March 12, 2026 · Xiao Xiangtao

RAG (Retrieval-Augmented Generation)

RAG RAG (Retrieval-Augmented Generation) 是一种结合信息检索与文本生成的AI架构,通过检索外部知识库来增强LLM的回答能力。 经典论文: Lewis, P., et al. (2020). “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.” NeurIPS. [论文链接] - RAG开山之作 Guu, K., et al. (2020). “REALM: Retrieval-Augmented Language Model Pre-Training.” ICML. [论文链接] Izacard, G., & Grave, É. (2021). “Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering.” EACL. [论文链接] - RAG的另一种实现 1. Context Window(上下文窗口) 概念 Context Window 指的是 大语言模型在一次推理时能够读取和理解的最大文本长度。 经典论文: Dai, Z., et al. (2019). “Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context.” ACL. [论文链接] - 突破固定上下文长度的开创性工作 通常包含: ...

March 8, 2026 · Xiao Xiangtao

Transformer概念与理解

Transformer:从入门到产品视角 📚 导论:为什么Transformer如此重要? Transformer模型是由Vaswani等人在2017年发表的论文《Attention Is All You Need》中提出的神经网络架构。它彻底改变了自然语言处理领域,成为现代大语言模型(如GPT、BERT、LLaMA等)的基石。 核心创新:完全抛弃传统的CNN/RNN架构,仅使用注意力机制来捕捉序列依赖关系,实现了两大突破: 并行计算:解决了RNN无法并行的问题,大幅提升训练速度 长程依赖:解决了RNN/LSTM在处理长序列时的梯度消失问题 ...

February 20, 2026 · Xiao Xiangtao

NLP分类效果衡量指标(F1/p/r)

概念 为什么要计算F1:避免样本分布带来的偏差,综合考量分类效果,假如有100个样本,其中1个正样本,99个负样本,如果模型的预测只输出0,那么正确率是99%,这时候用正确率来衡量模型的好坏显然是不对的。 真实 1真实 0预测 1True Positive(TP)False Positive(FP)预测 0False Negative(FN)True Negative(TN) 查准率(precision),预测正确的样本在所有预测为1的样本中的比例,该值反映有多少其他类被错误的归为该类。 召回率(recall),预测正确的样本在所有真实为1的样本中的比例,该值反映有多少该类被预测为其他类了。 F1(F1-Score), 精准率和召回率的调和平均数。 Micro-F1与Macro-F1 针对多标签分类而言衡量分类效果 Micro-F1:直接计算所有类别的Precision和Recall,然后计算F1。(类别有权重,分到样本数多的类别有更大的影响力) Macro-F1:计算出每一个类的Precision和Recall并分别计算F1,最后将F1平均。(各类别的F1权重相同) 代码实现 二分类 def f1(y_hat, y_true): ''' 输入张量y_hat是输出层经过sigmoid激活的张量 y_true是label{0,1}的集和 model指的是如果是多任务分类,single会返回每个分类的f1分数,multi会返回所有类的平均f1分数(Marco-F1) 如果只是单个二分类任务,则可以忽略model ''' epsilon = 1e-7 y_hat = tf.round(y_hat)#将经过sigmoid激活的张量四舍五入变为0,1输出 # 输入的数据是矩阵,标签为单行矩阵,预测值为单列矩阵,如果不是需要转换 tp = tf.cast(tf.matmul(y_true,y_hat), 'float') #tn = tf.sum(tf.cast((1-y_hat)<em>(1-y_true), 'float'), axis=0) fp = tf.cast(tf.matmul(1-y_true,y_hat), 'float') fn = tf.cast(tf.matmul(y_true,1-y_hat), 'float') print('tp: ', tp[0][0].numpy(),'fp: ', fp[0][0].numpy(),'fn: ', fn[0][0].numpy()) p = tp/(tp+fp+epsilon)#epsilon的意义在于防止分母为0,否则当分母为0时python会报错 r = tp/(tp+fn+epsilon) f1 = 2</em>p<em>r/(p+r+epsilon) result = [f1[0][0].numpy(), p[0][0].numpy(), r[0][0].numpy()] return result 多标签 ...

May 22, 2020 · Xiangtao XIAO

多标签分类(multi-label)分类方法笔记

概述 multi-label是相较multi-class的概念,有关研究相对较少,multi-label指一个数据可以被分为多个类,一个输入对应多个输出,例如一篇新闻可以被同时打上娱乐、体育等多个类,类的数目也不确定; 对于multi-label问题的处理,主要看到三种思路: 当类别之间没有较强的联系时,将multi-label转化为多个二分类问题,对于每个类专门训练一个分类器,然后将多个分类器对同个样本进行分类输出结果达到多标签的效果。 当类别之间有一定联系的时候,将multi-label转化为multi-class问题,比如用二进制编码表示三个类:[‘人’, ‘猫’, ‘狗’],0表示不是该类,1表示是,则对于多标签分类可能有[0, 1, 1]的情况比如一张图片上既有猫又有狗,那么我们可以将每一个向量作为一个类别,比如[0, 1, 1]作为一个类,将[1, 0, 1]作为一个类,这样一来我们得到一个23个类,对单一样本输出的结果一定在这个类别空间中,这样就是一个多分类问题了,总共8个类,可以用长度为8的独热编码表示。 当然对于类别特别多(n个类)的数据集,这时候类别空间就是2n,显然类别太多了运算压力大,可以选择将类别输出的种类限制在训练集数据中存在的类别中,比如[1, 0, 0]在训练集中没有这个输出,就把他从类别中去除,当然这会影响模型的准确程度,因为它不再识别那些被踢出的可能性。 最后一种就是改进算法使其能够直接处理多标签问题,输出多个类。 多标签分类算法 对于神经网络,简单的做法是在最后输出层使用sigmoid激活函数,输出数目为类别数,每个输出都是一个概率,注意输出的多个类别的概率总和不再是1,因为是多标签问题,然后损失函数用binary_crossentrophy,相当于对每个输出分别判断属不属于该类,从而使每一个可能属于的类的概率都趋近1。 在简单的单层CNN算法的实验上效果并不是很好,确实得到了多输出的结果,但是出现了某个类概率接近1,另一个所属类概率虽然也比较突出但数值偏小,比如0.5左右的样子,同时属于3个或4个类效果就更差些,可以通过修改阈值比如threshold=0.3,大于0.3就算做该类,但改善不明显。应该和数据集不同类对应存在的样本不同有关。

May 22, 2020 · Xiangtao XIAO

卷积神经网络(CNN)理论与实现

一、理论 卷积神经网络结构:(卷积层+(可选)池化层)*N+全连接层*M(M>=0),卷积层的输入输出是矩阵,全连接层输入输出是向量,在卷积层的最后一层做一个展平。 主要用于分类任务 全卷积神经网络:(卷积层+(可选)池化层)*N+反卷积层*K,可以做物体分割类任务 卷积操作 解决参数过多导致的计算资源不足,容易过拟合的问题。解决方法:局部连接(基于图像的区域性)、参数共享(基于图像特征与位置无关) 卷积核是反向传播计算出的参数,卷积:卷积核与输入做点积乘法。步长:卷积核每次在输入上滑动的距离。padding:使输出size不变。 池化操作 类似卷积,计算方式不同,最大值池化:池化核滑动覆盖区域的最大值作为结果输出。 特点:常使用不重叠(kernal-size=步长)、不补零的操作。参数即为步长和池化核大小。用于减少图像尺寸,从而减少计算量。一定程度平移鲁棒。损失了空间精度。 二、实现 embedding_dim = 16 batch_size = 128 cnn_model = keras.models.Sequential([ keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length), keras.layers.Conv1D(filters=256,kernel_size=2,kernel_initializer='he_normal', strides=1,padding='SAME',activation='relu'), keras.layers.GlobalMaxPooling1D(), keras.layers.Dropout(rate=0.5), keras.layers.Dense(12, activation='sigmoid') ]) cnn_model.summary() cnn_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) Conv1D 在文本中,卷积的某一维大小往往为embedding长度,即在宽度上不需要窗口移动,宽度就是整个窗口,所以conv1d默认卷积的宽度就为embedding维度,长度通过kernel_size来指定的,此处为2,即卷积核的大小为2*embedding_size。strides为步长,此处为1,即卷积核每隔一个单词移动一次。filters是卷积核的个数,即输出的维度。padding有valid和same两种选择,valid在长度方向(宽度方向不padding)不进行padding,而same则在长度方向进行padding,保证输入句子长度和卷积后输出的句子长度一致。 //blog.csdn.net/bobobe/article/details/87923618 tensorflow fit()方法:参考 //blog.csdn.net/crazyman2010/article/details/103705318 TextCNN //blog.csdn.net/u014732537/article/details/79573174

May 21, 2020 · Xiangtao XIAO

MNIST手写数字识别实践

from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() # 加载数据 x_train, x_test = x_train / 255.0, x_test / 255.0 # /255:将RGB数值归一化 #%% print(y_train.shape) #%% model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), # 张量扁平化,将28*28的图片矩阵转化为784的向量 tf.keras.layers.Dense(128, activation='relu'), # 全连接层,128个神经元,激活函数为relu(The Rectified Linear Unit) # y=max(0,x) tf.keras.layers.Dropout(0.2), # 防止过拟合,drop out 80% of inputs,使用0.2*cell_size个神经元进行训练 tf.keras.layers.Dense(10, activation='softmax') # 全连接层输出 softmax激活函数 ]) model.compile(optimizer='adam', # 梯度下降策略 adam loss='sparse_categorical_crossentropy', # 损失函数 sparse:y独热化编码 交叉熵 metrics=['accuracy']) # metrics 列表,包含评估模型在训练和测试时的性能的指标,典型用法是metrics=[‘accuracy’]。 # 如果要在多输出模型中为不同的输出指定不同的指标,可向该参数传递一个字典,例如metrics={‘output_a’: ‘accuracy’} model.fit(x_train, y_train, epochs=5) # 训练5轮 model.evaluate(x_test, y_test, verbose=1) # Verbosity mode. 0 = silent, 1 = progress bar. # fit()用于使用给定输入训练模型. # evaluate()用于评估已经训练过的模型.返回损失值&模型的度量值.

May 20, 2020 · Xiangtao XIAO

机器学习入门基本概念理解

张量 张量=容器 张量是现代机器学习的基础。它的核心是一个数据容器,多数情况下,它包含数字,有时候它也包含字符串,但这种情况比较少。因此把它想象成一个数字的水桶。 0维张量=数字;1维张量=向量;2维张量=矩阵;3维张量=公用数据存储在张量,彩色图片等… one-hot vector 独热编码,用于分类标记。比如(猫,狗,鼠)对应(1,0,0)代表猫,(0,1,0)代表狗…将离散型特征采用独热编码,会使得特征之间的距离计算更加合理。 softmax函数 softmax函数的作用主要是:1.通过将模型的预测结果转化到指数函数上将预测结果转化为非负数;2.归一化处理,使各种结果概率之和等于1. //blog.csdn.net/lz_peter/article/details/84574716 交叉熵 对于单标签多分类问题,p(x)表示是否为标记的类,如果用独热编码表示分类,则取值0或1;q(x)则是预测结果为该类的概率。用交叉熵做损失函数,值越小,表示模型预测结果与实际情况一致性越高。 单标签多分类问题所有类别概率和为1,多标签二分类问题所有类别和不为1,交叉熵的计算针对的是单个类别(即二分类),然后单张样本计算多个二分类交叉熵的和。 //blog.csdn.net/tsyccnh/article/details/79163834 欧式空间 欧几里得空间就是在对现实空间的规则抽象和推广(从n<=3推广到有限n维空间)。 欧几里得几何就是中学学的平面几何、立体几何, 在欧几里得几何中,平行线任何位置的间距相等。 而中学学的几何空间一般是2维,3维(所以,我们讨论余弦值、点间的距离、内积都是在低纬空间总结的),如果将这些低维空间所总结的规律推广到有限的n维空间,那这些符合定义的空间则被统称为 欧几里得空间(欧式空间,Euclidean Space)。而欧几里得空间主要是定义了 内积、距离、角(没错,就是初中的那些定义),理解了这些再去理解数学定义就很明确了。 //www.zhihu.com/question/27903807/answer/699570097 梯度弥散与梯度爆炸 靠近输出层的hidden layer 梯度大,参数更新快,所以很快就会收敛; 而靠近输入层的hidden layer 梯度小,参数更新慢,几乎就和初始状态一样,随机分布。 在上面的四层隐藏层网络结构中,第一层比第四层慢了接近100倍!! 这种现象就是梯度弥散(vanishing gradient problem)。而在另一种情况中,前面layer的梯度通过训练变大,而后面layer的梯度指数级增大,这种现象又叫做梯度爆炸(exploding gradient problem)。 总的来说,就是在这个深度网络中,梯度相当不稳定(unstable)。 //www.cnblogs.com/yangmang/p/7477802.html batch_size batch的选择首先决定的是下降的方向,batch_size越大,下降的方向越准确。 综合考虑数据集的大小,数据集比较小的时候,用整个数据集作为batch_size就可以,这时候下降的方向也是最精准的,数据集比较大的时候,相对小的batch可以达到和用整个数据集相似的全局学习率,综合考量学习的效果以及电脑内存是否撑得住,目的是尽量让学习效果和效率同时最大化。 在合理范围内,增大 Batch_Size 有何好处? 内存利用率提高了,大矩阵乘法的并行化效率提高。 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。 batch_size增大到一定程度后,再增大则效率变差,下降方向也基本不再变化。 //blog.csdn.net/starzhou/article/details/53692248 学习率 梯度下降的伪代码如下: 重复已下过程,直到收敛为止{ωj=ωj-λF(ωj) /ωj} λ就是学习率,学习率过小,优化效率可能很低,学习率过大则有可能越过最优值,收敛到局部最优解。 关于解决学习率的一些问题,如选择合适的学习率,动态调整学习率,归一化等参考: //www.cnblogs.com/mazhujun/p/9633576.html 如何通俗地解释欧氏空间? - 知乎 //www.zhihu.com/question/27903807/answer/699570097

May 16, 2020 · Xiangtao XIAO