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

用curl实现Ollama API流式调用

文章目录

  • 1 前提准备
    • 1.1 安装jq
    • 1.2 安装base64
  • 2 流式调用基于openai api的ollama聊天模型
  • 3 流式调用ollama聊天模型
  • 4 流式调用ollama gemma3多模态模型
  • 5 流式调用ollama qwen3-vl多模态模型
  • 6 附其它curl方法
    • 6.1 查看Ollama的模型信息
    • 6.2 非流式访问ollama聊天模型
    • 6.3 非流式访问ollama gemma3多模态模型
    • 6.4 非流式访问ollama qwen3-vl多模态模型

作为码农,多多少少都有点“强迫症”。虽然用 Python 调用 Ollama API 是天经地义的选择,但既然 curl 可以非流式调用,没理由流式就不行----就像职场上领导常PUA的那样,“事事有回应时时有回应”----也必须让curl时时有回应,不能已读不回半天才响应!经过一番探索(主要是折腾 LLM),终于实现了用 curl 流式调用 Ollama API 的方法。

1 前提准备

1.1 安装jq

需有jq工具来处理JSON数据,或者使用以下命令进行安装

# ubuntu
sudo apt update
sudo apt install jq -y

1.2 安装base64

需要base64工具来将图片转码,或者使用以下命令进行安装

# ubuntu
sudo apt update
sudo apt install base64 -y

2 流式调用基于openai api的ollama聊天模型

curl -sN http://127.0.0.1:11434/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "qwen3:8b","messages": [{"role": "user", "content": "写一首四句唐诗"}],"stream": true}' \
| {
c_flag=0; r_flag=0                # 标记是否已打印前缀
while IFS= read -r line; do# 去掉 "data: " 前缀json=${line#data: }# 跳过空行或 [DONE][[ $json == "" || $json == "[DONE]" ]] && continue# 提取 delta.content 并打印content=$(echo "$json" | jq -r '.choices[0].delta.content // empty')reasoning=$(echo "$json" | jq -r '.choices[0].delta.reasoning // empty')if [[ -n $reasoning ]]; then((r_flag)) || { printf "\n【reasoning】\n\t"; r_flag=1; }printf "%s" "$reasoning"fiif [[ -n $content ]]; then((c_flag)) || { printf "\n\n【content】\n\t"; c_flag=1; }printf "%s" "$content"fi
done
echo
echo
}

3 流式调用ollama聊天模型

curl -sN http://127.0.0.1:11434/api/generate \-d '{"model": "qwen3:8b","prompt": "写一首四句唐诗","stream": true}' \
| {t_flag=0; r_flag=0                # 标记是否已打印前缀while read -r l; dot=$(echo "$l" | jq -r '.thinking//empty')r=$(echo "$l" | jq -r '.response//empty')if [[ -n $t ]]; then((t_flag)) || { printf "\n【thinking】\n\t"; t_flag=1; }printf "%s" "$t"fiif [[ -n $r ]]; then((r_flag)) || { printf "\n\n【response】\n\t"; r_flag=1; }printf "%s" "$r"fidoneechoecho
}

4 流式调用ollama gemma3多模态模型

ip="127.0.0.1:11434"
model="gemma3:4b"
# 将 test.png 替换为你要喂给模型的图片
cat > /tmp/request.json <<EOF
{"model": "${model}","prompt": "请描述这张图片","images": ["$(base64 -i test.png)"],"stream": true
}
EOF# 从文件发送请求
curl -sX POST http://${ip}/api/generate \-H "Content-Type: application/json" \-d @/tmp/request.json | {r_flag=0                # 标记是否已打印前缀while read -r l; dor=$(echo "$l" | jq -r '.response//empty')if [[ -n $r ]]; then((r_flag)) || { printf "\n\n【response】\n\t"; r_flag=1; }printf "%s" "$r"fidoneechoecho
}# 清理
rm /tmp/request.json

5 流式调用ollama qwen3-vl多模态模型

