大模型流式对话返回demo3、4
·
代码1
from langchain.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
import asyncio
class DeepSeekR1:
def __init__(self):
print("Loading DeepSeek-R1-Distill-Qwen-1.5B model via Ollama...")
self.llm = ChatOllama(
model="deepseek-r1:1.5b",
temperature=0.7,
base_url="http://localhost:11434"
)
self.prompt = ChatPromptTemplate.from_template("""
你是一个友好的对话AI机器人。根据用户输入生成聪明得体的回复。
用户输入: {input}
请用1-10句话回复,保持自然友好的语气:
""")
self.chain = self.prompt | self.llm | StrOutputParser()
def process_response(self, raw_response):
reasoning_marker = "<think>"
answer_marker = "</think>"
reasoning_start = raw_response.find(reasoning_marker)
answer_start = raw_response.find(answer_marker)
if reasoning_start != -1 and answer_start != -1:
reasoning = raw_response[reasoning_start + len(reasoning_marker):answer_start].strip()
answer = raw_response[answer_start + len(answer_marker):].strip()
return reasoning, answer
else:
return None, raw_response
async def chat_async(self, prompt):
print(f"Received prompt: {prompt}")
raw_response = await self.chain.ainvoke({"input": prompt})
reasoning, answer = self.process_response(raw_response)
if reasoning:
print(f"Generated thinking process: {reasoning}")
print(f"Generated answer: {answer if answer else raw_response}")
return {
"answer": answer if answer else raw_response,
"reasoning": reasoning if reasoning else None
}
def chat(self, prompt):
# 同步调用异步方法
return asyncio.run(self.chat_async(prompt))
def generate_response_stream(self, prompt: str = ""):
# 异步生成器实现流式输出
async def generate_chunks():
# 直接遍历每个token
async for chunk in self.chain.astream({"input": prompt}):
# 将每个chunk拆分成字符,然后逐个发送
for char in chunk:
yield f"{char}"
await asyncio.sleep(0.01) # 控制速度,避免输出太快
return generate_chunks()
result = DeepSeekR1().chat("你好")
print(f"result: ",{result})
代码2
from langchain.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
import asyncio
class Qwen2_7B:
def __init__(self):
print("Loading Qwen2-7B model via Ollama...")
# 初始化Ollama聊天模型
self.llm = ChatOllama(
model="qwen2:7b", # Ollama中的模型名称
temperature=0.7, # 控制生成随机性
base_url="http://localhost:11434" # Ollama服务地址
)
# 设置提示模板
self.prompt = ChatPromptTemplate.from_template("""
用户输入: {input}
请根据上述输入生成合适的回复:
""")
# 创建处理链
self.chain = self.prompt | self.llm | StrOutputParser()
async def chat_async(self, prompt):
"""
异步聊天方法
"""
print(f"Received prompt: {prompt}")
# 调用模型生成回复
response = await self.chain.ainvoke({"input": prompt})
print(f"Generated response: {response}")
return response
def chat(self, prompt):
"""
同步聊天方法(包装异步方法)
"""
return asyncio.run(self.chat_async(prompt))
def generate_stream(self, prompt):
"""
流式生成方法
"""
async def stream_generator():
async for chunk in self.chain.astream({"input": prompt}):
yield chunk
return stream_generator()
更多推荐



所有评论(0)