跳转至

在 Python 中调用在线大模型 API

许多大模型都提供了在线 API 接口服务,我们可以在 Python 中调用它们。本文使用 openaichatllmdashscope 等包实现了对 OpenAI、讯飞星火、智谱 AI、百度、阿里通义千问的调用。用户只需在本地用 .env 文件存储 API Key 即可快速调用这些大模型。

image-20231031211003404

导入必要的包

Python
import os

import dashscope
import openai
from chatllm.llmchain.llms import ChatGLM, ErnieBot, SparkBot
from dashscope import Generation
from dotenv import load_dotenv
from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplate

配置模型 API Key

我们一共使用 5 个在线大模型 API,分别是:

你可以在上述网址中注册账号并申请 API Key,大部分模型对于新用户都有一定的免费额度,少部分可能需要预付费。

为了避免将 API Key 暴露在公开的代码中,我们将 API Key 保存在 .env 文件中,然后通过 dotenv 包的 load_dotenv() 方法读取到环境变量中。

在当前目录下新建一个 .env 文件,层级结构如下:

Text Only
.
├── .env
└── call-api.ipynb

.env 文件的内容如下:

Text Only
OPENAI_API_BASE=https://api.nextweb.fun/openai/v1
OPENAI_API_KEY=ak-XXXXXX
SPARK_API_KEY={APP Id}:{API Key}:{Secret Key}
CHATGLM_API_KEY={API Key}
ERNIE_API_KEY={API Key}:{Secret Key}
DASHSCOPE_API_KEY=sk-XXXXXX
Python
# 通过 `dotenv` 包的 `load_dotenv()` 方法读取到环境变量中
load_dotenv()

# 下面的三个变量较为特殊,我们需要手动设置,否则可能会出现错误
openai.api_base = os.environ["OPENAI_API_BASE"]
openai.api_key = os.environ["OPENAI_API_KEY"]
dashscope.api_key = os.environ["DASHSCOPE_API_KEY"]
Text Only
True

设置各个模型的对话机器人实例

Python
# 设置默认提示词
prompt = ChatPromptTemplate.from_template("{question}")

# 设置各个模型的对话机器人实例
llm_spark = SparkBot()
llm_zhipuai = ChatGLM()
llm_ernie = ErnieBot()

chat_spark = LLMChain(llm=llm_spark, prompt=prompt)
chat_zhipuai = LLMChain(llm=llm_zhipuai, prompt=prompt)
chat_ernie = LLMChain(llm=llm_ernie, prompt=prompt)

测试对话效果

Python
prompt = "你是谁?"

OpenAI

Python
openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": prompt}],
).choices[0].message.content
Text Only
'我是一个AI助手,没有实体身份。我可以回答一些问题和提供一些建议。'

讯飞星火

Python
chat_spark.run(prompt)
Text Only
'您好,我是科大讯飞研发的认知智能大模型,我的名字叫讯飞星火认知大模型。我可以和人类进行自然交流,解答问题,高效完成各领域认知智能需求。'

智谱 AI

Python
chat_zhipuai.run(prompt)[1:-1].strip()
Text Only
'我是一个名为 ChatGLM2-12B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。'

百度

Python
chat_ernie.run(prompt)
Text Only
'您好,我是百度研发的知识增强大语言模型,中文名是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。\n\n如果您有任何问题,请随时告诉我。'

阿里通义千问

Python
Generation.call(model="qwen-turbo", prompt=prompt).output.text
Text Only
'我是来自阿里云的大规模语言模型,我叫通义千问。'

评论