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

如何避免在CMD中分段发送问题导致大模型多段回复的问题?

环境:

Ubuntu20.04

ollama 0.6.4

问题描述:

如何避免在CMD中分段发送问题导致大模型多段回复的问题?

下面这段怎么作为一个整体问题发你大模型,在cmd里面会变成一小段小段问题发送,导致大模型回复好多段。

请基于以下考生信息和意向信息,直接生成一份JSON格式的志愿推荐表。[{"志愿序号": "志愿1",},{"志愿序号": "志愿2","概率": "33%",},]

在这里插入图片描述

在 Windows cmd 里直接粘贴这段较长且带有换行和特殊符号的文本时,命令行会把它拆成多段,导致发送给大模型时分成多条请求,进而回复也变成多段。这个问题其实是命令行环境和程序读取输入方式导致的。


造成原因

  • Windows cmd 默认逐行读取输入,回车就提交一条输入,导致长文本分成多次发送。
  • 有些程序按行读取 stdin,遇到回车即结束本次读取。
  • 直接粘贴多行文本,实际是多次回车输入,程序每次处理一行,导致多条分割问题。

解决方案:

1. 使用文件输入,避免交互式粘贴

  • 把您的长文本内容保存为一个 .txt 文件,比如 input.txt
  • 在 Java 或 Python 程序中,读取整个文件内容,一次性发送给模型,保证是一个整体字符串。
  • 这样就避免了命令行粘贴时自动拆分。

示例(Python):

with open("input.txt", "r", encoding="utf-8") as f:user_input = f.read()
reply = send_message(user_input)
print(reply)

示例(Java):

import java.nio.file.Files;
import java.nio.file.Paths;
String userInput = new String(Files.readAllBytes(Paths.get("input.txt")), StandardCharsets.UTF_8);
String reply = sendMessage(userInput);
System.out.println(reply);

2. 使用多行输入标识符(Python示例,Java需额外处理)

在 Python 交互环境或脚本中,可以使用三引号 """ 包裹多行字符串:

user_input = """请基于以下考生信息和意向信息,直接生成一份JSON格式的高考志愿推荐表,包含4条志愿。  
(这里是您的长文本内容,保持格式和换行)"""
reply = send_message(user_input)
print(reply)

Java 17+ 支持文本块(Text Blocks)来定义多行字符串:

String userInput = """
请基于以下考生信息和意向信息,直接生成一份JSON格式的高考志愿推荐表,包含4条志愿。  
(这里是您的长文本内容,保持格式和换行)
""";
String reply = sendMessage(userInput);
System.out.println(reply);

3. 修改程序接口,支持一次性输入多行文本

如果您是自己写的命令行交互程序,可以设计一个“结束符”,让用户多行输入,直到输入特定字符串(如 END)结束,再统一拼接发送。例如:

print("请输入问题,输入单独一行END结束:")
lines = []
while True:line = input()if line.strip() == "END":breaklines.append(line)
user_input = "\n".join(lines)
reply = send_message(user_input)
print(reply)

总结

  • 不要直接在 Windows cmd 粘贴带换行的长文本当单条输入,因为它会按行拆分。
  • 推荐把长文本放文件,一次性读入程序变量,再调用接口。
  • 如果必须交互输入,设计多行输入结束符方案。
  • 利用现代语言多行字符串支持(Python三引号,Java文本块)方便代码内写长文本。

本案例具体实现:

python脚本

import requests
import jsonOLLAMA_URL = "http://192.168.28.13:11434/v1/chat/completions"def send_message(user_input):messages = [{"role": "system","content": ("【角色设定】\n""你的身份是一名资深的方案生成专家,精准提供专业方案生成\n\n")},{"role": "user","content": user_input}]payload = {"model": "qwen2.5-7b:latest","messages": messages,"max_tokens": 8192,"temperature": 0.5,"stream": False  # 关闭流式}try:print(f"发送请求: {json.dumps(payload, ensure_ascii=False)}")response = requests.post(OLLAMA_URL, json=payload, timeout=30)  # 去掉stream=Trueprint(f"状态码: {response.status_code}")if response.status_code != 200:print(f"错误响应: {response.text}")return "服务端返回错误,请检查日志。"result = response.json()choices = result.get("choices", [])if not choices:return "无回复内容"content = choices[0].get("message", {}).get("content", "")return contentexcept requests.exceptions.Timeout:print("请求超时,请重试。")return "请求超时,请重试。"except requests.exceptions.RequestException as e:print(f"请求失败: {str(e)}")return "请求失败,请检查网络连接或服务状态。"except Exception as e:print(f"内部错误: {str(e)}")return "内部错误,请联系管理员。"def collect_multiline_input():print("请输入您的问题(支持多行输入,输入单独一行END结束):")lines = []while True:line = input()if line.strip() == "END":breaklines.append(line)return "\n".join(lines)if __name__ == "__main__":print("欢迎使用简单聊天应用!")print("您可以输入问题,我会尽力回答。输入“退出”或“exit”结束对话。")while True:user_input = collect_multiline_input()if user_input.lower() in ["退出", "exit", "quit"]:print("聊天结束。感谢使用!")breakreply = send_message(user_input)print("AI: ", reply)

修改点说明

payload 中 "stream": False 保持不变,表示请求非流式返回。
requests.post 调用时去掉 stream=True,默认就是非流式。
支持多行输入:新增 collect_multiline_input() 函数,支持用户在命令行中逐行输入内容,直到输入 END 结束。
将所有输入行拼接成一个字符串,作为完整问题发送。
简化响应处理:使用 response.json() 直接获取完整响应数据。
解析 JSON,提取 choices[0].message.content,返回完整回复。
使用方法
运行程序后,粘贴您的问题内容(多行)。
在最后一行输入 END,表示输入结束。
程序会将所有内容作为一个整体发送给大模型,返回完整回复。

在这里插入图片描述

http://www.xdnf.cn/news/5218.html

相关文章:

  • Day115 | 灵神 | 二叉树 | 二叉搜索树中的众数
  • Redis 哨兵
  • DIP依赖倒置原则
  • 第十课认识约数
  • 蓝牙身份证阅读器使用Uniapp调用二次开发demo
  • 逆向学习笔记(代码)
  • Linux `uptime` 指令详解与系统监控指南
  • 计算机体系结构一些笔记
  • C++中的继承与多态
  • 【Redis进阶】持久化
  • SpringMVC面试内容
  • 【无标题】I/O复用(epoll)三者区别▲
  • JS DOM操作与事件处理从入门到实践
  • 无线网络设备中AP和AC是什么?有什么区别?
  • 从零开始实现YOLOv8示例
  • 线性表-顺序表(Sequential List)
  • 【vue】vuex实现组件间数据共享 vuex模块化编码 网络请求
  • GRU网络详解
  • 解决使用宝塔Linux部署前后端分离项目遇到的问题
  • 第三章 Freertos智能小车遥控控制
  • 【Web】LACTF 2025 wp
  • 虚拟机风格
  • OpenLayers根据任意数量控制点绘制贝塞尔曲线
  • 关于甲骨文(oracle cloud)丢失MFA的解决方案
  • vim的配置
  • C++(6):逻辑运算符
  • AI 驱动的开发工具
  • 中国古代史1
  • 【ML-Agents】ML-Agents示例项目导入unity报错解决
  • 当冲压焊接遇上Canopen到Profinet协议转换网关