在开始之前,我们需要先准备一个可以调用 OpenAPI 的 key,又或者是其他
LLM 的 key。
因为墙的原因,所以没有办法直接使用 OpenAI 的 key
来调用,但是我们可以使用一些替代品或者代理,可选的有:
依赖
我们可以使用 openai
的 SDK
来调用它们的接口,同时也可以使用 langchain
这个库来调用它们的接口。
不过本系列文章都会基于 langchain
来进行实现。langchain
是一个基于 OpenAPI
的封装,可以方便的调用 OpenAPI 的接口。
同时很多国内的大模型也支持通过 langchain
的 API
来使用,非常方便。
通过 OpenAI SDK 使用
目前市面上大多数的 LLM 都支持 OpenAI 的接口,所以我们可以通过 OpenAI
的 SDK 来调用这些接口。
需要注意的是:
- 模型:不同的 LLM 有不同的模型,比如零一万物的模型是
yi-large
,OpenAI 的模型是
gpt-3.5-turbo
,智谱清言的模型是 glm-4
。
base_url
:不同的 LLM 有不同的
base_url
,需要根据不同的 LLM 来设置。
api_key
:不同的 LLM 有不同的 api_key
下面是一个使用 OpenAI SDK 的例子:
依赖安装:
零一万物
[零一万物]1 2 3 4 5 6 7 8 9 10 11 12
| from openai import OpenAI
client = OpenAI( api_key='your key', base_url='https://api.lingyiwanwu.com/v1' ) completion = client.chat.completions.create( model="yi-large", messages=[{"role": "user", "content": "Hi, who are you?"}] )
print(completion.choices[0].message.content)
|
OpenAI HK
[OpenAI HK]1 2 3 4 5 6 7 8 9 10 11 12
| from openai import OpenAI
client = OpenAI( api_key='your key', base_url="https://api.openai-hk.com/v1" ) completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hi, who are you?"}] )
print(completion.choices[0].message.content)
|
智谱清言
[智谱清言]1 2 3 4 5 6 7 8 9 10 11 12
| from openai import OpenAI
client = OpenAI( api_key='your key', base_url='https://open.bigmodel.cn/api/paas/v4/' ) completion = client.chat.completions.create( model="glm-4", messages=[{"role": "user", "content": "Hi, who are you?"}] )
print(completion.choices[0].message.content)
|
通过 langchain 使用
依赖安装:
1
| pip install langchain_openai
|
跟上面的例子差不多,修改一下 base_url
和
model
以及 api_key
即可。
零一万物
[零一万物]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI( model="yi-large", temperature=0.3, max_tokens=200, api_key='your key', base_url="https://api.lingyiwanwu.com/v1" )
messages = [ SystemMessage(content="你是一名精通了 golang 的专家"), HumanMessage(content="写一个 golang 的 hello world 程序"), ]
response = chat.invoke(messages)
print(response.content)
|
OpenAI HK
[OpenAI HK]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI( model="gpt-3.5-turbo", temperature=0.3, max_tokens=200, api_key="your key", base_url="https://api.openai-hk.com/v1" )
messages = [ SystemMessage(content="你是一名精通了 golang 的专家"), HumanMessage(content="写一个 golang 的 hello world 程序"), ]
response = chat.invoke(messages)
print(response.content)
|
智谱清言
[智谱清言]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI( model="glm-4", temperature=0.3, max_tokens=200, api_key="your key", base_url='https://open.bigmodel.cn/api/paas/v4/' )
messages = [ SystemMessage(content="你是一名精通了 golang 的专家"), HumanMessage(content="写一个 golang 的 hello world 程序"), ]
response = chat.invoke(messages)
print(response.content)
|
环境变量指定 API KEY 以及
BASE URL
我们可以通过环境变量来指定 api_key
以及
base_url
,这样我们就不需要在代码中指定了。
1 2
| export OPENAI_API_KEY="your key" export OPENAI_BASE_URL="https://api.lingyiwanwu.com/v1"
|
这样我们就可以直接使用 langchain
来调用了,当然,传递给
ChatOpenAI
的 model
参数还是得指定的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatOpenAI( model="yi-large", temperature=0.3, max_tokens=200 )
messages = [ SystemMessage(content="你是一名精通了 golang 的专家"), HumanMessage(content="写一个 golang 的 hello world 程序"), ]
response = chat.invoke(messages)
print(response.content)
|
注意事项
- 截止到目前为止(
2024-07-15
),langchain
还在一个很频繁的更新阶段,所以可能会有一些 API 的变动,所以本文的一些
langchain
示例代码可能在未来会不可用。