1.安装本地python环境,python版本大于3.11

pip install langchain_openai

pip install langchain_community

pip install gradio

2.引用服务器布置的大模型

llm = ChatOpenAI(
    model='qwen3-8b',
    temperature=0.8,
    api_key='xx',
    base_url="http://127.0.0.1:6006/v1",
    extra_body={'chat_template_kwargs': {'enable_thinking': False}},
)

3.创建带聊天记录的大模型处理链

prompt = ChatPromptTemplate.from_messages([
    ('system', "{system_message}"),  
    MessagesPlaceholder(variable_name='chat_history', optional=True),
    ('human', '{input}')
])

chain = prompt | llm

def get_session_history(session_id: str):
    return SQLChatMessageHistory(
        session_id=session_id,
        connection_string='sqlite:///chat_history.db',
)

4.对历史记录进行剪辑,只保留最新的两条历史记录,其余的使用大模型进行总结概述压缩

def summarize_messages(current_input):
    session_id = current_input['config']["configurable"]["session_id"]
    if not session_id:
        raise ValueError("必须通过config参数提供session_id")

    chat_history = get_session_history(session_id)
    stored_messages = chat_history.messages

    if len(stored_messages) <= 2:  
        return {"original_messages": stored_messages, "summary": None}  

    last_two_messages = stored_messages[-2:]  
    messages_to_summarize = stored_messages[:-2]  

    summarization_prompt = ChatPromptTemplate.from_messages([
        ("system", "请将以下对话历史压缩为一条保留关键信息的摘要消息。"),
        ("placeholder", "{chat_history}"),
        ("human", "请生成包含上述对话核心内容的摘要,保留重要事实和决策。")
    ])
    summarization_chain = summarization_prompt | llm
    summary_message = summarization_chain.invoke({'chat_history': messages_to_summarize})

    return {
        "original_messages": last_two_messages,  
        "summary": summary_message  
    }

final_chain = (RunnablePassthrough.assign(messages_summarized=summarize_messages)

5.编写图形界面

def add_message(chat_history, user_message):
    if user_message:
        chat_history.append({"role": "user", "content": user_message})
    return chat_history, gr.Textbox(value=None, interactive=False)


def execute_chain(chat_history):
    input = chat_history[-1]
    result = final_chain.invoke({'input': input['content'], "config": {"configurable":                          {"session_id": "user123"}}}, config={"configurable": {"session_id": "user123"}},callbacks=None)chat_history.append({'role': 'assistant', 'content': result.content})
    return chat_history


with gr.Blocks(title='本地大模型', theme=gr.themes.Soft()) as block:

    chatbot = gr.Chatbot(height=600, label='大模型智能助手')

    with gr.Row():
        with gr.Column(scale=5):
            user_input = gr.Textbox(placeholder='请给机器人发送消息...', label='文字输入', max_lines=5)

            submit_btn = gr.Button('发送', variant="primary")


    chat_msg = user_input.submit(add_message, [chatbot, user_input], [chatbot, user_input])
    chat_msg.then(execute_chain, chatbot, chatbot).then( 
        lambda: gr.MultimodalTextbox(interactive=True),  
        None,  
        [user_input]  
    )

6.执行脚本文件

7.浏览器打开http://127.0.0.1:7860即可使用本地部署好的大模型啦

更多推荐