ip="127.0.0.1:11434"
model="qwen3-vl:8b"
# 将 test.png 替换为你要喂给模型的图片
cat > /tmp/request.json <<EOF
{"model": "${model}","prompt": "请描述这张图片","images": ["$(base64 -i test.png)"],"stream": true
}
EOF# 从文件发送请求
curl -sX POST http://${ip}/api/generate \-H "Content-Type: application/json" \-d @/tmp/request.json | {t_flag=0; r_flag=0                # 标记是否已打印前缀while read -r l; dot=$(echo "$l" | jq -r '.thinking//empty')r=$(echo "$l" | jq -r '.response//empty')if [[ -n $t ]]; then((t_flag)) || { printf "\n【thinking】\n\t"; t_flag=1; }printf "%s" "$t"fiif [[ -n $r ]]; then((r_flag)) || { printf "\n\n【response】\n\t"; r_flag=1; }printf "%s" "$r"fidoneechoecho
}# 清理
rm /tmp/request.json

6 附其它curl方法

6.1 查看Ollama的模型信息

curl -s http://localhost:11434/v1/models | jq
# 或
curl -s http://127.0.0.1:11434/api/tags | jq

6.2 非流式访问ollama聊天模型

curl http://127.0.0.1:11434/api/chat \-d '{"model": "qwen3:8b","messages": [{"role": "system", "content": "你是一位科普助手"},{"role": "user",   "content": "用一句话解释量子纠缠"}],"stream": false}'
curl http://127.0.0.1:11434/api/generate \-d '{"model": "qwen3:8b","prompt": "写一首四句唐诗","stream": false}'

6.3 非流式访问ollama gemma3多模态模型

# 将 test.png 替换为你要喂给模型的图片
curl -sX POST http://127.0.0.1:11434/api/generate \
-H "Content-Type: application/json" \
-d @- <<EOF
{"model": "gemma3:4b","prompt": "请描述这张图片","images": ["$(base64 -i test.png)"],"stream": false
}
EOF

6.4 非流式访问ollama qwen3-vl多模态模型

# 将 test.png 替换为你要喂给模型的图片
curl -X POST http://127.0.0.1:11434/api/generate -H "Content-Type: application/json" -d @- <<EOF
{"model": "qwen3-vl:8b","prompt": "请描述这张图片","images": ["$(base64 -i test.png)"],"stream": false
}
EOF
http://www.dtcms.com/a/618446.html

相关文章:

  • Multisim数据库不可用解决方法
  • 数据库-MySQL-01
  • 怎样制作html个人网站学python能干嘛
  • 用 C 语言破解汉诺塔难题:递归思想的实战演练
  • 【架构解析】深入浅析DeepSeek-V3的技术架构
  • 多模态大模型与单模态大模型的数据准备区别
  • 资讯网站排版wordpress post 类型
  • 开发微网站和小程序安徽建设教育协会网站
  • 利用笔记本与SSH转发给服务器上的虚拟机通网
  • RHEL_NFS服务器
  • 【科研绘图系列】R语言绘制生存曲线图(KW plot)
  • 网站建设订单模板下载做百度推广是不是得有个网站先
  • 基于单片机的智能手表
  • 怎么用wordpress建站微信网站建设流程图
  • 【Linux驱动开发】Linux UART 通信详解:从硬件到驱动再到应用
  • 大型网站架构系列:分布式消息队列(一)
  • 煤矿传送带异物检测:深度学习如何提升煤矿安全?
  • Milvus-云原生和分布式的开源向量数据库-介绍
  • 在linux(Centos)中Mysql的端口修改保姆级教程
  • 哪个网站可以做优惠券wordpress博客文章404
  • wordpress active济南优化网站价格
  • 怎样在自己的网站上家程序数字营销工具
  • 【论文学习】超越自注意力:用于视觉任务的两种线性层外部注意力
  • Python一个类的特殊方法有哪些
  • 网站建设免费制作北京王府井在哪个区
  • 力扣-买卖股票的最佳时机
  • 利用canvas来实现图片添加文字 制作图片logo
  • 禅城区网站建设公司qq网页注册入口
  • c++音乐——《两只老虎》
  • 开发 必知 网站上饶哪有做网站的公司