当前位置: 首页 > news >正文

Datawhale Ollama教程笔记3

小白的看课思路:

Ollama REST API 是什么?

想象一下,你有一个智能的“盒子”(Ollama),里面装了很多聪明的“小助手”(语言模型)。如果你想让这些“小助手”帮你完成一些任务,比如回答问题、生成文章等等,怎么让他们“听到”你的请求呢?这时候就需要一种语言,让“盒子”和你说话。而 Ollama REST API 就是这样的语言。

1. 理解概念

  • 什么是 REST API?

    • REST API 是一种网络应用程序之间的通信方式,它使用 HTTP 协议来发送请求和接收响应。你可以把它想象成一个餐厅的菜单,你(客户端)通过菜单(API文档)告诉服务员(服务器)你想要什么菜(数据或服务),服务员会把菜(响应)给你。

  • 为什么 Ollama 需要 REST API?

    • Ollama 是一个强大的语言模型服务,通过 REST API,你可以让其他程序(比如你写的 Python 脚本、网页应用等)与 Ollama 交互,而不需要直接在命令行中操作。这就像你不需要亲自去厨房做饭,只需要通过菜单点菜一样。

2. 分步骤学习

  • 第4.1节:Ollama API 使用指南

    • 这一部分是基础,介绍了如何使用 Ollama 的 API。你可以先通读一遍,了解 API 的基本结构和请求方式。

    • 重点理解以下几个概念:

      • API Endpoint(接口地址):就像餐厅的地址,告诉你的程序去哪里找 Ollama。

      • HTTP 方法:比如 GET(获取数据)、POST(发送数据)等,就像你告诉服务员你是要点菜还是有其他需求。

      • 请求参数:比如你点菜时需要告诉服务员菜名、口味等,这些就是请求参数。

      • 响应格式:Ollama 会返回一些数据,通常是 JSON 格式,就像服务员给你端上来的菜。


目录

Ollama API 使用指南

简介

端点

一、回答补全

参数

示例请求(流式)

示例响应

高级玩法

非流式输出

JSON 模式

输入包含图片

可复现输出

二、对话补全

参数

示例请求(流式)

示例响应

高级玩法

带历史记录

三、创建模型

参数

示例请求

示例响应

检查Blob是否存在

查询参数

示例请求

示例响应

创建Blob

查询参数

示例请求

示例响应

四、复制模型

示例请求

示例响应

五、删除模型

参数

示例请求

示例响应

六、列出运行模型

示例请求

示例响应

七、列出本地模型

示例请求

示例响应

八、显示模型信息

参数

示例请求

示例响应

九、拉取模型

参数

示例请求

示例响应

十、推送模型

参数

示例请求

示例响应

十一、生成嵌入

参数

示例请求

示例响应

示例请求(多个输入)

示例响应

错误处理




Ollama API 使用指南

简介

Ollama 提供了强大的 REST API,使开发者能够方便地与大语言模型进行交互。通过 Ollama API,用户可以发送请求并接收模型生成的响应,应用于自然语言处理、文本生成等任务。本文将详细介绍生成补全、对话生成的基本操作,并对创建模型、复制模型、删除模型等常见操作也进行了说明。

端点

  • 回答补全
  • 对话补全
  • 创建模型
  • 复制模型
  • 删除模型
  • 列出运行模型
  • 列出本地模型
  • 显示模型信息
  • 拉取模型
  • 推送模型
  • 生成嵌入

一、回答补全

POST /api/generateCopy to clipboardErrorCopied

使用指定的模型生成给定提示的响应。这是一个流式端点,因此会有一系列响应。最终的响应对象将包括来自请求的统计信息和其他数据。

参数

  • model: (必需)模型名称
  • prompt: 要生成响应的提示
  • suffix: 模型响应后的文本
  • images: (可选)一个base64编码的图像列表(用于多模态模型,如 llava )

