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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:46:28