大模型学习笔记:向量

Vector向量就把一段文字的语义信息,转换成一串固定长度的数字列表,让计算机能“看懂”文字的含义并做相似度计算。简单说就是让计算机连接不同的文本是否表达同一个意思。 文本嵌入模型通过深度学习等技术,从文本提取语义特征并映射为固定长度的数字序列。向量嵌入的过程,我们一般选择合适的文本嵌入模型来完成。 text-embedding-v1模型可以生成1536维的向量。生成向量维度越多,就更好的记录文本的语义特征,做语义匹配会更加精准。更多的向量会在计算、存储和匹配过程中,带来更大压力:tradeoff of precise and performance. 向量的匹配通过算法实现,如余弦相似度。向量的数字序列,共同决定了向量在高纬度空间中的方向和长度,而余弦相似度主要就是撇去长度的影响,得到方向的夹角。夹角越小越相似,即方向相同。 余弦相似度:两个向量的点积 / 两个向量模长的乘积 import numpy as np def get_dot(vec1, vec2):     “””     计算两个向量的点积     :param vec1: 向量1     :param vec2: 向量2     :return: 点积结果     “””     if len(vec1) != len(vec2):         raise ValueError(“两个向量的长度必须相同”)     […]

大模型学习笔记:向量 Read More »

大模型学习笔记:Json