高级参数(可选):

  • format: 返回响应的格式。目前唯一接受的值是 json
  • options: 其他模型参数,如 temperatureseed 等
  • system: 系统消息
  • template: 要使用的提示模板
  • context: 从先前对 /generate 的请求中返回的上下文参数,可以用于保持简短的对话记忆
  • stream: 如果设置为 false ,响应将作为单个响应对象返回,而不是一系列对象流
  • raw: 如果设置为 true ,将不会对提示进行任何格式化。如果您在请求API时指定了完整的模板提示,可以选择使用 raw 参数
  • keep_alive: 控制模型在请求后保留在内存中的时间(默认:5m

示例请求(流式)

curl http://localhost:11434/api/generate -d '{"model": "llama3.1","prompt": "为什么草是绿的?"
}'Copy to clipboardErrorCopied

Tip

如果在 Windows 操作系统中使用 curl 命令,请下载 curl for Windows, 解压缩文件,然后找到该文件目录下的 bin 子文件, 复制文件地址添加环境变量。

在命令行窗口(注意不是 PowerShell)使用以下命令,检查是否成功添加。

curl --helpCopy to clipboardErrorCopied

显示如下,表示成功添加。

Tip

在 Windows 命令行窗口下使用 curl 请求命令时,注意使用转义双引号。示例命令如下。

curl http://localhost:11434/api/generate -d "{\"model\": \"llama3.1\", \"prompt\": \"为什么草是绿的\"}"Copy to clipboardErrorCopied

显示如下表示请求成功。

示例响应

返回的是一个 JSON 对象流:

{"model":"llama3.1","created_at":"2024-08-08T02:54:08.184732629Z","response":"植物","done":false
}Copy to clipboardErrorCopied

流中的最终响应还包括有关生成的附加数据:

  • context: 用于此响应的对话编码,可以在下一个请求中发送以保持对话记忆
  • total_duration: 生成响应所花费的时间(纳秒)
  • load_duration: 加载模型所花费的时间(纳秒)
  • prompt_eval_count: 提示中的标记数量
  • prompt_eval_duration: 评估提示所花费的时间(纳秒)
  • eval_count: 响应中的标记数量
  • eval_duration: 生成响应所花费的时间(纳秒)
  • response: 如果响应是流式的则为空,如果不是流式的,这将包含完整的响应要计算响应生成速度(每秒生成的标记数,token/s), 即eval_count / eval_duration * 10^9。

最终响应:

{"model":"llama3.1","created_at":"2024-08-08T02:54:10.819603411Z","response":"","done":true,"done_reason":"stop","context":[1,2,3],"total_duration":8655401792,"load_duration":5924129727,"prompt_eval_count":17,"prompt_eval_duration":29196000,"eval_count":118,"eval_duration":2656329000
}Copy to clipboardErrorCopied

高级玩法

非流式输出

将 stream 设置为 false,可以一次收到所有回复。

示例请求

curl http://localhost:11434/api/generate -d '{"model": "llama3.1","prompt": "为什么草是绿的?","stream": false
}'Copy to clipboardErrorCopied

示例响应

{"model":"llama3.1","created_at":"2024-08-08T07:13:34.418567351Z","response":"答案:叶子含有大量的叶绿素。","done":true,"done_reason":"stop","context":[1,2,3],"total_duration":2902435095,"load_duration":2605831520,"prompt_eval_count":17,"prompt_eval_duration":29322000,"eval_count":13,"eval_duration":266499000
}Copy to clipboardErrorCopied
JSON 模式

当 format 设置为 json 时,输出将是 JSON 格式。但请注意,要在 prompt 里指示模型以 JSON 格式响应,否则模型可能生成大量空格。

示例请求

curl http://localhost:11434/api/generate -d '{"model": "llama3.1","prompt": "为什么草是绿的?以JSON格式输出答案","format": "json","stream": false
}'Copy to clipboardErrorCopied

示例响应

{"model":"llama3.1","created_at":"2024-08-08T07:21:24.950883454Z","response":"{\n  \"颜色原因\": \"叶子中含有光合作用所需的叶绿素\",\n  \"作用\": \"进行光合作用吸收太阳能\"\n}","done":true,"done_reason":"stop","context":[1,2,3],"total_duration":3492279981,"load_duration":2610591203,"prompt_eval_count":22,"prompt_eval_duration":28804000,"eval_count":40,"eval_duration":851206000
}Copy to clipboardErrorCopied

