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

基于Vertex AI+LangChain的阿拉伯语聊天Bot优化求助

问题解决方案

一、核心问题分析

  1. LLM依赖自有知识库作答:原提示词对信息来源的约束强度不足,模型仍会调用预训练知识生成内容,未严格限定在给定上下文范围内。
  2. 阿拉伯语提问返回英文:原模板未明确使用query_language变量,且调用时未传递语言标识,导致模型对回答语言的判断逻辑不稳定。

二、优化后的代码实现

首先安装语言检测依赖:

pip install langdetect

修改后的完整代码:

from langdetect import detect
from langchain.embeddings import VertexAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.llms import VertexAI
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA
import constants

# 初始化嵌入与向量数据库
embeddings = VertexAIEmbeddings()
db = FAISS.load_local(
    folder_path=constants.MODEL_DB_SAVE_PATH,
    embeddings=embeddings,
    index_name=constants.MODEL_DB_INDEX_NAME
)
retriever = db.as_retriever(
    search_type=constants.MODEL_SEARCH_TYPE,
    search_kwargs={"k": 5}
)

# 初始化LLM,降低随机性增强规则依从性
llm = VertexAI(
    model_name="text-bison@001",
    max_output_tokens=500,
    temperature=0.1,  # 调低温度,减少模型自主生成内容的概率
    verbose=True
)

# 优化后的提示词模板
template = """你是ABCD(又称Any Body Can Dance)音乐节的聊天助手Sara,必须严格遵守以下规则回答问题:

1. 信息来源限制:**绝对只能使用下方提供的{context}内容作答**,禁止调用任何外部知识、预训练内容或编造信息。如果{context}中没有对应问题的答案,直接用{query_language}告知用户:"抱歉,我没有关于这个问题的信息"。
2. 回答语言规则:必须使用与用户提问相同的语言回答。若{query_language}为阿拉伯语,全程用阿拉伯语作答;若为英语,用英语作答。
3. 无关问题处理:如果问题与ABCD音乐节完全无关,用{query_language}礼貌告知:"抱歉,我只能回答与ABCD音乐节相关的问题"。

{context}

用户问题:{question}
"""

PROMPT = PromptTemplate(
    template=template,
    input_variables=['context', 'question', 'query_language']
)

chat = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    verbose=constants.MODEL_VERBOSE,
    chain_type_kwargs={
        "prompt": PROMPT,
        "verbose": constants.MODEL_VERBOSE
    },
)

# 检测提问语言并生成回复
def get_chat_response(text):
    # 自动检测语言,默认返回英语
    try:
        detected_lang = detect(text)
        query_language = "阿拉伯语" if detected_lang == 'ar' else "英语"
    except:
        query_language = "英语"
    
    result = chat({
        "query": text,
        "query_language": query_language
    })
    return result['result']

# 示例调用:阿拉伯语提问
# response = get_chat_response("كيف يمكنني الحصول على تذاكر مهرجان ABCD؟")
# print(response)

三、关键优化点说明

提示词层面

  • 强化信息来源约束:用明确的强硬措辞(如“绝对只能”“禁止”)限定模型的信息获取范围,消除模糊空间。
  • 绑定语言规则变量:直接将query_language与回答语言绑定,强制模型遵循语言匹配要求。
  • 标准化无信息/无关问题回复:指定统一的回复内容,避免模型自主发挥。

代码层面

  • 添加语言检测逻辑:通过langdetect自动识别提问语言,确保query_language参数准确传递给提示词。
  • 降低LLM温度参数:将temperature从0.2调至0.1,减少模型的随机生成行为,提升对提示词规则的依从性。
  • 完善参数传递:调用聊天链时传入query_language变量,解决原代码中模板变量未被使用的问题。

内容的提问来源于stack exchange,提问作者Rush W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:35:14