gpt4free - 分散人工智能产业,只是一些语言模型 api 的......

Created at: 2023-03-30 01:00:43
Language: Python
License: GPL-3.0

请提供反馈,以便改进这个项目,
非常感谢形式:https://forms.gle/FeWV9RLEedfdkmFN6

248433934-7886223B-C1D1-4260-82AA-DA5741F303BB作者:@xtekky & 维护:@hlohaus

使用此存储库或与之相关的任何代码,即表示你同意法律声明。作者不对其他用户的任何复制、复刻、重新上传或与 GPT4Free 相关的任何其他内容负责。这是作者唯一的帐户和存储库。为防止冒充或不负责任的行为,请遵守此存储库使用的 GNU GPL 许可证。

[!注] Lastet 版本: PyPI 版本 Docker 版本
统计: 下载 下载

pip install -U g4f
docker pull hlohaus789/g4f

去做

根据调查,以下是即将到来的改进列表

  • [ ] 改进文档(在 g4f.mintlify.app 上)和做视频教程
  • [ ] 改进提供程序状态列表和更新
  • [ ] 关于如何反转站点以编写自己的包装器的教程(仅限 PoC、ofc)
  • [ ] 改进 Bing 包装器。(可能会在 golang 中编写一个新的包装器,因为它非常快)
  • [ ] 编写标准提供程序性能测试以提高稳定性
  • [ ] 更新存储库以包含新的 OpenAI 库语法(例如:类)
    Openai()
  • [ ] 本地模型的潜在支持和开发
  • [ ] 改进了兼容性和错误处理

🆕 最新消息

📚 目录

🛠️ 开始

Docker 容器

快速入门:
  1. 下载并安装 Docker
  2. 拉取最新映像并运行容器:
docker pull hlohaus789/g4f
docker run -p 8080:8080 -p 1337:1337 -p 7900:7900 --shm-size="2g" hlohaus789/g4f:latest
  1. 在以下位置打开包含的客户端: http://localhost:8080/chat/ 或将客户端中的 API 库设置为: http://localhost:1337/v1
  2. (可选)如果需要登录到提供程序,可以从此处的容器查看桌面:http://localhost:7900/?autoconnect=1&resize=scale&password=secret

使用 python 包

先决条件:
  1. 下载并安装 Python(建议使用 3.10+ 版本)。
  2. 为具有 webdriver 的提供商安装 Google Chrome
使用 pypi 安装:
pip install -U g4f
艺术
  1. 克隆 GitHub 存储库:
git clone https://github.com/xtekky/gpt4free.git
  1. 导航到项目目录:
cd gpt4free
  1. (推荐)创建 Python 虚拟环境: 你可以按照虚拟环境的 Python 官方文档进行操作。
python3 -m venv venv
  1. 激活虚拟环境:
    • 在 Windows 上:
    .\venv\Scripts\activate
    
    • 在 macOS 和 Linux 上:
    source venv/bin/activate
    
  2. 从以下位置安装所需的 Python 包:
    requirements.txt
pip install -r requirements.txt
  1. 在根文件夹中创建一个文件并开始使用存储库,进一步的说明如下
    test.py
import g4f
...

面向开发人员的 Docker

如果安装了 Docker,则可以轻松设置和运行项目,而无需手动安装依赖项。

  1. 首先,确保你同时安装了 Docker 和 Docker Compose。

  2. 克隆 GitHub 存储库:

git clone https://github.com/xtekky/gpt4free.git
  1. 导航到项目目录:
cd gpt4free
  1. 构建 Docker 映像:
docker pull selenium/node-chrome
docker-compose build
  1. 使用 Docker Compose 启动服务:
docker-compose up

你的服务器现在将在 上运行。你可以像往常一样与 API 交互或运行测试。

http://localhost:1337

若要停止 Docker 容器,只需运行:

docker-compose down

[!注意] 使用 Docker 时,由于文件中的卷映射,你对本地文件所做的任何更改都将反映在 Docker 容器中。但是,如果添加或删除依赖项,则需要使用 .

docker-compose.yml
docker-compose build

💡 用法

Web 用户界面

若要在 Web 界面中使用它,请在命令行中键入以下代码。

from g4f.gui import run_gui
run_gui()

包装
g4f

聊天完成

import g4f

g4f.debug.logging = True  # Enable debug logging
g4f.debug.version_check = False  # Disable automatic version checking
print(g4f.Provider.Bing.params)  # Print supported args for Bing

# Using automatic a provider for the given model
## Streamed completion
response = g4f.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello"}],
    stream=True,
)
for message in response:
    print(message, flush=True, end='')