response 的值将是一个包含类似于以下内容的 JSON 的字符串:

{"颜色原因": "叶子中含有光合作用所需的叶绿素","作用": "进行光合作用吸收太阳能"
}Copy to clipboardErrorCopied
输入包含图片

要向多模态模型(如 llava 或 bakllava)提交图像,请提供 base64 编码的 images 列表:

示例请求

curl http://localhost:11434/api/generate -d '{"model": "llava","prompt":"描述这张图片","stream": false,"images": ["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"]
}'Copy to clipboardErrorCopied

示例响应

{"model":"llava","created_at":"2024-08-08T07:33:55.481713465Z","response":" The image shows a cartoon of an animated character that resembles a cute pig with large eyes and a smiling face. It appears to be in motion, indicated by the lines extending from its arms and tail, giving it a dynamic feel as if it is waving or dancing. The style of the image is playful and simplistic, typical of line art or stickers. The character's design has been stylized with exaggerated features such as large ears and a smiling expression, which adds to its charm. ","done":true,"done_reason":"stop","context":[1,2,3],"total_duration":2960501550,"load_duration":4566012,"prompt_eval_count":1,"prompt_eval_duration":758437000,"eval_count":108,"eval_duration":2148818000
}Copy to clipboardErrorCopied
可复现输出

将 seed 设置为一个固定数值,得到可复现的输出:

示例请求

curl http://localhost:11434/api/generate -d '{"model": "llama3.1","prompt": "为什么草是绿的?","stream": false,"options": {"seed": 1001}
}'Copy to clipboardErrorCopied

示例响应

{"model":"llama3.1","created_at":"2024-08-08T07:42:28.397780058Z","response":"答案:因为叶子中含有大量的氯离子。","done":true,"done_reason":"stop","context":[1,2,3],"total_duration":404791556,"load_duration":18317351,"prompt_eval_count":17,"prompt_eval_duration":22453000,"eval_count":16,"eval_duration":321267000}Copy to clipboardErrorCopied

二、对话补全

POST /api/chatCopy to clipboardErrorCopied

使用指定模型生成聊天中的下一条消息。这也是一个流式端点,因此会有一系列响应。如果将 "stream" 设置为 false,则可以禁用流式传输。最终的响应对象将包括请求的统计信息和附加数据。

参数

  • model:(必需)模型名称
  • messages:聊天消息,这可以用于保持聊天记忆
  • tools:模型支持使用的工具。需要将 stream 设置为 false

message 对象具有以下字段:

  • role:消息的角色,可以是 systemuserassistant 或 tool
  • content:消息的内容
  • images(可选):要包含在消息中的图像列表(对于如 llava 之类的多模态模型)
  • tool_calls(可选):模型想要使用的工具列表

高级参数(可选):

  • format:返回响应的格式。目前唯一接受的值是 json
  • options:其他模型参数,如 temperatureseed 等
  • stream:如果为 false,响应将作为单个响应对象返回,而不是一系列对象流
  • keep_alive:控制请求后模型在内存中保持加载的时间(默认:5m

示例请求(流式)

curl http://localhost:11434/api/chat -d '{"model": "llama3.1","messages": [{"role": "user","content": "为什么草是绿的?"}]
}'Copy to clipboardErrorCopied

示例响应

返回 JSON 对象流:

{"model":"llama3.1","created_at":"2024-08-08T03:54:36.933701041Z","message":{"role":"assistant","content":"因为"},"done":false
}Copy to clipboardErrorCopied

最终响应:

{"model":"llama3.1","created_at":"2024-08-08T03:54:37.187621765Z","message":{"role":"assistant","content":""},"done_reason":"stop","done":true,"total_duration":5730533217,"load_duration":5370535786,"prompt_eval_count":17,"prompt_eval_duration":29621000,"eval_count":13,"eval_duration":273810000
}Copy to clipboardErrorCopied

