LangChain-1.0入门实践-搭建流式响应的多轮问答机器人

发布时间:2026-01-28 23:10:47编辑:123阅读(9)

    基于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/

    image.png

    一个简单网页版对话系统搭建成功

关键字

上一篇: LangChain-1.0入门实战-1

下一篇: 没有了