## Normal response
response = g4f.ChatCompletion.create(
    model=g4f.models.gpt_4,
    messages=[{"role": "user", "content": "Hello"}],
)  # Alternative model setting

print(response)
完成
import g4f

allowed_models = [
    'code-davinci-002',
    'text-ada-001',
    'text-babbage-001',
    'text-curie-001',
    'text-davinci-002',
    'text-davinci-003'
]

response = g4f.Completion.create(
    model='text-davinci-003',
    prompt='say this is a test'
)

print(response)
供应商
import g4f

# Print all available providers
print([
    provider.__name__
    for provider in g4f.Provider.__providers__
    if provider.working
])

# Execute with a specific provider
response = g4f.ChatCompletion.create(
    model="gpt-3.5-turbo",
    provider=g4f.Provider.Aichat,
    messages=[{"role": "user", "content": "Hello"}],
    stream=True,
)
for message in response:
    print(message)
使用浏览器

一些提供商使用浏览器绕过机器人保护。他们使用 selenium webdriver 来控制浏览器。浏览器设置和登录数据保存在自定义目录中。如果启用了无外设模式,则浏览器窗口将以不可见的方式加载。出于性能原因,建议重用浏览器实例,并在最后自行关闭它们:

import g4f
from undetected_chromedriver import Chrome, ChromeOptions
from g4f.Provider import (
    Bard,
    Poe,
    AItianhuSpace,
    MyShell,
    PerplexityAi,
)

options = ChromeOptions()
options.add_argument("--incognito");
webdriver = Chrome(options=options, headless=True)
for idx in range(10):
    response = g4f.ChatCompletion.create(
        model=g4f.models.default,
        provider=g4f.Provider.MyShell,
        messages=[{"role": "user", "content": "Suggest me a name."}],
        webdriver=webdriver
    )
    print(f"{idx}:", response)
webdriver.quit()
异步支持

若要提高速度和整体性能,请异步执行提供程序。总执行时间将由最慢提供程序执行的持续时间决定。

import g4f
import asyncio

_providers = [
    g4f.Provider.Aichat,
    g4f.Provider.ChatBase,
    g4f.Provider.Bing,
    g4f.Provider.GptGo,
    g4f.Provider.You,
    g4f.Provider.Yqcloud,
]

async def run_provider(provider: g4f.Provider.BaseProvider):
    try:
        response = await g4f.ChatCompletion.create_async(
            model=g4f.models.default,
            messages=[{"role": "user", "content": "Hello"}],
            provider=provider,
        )
        print(f"{provider.__name__}:", response)
    except Exception as e:
        print(f"{provider.__name__}:", e)
        
async def run_all():
    calls = [
        run_provider(provider) for provider in _providers
    ]
    await asyncio.gather(*calls)

asyncio.run(run_all())
代理和超时支持

所有提供程序都支持在创建函数中指定代理和增加超时。

import g4f

response = g4f.ChatCompletion.create(
    model=g4f.models.default,
    messages=[{"role": "user", "content": "Hello"}],
    proxy="http://host:port",
    # or socks5://user:pass@host:port
    timeout=120,  # in secs
)

print(f"Result:", response)

你还可以通过环境变量全局设置代理:

export G4F_PROXY="http://host:port"

干扰 openai-proxy API(与 openai python 包一起使用)

从 PyPi 包运行干扰 API

from g4f.api import run_api

run_api()

从 repo 运行干扰 API

如果要使用嵌入功能,则需要获取 Hugging Face 令牌。你可以在 Hugging Face Tokens 获得一个。确保你的角色设置为写入。如果你有令牌,只需使用它而不是 OpenAI API 密钥即可。

运行服务器:

g4f api

python -m g4f.api.run
from openai import OpenAI

client = OpenAI(
    # Set your Hugging Face token as the API key if you use embeddings
    api_key="YOUR_HUGGING_FACE_TOKEN",

    # Set the API base URL if needed, e.g., for a local development environment
    base_url="http://localhost:1337/v1"
)


def main():
    chat_completion = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": "write a poem about a tree"}],
        stream=True,
    )

    if isinstance(chat_completion, dict):
        # Not streaming
        print(chat_completion.choices[0].message.content)
    else:
        # Streaming
        for token in chat_completion:
            content = token.choices[0].delta.content
            if content is not None:
                print(content, end="", flush=True)


if __name__ == "__main__":
    main()

🚀 提供程序和模型

GPT-4型

网站 供应商 GPT-3.5型 GPT-4型 地位 认证
bing.com
g4f.Provider.Bing
✔️ ✔️ 积极
chat.geekgpt.org
g4f.Provider.GeekGpt
✔️ ✔️ ✔️ 未知
gptchatly.com
g4f.Provider.GptChatly
✔️ ✔️ 未知
liaobots.site
g4f.Provider.Liaobots
✔️ ✔️ ✔️ 未知
www.phind.com
g4f.Provider.Phind
✔️ ✔️ 未知
raycast.com
g4f.Provider.Raycast
✔️ ✔️ ✔️ 未知 ✔️