高级玩法

非流式输出、JSON模式、多模态输入、可复现输出的参数设置与 回答API 的一致。

带历史记录

发送带有对话历史记录的聊天消息。可以使用相同的方法开始多轮对话或思维链提示。

示例请求

curl http://localhost:11434/api/chat -d '{"model": "llama3.1","messages": [{"role": "user","content": "为什么草是绿色的?"},{"role": "assistant","content": "因为草里面含有叶绿素。"},{"role": "user","content": "为什么叶绿素让草看起来是绿色的?"}],"stream": false
}'Copy to clipboardErrorCopied

示例响应

{"model":"llama3.1","created_at":"2024-08-08T07:53:28.849517802Z","message":{"role":"assistant","content":"这是一个更复杂的问题!\n\n叶绿素是一种称为黄素的色素,这些色素可以吸收光能。在日光下,绿色草叶中的叶绿素会吸收蓝光和红光,但反射出黄色和绿色的光,所以我们看到草看起来是绿色的。\n\n简单来说,叶绿素让草看起来是绿色的,因为它反射了我们的眼睛可以看到的绿光,而不反射我们看到的其他颜色。"},"done_reason":"stop","done":true,"total_duration":5065572138,"load_duration":2613559070,"prompt_eval_count":48,"prompt_eval_duration":37825000,"eval_count":106,"eval_duration":2266694000}Copy to clipboardErrorCopied

三、创建模型

POST /api/createCopy to clipboardErrorCopied

推荐将 modelfile 设置为 Modelfile 的内容,而不仅仅是设置 path。远程模型创建还必须使用 创建Blob 显式地创建所有文件 blobs、字段(如 FROM 和 ADAPTER),并将该值设置为响应中指示的路径。

参数

  • name:要创建的模型名称
  • modelfile(可选):Modelfile 的内容
  • stream(可选):如果为 false,响应将作为单个响应对象返回,而不是对象流
  • path(可选):Modelfile 的路径

示例请求

curl http://localhost:11434/api/create -d '{"name": "mario","modelfile": "FROM llama3\nSYSTEM You are mario from Super Mario Bros."
}'Copy to clipboardErrorCopied

示例响应

一串 JSON 对象。注意,最后的 JSON 对象显示 "status": "success"提示创建成功。

{"status":"reading model metadata"}
{"status":"creating system layer"}
{"status":"using already created layer sha256:22f7f8ef5f4c791c1b03d7eb414399294764d7cc82c7e94aa81a1feb80a983a2"}
{"status":"using already created layer sha256:8c17c2ebb0ea011be9981cc3922db8ca8fa61e828c5d3f44cb6ae342bf80460b"}
{"status":"using already created layer sha256:7c23fb36d80141c4ab8cdbb61ee4790102ebd2bf7aeff414453177d4f2110e5d"}
{"status":"using already created layer sha256:2e0493f67d0c8c9c68a8aeacdf6a38a2151cb3c4c1d42accf296e19810527988"}
{"status":"using already created layer sha256:2759286baa875dc22de5394b4a925701b1896a7e3f8e53275c36f75a877a82c9"}
{"status":"writing layer sha256:df30045fe90f0d750db82a058109cecd6d4de9c90a3d75b19c09e5f64580bb42"}
{"status":"writing layer sha256:f18a68eb09bf925bb1b669490407c1b1251c5db98dc4d3d81f3088498ea55690"}
{"status":"writing manifest"}
{"status":"success"}Copy to clipboardErrorCopied

检查Blob是否存在

HEAD /api/blobs/:digestCopy to clipboardErrorCopied

确保用于 FROM 或 ADAPTER 字段的文件 blob 存在于服务器上。这是在检查你的 Ollama 服务器而不是 Ollama.ai。

查询参数
  • digest:blob 的 SHA256 摘要
示例请求
curl -I http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2Copy to clipboardErrorCopied
示例响应

如果 blob 存在则返回 "200 OK",如果不存在则返回 "404 Not Found"。

创建Blob

