LangChain 调用 ChatGLM-6B
官方的调用方法
ChatGLM 可以直接使用官方提供的脚本去调用,它模拟了 ChatGPT 的接口
https://github.com/THUDM/ChatGLM2-6B/blob/main/openai_api.py
但是官方的这个脚本它缺少了 usage 这个参数,直接在 langchain 中使用会导致下面这个问题

看看官方的响应:

再来看看 ChatGLM 的响应:

只需简单的在官方的 ChatCompletionResponse 中加上 usage 这个参数即可
class ChatCompletionResponse(BaseModel):
model: str
object: Literal["chat.completion", "chat.completion.chunk"]
choices: List[Union[ChatCompletionResponseChoice,
ChatCompletionResponseStreamChoice]]
created: Optional[int] = Field(default_factory=lambda: int(time.time()))
usage = {
"prompt_tokens": 43,
"completion_tokens": 17,
"total_tokens": 60
}
再次测试:
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chat_models import ChatOpenAI
import os
os.environ["OPENAI_API_BASE"] = 'http://127.0.0.1:8000/v1'
os.environ["OPENAI_API_KEY"] = 'xxxxxxxxxxxx'
# 一个系统描述模板
system_message_prompt = SystemMessagePromptTemplate.from_template(
"You are a helpful assistant that translates {input_language} to {output_language}.")
# 一个人类输入的描述 模板
human_message_prompt = HumanMessagePromptTemplate.from_template("{text}")
chat_prompt = ChatPromptTemplate.from_messages(
[system_message_prompt, human_message_prompt])
customer_messages = chat_prompt.format_messages(
input_language="English", output_language="French", text="I love programming.")
# 创建一个聊天模型
chat = ChatOpenAI(model_name="gpt-3.5-turbo", max_tokens=1024)
customer_response = chat(customer_messages)
print(customer_response.content)
完美输出,成功调用了 ChatGLM,除了速度慢了亿点点,其他都没问题