GPT-3.5型

网站 供应商 GPT-3.5型 GPT-4型 地位 认证
www.aitianhu.com
g4f.Provider.AItianhu
✔️ ✔️ 未知
chat3.aiyunos.top
g4f.Provider.AItianhuSpace
✔️ ✔️ 未知
e.aiask.me
g4f.Provider.AiAsk
✔️ ✔️ 未知
chat-gpt.org
g4f.Provider.Aichat
✔️ 未知
www.chatbase.co
g4f.Provider.ChatBase
✔️ ✔️ 积极
chatforai.store
g4f.Provider.ChatForAi
✔️ ✔️ 未知
chatgpt.ai
g4f.Provider.ChatgptAi
✔️ ✔️ 积极
chatgptx.de
g4f.Provider.ChatgptX
✔️ ✔️ 未知
chat-shared2.zhile.io
g4f.Provider.FakeGpt
✔️ ✔️ 积极
freegpts1.aifree.site
g4f.Provider.FreeGpt
✔️ ✔️ 积极
gptalk.net
g4f.Provider.GPTalk
✔️ ✔️ 积极
ai18.gptforlove.com
g4f.Provider.GptForLove
✔️ ✔️ 积极
gptgo.ai
g4f.Provider.GptGo
✔️ ✔️ 积极
hashnode.com
g4f.Provider.Hashnode
✔️ ✔️ 积极
app.myshell.ai
g4f.Provider.MyShell
✔️ ✔️ 未知
noowai.com
g4f.Provider.NoowAi
✔️ ✔️ 未知
chat.openai.com
g4f.Provider.OpenaiChat
✔️ ✔️ 未知 ✔️
theb.ai
g4f.Provider.Theb
✔️ ✔️ 未知 ✔️
sdk.vercel.ai
g4f.Provider.Vercel
✔️ ✔️ 未知
you.com
g4f.Provider.You
✔️ ✔️ 积极
chat9.yqcloud.top
g4f.Provider.Yqcloud
✔️ ✔️ 未知
chat.acytoo.com
g4f.Provider.Acytoo
✔️ ✔️ 无效
aibn.cc
g4f.Provider.Aibn
✔️ ✔️ 无效
ai.ls
g4f.Provider.Ails
✔️ ✔️ 无效
chatgpt4online.org
g4f.Provider.Chatgpt4Online
✔️ ✔️ 无效
chat.chatgptdemo.net
g4f.Provider.ChatgptDemo
✔️ ✔️ 无效
chatgptduo.com
g4f.Provider.ChatgptDuo
✔️ 无效
chatgptfree.ai
g4f.Provider.ChatgptFree
✔️ 无效
chatgptlogin.ai
g4f.Provider.ChatgptLogin
✔️ ✔️ 无效
cromicle.top
g4f.Provider.Cromicle
✔️ ✔️ 无效
gptgod.site
g4f.Provider.GptGod
✔️ ✔️ 无效
opchatgpts.net
g4f.Provider.Opchatgpts
✔️ ✔️ 无效
chat.ylokh.xyz
g4f.Provider.Ylokh
✔️ ✔️ 无效

其他

网站 供应商 GPT-3.5型 GPT-4型 地位 认证
bard.google.com
g4f.Provider.Bard
未知 ✔️
deepinfra.com
g4f.Provider.DeepInfra
✔️ 积极
huggingface.co
g4f.Provider.HuggingChat
✔️ 积极 ✔️
www.llama2.ai
g4f.Provider.Llama2
✔️ 未知
open-assistant.io
g4f.Provider.OpenAssistant
✔️ 无效 ✔️

模型