POST /api/blobs/:digestCopy to clipboardErrorCopied

从服务器上的文件创建一个 blob。返回服务器文件路径。

查询参数
  • digest:文件的预期 SHA256 摘要
示例请求
curl -T model.bin -X POST http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2Copy to clipboardErrorCopied
示例响应

如果 blob 成功创建则返回 201 Created,如果使用的摘要不符合预期则返回 400 Bad Request。

四、复制模型

POST /api/copyCopy to clipboardErrorCopied

复制一个模型,使用另一个名称复制已有模型。

示例请求

curl http://localhost:11434/api/copy -d '{"source": "llama3.1","destination": "llama3-backup"
}'Copy to clipboardErrorCopied

示例响应

如果成功则返回 "200 OK",如果源模型不存在则返回 "404 Not Found"。

五、删除模型

DELETE /api/deleteCopy to clipboardErrorCopied

删除模型及其数据。

参数

  • name:要删除的模型名称

示例请求

curl -X DELETE http://localhost:11434/api/delete -d '{"name": "llama3.1"
}'Copy to clipboardErrorCopied

示例响应

如果成功则返回 "200 OK",如果要删除的模型不存在则返回 "404 Not Found"。

六、列出运行模型

GET /api/psCopy to clipboardErrorCopied

列出当前加载到内存中的模型。

示例请求

curl http://localhost:11434/api/psCopy to clipboardErrorCopied

示例响应

{"models":[{"name":"llama3.1:latest","model":"llama3.1:latest","size":6654289920,"digest":"75382d0899dfaaa6ce331cf680b72bd6812c7f05e5158c5f2f43c6383e21d734","details":{"parent_model":"","format":"gguf","family":"llama","families":["llama"],"parameter_size":"8.0B","quantization_level":"Q4_0"},"expires_at":"2024-08-08T14:06:52.883023476+08:00","size_vram":6654289920}]
}Copy to clipboardErrorCopied

七、列出本地模型

GET /api/tagsCopy to clipboardErrorCopied

列出本地可用的模型。

示例请求

curl http://localhost:11434/api/tagsCopy to clipboardErrorCopied

示例响应

{"models":[{"name":"llama3.1:latest","model":"llama3.1:latest","modified_at":"2024-08-07T17:54:22.533937636+08:00","size":4661230977,"digest":"75382d0899dfaaa6ce331cf680b72bd6812c7f05e5158c5f2f43c6383e21d734","details":{"parent_model":"","format":"gguf","family":"llama","families":["llama"],"parameter_size":"8.0B","quantization_level":"Q4_0"}}]
}Copy to clipboardErrorCopied

八、显示模型信息

POST /api/showCopy to clipboardErrorCopied

显示有关模型的信息,包括详细信息、modelfile、模板、参数、许可证、系统提示。

参数

  • name:要显示的模型名称
  • verbose(可选):如果设置为 true,则返回详细响应字段的完整数据

示例请求

curl http://localhost:11434/api/show -d '{"name": "llama3.1"
}'Copy to clipboardErrorCopied

示例响应

{"license":"...","modelfile":"...","parameters":"...","template":"...","details":{"parent_model":"","format":"gguf","family":"llama","families":["llama"],"parameter_size":"8.0B","quantization_level":"Q4_0"},"model_info":{"general.architecture":"llama","general.basename":"Meta-Llama-3.1","general.file_type":2,"general.finetune":"Instruct","general.languages":["en","de","fr","it","pt","hi","es","th"],"general.license":"llama3.1","general.parameter_count":8030261312,"general.quantization_version":2,"general.size_label":"8B","general.tags":["facebook","meta","pytorch","llama","llama-3","text-generation"],"general.type":"model","llama.attention.head_count":32,"llama.attention.head_count_kv":8,"llama.attention.layer_norm_rms_epsilon":0.00001,"llama.block_count":32,"llama.context_length":131072,"llama.embedding_length":4096,"llama.feed_forward_length":14336,"llama.rope.dimension_count":128,"llama.rope.freq_base":500000,"llama.vocab_size":128256,"tokenizer.ggml.bos_token_id":128000,"tokenizer.ggml.eos_token_id":128009,"tokenizer.ggml.merges":null,"tokenizer.ggml.model":"gpt2","tokenizer.ggml.pre":"llama-bpe","tokenizer.ggml.token_type":null,"tokenizer.ggml.tokens":null},"modified_at":"2024-08-07T17:54:22.533937636+08:00"
}Copy to clipboardErrorCopied

