大模型多轮对话技巧
temperature 如果是0每次返回的是增量代码temperature 如果是0.7每次返回的是全部代码没有多轮对话的效果。import urllib import json import requests import base64 from http.client import HTTPException from typing import List, Dict, Any, Optional from pathlib import Path import os from img_val.val_img_xiti import test_single_image from tools.ggb_html_tool import generate_multi_ggb_html _MODEL_ID None BASE_URL http://192.168.100.203:17890 # 请根据实际服务地址修改 def get_model_id() - str: 获取 vLLM 服务的模型 ID并缓存 global _MODEL_ID if _MODEL_ID is not None: return _MODEL_ID try: resp urllib.request.urlopen(f{BASE_URL}/v1/models, timeout30) data json.loads(resp.read().decode(utf-8)) _MODEL_ID data[data][0][id] print(f获取到模型 ID: {_MODEL_ID}) return _MODEL_ID except Exception as e: print(f获取模型 ID 失败: {e}) raise HTTPException(status_code500, detail无法获取 vLLM 模型 ID) def chat_with_text(text: str, system_prompt: str , temperature: float 0.7, history: Optional[List[Dict[str, str]]] None, stream: bool True) - Dict[str, Any]: model_id get_model_id() messages [] if system_prompt: messages.append({role: system, content: system_prompt}) if history: messages.extend(history) # 添加当前用户消息 messages.append({role: user, content: text}) payload {model: model_id, messages: messages, temperature: temperature, max_tokens: 4096, stream: stream, } full_response try: response requests.post(f{BASE_URL}/v1/chat/completions, jsonpayload, streamstream, timeout300) if response.status_code ! 200: print(f❌ Error: {response.status_code}) print(response.text) return {response: , history: history or []} if stream: # 流式输出 for line in response.iter_lines(): if line: line line.decode(utf-8) if line.startswith(data: ): data line[6:] if data [DONE]: break try: chunk json.loads(data) choices chunk.get(choices, []) if choices: delta choices[0].get(delta, {}) content_delta delta.get(content, ) if content_delta: print(content_delta, end, flushTrue) full_response content_delta except json.JSONDecodeError: continue print() # 换行 else: # 非流式输出 data response.json() full_response data.get(choices, [{}])[0].get(message, {}).get(content, ) print(full_response) # 更新历史记录 updated_history (history or []).copy() updated_history.append({role: user, content: text}) updated_history.append({role: assistant, content: full_response}) return {response: full_response, history: updated_history} except requests.exceptions.Timeout: print(❌ Request timeout) return {response: , history: history or []} except Exception as e: print(f❌ Error: {e}) return {response: , history: history or []} class ChatSession: 对话会话类方便管理多轮对话 def __init__(self, system_prompt: str , temperature: float 0.7): self.system_prompt system_prompt self.temperature temperature self.history: List[Dict[str, str]] [] self.responses: List[str] [] def ask(self, text: str, stream: bool True) - str: result chat_with_text(texttext, system_promptself.system_prompt, temperatureself.temperature, historyself.history, streamstream) self.history result[history] response result[response] self.responses.append(response) return response def clear_history(self): 清空对话历史 self.history [] self.responses [] def get_full_conversation(self) - str: 获取完整的对话文本 conversation [] for msg in self.history: role 用户 if msg[role] user else 助手 conversation.append(f{role}: {msg[content]}) return \n\n.join(conversation) if __name__ __main__: # 方式1直接使用 chat_with_text 函数手动管理历史 if 0: print(方式1手动管理历史) history [] questions [画一个圆 生成ggb代码不要注释, 圆内画一个内接三角形ABC, 过点C 画AB的垂线, 过点A 画角A的角平分线,画一个三角形] for i, q in enumerate(questions): print(f\n--- 第 {i 1} 轮对话 ---) print(f用户: {q}) result chat_with_text(textq, system_prompt你是一个数学几何助手请根据要求生成GeoGebra代码。, historyhistory,temperature0.0, streamTrue) history result[history] print(fresponse: {result[response]}) # 只打印前100字符 if 1: # 方式2使用 ChatSession 类更方便 print(方式2使用 ChatSession 类) session ChatSession(system_prompt你是一个数学几何助手请根据要求生成GeoGebra代码。, temperature0.7) questions [画一个圆 生成ggb代码不要注释, 圆内画一个内接三角形ABC, 过点C 画AB的垂线, 过点A 画角A的角平分线,画一个四边形] for i, q in enumerate(questions): print(f--- 第 {i 1} 轮对话 ---) print(fask: {q}) response session.ask(q, streamTrue) print(fresponse: {response}) # 打印完整对话历史 print(\n * 50) print(完整对话历史:) print( * 50) print(session.get_full_conversation())

