
AI通识与基础-认识人工智能ai需要通过训练才能拥有智能-神经网络原理ai的核心是一种神经网络架构本质上是在模拟大脑的神经元包括输入树突求和细胞核激活轴突输出突触ai像人脑一样拥有成千上万个神经细胞组成了深度神经网络深度神经网络里面的每一个神经元都是接受上一层的所有输出并把自己的输出传递给下一层的每一个神经元是全连接的分为很多层包括输入层接收数据输出层产生结果以及在中间的若干层隐藏层用于进行信息处理和学习激活因为求和得到的值可能是一个波动比较大的值激活是让这些数据的波动变小-b减去一个阈值因为我们希望数据达到一个阈值之后才能输出训练ai大模型就是找出正确的权重参数但是权重参数太多一个一个人工设置肯定是不可行的所以要用反向传播的方法-大语言模型词向量为训练神经网络学习自然语言打下了基础人类的自然语言文字想要参与就要转变为词向量自然语言文字拆分成一个个片段成为token词每一个token经过模型计算转变为一个浮点数数组作为向量坐标这个模型计算模型也是通过训练得来的浮点数组作为向量坐标的原理三个值分别作为x轴的坐标y轴的坐标z轴的坐标对应三维坐标而浮点数组有12288个元素对应12288维的坐标对应文字男人女人之间的向量差和爸爸妈妈之间的向量差一致用于表示性别的向量差所以知道了爸爸的向量时加上性别的向量差就可以找到妈妈所以在向量空间中的不同方向就表达了不同的含义现在ai就能够进行理解词语但是词语是要通过上下文才能理解的在不同的上下文中词语的含义不同所以我们必须要让ai理解上下文来去修正词语的含义因为ai是通过坐标系中向量的方向来理解词语的含义的所以在原有的词语上加上不同的向量就会让词语含义更加清晰生成的token的概率分布是根据tempereture来决定的temperature的参数越大概率分布越均匀temperature的参数越大概率分布越确定由于每一个词语都有很多位且要通过向量的乘法运算所以运算量很大但是算力是有限的所以上下文不能太长否则超过了算力上限就算不出来了如果上下文过于长就会因为算力不足遗忘之前的文字AI通识-大模型应用大模型区别于大模型应用大模型应用是基于大模型的推理分析生成能力结合传统编程的精确计算控制能力开发出的各种应用大模型应用通常是入口是传统的web应用再由传统应用调用大模型服务提供的基于http协议的aoi接口实现用户与大模型的交互大模型应用-大模型服务大模型服务有很多不同的形式1.云服务比如云服务平台提供了国内值名的大模型的api开放服务很多模型厂商提供了自家的模型的api服务2.本地部署-注册deepseek-注册阿里云百炼-Ollama-接口规范大模型接口基本上都遵循OpenAI规范所以都大同小异都要有URL访问地址作用为请求对应厂商的服务API_KEY以及请求参数请求参数的格式也都差不多·参数包括模型名称因为很多厂商不只有一个模型不同的模型models切换为deepseek-reasoner之后回答会加上推理内容message就是发送给模型的消息role指的是发送的角色为user指的是用户发的消息为assistant指的是ai发的消息为system 系统设置{ model: qwen-plus, messages: [ { role: system, content: You are a helpful assistant. }, { role: user, content: 你是谁 } ] stream: false }stream的值为布尔值表示是否要进行流式输出-会话记忆-开发环境在pycharm中用命令pip install uv来下载uv可以用uv创建项目下载软件包可以创建一个项目交给uv来管理-编程调用大模型用代码实现openai的时候填写的base_url里面只需要写基础路径就行会自动补全后面的路径不同的模型服务商提供的base_url不同编写代码请求大模型的服务只需要三步1导入OpenAI模块下的openai2初始化客户端包括api_key和base_urlresponse.model_dump_json(indent4)含义为把ai给的回复以model_dump_json的格式输出出来缩进为四你好很高兴见到你我是Qwen一个大型语言模型。有什么我可以帮你的吗 { id: chatcmpl-8bb5bd9e-ee50-97e1-b868-8dc38a513945, choices: [ { finish_reason: stop, index: 0, logprobs: null, message: { content: 你好很高兴见到你我是Qwen一个大型语言模型。有什么我可以帮你的吗, refusal: null, role: assistant, annotations: null, audio: null, function_call: null, tool_calls: null } } ], created: 1779523916, model: qwen-turbo, object: chat.completion, service_tier: null, system_fingerprint: null, usage: { completion_tokens: 22, prompt_tokens: 21, total_tokens: 43, completion_tokens_details: null, prompt_tokens_details: { audio_tokens: null, cached_tokens: 0 } } }管理环境变量先下载python-dotenv这里补充两点第一个是这个env是跟你的文件夹绑定的不会有泄露的风险第二个是.env不能有名称有的话提取不出来LangChain入门-认识LangChain传统的聊天机器人和Agent的区别是传统的聊天机器人只具有推理能力给出建议Agent能做出任务规划但是因为本身也只是ai所以做出的任务规划里要执行的任务要通过代码来实现具体的动作提前定义好工具交给ai相当于给ai提供了手脚不再是缸中之脑简单来说agent就是用传统的代码给ai装上了感知环境采取行动的工具-快速入门和Agent原理ai大模型无法获取即时的天气信息1.加载环境变量2.定义工具创建agent加入调用的大模型和工具发起调用传递要发送的消息1.让大模型知道工具的存在在发送请求的时候agent会把消息和工具结合起来交给大模型这样模型就知道了我们工具的存在2.让网上的大模型调用本地的工具在返回的信息中大模型会告诉本地要调用哪个工具langchain会自动调用这个工具agent要做的事1.把工具信息包括工具名称参数描述打包起来作为参数传递给大模型2.接受大模型返回回来的要调用的方法名称和参数调用方法并把结果返回给大模型-初始化模型init_chat_model函数初始化模型根据模型名称自动设定base_url获取api_key的方法只适用于langchain支持的模型不支持的需要手动去设置init_chat_model可以自动设置参数某些ai大模型不支持openai也不支持langchain这时就可以导入langchain社区提供的对应的api-模型-调用模型在alangchain中流式输出还是非流式输出是由方法名来决定的invoke是非流式输出stream是流式输出invokestream这样直接输出输出的是生成器的对象正确的方法是输出回复里的每一个这样看太难看了可以选择输出内容langchain最核心的是智能体包括1.利用初始化的model创建agent2.利用model名称由langchain自动初始化模型agent必须传入一个字典里面必须包含一个messages字段也就是消息的列表消息Message发送消息的时候可以由这几个BaseMessage类统一发送虽然发送消息还是必须为{messages:[消息]}这样的格式来发送消息但是省去了消息列表中的复杂格式返回消息的时候也是以消息列表的方法来返回消息的打印的时候只需要取出消息列表里的每一个消息用pretty_print()方法来打印 Human Message 明天山西的天气怎么样 None Ai Message 明天山西的天气是晴天 None System Message 你叫什么名字 None Ai Message 好的我直接回答说“明天山西的天气是晴天”其实是不够准确的因为我没有查询具体数据。让我先查一下山西明天的天气情况。 不过需要注意的是山西是一个省份范围很大不同城市天气可能不同。我先查一下省会太原的天气作为参考。 Tool Calls: get_weather (call_00_S8XXpBWiCMRYO3B2Pryv3683) Call ID: call_00_S8XXpBWiCMRYO3B2Pryv3683 Args: location: 山西太原 None Tool Message Name: get_weather sunny None Ai Message 根据查询结果明天山西以太原为例的天气是 **☀️ 晴天**。 不过山西地域较广不同城市如大同、运城、长治等天气可能会有差异如果您想了解山西某个具体城市的天气可以告诉我我再帮您查询 None打印出来的消息包括我们发送的消息以及ai回复的消息多模态消息HumanMessage中传入的消息也应该为列表[]多模态消息可以是本地消息创建组件接收图片本地消息需要转为base64-提示词工程把系统提示词参数放在创建智能体的地方这样就不用每次调用大模型都需要传递一遍系统提示词·提示词的规范与语法简单的指定输出内容指定输出结构基于model的结构化输出1.创建一个类继承BaseModel2.编写该类中的字段3.把这个参数交给response_format参数 Human Message 帮我写一个简单的侦探人设 None Ai Message Tool Calls: ai_prompt_model (call_00_nxpbuplGy2OTzkYHuEiF8407) Call ID: call_00_nxpbuplGy2OTzkYHuEiF8407 Args: name: 林默 location: 中国上海 age: 32岁 None Tool Message Name: ai_prompt_model Returning structured response: name林默 location中国上海 age32岁 None-工具Tools1.2用函数名文档注释1.3如果参数比较多创建一个类继承BaseMadel然后把这个类传递给tool的args_schema参数中-预定义工具Tavily-短期记忆短期记忆—记忆会话信息与ai的对话有回滚相关功能所以在用户与ai的每一次交互都会生成一个快照同一个会话的多个快照组成一组用同一个thread_id来标记在每一次对话的时候1.把之前的id对应组的对话拼接到本此此会话上2.把本次的对话保存到本组对话中-短期记忆-持久存储把文件中的会话取出来作为存储快照的组激活这一组快照在创建agent的时候设置上去1.先创建一个链接2.创建一个仓库3.开启自动建表在连接sqlite的时候要指定一个参数check_same_thread为False因为connect方法会自动检查是否在一个线程内在这个过程中决定快照存储在哪里的是thread_id在创建agent的时候绑定快照-记忆管理策略利用总结摘要的中间件来完成在中间件数组中加入总结摘要的中间件参数包括调用的大模型在消耗多少token的时候触发要压缩到多少会话数量-实战-需求分析与功能验证