Spiga

分类为读书笔记的文章

程序员的AI基础7:LangChain RAG

2025-05-24 19:31:52

摘要:一、RAG基本概念 RAG定义与价值:RAG(检索增强生成)是一种AI技术框架,通过检索外部知识源来增强大语言模型的知识储备和生成能力,解决模型知识过时和内容幻觉问题,提升回答的准确性和可信度。 RAG工作原理:RAG工作流分为索引阶段和检索与生成阶段。索引阶段将数据处理成可检索格式,存储于向量数据库;检索与生成阶段实时响应用户查询,检索相关文本块并生成答案。 RAG应用场景:RAG适用于企业知识管理、智能客服、法律咨询等专业领域,能够针对特定信息源回答问题,发挥巨大价值。 构建基础RAG流程: 索引阶段:线下数据准备过程 加载 分割 嵌入 存储 检索和生成阶段:线上阶段 检索 生成 开发难题 繁杂的数据接入 复杂的文本处理 多样的模型与接口 专业的向量存储 粘合所有环节 LangChain的价值 从零开发RAG应用面临数据接入、文本处理、模型接口、向量存储和环节粘合等诸多难题,LangChain通过模块化架构简化了构建过程。 LangChain由多个独立包组成,如langchain-core提供核心接口和数据类型,langchain-community集成第三方服务,langchain-openai针对特定模型提供商集成。 LangChain具有流式处理、异步与并行执行、可观察性与调试、标准化接口等核心优势,让构建复杂AI应用变得简单高效。 二、文档加载 1. LCEL语言 LCEL(LangChain表达式语言)是一种声明式编程范式,用于将LangChain组件组合在一起,通过管道操作符|实现数据流的高效表达。 LCEL支持流式处理、异步与并行执行、可观察性与调试、标准化接口,为构建高性能AI应用提供强大支持。 2. 文档加载器 文档加载器是RAG流程的入口,负责将各种数据源加载为LangChain能够处理的文档对象,其质量直接影响整个系统的性能。 文档对象包含page_content和metadata两个核心属性,分别存储文本内容和相关元数据,元数据对于数据过滤、答案引用和来源追溯至关重要。 from langchain_core.documents import Document doc = Document( page_content=这是一段示例文本内容,它将被用作文档的主要内容。, met…… 阅读全文

程序员的AI基础6:LangChain 链

2025-05-17 23:30:40

摘要:一、链的概念 定义与作用:链是LangChain中最核心的概念,指将多个模块化组件按特定顺序链接起来,执行多步骤任务的序列,可将复杂任务分解为更小、更易于管理的独立步骤。 核心优势:链在LangChain生态系统中扮演“粘合剂”和“骨架”的角色,连接不同人工智能组件,促成协同工作,简化应用开发过程,提升开发效率。 链的演进 在早期LangChain版本中,链通过继承Chain抽象基类实现,采用命令式的面向对象继承编程模型,存在组合灵活性不足等问题。 LangChain引入了LangChain表达式语言(LCEL),采用声明式的管道操作符|连接组件,具有可组合性、可读性、灵活性、原生支持高级功能和可观察性等优势。 构建链的核心组件 模型:模型是链的核心引擎,包括大型语言模型(LLMs)和聊天模型(Chat Models),负责执行主要的智能任务。 提示模板:提示模板负责构建和格式化模型的输入,将用户输入与预设指令和示例结合,生成完整、结构化的提示。 输出解析器:输出解析器将模型返回的原始输出转换为更结构化、易于处理的格式,是连接非结构化智能与结构化数据的桥梁。 二、构建第一个LLM应用 1. LangChain表达式语言基础 基础链结构:最基础的链结构为提示 | 模型 | 解析器,是所有复杂链条的基础构建单元,体现了与大型语言模型交互的三个基本阶段。 工作原理:详细追踪了从输入到输出的完整数据流动过程,包括提示模板的格式化、模型的推理生成和输出解析器的结构化处理。 2. 从零构建翻译链 import os # 1. 导入所需的核心组件 from dotenv import load_dotenv from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI # 从.env 文件加载我们配置的环境变量 load_dotenv() api_base = os.getenv(DASHSCOPE_API_BASE) api_key = os.getenv(DASHSCOPE_API_KEY) # 2. 定义我们…… 阅读全文

程序员的AI基础5:LangChain 介绍

2025-05-11 20:03:37

摘要:我们先配置一下环境 安装anaconda,具体安装方法查看页面:Python环境Anaconda下载与安装教程(附安装包) 2025最新版详细图文安装教程 - 知乎 清华镜像站:清华大学开源软件镜像站 安装好后创建一个langchain的环境,建议使用python3.10的版本(避免安装插件时冲突),安装langchain相关插件5个 如果插件安装不上,可以打开工具 anaconda prompt conda create -n langchain python=3.10 conda activate langchain conda install -c conda-forge langchain-openai 安装PyCharm,社区版即可,2025.2是最后一个社区版,下载地址 安装方法PyCharm安装教程及基本使用(更新至2024年新版本),教你迈出学习python第一步-CSDN博客 自备一个云ai大模型环境,比如通义千问 通义大模型_AI大模型_一站式大模型推理和部署服务-阿里云 一、LangChain介绍 LangChain是基于大语言模型的应用开发框架,提供工具、组件和接口,让开发者像搭积木一样创建复杂AI应用。 特点 数据感知:能与多种数据源连接,将外部数据作为知识库,弥补大模型数据陈旧、无法实时获取信息等缺陷 代理交互:应用可主动与环境互动,如自动规划行程、总结邮件内容等,增强用户体验和工作效率。 解决痛点:针对大模型内部数据过时、无法联网、Token限制、无法调用API等问题,LangChain提供解决方案。 应用场景 文档摘要应用 智能客服 编程助手 智能私人助理 学习助手 模型支持 LangChain封装了LLM类、Chat类和Embedding类模型,提供标准化接口。 LLM模型:接收文本输入,返回文本输出,无状态,不记交互历史。适用于快速问答、文本摘要、信息提取、代码生成等任务。 Chat类模型:接收消息列表,返回AI消息,支持多轮对话和角色扮演。构建聊天机器人、角色扮演应用、多轮交互任务等。 Embedding类模型:将文本映射为高维向量,用于语义搜索和知识库问答。实现语义搜索,是RAG应用的基石。 与OpenAI、Google、阿里等主流供应商合作,集成多种大模型。 常见参数:temperat…… 阅读全文

程序员的AI基础4:低代码平台

2025-05-10 11:15:22

摘要:一、Coze空间 1. Coze开发平台优势 界面简洁:Coze界面清爽,隐藏复杂技术细节,让市场运营人员、学生等无编程基础的用户也能轻松使用。 上手容易:用户可快速将想法转化为现实,无需关心底层逻辑和代码实现。 插件丰富:Coze提供上百种功能各异的插件,涵盖读新闻、查天气、订机票等,不断增长。 支持用户将私有API封装成自定义插件,拓展智能体应用场景。 知识库功能:用户可上传专业知识文档,如产品手册、业务流程等,让智能体成为领域专家。在垂直领域应用中,知识库功能是满足专业需求的关键。 快速生成智能体:Coze支持无代码生成AI智能体,用户可在短时间内完成智能体原型搭建。简化创建过程,缩短想法与成品之间的距离。 广泛应用场景:Coze不仅适用于客服,还适用于各种基于AI模型的智能问答智能体。能处理简单问询,也能应对多步骤思考、多逻辑判断的复杂对话场景。 数据管理与记忆功能:Coze让智能体记住对话关键信息和用户偏好,避免“金鱼记忆”。智能体可主动服务,如定时推送新闻、规划周末等,提升用户体验。 流量优势:Coze背靠字节跳动,作品可通过豆包、飞书等渠道触达亿级用户。对于开发者和创作者而言,流量优势意味着作品有更多展示机会。 2. Agent实现流程 需求分析 收集需求:真正倾听用户需求,了解他们希望Agent实现的功能,避免“自嗨”产品。 定义角色职责:明确Agent系统中各“员工”角色及职责,为后续设计开发提供清晰架构。 建立领域模型:梳理Agent需要打交道的概念及其关系,为实现复杂业务逻辑奠定基础。 优化问题研究:提前识别并研究影响效率和体验的环节,确保产品高效满足用户需求。 可视化需求分析:利用流程图、思维导图等可视化工具,更直观地理解和管理需求。 架构设计 人设模块:定义Agent身份、行为准则和说话风格,为其赋予独特魅力。 记忆模块:存储和管理Agent知识,包括短期记忆和长期记忆,构成“大脑海马体”。 规划模块:制定行动计划,将大任务分解为小步骤,优化执行路径。 行动模块:执行具体操作,如调用API、计算数据等,赋予Agent行动能力。 认知架构:确定各模块之间的对话、信息传递和协同工作方式,决定Agent思维逻辑。 多智能体协作:制定沟通“标准操作规程”,确保不同智能体高效分工协作。 迭代和对话式工作流:通过与Agent对话、测试…… 阅读全文

程序员的AI基础3:Cursor

2025-05-03 16:11:26

摘要:一、安装Cursor 官网下周window版本,2025-6-5发布了1.0版本 Cursor - The AI Code Editor 设置语言包,跟vscode设置方法一样。(Cursor就是基于VSCode开发的) 设置Cursor 文件---自动保存 文件---首选项---功能---终端:window默认上终端配置文件,选择 git bush 设置Cursor所选的模型:取消自动 配置规则: 总是使用简体中文来进行回复 也可以添加项目规则,如 -总是使用uv作为Python环境和包管理工具 -总是将wsl+Ubuntu作为开发环境 -所有函数必须团结类型注释 -函数名使用snake_case,类名使用PascalCase -所有api都应该遵循restful规范 -注释必须使用简体中文 -总是遵循《代码整洁之道》 -总数遵循《设计原则与设计模式》 定价 Pricing | Cursor - The AI Code Editor 配置linux开发环境 安装wsl:wsl install 安装 uv:curl -LsSf https://astral.sh/uv/install.sh | sh 安装python环境:uv python install --preview 安装pip:sudo apt install python3-pip Cursor里面安装wsl插件 在Cursor左下方的按键就可以连接到wsl子系统了 连接上后在使用 /mnt挂在本机文件夹 二、生成前台代码体验 生成Login前台页面 初学者使用AI生成login页面的提示词 规范化提示词 请在login目录中设计一个响应式、风格美观的登录页面,页面应包含用户名和密码输入框,以及一个登录按钮。 请分别从HTML结构、CSS样式、JavaScript功能三个方面实现,确保用户体验良好,并具备基础的交互逻辑 创建一个标准的HTML登录页面结构,要求如下: -页面居中显示,使用一个主容器; -包含输入字段:用户名(type=username)和密码(type=password) -包含一个提交按钮,用于登录 -所有输入框和按钮放在一个表单form中; -每个输入区域使用语义化标签,适当嵌套和分组,方便样式和交互控制 使用Tailwin…… 阅读全文

程序员的AI基础2:提示词工程

2025-04-26 14:36:44

摘要:一、提示词定义与重要性 1. 什么是提示词 提示词是输入给AI系统的指令,可以是问题、描述或关键词,目的是引导AI按期望思考或创造,输出所需结果。 提示词的作用:提示词如同打开AI能力之门的钥匙,其质量直接影响AI输出结果的质量,好的提示词能清晰指引AI工作方向,激发其潜能。 提示词与AI的关系:提示词是人类与AI沟通的桥梁,通过不断优化提示词,我们可以更好地理解AI的工作原理,与AI协同工作,共同创造更大价值。 2. 提示词的重要性 对AI输出质量的决定性作用:输入的是垃圾,输出的也是垃圾。优质提示词能引导AI准确把握需求,避免无用信息输出,提升工作效率。 提升AI创新创造能力:高阶提示词可引导AI进行创新创造,突破常规思维。如要求AI设计创意产品,通过特定提示词激发其创新灵感。 提示词促进对AI的理解:通过不断尝试和优化提示词,可了解AI的优势与局限。在提示词优化过程中,可学会与AI协同工作。 二、高质量提示词编写 1. 提示词的常见形式 指令式提示词:直接告诉AI具体要做什么,适用于任务目标明确的情况,如“写一篇关于气候变化的短文”。 问答式提示词:通过提问引导AI思考并回答问题,如“什么是人工智能”,适合获取知识或解答疑问。 填空式提示词:提供句子框架让AI填充内容,如“我最喜欢的动物是( ),因为( )”,有助于获得结构化且有逻辑的回答。 对话式提示词:模拟人与人之间的自然对话,进行多轮交流。例如:“我们好,能跟我聊聊今天的天气吗?”这种形式更适合日常沟通场景。 创意生成式提示词:给予AI更大的发挥空间,鼓励其进行创作。例如:“写一首描绘未来世界的诗。”这种形式常用于文学、艺术等创意领域。 思维链提示词:通过逐步推理的方式引导AI分析问题。例如:“让我们一步步来思考这个问题……”这种形式特别适合解决复杂问题,帮助AI理清思路。 2. 关键要素 明确目标:写提示词的第一步是明确目标,目标越清晰、越具体,AI越容易理解意图并给出精准回应。 提供充分的背景信息:给AI提供足够的背景信息,使其理解更深入,输出更贴合需求,需考虑受众特点、产品卖点、行业术语等。 明确输出要求:清楚告诉AI输出内容的类型、格式、字数限制、内容侧重点、风格和语气等,确保输出符合预期。 3. 提升提示词质量的实用技巧 指令清晰化:使用明确动词开头,用分隔符…… 阅读全文

程序员的AI基础1:通识基础

2025-04-19 15:27:42

摘要:一、人工智能通识 1. 人工智能的应用场景与定义 日常生活中的AI应用: 手机语音助手利用自然语言处理和语音识别技术,为用户提供便捷服务,如查询信息、设置提醒等。智能家居设备通过语音控制实现家电操作,提升生活便利性。 自动驾驶汽车依靠AI进行环境感知和决策,提高行车安全。金融领域中,机器人投资顾问运用AI分析数据,提供个性化资产管理建议。 专业领域的AI应用 医院利用AI图像识别技术辅助诊断,提高诊断准确率。 制造业借助AI优化生产流程,提高效率和质量。 监控摄像头结合AI技术实现行为监测和犯罪预测,提升社会安全水平。 这些应用展示了AI在不同领域的强大潜力和广泛价值。 人工智能的定义与本质 约翰·麦卡锡将人工智能定义为“实现目标的计算能力”,强调其目标导向性。但目前的AI技术本质上是一种高级统计工具,仅在特定任务上表现出色。 真正的智能涉及意识、情感和创造力,而现有AI缺乏这些特质,只能在预设规则或数据支持下运行,无法像人类一样灵活应对复杂情况。 人工智能的分类 现有的AI大多是“弱人工智能”,只能完成特定任务,如翻译、推荐等。 而“强人工智能”或通用人工智能(AGI)是未来目标,能处理任何任务,目前仍遥不可及。 例如,扫地机器人和聊天机器人虽表现出一定智能,但不具备真正的智能。目前的AI产品和服务只是AGI研发过程中的副产品。 2. 人工智能的发展历程 第一次浪潮:规则驱动 1950s- 1980s,达特茅斯会议提出人工智能概念,开启第一次浪潮。基于逻辑和符号推理,依赖人工编写规则,如早期的专家系统。 这种方式在某些领域取得成就,但局限性明显,难以处理自然语言的歧义性和图像识别的复杂性,且成本高昂、可扩展性差,导致人工智能进入寒冬。 第二次浪潮:统计学习 1990s- 2010s,计算机硬件性能提升和互联网出现推动第二次浪潮。统计学习引入概率和统计方法,让计算机从数据中自动学习模式。 垃圾邮件过滤、语音识别和推荐系统等领域取得显著成果,但依赖人工特征工程,对于复杂任务和场景的处理能力有限,发展仍受限。 第三次浪潮:深度学习 21世纪10年代,深度学习和互联网兴起推动第三次浪潮。深度学习实现端到端学习,自动提取数据特征,取得重大突破,如AlphaGo战胜李世石、ChatGPT引发热潮。 在图像识别、自然语言处理等领域超越人…… 阅读全文

前端提升3:TS

2025-03-15 10:19:14

摘要:TypeScript 是一种由微软开发的自由开源的编程语言,他是JavaScript的一个超集,扩展了JavaScript的 语法,主要提供了类型系统和对 ES6 的支持。 一、类型定义 window.onload=function(){ //类型系统 let flag:boolean = false; //布尔类型 let num:number = 15; //数值类型 let str:string = 'abc'; //字符串类型 let str2:string=`hello,${str}`; let msg:string = `hello,${str},${num}`; let u: undefined = undefined; let n: null = null; //为什么要TS // function sum(n1:number,n2:number){ // return n1+n2 // }; // sum(10,20); // sum('10',20); let count:number = 10; count = 100; //声明的变量有多种类型——联合类型 let id:number | string = 10; id = '111'; //任意类型 :any 万能类型 let x:any = true; x = 111; x = 'abc'; //引用类型 //数组 let arr:number[] = [1,2,3,4,5]; //最简单的方法是使用「类型 + 方括号」来表示数组: number[] let arr2:string[] = ['a','b','hello']; let arr3:(number|string)[] = ['a',100,'hello']; let arr4:any[] = ['a',100,'hello']; //数组泛型 Array类型 let arr5:Arraynumber= [1,2,3,4,5]; let …… 阅读全文

WPF学习笔记4:控件自定义

2022-08-29 23:03:02

摘要:一、概述 1. 个性化处理的方式 控件模板 UserControl 用户控件 CustomControl 自定义控件 2. UserControl与CustomControl 开发方式与表现结构 CustomControl 模板与关键特性 区别: 1、自定义控件:注重控件对象的功能,必须遵守WPF的控件规则 完全自己实现一个控件 继承现有控件进行功能扩展,并且添加新功能 WPF的控件要求 后台代码(控制逻辑)和Generic.Xaml(样式 模板)进行组合 支持模板重写 继承Control 2、用户控件:注重复合控件组合使用,非常灵活,可以根据控件开发人员自己的意愿进行功能处理 多个现有控件的集合,组成一个可复用的控件组 XAML和后台代码组成 绑定非常紧密 不支持模板重写、样式 继承UserControl 二、日期时间选择器 UserControl x:Class=Zhaoxi.CustomLesson.Controls.DateTimePicker xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:d=http://schemas.microsoft.com/expression/blend/2008 xmlns:local=clr-namespace:Controls mc:Ignorable=d d:DesignHeight=30 d:DesignWidth=200 UserControl.Resources Style TargetType=RepeatButton x:Key=ButtonUpStyle Setter Property=Height Value=18…… 阅读全文

WPF学习笔记3:动画

2022-08-28 22:25:34

摘要:一、动画 补间动画:动画本质就是在一个时间段内对象尺寸、位移、旋转角度、缩放、颜色、透明度等属性值的连续变化。也包括图形变形的属性。时间、变化的对象、变化的值 工业应用场景:蚂蚁线、旋转、高度变化、指针偏移、小车 起始-》结束 多长时间 使用要求 必须针对依赖属性 对象必须派生自DependencyObject,并且实现IAnimatable接口 必须存在可用的兼容动画类(支持自定义) 二、简单线性动画 1. 类型 类型 ByteAnimation ColorAnimation DecimalAnimation DoubleAnimation Int16Animation Int32Animation Int64Animation Point3DAnimation PointAnimation QuaternionAnimation RectAnimation Rotation3DAnimation SingleAnimation SizeAnimation ThicknessAnimation VectorAnimation Vector3DAnimation 2. 动画类的选择 根据属性类型确定 变个大小、变个位置、变个颜色、变个显示(显示与隐藏) 3. 基本使用 创建类对象,设置相关属性,动画的执行 Duration、From、To 动画的独立控制与整合 StoryBoard 控制动画的运行:开始,停止,暂停,恢复 动画与对象的桥梁:动画对象与页面对象的关联 MediaElement 4. 实操 Window x:Class=AnimationLesson.LinearAniamtionWindow xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:d=http://schemas.microsoft.com/expression/blend/2008 xmlns:mc=http://schemas.openxmlf…… 阅读全文