基本提供程序 供应商 网站
手掌 谷歌 G4F的。提供商.Bard bard.google.com
H2OGPT-GM-OASST1-EN-2048-FALCON-7B-V3 拥抱的脸 G4F的。提供商.H2o www.h2o.ai
H2OGPT-GM-OASST1-EN-2048-FALCON-40B-V1 拥抱的脸 G4F的。提供商.H2o www.h2o.ai
H2OGPT-GM-OASST1-EN-2048-开放式-llama-13b 拥抱的脸 G4F的。提供商.H2o www.h2o.ai
克劳德即时-v1 人类学 G4F的。提供商.Vercel sdk.vercel.ai
克劳德-V1 人类学 G4F的。提供商.Vercel sdk.vercel.ai
克劳德-V2 人类学 G4F的。提供商.Vercel sdk.vercel.ai
命令-light-nightly 凝聚 G4F的。提供商.Vercel sdk.vercel.ai
命令-每晚 凝聚 G4F的。提供商.Vercel sdk.vercel.ai
GPT-NEOX-20B型 拥抱的脸 G4F的。提供商.Vercel sdk.vercel.ai
OASST-SFT-1-Pythia-12B 拥抱的脸 G4F的。提供商.Vercel sdk.vercel.ai
OASST-SFT-4-Pythia-12B-纪元-3.5 拥抱的脸 G4F的。提供商.Vercel sdk.vercel.ai
圣诞编码器 拥抱的脸 G4F的。提供商.Vercel sdk.vercel.ai
绽放 拥抱的脸 G4F的。提供商.Vercel sdk.vercel.ai
法兰-T5-XXL 拥抱的脸 G4F的。提供商.Vercel sdk.vercel.ai
代码-DAVINCI-002 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
GPT-3.5-涡轮增压-16K OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
GPT-3.5-涡轮增压-16K-0613 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
GPT-4-0613型 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
文本-ada-001 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
文本-babbage-001 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
文本居里-001 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
文本-DAVINCI-002 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
文本-DAVINCI-003 OpenAI的 G4F的。提供商.Vercel sdk.vercel.ai
llama13b-v2-聊天 复制 G4F的。提供商.Vercel sdk.vercel.ai
llama7b-v2-聊天 复制 G4F的。提供商.Vercel sdk.vercel.ai

🔗 相关 GPT4Free 项目

🎁 项目 ⭐ 星星 📚 叉 🛎 问题 📬 拉取请求
GPT4自由 星星 叉 问题 拉取请求
GPT4自由-TS 星星 叉 问题 拉取请求
免费的AI API和潜在供应商名单 星星 叉 问题 拉取请求
ChatGPT-克隆 星星 叉 问题 拉取请求
ChatGpt Discord 机器人 星星 叉 问题 拉取请求
Nyx-Bot (不和谐) 星星 叉 问题 拉取请求
LangChain gpt4免费 星星 叉 问题 拉取请求
ChatGpt 电报机器人 星星 叉 问题 拉取请求
ChatGpt 线路机器人 星星 叉 问题 拉取请求
Action 翻译自述文件 星星 叉 问题 拉取请求
Langchain文档GPT 星星 叉 问题 拉取请求

🤝 贡献

使用 AI 工具创建提供商

在终端中调用脚本:

create_provider.py

python etc/tool/create_provider.py
  1. 输入新提供商的名称。
  2. 从浏览器开发人员工具中复制并粘贴命令。
    cURL
  3. 让 AI 为你创建提供程序。
  4. 根据你的需要自定义提供程序。

创建提供程序

  1. 查看当前的潜在供应商列表,或查找你自己的供应商来源!
  2. g4f/Provider 中创建一个包含 Provider 名称的新文件
  3. 实现扩展 BaseProvider 的类。
from __future__ import annotations

from ..typing import AsyncResult, Messages
from .base_provider import AsyncGeneratorProvider

class HogeService(AsyncGeneratorProvider):
    url                   = "https://chat-gpt.com"
    working               = True
    supports_gpt_35_turbo = True

    @classmethod
    async def create_async_generator(
        cls,
        model: str,
        messages: Messages,
        proxy: str = None,
        **kwargs
    ) -> AsyncResult:
        yield ""
  1. 在这里,你可以调整设置,例如,如果网站确实支持流媒体,则设置为...
    supports_stream
    True
  2. 编写代码来请求提供程序和响应,即使它是一次性响应,也不要犹豫,查看其他提供程序以获取灵感
    create_async_generator
    yield
  3. g4f/provider/__init__.py 中添加提供程序名称
from .HogeService import HogeService

__all__ = [
  HogeService,
]
  1. 你已完成 !,通过调用它来测试提供程序:
import g4f

response = g4f.ChatCompletion.create(model='gpt-3.5-turbo', provider=g4f.Provider.PROVIDERNAME,
                                    messages=[{"role": "user", "content": "test"}], stream=g4f.Provider.PROVIDERNAME.supports_stream)

for message in response:
    print(message, flush=True, end='')

🙌 贡献

贡献者列表可在此处
获得 Vercel.py 文件包含来自 @ading2210vercel-llm-api 的代码,该代码在 GNU GPL v3
下获得许可 Top 1 贡献者:@hlohaus

©️ 版权

该程序在 GNU GPL v3 下获得许可

xtekky/gpt4free: Copyright (C) 2023 xtekky

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

⭐ 明星历史

星史图

📄 许可证


本项目采用 GNU_GPL_v3.0 许可。

(🔼 返回页首)