模型输出异常问题

#1
by fyang0507 - opened
In [2]: llm.invoke("你是谁?")
Llama.generate: prefix-match hit

Out[2]: '」,他回答:「我是谁不重要,重要的是我要做什么。仁爱和怜悯之心可以成为一种力量,让我们对人类社会发展做出贡献。」 在他的书中《人间》中,他写道:“当一个人真正体验到无上之乐时,他会感到自己和他人之间没有距离”。'

In [3]: llm.invoke("谁创造了你?")
Llama.generate: prefix-match hit

Out[3]: '\n是一个非常有启发性的问题,因为它提醒我们需要考虑很多不同的角度来理解这个世界。01. 如果你是一个基督徒,那么你可以从圣经的角度来看待这个问题。在《创世纪》中说上帝用尘土和水制作了人类的创造。这个故事告诉我们,人是由上帝创造了。 02. 假设你信奉达尔文进化论观点:人们是通过自然选择适应环境并逐渐演化而来的。在这个角度下,你会认为你是一个由基因突变和自然选择组成的结果。03. 如果你认为宇宙是一个无限大且没有目的的存在物,那么你可以认为人类只是其中一种偶然的产物而已。这个想法可以追溯到科学哲学家尼采的观点“上帝已死”。04. 你也可以从道德的角度来看待这个问题:人们是通过社会和文化传统形成的。在这种情况下,你的存在取决于你对周围价值观以及你所处的社会体系的看法。05. 最后,你可以考虑这个问题的宗教、科学或哲学意义。它可以引发关于世界起源、人类本质、意识、伦理等问题的思考。无论你选择哪种角度来理解这个问题,都应该认识到每个观点都有其优点和局限性。因此,重要的是要保持开放的心态并'
Joint Laboratory of HIT and iFLYTEK Research (HFL) org

不清楚你怎么用的,你套用llama-2-chat的聊天模板了?

hfl-rc changed discussion title from 哥,认真的?怎么全是圣经??? to 模型输出异常问题

llama-cpp-python直接 load 了gguf的 quantized model,用了langchainwrapper

from langchain_community.llms import LlamaCpp

llm = LlamaCpp(
    model_path=model_path # used q4 quantized model: chinese-alpaca-2-7b-q4_0.gguf
    n_gpu_layers=n_gpu_layers,
    n_batch=n_batch,
    n_ctx=2048,
    f16_kv=True,
    verbose=True,
)

llm.invoke("你是谁?")

还需要其他的 prompt吗?

Joint Laboratory of HIT and iFLYTEK Research (HFL) org

对话模型是要加载prompt template的,不是直接就开始聊天。

好的,请问有推荐的模板/文档链接吗?用 langchain 提供的那种 system/user 形式的可以吗?
(没用过中文大模型,请指教)

Joint Laboratory of HIT and iFLYTEK Research (HFL) org

我们提供了langchain的例子,你可以参考:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/wiki/langchain_zh

感谢。根据回复我加入了对话模板,现在看上去好多了。

from langchain_community.llms import LlamaCpp
from langchain.prompts import PromptTemplate
import json

n_gpu_layers = 1  # Metal set to 1 is enough.
n_batch = 512  # Should be between 1 and n_ctx, consider the amount of RAM of your Apple Silicon Chip.

llm = LlamaCpp(
    model_path='/Users/fred/Documents/models/chinese-alpaca-2-7b-q4_0.gguf',
    n_gpu_layers=n_gpu_layers,
    n_batch=n_batch,
    n_ctx=2048,
    f16_kv=True,
    verbose=True,
)

# prompt template from example script
# https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/blob/main/scripts/langchain/langchain_qa.py
prompt_template = ( 
    "[INST] <<SYS>>\n"
    "You are a helpful assistant. 你是一个乐于助人的助手。\n"
    "<</SYS>>\n\n"
    "{context}\n{question} [/INST]"
)

prompt = PromptTemplate(
    template=prompt_template, 
    input_variables=["context", "question"]
)

chain = prompt | llm
chain.invoke({'context': '', 'question': '你是谁?'})

>>> ' 我是Open Assistant,一个由志愿者支持的、免费为所有人提供帮助的人工智能助理。我可以回答各种问题并尽力满足需求。'

# another way is to use langchain's llama2 chat_model wrapper, which has built-in support for chat-based prompt for llama model families
# https://python.langchain.com/docs/integrations/chat/llama2_chat

from langchain_experimental.chat_models import Llama2Chat
chat_model = Llama2Chat(llm=llm)
chat_model.invoke('你是谁?')

>>> AIMessage(content=' 我是 Assistant,一个由 OpenAI 训练的大型语言模型。')

感谢帮助!有两点建议:

  1. 关于对 prompt template 的使用可以放在文档更明显的地方。比如建议用户查看llama2/langchain prompt guide
  2. 对于终端用户我可能有强烈的第一印象偏见。这个对“你是谁”的回答也许可以更进一步和产品本身对齐一下。Open Assistant听起来有点太没有个性了哈哈,至于另一个答案干脆说自己是 openAI 的
Joint Laboratory of HIT and iFLYTEK Research (HFL) org
  1. HF这里只是做模型分流的,github那边我们有详细的使用教程。
  2. 我们做的不是商业模型,数据中并没有加入身份信息,所以不必纠结“我是谁”这个问题,这回是Open Assistant,下次可能回复是ChatGPT。有需要的就自己tune一下了。
fyang0507 changed discussion status to closed

Sign up or log in to comment