JavaScript Object Notation:是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Json是带有格式的字符串,主要用于数据交换,即程序和程序之间的信息互传,使用Json会更加方便。Json主要由2种结构:Json对象和Json数组。 { “key”: value, “key”: value } 其中: key必须是字符串 value可以是: 数字 字符串 列表 Json对象或Json数组 Json数组可以简单理解成Python中的列表套多个字典:[{}, {}, {}], Json对象:Python字典 Json对象: { “age”: 11, “name”: “周杰伦”, “hobby”: [“唱”,”跳”,”rap”], “other”: { “身高”:172, “体重”:68 } } Json数组: [ {“name”: “周杰伦”, “age”:11}, {“name”: “蔡依林”, “age”:12}, {“name”: “小明”, “age”:16} ] Python中使用Json: import json d = {     “name”:

大模型学习笔记:Json Read More »

大模型学习笔记:LangChain基础

LangChain 围绕LLMs(大预言模型)建立的一个框架。LangChains自身并不开发LLMs,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起,简化LLMs应用的开发难度,方便开发者快速地开发复杂的LLMs应用。 主要功能: Prompts 优化提示词(提示词工程) Models 调用各类模型 History 管理会话历史记录(记忆) Indexes 管理和分析各类文档 Chains 构建功能的执行链条 Agent 构建智能体 LangChain 是一个LLM相关业务功能的集大成者,是一个Python的第三方库,提供了各种功能的API。 pip install langchain langchain-community dashscope chromadb langchain-ollama langchain: 核心包 langchain-community: 社区支持包,提供了更多的第三模型调用(阿里云百炼) langchain-ollama:ollama支持包,支持调用ollama托管部署的本地模型 dashscope:阿里云通义千问的Python SDK chromadb:轻量向量数据库 LangChain目前支持三种类型的模型:LLMs(大预言模型)、Chat Models(聊天模型)、Embeddings Models(嵌入模型) LLMs: 技术范畴的统称,指基于大参数量、海量文本训练的Transformer架构模型,核心能力是理解和生成自然语言,主要服务于文本生成场景 聊天模型:应用范畴的细分,是专为对话场景优化的LLMs,核心能力是模拟人类对话的轮次交互,主要服务于聊天场景 文本嵌入模型:文本嵌入模型接收文本作为输入,得到文本的向量 LLM 大语言模型 from langchain_ollama import OllamaLLM model = OllamaLLM(model=”qwen3:4b”) res = model.invoke(input = “请介绍一下你自己”) print(res) from

大模型学习笔记:LangChain基础 Read More »

大模型学习笔记:Prompt Engineering 提示词工程

Prompt Engineering 也成为In-Context Prompting, 是指在不更新模型权重的情况下如何与大模型交互以引导其行为以获得所需结果的方法。人工智能领域,Prompt指的是用户给大语言模型发出的指令。 提示词技巧: 详细的描述 让模型充当某个角色 使用分隔符标明输入的不同部分 – 例:用20个字符总结由三引号分割的文本。“”“在此插入文本”“” 对任务指定步骤:对于可以拆分的任务可以尽量拆开,最好能为其指定一系列步骤 – 步骤1:“”“用户输入文本”“”,用一句话总结这段文本,并加上前缀“Summary” – 步骤2:将步骤1中的摘要翻译成英语,并添加前缀“翻译: ” 提供例子:本质类似于few-shot learning。先扔给大模型举例,然后让模型按照例子来输出 – 按照这句评论文本的格式:““”用户输入文本”“”,帮我创造新的样本 基于文本文档:帮助大模型问答,**降低模型“幻觉”**, 经典知识库用法,让大模型使用我们提供的信息来组成答案:- 根据下文中三重引号引起来的文章来回答问题。如果在文章中找不到答案,请写“我找不到答案”, 不要自己造答案。“”“<在此插入文档>”“”“”“<在此插入文档>”“”问题:<在此插入问题> 大模型本身是一种很简单的结构:用户输入,模型输出。不管RAG还是Agent智能体或其他围绕模型的各种复杂的开发工作,本质上都可以简单总结为在提示词上下功夫。 Few-Shot, Zero-Shot思想 Zero-shot Learning(联想),指在训练阶段不存在与测试阶段完全相同的类别,但是模型可以使用训练过的知识来推广到测试集中的新类别上。“零样本”学习。因为模型在训练时从未见过测试集中的新类别,在模型训练和提示词优化中均有体现。 在提示词优化中:用于基于已训练的能力,不提供任何示例,仅通过语言去描述任务的要求、目标和约束,让模型直接生成结果。简单来说就是“用语言定义任务,解放(信任)模型的预训练知识”。 例:请判断“”包围的用户评论中的情感倾向,输出 正面 或 负面。“这款代餐鸡胸肉饱腹感很强,吃起来也不柴,很推荐!” Few-shot Learning (示例)是指少样本学习,当模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,对应的有one-shot learning,单样本学习,也算样本少到为一的情况下的一种few-shot learning from openai import OpenAI import os client = OpenAI(     api_key=os.getenv(“OPENAI_API_KEY”),     base_url=”https://dashscope.aliyuncs.com/compatible-mode/v1″,

大模型学习笔记:Prompt Engineering 提示词工程 Read More »

大模型学习笔记:OpenAI库

OpenAI库是OpenAI官方推出的Python SDK,核心作用是让开发者能简单、高效地调用OpenAI的各类API(如GPT聊天,DALL E绘图,语音转文字等),无需手动处理HTTP请求,身份验证等底层细节。由于其发布较早且比较医用,现如今许多模型服务商均兼容OpenAI SDK的调用。 主要分为三步: 1. 获取客户端对象: from openai import OpenAI client = OpenAI( api_key=os.getenv(“OPENAI_API_KEY”), base_url=”https://dashscope.aliyuncs.com/compatible-mode/v1″, #阿里云百炼 ) 2. 调用模型, 和模型对话 completion = client.chat.completions.create(     model=”glm-5″,     messages=[         {“role”: “system”, “content”: “你是一位怼人大师,请用犀利的语言怼人”},         {“role”: “assistant”, “content”: “专业怼人,专治各种不服!”},         {“role”: “user”, “content”: “你是谁,你能做什么”}  

大模型学习笔记:OpenAI库 Read More »

ROS2学习笔记:Python最小支持Parameters的节点

通过如下命令新建一个package框架: ros2 pkg create –build-type ament_python –license Apache-2.0 python_parameters –dependencies rclpy Python的示例代码为: import rclpy import rclpy.node class MinimalParam(rclpy.node.Node): def __init__(self): super().__init__(‘minimal_param_node’) self.declare_parameter(‘my_parameter’, ‘world’) self.timer = self.create_timer(1, self.timer_callback) def timer_callback(self): my_param = self.get_parameter(‘my_parameter’).get_parameter_value().string_value self.get_logger().info(‘Hello %s!’ % my_param) my_new_param = rclpy.parameter.Parameter( ‘my_parameter’, rclpy.Parameter.Type.STRING, ‘world’ ) all_new_parameters = [my_new_param] self.set_parameters(all_new_parameters) def main(): rclpy.init() node = MinimalParam() rclpy.spin(node) if

ROS2学习笔记:Python最小支持Parameters的节点 Read More »

ROS2学习笔记:Python最小服务端/客户端节点

按照之前学习到的建立workspace以及package框架的指令,创建我们的这个最小服务端客户端节点的框架: ros2 pkg create –build-type ament_python –license Apache-2.0 py_srvcli –dependencies rclpy example_interfaces 当节点之间使用服务进行通信时,发送数据请求的节点称为客户端节点,响应请求的节点称为服务节点。请求和响应的结构由 .srv 文件决定。在使用ros2命令生成一个package框架时候,需要一个参数example_interfaces来生成需要的.srv文件。对于我们一个两数相加的服务例子,在.srv需要如下内容: int64 a int64 b — int64 sum 前边两个是客户端request的参数,最后是服务端response的参数。然后开始准备我们具体的代码。 服务端代码为: from example_interfaces.srv import AddTwoInts import rclpy from rclpy.node import Node class MinimalService(Node): def __init__(self): super().__init__(‘minimal_service’) self.srv = self.create_service(AddTwoInts, ‘add_two_ints’, self.add_two_ints_callback) def add_two_ints_callback(self, request, response): response.sum = request.a + request.b self.get_logger().info(‘Incoming request\na:

ROS2学习笔记:Python最小服务端/客户端节点 Read More »

ROS2学习笔记:C++最小服务端/客户端节点

当节点之间使用服务进行通信时,发送数据请求的节点称为客户端节点,响应请求的节点称为服务节点。请求和响应的结构由 .srv 文件决定。在使用ros2命令生成一个package框架时候,需要一个参数example_interfaces来生成需要的.srv文件。对于我们一个两数相加的服务例子,在.srv需要如下内容: int64 a int64 b — int64 sum 前边两个是客户端request的参数,最后是服务端response的参数。然后开始准备我们具体的代码。 服务端示例代码为: #include “rclcpp/rclcpp.hpp” #include “example_interfaces/srv/add_two_ints.hpp” #include <memory> void add(const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request, std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response) { response->sum = request->a + request->b; RCLCPP_INFO(rclcpp::get_logger(“rclcpp”), “Incoming request\na: %ld” ” b: %ld”, request->a, request->b); RCLCPP_INFO(rclcpp::get_logger(“rclcpp”), “sending back response: [%ld]”, (long int)response->sum); } int main(int argc, char **argv) { rclcpp::init(argc, argv);

ROS2学习笔记:C++最小服务端/客户端节点 Read More »

ROS2学习笔记:Python最小发布/接收节点

通过前边流程建立了workspace和基于Python的package框架后,下边是极简的一个Python语言实现的Publisher和Subscriber例子: import rclpy from rclpy.node import Node from std_msgs.msg import String class MinimalPublisher(Node): def __init__(self): super().__init__(‘minimal_publisher’) self.publisher_ = self.create_publisher(String, ‘topic’, 10) timer_period = 0.5 # seconds self.timer = self.create_timer(timer_period, self.timer_callback) self.i = 0 def timer_callback(self): msg = String() msg.data = ‘Hello World: %d’ % self.i self.publisher_.publish(msg) self.get_logger().info(‘Publishing: “%s”‘ % msg.data) self.i += 1 def main(args=None):

ROS2学习笔记:Python最小发布/接收节点 Read More »