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

如何基于ChatGPT API开发仅使用PDF自定义知识的Python聊天机器人

实现仅基于PDF自定义知识的ChatGPT聊天机器人

要让聊天机器人完全依赖PDF中的自定义知识、不使用通用知识,需要从prompt约束、对话链配置和检索逻辑优化三个层面调整现有代码,具体方案如下:

一、自定义约束性Prompt模板

默认对话链的prompt没有严格限制模型使用外部知识,需自定义模板明确指令,强制模型仅基于PDF上下文回答。

from langchain.prompts import PromptTemplate

# 自定义prompt,明确规则限制模型行为
custom_prompt = PromptTemplate(
    input_variables=["chat_history", "question", "context"],
    template="""
你是一个仅依托提供的PDF文档内容作答的助手,必须严格遵守以下规则:
1. 所有回答只能来自给定的上下文信息,禁止使用任何外部通用知识。
2. 如果上下文没有相关内容,直接回复"抱歉,我无法从提供的文档中找到相关答案。",不得猜测或编造内容。
3. 可结合聊天历史理解问题,但回答仍需完全基于上下文。

聊天历史: {chat_history}
当前问题: {question}
上下文信息: {context}

请给出你的回答:
"""
)

二、修改对话链,应用自定义Prompt

在get_conversation_chain函数中替换默认prompt,并优化检索参数,确保模型严格遵循约束:

# Train the bot with the PDF information
def get_conversation_chain(vectorstore, api_key):
    llm = ChatOpenAI(openai_api_key=api_key)
    # 添加output_key确保memory与prompt变量匹配
    memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True, output_key='answer')
    
    conversation_chain = ConversationalRetrievalChain.from_llm(
        llm=llm,
        # 调整search_kwargs的k值,控制返回的相关文本块数量,按需设置
        retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
        memory=memory,
        # 应用自定义prompt
        combine_docs_chain_kwargs={"prompt": custom_prompt},
        # 可选:返回来源文档,便于验证回答是否来自PDF
        return_source_documents=True
    )
    return conversation_chain 

三、优化检索与结果校验

为进一步避免模型使用通用知识,可在获取回答前校验检索结果:

def get_bot_response(conversation_chain, user_question):
    response = conversation_chain({"question": user_question})
    # 若检索不到相关PDF内容,直接返回无结果提示
    if not response["source_documents"]:
        return "抱歉,我无法从提供的文档中找到相关答案。"
    return response["answer"]

关键说明

  • 调整search_kwargs={"k": 3}:k值决定检索返回的最相关文本块数量,可根据PDF内容长度、问题复杂度调整,避免返回无关内容干扰回答。
  • 强制prompt规则是核心:通过明确指令让模型放弃自身通用知识,仅依赖传入的PDF上下文生成回答。

内容的提问来源于stack exchange,提问作者David Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:15:19