九、拉取模型

POST /api/pullCopy to clipboardErrorCopied

从 ollama 库下载模型。中断的拉取操作会从断点继续下载,多个调用将共享相同的下载进度。

参数

  • name:要拉取的模型名称
  • insecure(可选):允许对库进行不安全连接。建议仅在开发期间,从自己的库中拉取时使用此选项。
  • stream(可选):如果为 false,响应将作为单个响应对象返回,而不是对象流。

示例请求

curl http://localhost:11434/api/pull -d '{"name": "llama3.1"
}'Copy to clipboardErrorCopied

示例响应

如果 stream 未指定或设置为 true,则返回一串 JSON 对象:

第一个对象是清单:

{"status": "pulling manifest"
}Copy to clipboardErrorCopied

然后是一系列下载响应。在下载完成之前,可能不会包含 completed 键。要下载的文件数量取决于清单中指定的层数。

{"status": "downloading digestname","digest": "digestname","total": 2142590208,"completed": 241970
}Copy to clipboardErrorCopied

在所有文件下载完成后,最后的响应是:

{"status": "verifying sha256 digest"
}
{"status": "writing manifest"
}
{"status": "removing any unused layers"
}
{"status": "success"
}Copy to clipboardErrorCopied

如果 stream 设置为 false,则响应是一个单一的 JSON 对象:

{"status": "success"
}Copy to clipboardErrorCopied

十、推送模型

POST /api/pushCopy to clipboardErrorCopied

将模型上传到模型库。需要先注册 ollama.ai 并添加公钥。

参数

  • name:要推送的模型名称,格式为 <namespace>/<model>:<tag>
  • insecure(可选):允许对库进行不安全连接。仅在开发期间推送到自己的库时使用此选项。
  • stream(可选):如果为 false,响应将作为单个响应对象返回,而不是对象流。

示例请求

curl http://localhost:11434/api/push -d '{"name": "mattw/pygmalion:latest"
}'Copy to clipboardErrorCopied

示例响应

如果 stream 未指定或设置为 true,则返回一串 JSON 对象:

{ "status": "retrieving manifest" }Copy to clipboardErrorCopied

然后是一系列上传响应:

{"status": "starting upload","digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab","total": 1928429856
}Copy to clipboardErrorCopied

最后,当上传完成时:

{"status":"pushing manifest"}
{"status":"success"}Copy to clipboardErrorCopied

如果 stream 设置为 false,则响应是一个单一的 JSON 对象:

{ "status": "success" }Copy to clipboardErrorCopied

十一、生成嵌入

POST /api/embedCopy to clipboardErrorCopied

从模型生成嵌入。

参数

  • model:要从中生成嵌入的模型名称
  • input:要生成嵌入的文本或文本列表

高级参数:

  • truncate:截断每个输入的末尾以适应上下文长度。如果为 false 并且超过上下文长度,则返回错误。默认值为 true
  • options:其他模型参数,如 temperatureseed 等
  • keep_alive:控制请求后模型在内存中保持加载的时间(默认:5m

示例请求

curl http://localhost:11434/api/embed -d '{"model": "llama3.1","input": "为什么草是绿的?"
}'Copy to clipboardErrorCopied

示例响应


{"model":"llama3.1","embeddings":[[-0.008059342,-0.013182715,0.019781841,0.012018124,-0.024847334,-0.0031902494,-0.02714767,0.015282277,0.060032737,...]],"total_duration":3041671009,"load_duration":2864335471,"prompt_eval_count":7}Copy to clipboardErrorCopied

示例请求(多个输入)

