大模型多轮对话技巧
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())

相关新闻

HarmonyOS应用开发实战:猫猫大作战-NavPathStack 的完整 API 方法、生命周期关联、参数传递技巧,以及基于 NavPathStack

HarmonyOS应用开发实战:猫猫大作战-NavPathStack 的完整 API 方法、生命周期关联、参数传递技巧,以及基于 NavPathStack

前言 NavPathStack 是 Navigation 路由体系的核心控制器——它封装了所有页面栈操作,包括压栈、弹栈、替换、查询、清空等能力。与传统的 router 函数式 API 不同,NavPathStack 以对象的形式持有页面栈状态,更加灵活、可控。 本文以「猫猫大…

2026/7/28 0:18:49阅读更多 →
从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?

从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?

从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?一个卖油条的早餐店,因为店名里带了“今日”两个字,被互联网大厂告上法庭索赔200万元——听起来像段子,但这是真实发生的“今日头条诉今日油条案”。更出人意料…

2026/7/28 0:18:49阅读更多 →
中科复兴:城市生命线安全监测的感知、研判与协同处置技术路径

中科复兴:城市生命线安全监测的感知、研判与协同处置技术路径

当一座城市的体量突破千万人口、地下管网绵延数万公里、桥梁隧道等设施服役超过二十年,传统的安全监管模式便走到了必须变革的十字路口。这不仅是管理规模的量变挑战,更是一场关乎风险认知与治理能力的质变考验。如何让沉默的基础设施“开口说话”&#…

2026/7/28 0:18:49阅读更多 →
Tiny11Builder终极指南:快速打造精简版Windows 11系统镜像

Tiny11Builder终极指南:快速打造精简版Windows 11系统镜像

Tiny11Builder终极指南:快速打造精简版Windows 11系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder Tiny11Builder是一款强大的PowerShell脚本工…

2026/7/28 1:34:59阅读更多 →
3步改造Flipper Zero:从单调白屏到炫彩RGB背光的完整指南

3步改造Flipper Zero:从单调白屏到炫彩RGB背光的完整指南

3步改造Flipper Zero:从单调白屏到炫彩RGB背光的完整指南 【免费下载链接】awesome-flipperzero 🐬 A collection of awesome resources for the Flipper Zero device. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-flipperzero 你…

2026/7/28 1:34:59阅读更多 →
为什么你的局部重绘总发虚、崩结构、丢细节?——揭秘ControlNet+Inpaint模型融合的3层注意力对齐机制

为什么你的局部重绘总发虚、崩结构、丢细节?——揭秘ControlNet+Inpaint模型融合的3层注意力对齐机制

更多请点击: https://kaifayun.com 第一章:为什么你的局部重绘总发虚、崩结构、丢细节?——揭秘ControlNetInpaint模型融合的3层注意力对齐机制 局部重绘失效的根本症结,往往不在掩码精度或提示词强度,而在于ControlN…

2026/7/28 1:34:59阅读更多 →
大麦网自动抢票终极指南:告别手速焦虑,三步搞定热门演出门票

大麦网自动抢票终极指南:告别手速焦虑,三步搞定热门演出门票

大麦网自动抢票终极指南:告别手速焦虑,三步搞定热门演出门票 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 你是否曾经盯着手机屏幕,心跳…

2026/7/28 1:34:59阅读更多 →
通义千问API网关集成最佳实践:QPS提升3.8倍、延迟压降至86ms的4个关键配置点

通义千问API网关集成最佳实践:QPS提升3.8倍、延迟压降至86ms的4个关键配置点

更多请点击: https://intelliparadigm.com 第一章:通义千问API网关集成的性能跃迁全景图 通义千问API网关集成并非简单的接口代理升级,而是一次面向高并发、低延迟与弹性伸缩能力的系统性架构演进。通过将Qwen大模型服务统一纳管至自研API网…

2026/7/28 1:34:59阅读更多 →
p064基于Python的网络小说数据分析系统的设计与实现_hive+flask+spider31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

p064基于Python的网络小说数据分析系统的设计与实现_hive+flask+spider31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

p064基于Python的网络小说数据分析系统的设计与实现_hiveflaskspider31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ python3.7flaskhivespidermysql5.7vue

2026/7/28 1:32:59阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →