Langchain印尼语PDF问答机器人:响应不完整与语言一致性问题
基于Langchain的印尼语PDF问答机器人问题解决指南
核心问题与修复方案
问题1:生成回答不完整
调整chunk大小、嵌入模型等配置后仍存在回答截断/不完整的情况,可从以下维度修复:
- 补全LLM输出长度限制:HuggingFaceHub调用模型时默认可能限制输出token数,需显式设置
max_tokens参数,确保模型能输出足够长度的内容。 - 提升召回文档数量:默认retriever召回的文档量不足会导致模型缺乏上下文,可调整
search_kwargs增加召回数量。 - 强化Prompt引导:在prompt中明确要求模型输出完整、连贯的回答,避免模糊表述。
- 优化文档加载方式:UnstructuredFileLoader对部分PDF格式兼容性有限,可替换为PyPDFLoader提升加载稳定性。
问题2:偶尔出现英文回复
即使prompt明确要求印尼语回答仍有英文输出,可通过以下方式解决:
- 强化语言约束:用更明确强硬的印尼语表述强制模型仅用印尼语回答,避免模糊要求。
- 适配印尼语专用模型:优先选择针对印尼语优化的LLM,比通用模型更易遵循语言规则。
- 降低模型随机性:适当调低
temperature参数,减少模型生成的不确定性。
修改后的完整代码示例
!pip install langchain !pip install "unstructured[all-docs]" pypdf !sudo apt-get install libmagic-dev poppler-utils tesseract-ocr libxml2 libxslt-dev import nltk nltk.download('punkt') !pip install InstructorEmbedding !pip install sentence-transformers !pip install faiss-cpu from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceInstructEmbeddings from langchain.vectorstores import FAISS import os from langchain.llms import HuggingFaceHub from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationalRetrievalChain from langchain.prompts.chat import ChatPromptTemplate # 加载PDF文档,替换为PyPDFLoader增强兼容性 loader = PyPDFLoader("/content/ASIP4204-M1.pdf") docs = loader.load_and_split() # 文本拆分:调整参数适配印尼语文本长度 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1200, chunk_overlap=50) texts = text_splitter.split_documents(documents=docs) # 可选印尼语专用嵌入模型提升召回准确率 embeddings = HuggingFaceInstructEmbeddings(model_name="sentence-transformers/paraphrase-indo-dailynews-sbert") # 若保留原模型则使用:embeddings = HuggingFaceInstructEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") db = FAISS.from_documents(documents=texts, embedding=embeddings) # 调整retriever召回数量 retriever = db.as_retriever(search_kwargs={"k": 5}) os.environ["HUGGINGFACEHUB_API_TOKEN"] = "你的API Token" repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1" llm = HuggingFaceHub( repo_id=repo_id, model_kwargs={ "temperature": 0.01, # 降低随机性 "max_tokens": 1024, # 增加输出token限制 "top_p": 0.9 } ) # 强化版Prompt,明确要求印尼语及完整回答 template = """Anda adalah asisten untuk tugas jawab pertanyaan. Gunakan konteks yang diambil berikut untuk menjawab pertanyaan dengan lengkap dan jelas. JIKA ANDA TIDAK TAU JAWABAN, HANYA KATAKAN 'Saya tidak tahu'. **WAJIB JAWAB HANYA DALAM BAHASA INDONESIA, JANGAN PAKAI BAHASA LAIN SEKALI PUN.** Pertanyaan: {question} Konteks: {context} Jawaban:""" prompt = ChatPromptTemplate.from_template(template) memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) qa = ConversationalRetrievalChain.from_llm( llm=llm, retriever=retriever, memory=memory, combine_docs_chain_kwargs={"prompt": prompt}, verbose=True # 开启调试日志 ) # 测试问答 qa.run("Apa itu data?")
内容的提问来源于stack exchange,提问作者phluviophilee
相关产品推荐
相关产品推荐