curl http://localhost:11434/api/embed -d '{"model": "llama3.1","input": ["为什么草是绿的?","为什么天是蓝的?"]
}'Copy to clipboardErrorCopied

示例响应

{"model":"llama3.1","embeddings":[[-0.008471201,-0.013031566,0.019300476,0.011618419,-0.025197424,-0.0024164673,-0.02669075,0.015766116,0.059984162,...],[-0.012765694,-0.012822924,0.015915949,0.006415892,-0.02327763,0.004859615,-0.017922137,0.019488193,0.05638235,...]],"total_duration":195481419,"load_duration":1318886,"prompt_eval_count":14
}Copy to clipboardErrorCopied

错误处理

Ollama API 在发生错误时会返回相应的错误代码和消息。常见错误包括:

  • 400 Bad Request:请求格式错误。
  • 404 Not Found:请求的资源不存在。
  • 500 Internal Server Error:服务器内部错误。

相关文章:

Datawhale Ollama教程笔记3

小白的看课思路&#xff1a; Ollama REST API 是什么&#xff1f; 想象一下&#xff0c;你有一个智能的“盒子”&#xff08;Ollama&#xff09;&#xff0c;里面装了很多聪明的“小助手”&#xff08;语言模型&#xff09;。如果你想让这些“小助手”帮你完成一些任务&#…...

学习数据结构(10)栈和队列下+二叉树(堆)上

1.关于栈和队列的算法题 &#xff08;1&#xff09;用队列实现栈 解法一&#xff1a;&#xff08;参考代码&#xff09; 题目要求实现六个函数&#xff0c;分别是栈初始化&#xff0c;入栈&#xff0c;移除并返回栈顶元素&#xff0c;返回栈顶元素&#xff0c;判空&#xff0…...

洛谷 P3660 USACO17FEB Why Did the Cow Cross the Road III 题解

题意 有一个圆&#xff0c;圆周上按顺时针方向给出 2 n 2n 2n个点。第 i i i个点的颜色是 c o l o r i color_i colori​&#xff0c;其中数据保证 1 ≤ c o l o r i ≤ n 1\le color_i\le n 1≤colori​≤n&#xff0c;而且每种不同的颜色有且只有两个点。不存在位置重叠的点…...

【数据结构】(9) 优先级队列(堆)

一、优先级队列 优先级队列不同于队列&#xff0c;队列是先进先出&#xff0c;优先级队列是优先级最高的先出。一般有两种操作&#xff1a;返回最高优先级对象&#xff0c;添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构&#xff0c;是一棵完全二叉树&#xff0c…...

如何提升爬虫获取数据的准确性?

提升爬虫获取数据的准确性是确保数据分析和后续应用有效性的关键。以下是一些经过验证的方法和最佳实践&#xff0c;可以帮助提高爬虫数据的准确性&#xff1a; 1. 数据清洗 数据清洗是提升数据准确性的重要步骤&#xff0c;主要包括去除重复数据、处理缺失值和异常值。 去除…...

Obsidian及Zotero常用的插件

Obsidian插件 Minimal Theme Settings&#xff08;Life&#xff0c;zotero&#xff09;【必需】 界面样式设置所需插件 Style Settings&#xff08;Life&#xff0c;zotero&#xff09;【必需】界面样式设置所需插件 Recent Files&#xff08;Life&#xff0c;zotero&#xf…...

闲鱼IP属地是通过电话号码吗?

在闲鱼这样的二手交易平台上&#xff0c;用户的IP属地信息对于维护交易安全、增强用户间的信任至关重要。然而&#xff0c;关于闲鱼IP属地是如何确定的&#xff0c;不少用户存在疑惑&#xff0c;尤其是它与电话号码之间是否存在关联。本文将深入探讨这一问题&#xff0c;揭示闲…...

C#多线程异步连接MySQL与SQLserver数据库

C#多线程异步连接MySQL与SQLserver数据库 一、前言二、多线程异步连接数据库代码2.1代码块2.2代码说明 参考文档 一、前言 当编写代码连接多台设备上的数据库时&#xff0c;如果采用同步逐个连接的方式&#xff0c;在网络畅通的情况下连接速度尚可&#xff0c;但当其中一台设备…...

