本指南介绍了如何从 OpenAI 模型快速迁移到智谱AI,我们用实例展示这个过程,帮助您更好的完成迁移工作。
基础工具包
OpenAI SDK 为我们提供了一个开箱即用的调用工具,对此,我们在后端兼容了 OpenAI 的所有 Endpoint,提供了便捷的迁移方式,仅需更换 api_key 与 base_url,就可以使用我们的模型。
切换API Endpoint
只需要简单修改两个参数即可完成迁移:
更换API Key
将 OpenAI 的 API Key 替换为智谱AI 的 API Key
更换Base URL
将 base_url 设置为智谱AI 的 API 地址
代码示例
from openai import OpenAI
client = OpenAI(
api_key="your zhipuai api key",
base_url="https://open.bigmodel.cn/api/paas/v4/"
)
response = client.chat.completions.create(
model="glm-4",
messages=[
{"role": "system", "content": "你是一个聪明且富有创造力的小说作家"},
{"role": "user", "content": "请你作为童话故事大王,写一篇短篇童话故事。"}
],
top_p=0.7,
temperature=0.9
)
print(response.choices[0].message)
使用智谱AI 官方 SDK
智谱AI 的部分功能需要您通过官方 SDK 进行调用,您可以通过 pypi 进行安装。
安装SDK
调用示例
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="your-api-key") # 填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4", # 填写需要调用的模型名称
messages=[
{"role": "user", "content": "作为一名营销专家,请为智谱开放平台创作一个吸引人的slogan"},
{"role": "assistant", "content": "当然,为了创作一个吸引人的slogan,请告诉我一些关于您产品的信息"},
{"role": "user", "content": "智谱AI开放平台"},
{"role": "assistant", "content": "智启未来,谱绘无限一智谱AI,让创新触手可及!"},
{"role": "user", "content": "创造一个更精准、吸引人的slogan"}
],
)
print(response.choices[0].message)
开源框架支持
在智能体和相关任务框架的迁移方面,我们支持 LangChain 框架的快速迁移。我们提供了 langchain-zhipuai 的拓展工具,提供了对 BaseChatModel、Embeddings 的支持适配。
安装 LangChain 扩展
设置环境变量
使用前请设置环境变量 ZHIPUAI_API_KEY
,值为智谱AI 的 API Key
迁移至ChatZhipuAI
from langchain_zhipuai.agents.zhipuai_all_tools.base import _get_assistants_tool
from langchain_zhipuai.chat_models import ChatZhipuAI
from langchain.agents import tool
from langchain.tools.shell import ShellTool
from pydantic.v1 import BaseModel, Extra, Field
from langchain import hub
from langchain_zhipuai.agents.all_tools_bind.base import create_zhipuai_tools_agent
from langchain_zhipuai.agent_toolkits import BaseToolOutput
from langchain_zhipuai.agents.all_tools_agent import ZhipuAiAllToolsAgentExecutor
@tool
def shell(query: str = Field(description="The command to execute")):
"""Use Shell to execute system shell commands"""
tool = ShellTool()
return BaseToolOutput(tool.run(tool_input=query))
llm = ChatZhipuAI(api_key="") # 这里可以指定apikey
tools = [
_get_assistants_tool(shell),
{"type": "code_interpreter", "code_interpreter": {"sandbox": "none"}},
{"type": "web_browser"},
{"type": "drawing_tool"},
]
llm_with_all_tools = llm.bind(tools=tools)
prompt = hub.pull("zhipuai-all-tools-chat/zhipuai-all-tools-agent")
agent = create_zhipuai_tools_agent(
prompt=prompt,
llm_with_all_tools=llm_with_all_tools
)
agent_executor = ZhipuAiAllToolsAgentExecutor(
agent=agent,
tools=[shell],
verbose=True,
return_intermediate_steps=True,
)
agent_executor.invoke({
"input": "你好",
"chat_history": [],
})
兼容向量数据库
我们提供了兼容 OpenAI 的 Embedding 调用方式,使用向量库相关的 Embeddings 时,您只需要替换 Embedding 的实例为 ZhipuAIEmbeddings。
向量化示例
from langchain_zhipuai.embeddings.base import ZhipuAIEmbeddings
# Test zhipuai embeddings
documents = ["foo bar"]
embedding = ZhipuAIEmbeddings()
output = embedding.embed_documents(documents)
# len(output) == 1
# len(output[0]) == 1024
迁移优势
无缝兼容
兼容 OpenAI API 接口,迁移成本低