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: 返回响应的格式。目前唯一接受的值是jsonoptions: 其他模型参数,如temperature、seed等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:消息的角色,可以是system、user、assistant或toolcontent:消息的内容images(可选):要包含在消息中的图像列表(对于如llava之类的多模态模型)tool_calls(可选):模型想要使用的工具列表
高级参数(可选):
format:返回响应的格式。目前唯一接受的值是jsonoptions:其他模型参数,如temperature、seed等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并且超过上下文长度,则返回错误。默认值为trueoptions:其他模型参数,如temperature、seed等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
小白的看课思路: Ollama REST API 是什么? 想象一下,你有一个智能的“盒子”(Ollama),里面装了很多聪明的“小助手”(语言模型)。如果你想让这些“小助手”帮你完成一些任务&#…...
基于JavaWeb开发的Java+Spring+vue+element实现旅游信息管理平台系统
基于JavaWeb开发的JavaSpringvueelement实现旅游信息管理平台系统 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各…...
基础网络详解4--HTTP CookieSession 思考 2
一、Cookie与Set-Cookie 1. Cookie 定义: Cookie 是客户端(通常是浏览器)存储的一小段数据,由服务器通过 Set-Cookie 响应头设置,并在后续请求中通过 Cookie 请求头发送回服务器。作用: 用于在客户端保存状态信息,例…...
2.14日学习总结
题目一:接雨水问题 1.题目描述:给定一个数组 height 表示一个地形的高度图,数组中的每个元素代表每个宽度为 1 的柱子的高度。计算按此排列的柱子,下雨之后能接多少雨水。 2.示例:输入 height [0,1,0,2,1,0,1,3,2,1…...
【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析
引言 在大数据与云原生技术快速发展的时代,开源技术成为推动行业进步的重要力量。本文将深入探讨三个备受瞩目的开源产品组件:DeepSeek、DataSophon 和 DolphinScheduler,分别从产品定义、功能、技术架构、应用场景、优劣势及社区活跃度等方面…...
Go 语言里中的堆与栈
在 Go 语言里,堆和栈是内存管理的两个重要概念,它们在多个方面存在明显差异: 1. 内存分配与回收方式 栈 分配:Go 语言中,栈内存主要用于存储函数的局部变量和调用信息。当一个函数被调用时,Go 会自动为其…...
云计算实训室解决方案(2025年最新版)
一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展,相关领域人才需求激增,许多本科及职业院校纷纷开设云计算及相关专业方向。 然而,大多数院校在专业建设过程中面临以下困难&…...
我的新书《青少年Python趣学编程(微课视频版)》出版了!
🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…...
网络安全要学python 、爬虫吗
网络安全其实并不复杂,只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分:web安全和二进制逆向安全。web安全是网络安全的入门方向,内容简单,就…...
DBSCAN 基于密度的空间带噪聚类法
DBSCAN 基于密度的空间带噪聚类法 DBSCAN(Density - Based Spatial Clustering of Applications with Noise)即基于密度的空间聚类算法,它是一种典型的密度聚类算法,以下从核心概念、算法步骤、优缺点及应用场景等方面进行解释。…...
Spring Security,servlet filter,和白名单之间的关系
首先,Servlet Filter是Java Web应用中的基础组件,用于拦截请求和响应,进行预处理和后处理。它们在处理HTTP请求时处于最外层,可以执行日志记录、身份验证、授权等操作。白名单机制通常指允许特定IP、用户或请求通过的安全策略&…...
深入理解Java反射机制 —— 构建灵活、动态的后端应用
一、引言 在Java后端开发中,反射机制是一项极具威力的技术。它允许程序在运行时动态加载类、调用方法以及访问属性,从而使得代码具有更高的灵活性和扩展性。本文将从反射的基本原理、核心API、实际应用场景到使用时的注意事项,详细探讨如何在…...
Python基于Django的漏洞扫描系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
或非门组成的SR锁存器真值表相关问题
PS:主要是给大家抛砖引玉,不喜勿喷。 问题描述:或非门组成的SR锁存器,为什么当SD和RD等于0时候的真值表一个是Q0,Q0.一个结果是Q1,Q1?...
深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决
在深度学习框架中,TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow(点击查看) 和 PyTorch(点击查看)。它们引领着 AI 开发的潮流,吸引着无数开发者投身其中。但这两大框…...
如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析
CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞,漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件,可能泄露敏感信息,如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时,您需…...
MongoDB 基本操作
一、数据库操作 1. 切换或创建数据库 使用use命令切换到指定数据库,若该数据库不存在,在首次插入数据时会自动创建。 use myDatabase 2. 查看所有数据库 使用show dbs命令查看 MongoDB 实例中的所有数据库。 show dbs 3. 删除当前数据库 使用db.…...
【前端框架】Vue3 面试题深度解析
本文详细讲解了VUE3相关的面试题,从基础到进阶到高级,分别都有涉及,希望对你有所帮助! 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化? 答案: 响应式系统:Vue2 使用 Object.definePrope…...
springboot中使用log4j2
安装依赖pom.xml <!--排除logback的依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</…...
GRN前沿:DGCGRN:基于有向图卷积网络的基因调控网络推理
1.论文原名:Inference of gene regulatory networks based on directed graph convolutional networks 2.发表日期:2024 DGCGRN框架 中心节点和节点的构建 局部增强策略 1. 问题背景 在基因调控网络中,许多节点的连接度较低(即…...
DeepSeek崛起:中国AI产业的颠覆者与重构者
当DeepSeek以"中国版ChatGPT"的标签横空出世时,这个诞生于杭州的AI新贵仅用三个月时间就完成了从行业黑马到颠覆者的蜕变。其开源大模型DeepSeek-R1在HuggingFace开源大模型排行榜的登顶,不仅意味着技术指标的超越,更预示着中国AI产…...
E. Exposition
题目链接:Problem - E - Codeforces 题目大意: 给你一个长度为n的序列,和一个整数k.现让找出所有连续的最长子区间, 其子区间的条件是:在区间里最大值减去最小值之差要小于 k . 输入: 输入数据的第一行包…...
KVM虚拟化快速入门,最佳的开源可商用虚拟化平台
引言 在信息技术飞速发展的时代,服务器资源的高效利用成为企业关注的焦点。KVM 虚拟化作为一种先进的虚拟化技术,在众多虚拟化方案中脱颖而出,为企业实现服务器资源的优化配置提供了有效途径。 以往,物理服务器的资源利用效率较…...
unity删除了安卓打包平台,unityhub 还显示已经安装,怎么解决
解决问题地址 可能由于版本问题文章中这个我没搜到,应该搜Android Build Supprot...
软件工程-软件设计
包括 从管理的观点看包括: 详细设计 概要设计 从技术的观点看包括: 数据设计(详细设计) 系统结构设计(概要设计) 过程设计(详细设计) 任务 分析模型——》设计模型——》设…...
【Viper】配置格式与支持的数据源与go案例
Viper 是一个用于 Go 应用程序的配置管理库,支持多种配置格式和数据源。 安装依赖 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要写在etcd客户端import里 1…...
C++ Primer 参数传递
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
数据结构 day06
数据结构 day06 6. 双向链表6.3. 双向循环链表 7. 树 tree7.1. 特点7.1.1. 什么是树7.1.2. 树的特性7.1.3. 关于树的一些术语 7.2. 二叉树7.2.1. 什么是二叉树7.2.2. 二叉树的性质7.2.3. 满二叉树和完全二叉树的区别7.2.4. 二叉树的遍历(画图)7.2.5. 二叉…...
AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI
前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…...
01什么是DevOps
在日常开发中,运维人员主要负责跟生产环境打交道,开发和测试,不去操作生产环境的内容,生产环境由运维人员操作,这里面包含了环境的搭建、系统监控、故障的转移,还有软件的维护等内容。 当一个项目开发完毕&…...
