You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LlamaIndex聊天机器人中添加预约定制Prompt且不影响性能

解决LlamaIndex聊天机器人添加预约定制Prompt的问题

你之前的问题出在把预约判断逻辑放在了refine模板里,但你用的response_mode="compact"模式通常不会触发refine流程,所以这条规则根本没被执行。要实现需求,得把预约判断的优先级提最高,放在系统提示里,让LLM先检查用户问题是否涉及预约,再决定是输出"booknow!"还是正常从PDF取内容回答。

正确实现步骤

1. 调整Prompt模板,优先处理预约请求

把预约判断规则放在系统消息的最前面,明确告诉LLM:只要用户问题涉及预约、预订、排期相关内容,直接输出"booknow!",否则再用上下文内容回答。

2. 保持原有PDF问答逻辑不变

正常加载文档、构建索引,只修改Prompt部分,不影响原有机器人的性能。

修改后的完整代码

import os
import json
from llama_index import SimpleDirectoryReader, VectorStoreIndex
from llama_index.prompts import ChatPromptTemplate, ChatMessage
from llama_index.core.llms import MessageRole

def custom_serializer(obj):
    # 保留你原来的自定义序列化逻辑
    if hasattr(obj, '__dict__'):
        return obj.__dict__
    return str(obj)

# 处理用户请求
question = request.json.get('question')

# 定义QA Prompt模板,加入预约判断的系统规则
chat_text_qa_msgs = [
    ChatMessage(
        role=MessageRole.SYSTEM,
        content=(
            "规则:如果用户的问题涉及预约、预订、排期相关内容,直接回复'booknow!'。\n"
            "其他情况,使用下面的上下文信息回答问题,不要用外部知识。"
        ),
    ),
    ChatMessage(
        role=MessageRole.USER,
        content=(
            "上下文信息:\n"
            "---------------------\n"
            "{context_str}\n"
            "---------------------\n"
            "请回答我的问题:{query_str}"
        ),
    ),
]

text_qa_template = ChatPromptTemplate(chat_text_qa_msgs)

# 加载PDF文档并构建索引
upload_dir = 'uploads/machinebuilt'
file_paths = [os.path.join(upload_dir, filename) for filename in os.listdir(upload_dir) if os.path.isfile(os.path.join(upload_dir, filename))]
documents = SimpleDirectoryReader(input_files=file_paths).load_data()
index = VectorStoreIndex.from_documents(documents)

# 初始化聊天引擎,使用修改后的QA模板
chat_engine = index.as_chat_engine(
    response_mode="compact",
    text_qa_template=text_qa_template
)

# 获取回复并处理格式
response = chat_engine.chat(question)
json_response = json.dumps({"response": response}, default=custom_serializer)
response_dict = json.loads(json_response)
final_response = response_dict['response']

关键说明

  • 规则优先级:把预约判断放在系统消息最前面,确保LLM首先执行这个逻辑,不会被上下文内容干扰。
  • 不影响原有性能:只是修改了Prompt模板,文档加载、索引构建、聊天引擎的核心逻辑都和原来一致,不会降低PDF问答的效率。
  • 无需refine模板:因为compact模式直接基于检索到的上下文生成答案,不需要触发refine流程,所以去掉了没用的refine模板配置。

内容的提问来源于stack exchange,提问作者weifeng tripods

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:52:14