相关新闻

解锁魂系游戏模组新境界:ModEngine2智能运行时注入库完全指南

解锁魂系游戏模组新境界:ModEngine2智能运行时注入库完全指南

解锁魂系游戏模组新境界:ModEngine2智能运行时注入库完全指南 【免费下载链接】ModEngine2 Runtime injection library for modding Souls games. WIP 项目地址: https://gitcode.com/gh_mirrors/mo/ModEngine2 探索《艾尔登法环》和《黑暗之魂3》模组管理的…

2026/10/19 22:40:40 阅读更多 →
TPS65982BB芯片解析:集成USB Billboard、数据MUX与5V负载开关的设计指南

TPS65982BB芯片解析:集成USB Billboard、数据MUX与5V负载开关的设计指南

1. 项目概述与核心价值如果你最近在折腾USB Type-C扩展坞、充电器或者任何支持USB Power Delivery(PD)协议的设备,大概率会碰到一个需求:当你的设备(比如一个支持DisplayPort Alt Mode的扩展坞)连接到电脑时…

2026/10/20 12:49:27 阅读更多 →
RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题

RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题

RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题> 计划日期:2026-07-27。本系列基于官方 RISC-V IOMMU Architecture Specification 与官方 riscv-iommu/iommu_ref_model C 参考模型整理。本文自包含阅读&…

2026/10/20 9:39:11 阅读更多 →

最新新闻

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

在分布式大模型推理架构中,多机房、多云灾备已经成为保障业务 SLA(服务等级协议)的标配手段。通常架构师会在华东、华北以及多云供应商之间部署异构推理网关,当某一个机房的底层专线抖动、供电故障或者 GPU 集群显存发生静默死锁时…

2026/10/20 18:11:37 阅读更多 →
医院HIS系统操作手册编写指南:从功能说明书到医护落地工具

医院HIS系统操作手册编写指南:从功能说明书到医护落地工具

简介:《医院HIS系统使用操作说明手册》是一份面向医院工作人员的信息化系统操作指南,旨在帮助用户快速掌握门诊挂号、医生工作站、收费结算、住院管理等核心流程,降低误操作风险。压缩包仅含1个doc文档,体积约503.86MB&#xff0c…

2026/10/20 18:11:37 阅读更多 →
从C-Space到A*:多边形机器人避障路径规划的完整实现链路

从C-Space到A*:多边形机器人避障路径规划的完整实现链路

做机器人避障路径规划的人,十有八九是从A算法入的门。但很多人最初在栅格地图上把A跑得飞起,用的都是点模型——把机器人当成一个没有体积的像素,地图上能走就是能走。等真要往多边形机器人上迁移,问题就全冒出来了:地…

2026/10/20 18:11:37 阅读更多 →
AI原生生成4K全景视频:原理、应用与实操复盘

AI原生生成4K全景视频:原理、应用与实操复盘

最近AI视频生成赛道的屏霸,是一条关于“4K 360度全景视频原生生成”的消息。一支跨区域研究团队放出了技术细节,核心不是“生成了一部超高清全景片”,而是“模型直接输出球面视角的连续视频”。老玩家都知道,这俩区别是天壤之别。…

2026/10/20 18:11:37 阅读更多 →
Claude不支持插件:大模型工具调用的真相与替代方案

Claude不支持插件:大模型工具调用的真相与替代方案

我不能按照您的要求生成关于“Claude 插件”的博文内容。 原因如下: Claude 是 Anthropic 公司开发的闭源大语言模型,官方从未开放插件(Plugin)生态 。截至2024年7月,Anthropic 官方文档、开发者中心、API 说明及所…

2026/10/20 18:11:37 阅读更多 →
Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

1. 先把环境装好,再谈自动化 做移动端自动化测试,很多人一上来就急着写脚本,结果真正动手时,光是环境安装就把热情消磨了大半。Appium Python Android Node.js这套组合,几乎每个部件都有自己的版本要求、环境变量和…

2026/10/20 18:10:34 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →