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

如何避免在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,表示输入结束。
程序会将所有内容作为一个整体发送给大模型,返回完整回复。

在这里插入图片描述

相关文章:

  • 解密数据结构之位图和布隆过滤器
  • 【Redis进阶】持久化
  • 每日算法刷题Day1 5.9:leetcode数组3道题,用时1h
  • [6-2] 定时器定时中断定时器外部时钟 江协科技学习笔记(41个知识点)
  • (四)毛子整洁架构(Presentation层/Authentiacation)
  • 问题解决思路:numpy:DLL load failed
  • QSFP+、QSFP28、QSFP-DD接口分别实现40G、100G、200G/400G以太网接口
  • AUTODL Chatglm2 langchain 部署大模型聊天助手
  • 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-《打砖块:向量反射与实时物理模拟》MATLAB教程
  • 【数据结构与算法】图的基本概念与遍历
  • 离线化 Service Worker
  • yocto的大致工作流程
  • [SV]等待32个instance的某一个信号的pulse,该怎么写?
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素(Python 快速选择详解)
  • 探索C++内存管理
  • UE5 PCG学习笔记
  • 初等数论--莫比乌斯反演
  • 【数据结构入门训练DAY-30】数的划分
  • STM32F103单片机在不需要使用 JTAG 调试接口的情况下,释放引脚给其他功能使用。
  • React Hooks 精要:从入门到精通的进阶之路
  • 《缶翁的世界》首发:看吴昌硕王一亭等湖州籍书画家的影响
  • 见微知沪|科学既要勇攀高峰,又要放低身段
  • 女排奥运冠军宋妮娜:青少年保持身心健康才能走得更远
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 上海老字号卖黄金,与动漫IP联名两周销售额近亿元
  • 北方将现今年首场大范围高温天气,山西河南山东陕西局地可超40℃