背景说明
在使用Qanything过程中,需要使用到智谱清言的大模型接口,但是项目默认是没有提供智谱清言的api调用方式的。但是最新的智谱清言api文档 中提到智谱清言大模型接口已经兼容open-ai sdk,这就为我们修改代码提供了很大的便利。
实现步骤
修改项目代码
- llm_for_openai_api.py
- 添加智谱清言模型标识
#智谱清言模型 GML_MODEL_LIST = ['glm-3-turbo', 'glm-4', 'glm-4v'] #在class OpenAILLM(BaseAnswer, ABC):上面添加这行代码
- 修改 num_tokens_from_messages 方法
# 针对不同的模型设置token数量 if model in { "gpt-3.5-turbo-0613", # "gpt-3.5-turbo-1106", "gpt-3.5-turbo-16k-0613", "gpt-4-0314", "gpt-4-32k-0314", "gpt-4-0613", "gpt-4-32k-0613", "gpt-4-32k", # "gpt-4-1106-preview", } or model in GML_MODEL_LIST:
- 设置智谱清言参数
def __init__(self, args):
super().__init__()
base_url = args.openai_api_base
api_key = args.openai_api_key
self._set_zhi_pu_config(args) # 设置智谱清言配置信息
self.client = OpenAI(base_url=base_url, api_key=api_key)
self.model = args.openai_api_model_name
self.token_window = int(args.openai_api_context_length)
debug_logger.info(f"OPENAI_API_KEY = {api_key}")
debug_logger.info(f"OPENAI_API_BASE = {base_url}")
debug_logger.info(f"OPENAI_API_MODEL_NAME = {self.model}")
debug_logger.info(f"OPENAI_API_CONTEXT_LENGTH = {self.token_window}")
# 添加_set_zhi_pu_config方法
def _set_zhi_pu_config(self, args) -> None:
# 如果调用的模型是智谱清言的模型
if args.openai_api_model_name in GML_MODEL_LIST:
self.top_p = None
if not args.temperature:
self.temperature = args.temperature
else:
self.temperature = 0.1
- sanic_api.py
parser.add_argument('--temperature', dest='temperature', type=float, help='temperature') # 添加temperature参数
args = parser.parse_args()
设置脚本启动参数
--host 127.0.0.1 --port 8777 --model_size 7B --use_cpu --use_openai_api --openai_api_base https://open.bigmodel.cn/api/paas/v4/ --openai_api_key XXXX --openai_api_model_name glm-3-turbo --openai_api_context_length 4096 --workers 1 --temperature=0.2
- openai_api_base: 智谱清言服务地址
- openai_api_key: 智谱清言api key
- openai_api_model_name:智谱清言模型标识
- temperature:采样温度 不写默认为0.1