发布时间:2026-01-28 23:10:47编辑:123阅读(7)
基于LangChain1.0和本地ollama部署模型(Qwen3-4b)搭建流式响应的多轮问答机器人.
示例代码:
from langchain.messages import HumanMessage, AIMessage,SystemMessage
from langchain.chat_models import init_chat_model
model = init_chat_model(
#本地模型名
model="hopephoto/Qwen3-4B-Instruct-2507_q8:latest",
model_provider="ollama",
# temperature 0.1~0.9之间,值越小回答越稳定,越高随机性越高
temperature=0.7,
# 每一步生成,只允许从「概率最高的前 K 个 token」里选,top_k = 40 → 只保留前 40 个高概率 token
top_k=40,
# 从概率排序的 token 中,取一个集合,使它们的累计概率 ≥ p
top_p=0.95,
base_url="http://localhost:11434",
)
# 初始化消息历史
system_message = SystemMessage(
content="你叫天天,是一名乐于助人的智能助手。请在对话中保持温和、有耐心的语气。"
)
messages = [system_message]
print("输入exit推出对话\n")
# 主循环(支持多轮对话+流式输出)
while True:
user_input = input("你:")
if user_input.lower() in {"exit", "quit"}:
print("对话结束,再见!")
break
# 追加用户消息
messages.append(HumanMessage(content=user_input))
# 实时输出模型生成内容
print("天天:", end="", flush=True)
full_reply = ''
for chunk in model.stream(messages):
if chunk.content:
print(chunk.content, end="", flush=True)
full_reply += chunk.content
# 分割线
print("\n" + "_" * 40)
# 追加AI回复消息
messages.append(AIMessage(content=full_reply))
# 保持消息长度(只保留最近50轮)
messages = messages[-50:]运行结果:
输入exit推出对话
你:你好,我叫张三,好久不见
天天:哎呀,张三!真是久别重逢啊~(眼睛亮亮地笑着)最近过得怎么样呀?我记得上次见面的时候你还说要学做蛋糕呢,
现在学会了吗?要是有需要帮忙的地方,随时找我哦~😊
________________________________________
你:你还记得我叫什么名字吗
天天:当然记得啦,张三!(轻轻点头,眼睛里闪着温暖的光)每次听到这个名字都觉得特别亲切呢。上次见面时你可是说要
学做蛋糕的,现在是不是已经成功做出美味的小点心了呀?要不要分享给我听听呀~😊
________________________________________
你:quit
对话结束,再见!
如上所展示的问答效果就是在构建大模型应用时需要实现的流式输出效果。
接下来就进一步,使用gradio来开发一个支持在网页上进行交互的问答机器人。
需要安装一下gradio的第三方依赖包
pip install gradio
示例代码
import gradio as gr from langchain.messages import HumanMessage, AIMessage,SystemMessage from langchain.chat_models import init_chat_model # 1. 初始化 Ollama Chat 模型 model = init_chat_model( #本地模型名 model="hopephoto/Qwen3-4B-Instruct-2507_q8:latest", model_provider="ollama", # temperature 0.1~0.9之间,值越小回答越稳定,越高随机性越高 temperature=0.7, # 每一步生成,只允许从「概率最高的前 K 个 token」里选,top_k = 40 → 只保留前 40 个高概率 token top_k=40, # 从概率排序的 token 中,取一个集合,使它们的累计概率 ≥ p top_p=0.95, base_url="http://localhost:11434", ) # 2. 对话函数 def chat_fn(user_input, history): """ history: [(user, assistant), ...] """ messages = [] # 把历史对话转换成 LangChain Message for u, a in history: messages.append(HumanMessage(content=u)) messages.append(AIMessage(content=a)) # 当前用户输入 messages.append(HumanMessage(content=user_input)) # 调用模型 response = model.invoke(messages) return response.content # 3. Gradio Chat UI demo = gr.ChatInterface( fn=chat_fn, title="🦙 Ollama + LangChain Chat", description="本地大模型网页版对话示例", ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)
运行结果:
* Running on local URL: http://0.0.0.0:7860
* To create a public link, set `share=True` in `launch()`.
访问http://127.0.0.1:7860/

一个简单网页版对话系统搭建成功
上一篇: LangChain-1.0入门实战-1
下一篇: 没有了
51976
51783
42061
38906
33399
30362
28999
24024
23933
22292
7°
9°
46°
494°
2669°
3368°
2781°
2772°
3551°
2730°