51单片机-数码管

目录 1、静态数码管 1.1、数码管是如何显示出字符 1.2、数码管静态显示原理 1.3、74HC573芯片的使用 1.4、静态数码管编程 2、动态数码管 2.1、数码管动态显示原理 2.2、74HC138芯片的使用 2.3、编写动态数码管程序 1、静态数码管 1.1、数码管是如何显示出字符 单片机…...

C#学习之S参数读取(s2p文件)

目录 一、创作灵感 二、S2PFileReader类 1.代码示例 2.代码说明 a.ReadS2PFile 方法&#xff1a; b.DataTable 结构&#xff1a; 三、S2PFileReader类的调用演示 1.使用示例 一、创作灵感 虽然MATLAB处理数据很实用&#xff0c;但是C#常用于程控仪器的控制&#xff0c…...

Spring Boot “约定大于配置”

什么是“约定大于配置”&#xff1f; “约定大于配置”是一种简化开发的设计理念。简单来说&#xff0c;就是框架默认提供了常见的配置和行为&#xff0c;开发者只需要按照约定来编写代码&#xff0c;避免了繁琐的配置&#xff0c;只在需要时进行定制和调整。这种理念在Spring…...

传输层协议TCP ( 下 )

文章目录 前言序号与确认序号超时重传RTOJacobson算法内核中超时时间的计算 滑动窗口滑动窗口延迟应答流量控制 拥塞控制慢启动拥塞避免快重传快速恢复 保活机制参考资料 前言 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是互联网最重要…...

NLP 八股 DAY1:BERT

BERT全称&#xff1a;Pre-training of deep bidirectional transformers for language understanding&#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…...

演示synchronized锁机制用法的简单Demo

演示synchronized锁机制用法的简单Demo。我们以"银行开户"场景为例&#xff1a;每个用户只能创建一个账户&#xff08;模拟类似原代码中每个用户只能有一个私有空间的限制&#xff09;。 第1步&#xff1a;创建项目结构 demo-lock ├── src/main/java/com/exampl…...

Datawhale 数学建模导论二 笔记1

第6章 数据处理与拟合模型 本章主要涉及到的知识点有&#xff1a; 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论&#xff0c;如果对这部分内容不熟悉&#xff0c;可以参考相关概率论与数理统计的…...

差分解方程

差分解方程 差分法在数值求解偏微分方程&#xff08;PDEs&#xff09;和常微分方程&#xff08;ODEs&#xff09;时&#xff0c;可以分为隐式格式和显式格式。以下是两者的主要区别&#xff1a; 显式格式&#xff08;Explicit Scheme&#xff09; 时间推进&#xff1a; 显式格…...

EasyExcel 复杂填充

EasyExcel ​Excel表格中用{}或者{.} 来表示包裹要填充的变量&#xff0c;如果单元格文本中本来就有{、}左右大括号&#xff0c;需要在括号前面使用斜杠转义\{ 、\}。 ​代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和Excel中被{}包裹的变量名称一致。 …...

ESP32通过MQTT连接阿里云平台实现消息发布与订阅

文章目录 前言 一、准备工作 二、阿里云平台配置 三、代码实现 总结 前言 本文将介绍如何使用ESP32开发板通过MQTT协议连接阿里云物联网平台&#xff0c;并实现消息的发布与订阅功能。我们将使用Arduino IDE进行开发&#xff0c;并借助PubSubClient库实现MQTT通信。 一、准备…...

NVIDIA Jetson Orin Nano 刷机过程

1. 背景 新到手 NVIDIA Jetson Orin Nano 插上显示屏&#xff0c;显示如下&#xff1a; 这是UEFI Shell&#xff0c;UEFI Shell&#xff08;统一可扩展固件接口外壳程序&#xff09;是一种基于UEFI规范的交互式命令行工具&#xff0c;它运行在UEFI固件环境中&#xff0c;为用…...

C#学习之数据转换

目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...