Qwen3-4B-Thinking Chainlit前端调用教程:自定义系统提示词与多轮对话管理

1. 环境准备与模型部署

1.1 模型简介

Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是一个基于vLLM部署的文本生成模型,在大约5440万个由Gemini 2.5 Flash生成的token上进行了训练。该模型特别擅长模拟Gemini-2.5 Flash的行为模式、推理轨迹和输出风格,同时保留了丰富的知识储备。

模型训练数据覆盖多个专业领域:

领域 提示数量
学术 645
金融 1048
健康 1720
法律 1193
营销 1350
编程 1930
SEO 775
科学 1435
其他 991

1.2 部署验证

使用以下命令检查模型是否部署成功:

cat /root/workspace/llm.log

成功部署后,日志中会显示类似以下内容:

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Started server process [1234]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

2. Chainlit前端基础调用

2.1 启动Chainlit界面

确保模型服务正常运行后,在终端执行以下命令启动Chainlit前端:

chainlit run app.py -w

启动成功后,浏览器会自动打开Chainlit的交互界面(默认地址为http://localhost:8000)。

2.2 基础对话测试

在Chainlit界面中输入简单问题测试模型响应:

你好,请介绍一下你自己

模型应该会返回类似以下的响应:

我是基于Qwen3-4B-Thinking架构的AI助手,专注于提供专业领域的知识服务。我擅长学术研究、金融分析、健康咨询等多个领域,能够理解复杂问题并提供详细解答。

3. 自定义系统提示词配置

3.1 修改系统提示模板

在Chainlit应用目录下创建或修改prompts.py文件,添加自定义系统提示:

SYSTEM_PROMPT = """
你是一位{domain}专家,请用专业但易懂的语言回答用户问题。
回答时应遵循以下规则:
1. 先确认问题核心要点
2. 分点列出关键信息
3. 提供实际案例说明
4. 最后总结要点

当前对话上下文:
{history}
"""

3.2 动态领域选择

app.py中添加领域选择功能:

import chainlit as cl
from prompts import SYSTEM_PROMPT

@cl.on_chat_start
async def start_chat():
    settings = await cl.ChatSettings(
        [
            cl.input_widget.Select(
                id="Domain",
                label="选择专业领域",
                values=["学术", "金融", "健康", "法律", "营销", "编程"],
                initial_index=0
            )
        ]
    ).send()
    
    domain = settings["Domain"]
    system_prompt = SYSTEM_PROMPT.format(domain=domain)
    cl.user_session.set("system_prompt", system_prompt)

4. 多轮对话管理实现

4.1 对话历史记录

app.py中扩展对话处理逻辑:

@cl.on_message
async def main(message: cl.Message):
    # 获取当前对话历史
    history = cl.user_session.get("history", [])
    
    # 更新对话历史(保留最近5轮)
    history.append({"role": "user", "content": message.content})
    if len(history) > 10:  # 保留5轮对话(每轮user+assistant)
        history = history[-10:]
    
    # 获取系统提示
    system_prompt = cl.user_session.get("system_prompt")
    full_prompt = system_prompt.format(history=format_history(history))
    
    # 调用模型
    response = await query_model(full_prompt)
    
    # 更新历史记录
    history.append({"role": "assistant", "content": response})
    cl.user_session.set("history", history)
    
    # 返回响应
    await cl.Message(content=response).send()

def format_history(history):
    return "\n".join(
        f"{msg['role']}: {msg['content']}" 
        for msg in history
    )

4.2 上下文感知响应

增强模型对上下文的感知能力:

async def query_model(prompt):
    # 实际调用vLLM接口的代码
    # 这里简化为示例
    from vllm import LLM, SamplingParams
    
    llm = LLM(model="Qwen3-4B-Thinking")
    sampling_params = SamplingParams(
        temperature=0.7,
        top_p=0.9,
        max_tokens=1024
    )
    
    output = llm.generate(prompt, sampling_params)
    return output[0].text

5. 高级功能实现

5.1 对话主题锁定

防止对话偏离主题:

@cl.on_message
async def main(message: cl.Message):
    history = cl.user_session.get("history", [])
    current_topic = cl.user_session.get("topic")
    
    # 检测主题变化
    if len(history) > 2 and not is_related(message.content, current_topic):
        await cl.Message(
            content="检测到话题变化,是否要切换到新主题?",
            actions=[
                cl.Action(name="confirm_topic_switch", value="yes", label="确认切换"),
                cl.Action(name="cancel_topic_switch", value="no", label="继续当前话题")
            ]
        ).send()
        return
    
    # ...原有处理逻辑...

@cl.action_callback("confirm_topic_switch")
async def on_action(action):
    if action.value == "yes":
        await cl.Message(content="已切换到新话题,请继续提问。").send()
    else:
        await cl.Message(content="继续当前话题讨论。").send()

5.2 知识检索增强

集成外部知识检索:

async def query_model(prompt):
    # 先进行知识检索
    related_knowledge = search_knowledge_base(prompt)
    
    enhanced_prompt = f"""
    相关背景知识:
    {related_knowledge}
    
    当前对话:
    {prompt}
    
    请基于以上信息回答问题。
    """
    
    # 调用模型生成
    return await generate_with_vllm(enhanced_prompt)

6. 总结与最佳实践

6.1 关键要点回顾

  1. 系统提示定制:通过模板化系统提示实现领域专业化
  2. 对话历史管理:保留最近5轮对话确保上下文连贯
  3. 主题一致性:实现话题锁定防止对话偏离
  4. 知识增强:结合外部知识库提升回答准确性

6.2 性能优化建议

  • 控制对话历史长度(建议5-7轮)
  • 对长响应启用流式输出
  • 设置合理的超时时间(建议15-30秒)
  • 使用缓存机制减少重复计算

6.3 扩展方向

  1. 集成更多专业领域模板
  2. 添加多模态支持(如图片理解)
  3. 实现对话总结与导出功能
  4. 开发团队协作对话模式

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