ChatGPT_Academic|ChatGPT多功能拓展

ChatGPT_Academic是一款科研工作专用的ChatGPT拓展插件,支持函数插件、自动润色、中英互译、代码解释、程序剖析、PDF和Word文献总结翻译、Tex公式、自我解析报告和源代码生成。

ChatGPT_Academic|ChatGPT多功能拓展插件安装教程

科研工作专用ChatGPT拓展,特别优化学术Paper润色体验,支持自定义快捷按钮,支持自定义函数插件,支持markdown表格显示,Tex公式双显示,代码显示功能完善,新增本地Python/C++/Go项目树剖析功能/项目源代码自译解能力,新增PDF和Word文献批量总结功能/PDF论文全文翻译功能。

Note

  • 请注意只有“红颜色”标识的函数插件(按钮)才支持读取文件。目前对PDFWord格式文件的支持插件正在逐步完善中,需要更多developer的帮助。
  • 本项目中每个文件的功能都在自译解self_analysis.md详细说明。随着版本的迭代,您也可以随时自行点击相关函数插件,调用GPT重新生成项目的自我解析报告。
  • 如果您不太习惯部分中文命名的函数、注释或者界面,您可以随时点击相关函数插件,调用ChatGPT一键生成纯英文的项目源代码。
  • 项目使用OpenAI的GPT-3.5-Turbo模型,期待GPT-4早点放宽门槛。
功能描述
一键润色支持一键润色、一键查找论文语法错误
一键中英互译一键中英互译
一键代码解释可以正确显示代码、解释代码
自定义快捷键支持自定义快捷键
配置代理服务器支持配置代理服务器
模块化设计支持自定义高阶的实验性功能与[函数插件],插件支持热更新
自我程序剖析[函数插件] 一键读懂本项目的源代码
程序剖析[函数插件] 一键可以剖析其他Python/C/C++/Java项目树
读论文[函数插件] 一键解读latex论文全文并生成摘要
批量注释生成[函数插件] 一键批量生成函数注释
chat分析报告生成[函数插件] 运行后自动生成总结汇报
arxiv小助手[函数插件] 输入arxiv文章url即可一键翻译摘要+下载PDF
PDF论文全文翻译功能[函数插件] PDF论文提取题目&摘要+翻译全文(多线程)
谷歌学术统合小助手 
(Version>=2.45)
[函数插件] 给定任意谷歌学术搜索页面URL,让GPT帮你选择有趣的文章
公式显示可以同时显示公式的tex形式和渲染形式
图片显示可以在markdown中显示图片
多线程函数插件支持支持多线调用chatgpt,一键处理海量文本或程序
支持GPT输出的markdown表格可以输出支持GPT的markdown表格
启动暗色gradio主题在浏览器url后面添加/?__dark-theme=true可以切换dark主题
…………
功能描述表

界面展示

自定义

所有按钮都通过读取functional.py动态生成,可随意加自定义功能,解放粘贴板。

ChatGPT_Academic|ChatGPT多功能拓展

润色

包含纠错功能

ChatGPT_Academic|ChatGPT多功能拓展

Markdown

支持GPT输出的markdown表格

ChatGPT_Academic|ChatGPT多功能拓展

公式

如果输出包含公式,会同时以tex形式和渲染形式显示,方便复制和阅读。

ChatGPT_Academic|ChatGPT多功能拓展

代码分析

懒得看项目代码?直接使用chatgpt_academic进行代码分析。

ChatGPT_Academic|ChatGPT多功能拓展

GitHub

项目开源地址:binary-husky/chatgpt_academic

部署教程

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放chatgpt_academic的相关文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki。

1.检测D盘是否在openai.wiki,没有则创建该文件夹。

if not exist D:\openai.wiki mkdir D:\openai.wiki

2.拉取Github仓库文件夹,将下载至openai.wiki文件夹。

git clone https://github.com/binary-husky/chatgpt_academic.git

注意:如果您无法完成第2步,执行后报错或者无法下载,可以下载该文件将其解压至D:\openai.wiki即可。

chatgpt_academic-master

提取密码 文件说明 文件大小 23.3MB 文件格式 ZIP 资源价格 免费 下载次数 1

3.强制切换工作路径为D盘的openai.wiki\chatgpt_academic文件夹。

cd /d D:\openai.wiki\chatgpt_academic

配置API_KEY和代理设置

相关描述

在配置Config相关内容之前,我们应该先新建一个名为config_private.py的配置文件,不需要直接修改项目内的config.py文件。因为该项目会优先读取config_private.py文件,如果config_private.py不存在才会读取config.py文件。这样做的目的是可以让config_private.py不受git管控,更加安全。

config_private.py中,需要配置海外ProxyOpenAI API KEY

  • 海外Proxy
    • 关于此部分内容较为敏感,请自行搜索。本站所使用的魔法工具端口为7890,如果您使用的工具是Cl**h可直接与本站设置相同,将Proxy设置为默认的7890即可。
  • OpenAI API KEY

配置说明

⚠️警告:魔法地区必须设置为欧美地区,否则即便可以正常使用,也极有可能会存在封号的危险。

以下是本站的config_private.py文件夹内容,本站仅修改了3行内容,请根据自身情况修改。

  • 第2行
    • 您自行获取到的OpenAI API KEY
  • 第5行
    • 是否使用魔法?我们将其设置为True
  • 第16和17行
    • 可能有些人不知道自己的魔法工具是链接方式是哪一种协议,但这不重要,我们将这两行的端口都进行修改即可。
# [step 1]>> 例如: API_KEY = "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" (此key无效)
API_KEY = "sk-vl82***yHOx4l***pwSOT3Blb***JBEBlJ***FZ80CZP***S"

# [step 2]>> 改为True应用代理,如果直接在海外服务器部署,此处不修改
USE_PROXY = True
if USE_PROXY:
    # 填写格式是 [协议]://  [地址] :[端口],填写之前不要忘记把USE_PROXY改成True,如果直接在海外服务器部署,此处不修改
    # 例如    "socks5h://localhost:11284"
    # [协议] 常见协议无非socks5h/http; 例如 v2**y 和 ss* 的默认本地协议是socks5h; 而cl**h 的默认本地协议是http
    # [地址] 懂的都懂,不懂就填localhost或者127.0.0.1肯定错不了(localhost意思是代理软件安装在本机上)
    # [端口] 在代理软件的设置里找。虽然不同的代理软件界面不一样,但端口号都应该在最显眼的位置上

    # 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284)
    proxies = {
        #          [协议]://  [地址]  :[端口]
        "http":  "socks5h://localhost:7890",
        "https": "socks5h://localhost:7890",
    }
else:
    proxies = None


# [step 3]>> 以下配置可以优化体验,但大部分场合下并不需要修改
# 对话窗的高度
CHATBOT_HEIGHT = 1115

# 代码高亮
CODE_HIGHLIGHT = True

# 窗口布局
LAYOUT = "LEFT-RIGHT"  # "LEFT-RIGHT"(左右布局) # "TOP-DOWN"(上下布局)

# 发送请求到OpenAI后,等待多久判定为超时
TIMEOUT_SECONDS = 25

# 网页的端口, -1代表随机端口
WEB_PORT = -1

# 如果OpenAI不响应(网络卡顿、代理失败、KEY失效),重试的次数限制
MAX_RETRY = 2

# OpenAI模型选择是(gpt4现在只对申请成功的人开放)
LLM_MODEL = "gpt-3.5-turbo"

# OpenAI的API_URL
API_URL = "https://api.openai.com/v1/chat/completions"

# 设置并行使用的线程数
CONCURRENT_COUNT = 100

# 设置用户名和密码(相关功能不稳定,与gradio版本和网络都相关,如果本地使用不建议加这个)
# [("username", "password"), ("username2", "password2"), ...]
AUTHENTICATION = []

环境安装

为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda create -p D:\openai.wiki\chatgpt_academic\ENV python=3.11

执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?提示,我们直接按下回车即可。

初始化Conda环境,避免后续可能报错。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate D:\openai.wiki\chatgpt_academic\ENV

为避免出现问题,我们再次强制切换至chatgpt_academic的项目路径,确保一切可以正常安装。

cd /d D:\openai.wiki\chatgpt_academic

注意:执行此步骤时尽量不要修改源文件,因为官方源或清华大学源可能导致安装失败,如果您看不懂我在说什么,那么直接执行如下命令即可。

python -m pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

一般来说,不会出现任何问题,直接等待自动安装完成即可。

魔法测试

为了检测您的魔法设置是否正确,可以执行如下代码。如果执行该代码后能够得到正确显示您的魔法地区位置,那么则代表您的魔法设置成功。

python check_proxy.py

本站执行代码后得到的返回结果如下(已删除相关敏感信息):

(D:\openai.wiki\chatgpt_academic\ENV) D:\openai.wiki\chatgpt_academic>python check_proxy.py
[PROXY]...
呆梨配置 so***5h://localhost:7890, 呆梨所在地:Netherlands(荷兰)

启动教程

以后您每次重启电脑或脚本,都需要先按顺序执行以下操作才能够正常使用。

执行如下代码,强制进入chatgpt_academic的项目目录。

cd /d D:\openai.wiki\chatgpt_academic

执行如下代码,激活chatgpt_academic的Conda环境。

conda activate D:\openai.wiki\chatgpt_academic\ENV

执行如下代码,启动chatgpt_academic的WebUI界面。

python main.py

使用教程

在我们执行完成启动UI界面的命令之后,脚本将会自动打开您的浏览器,并且在浏览器内自动打开网址http://localhost:2835/?__dark-theme=true,也就是暗色模式的WebUI界面。

ChatGPT_Academic|ChatGPT多功能拓展

同时我们在CMD窗口内还会看到一些其它信息,可能与您的略有不同。

(D:\openai.wiki\chatgpt_academic\ENV) D:\openai.wiki\chatgpt_academic>python main.py
[PROXY] 网络代理状态:已配置。配置信息如下: {'http': 'socks5h://localhost:7890', 'https': 'socks5h://localhost:7890'}
[API_KEY] 您的 API_KEY 是: sk-rW3npC0vwff2*** API_KEY 导入成功
所有问询记录将自动保存在本地目录./gpt_log/chat_secrets.log, 请注意自我隐私保护哦!
查询代理的地理位置,返回的结果是{'error': True, 'reason': 'RateLimited', 'message': 'Visit https://ipapi.co/ratelimited/ for details'}
呆梨配置 so***5h://localhost:7890, 呆梨所在地:Netherlands
如果浏览器没有自动打开,请复制并转到以下URL:
        (亮色主题): http://localhost:2835
        (暗色主题): http://localhost:2835/?__dark-theme=true
Running on local URL:  http://0.0.0.0:2835
Running on public URL: https://3116c7f02626c1ef0e.gradio.live

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces

根据上面的内容,有用的信息如下:

  • 亮色模式的网址为:http://localhost:2835
  • 暗色模式的网址为:http://localhost:2835/?__dark-theme=true
  • 本地运行的IP地址为localhost,也就是127.0.0.1
  • 局域网的IP6地址为:https://3116c7f02626c1ef0e.gradio.live,各位请注意,这是本站的IP6地址,您的IP6地址肯定与本站所提供的不一致,所以您的局域网IP地址请自行获取。关于这一部分有什么作用呢?那就是您可以不局限于此电脑内使用该项目,您连接自己WIFI的任何设备都可以打开该地址使用chatgpt_academic的相关功能,哪怕躺在床上用手机控制chatgpt_academic,非常方便。
  • 注意:最后一行的内容为This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces,翻译成中文为此共享链接将在 72 小时后过期。 如需免费永久托管和 GPU 升级(新!),请查看 Spaces:https://huggingface.co/spaces。也就是说,如果您持续运行时间达到72小时,局域网内的其它设备将无法正常访问,我们届时重启一下chatgpt_academic的启动脚本即可,其时这是无关仅要的,因为一般很少有人会持续运行三天。

功能测试

我们可以使用一个案例来尝试该项目能否正常运行,也就是您检测的海外ProxyOpenAI API KEY配置是否正确。

我们在输入区填写以下内容,然后点击解析整个Python项目按钮,尝试是否能够正常运行。

注意:输入区必须填写绝对路径,否则会报错。所以您的路径如果与本站不一致,请自行修改。

D:/openai.wiki/chatgpt_academic/crazy_functions/test_project/python/dqn

关于示例dqn.py的源码内容如下,可自行参考分析结果是否正确:

from typing import Any, Dict, List, Optional, Tuple, Type, Union

import gym
import numpy as np
import torch as th
from torch.nn import functional as F

from stable_baselines3.common import logger
from stable_baselines3.common.off_policy_algorithm import OffPolicyAlgorithm
from stable_baselines3.common.preprocessing import maybe_transpose
from stable_baselines3.common.type_aliases import GymEnv, MaybeCallback, Schedule
from stable_baselines3.common.utils import get_linear_fn, is_vectorized_observation, polyak_update
from stable_baselines3.dqn.policies import DQNPolicy


class DQN(OffPolicyAlgorithm):
    """
    Deep Q-Network (DQN)

    Paper: https://arxiv.org/abs/1312.5602, https://www.nature.com/articles/nature14236
    Default hyperparameters are taken from the nature paper,
    except for the optimizer and learning rate that were taken from Stable Baselines defaults.

    :param policy: The policy model to use (MlpPolicy, CnnPolicy, ...)
    :param env: The environment to learn from (if registered in Gym, can be str)
    :param learning_rate: The learning rate, it can be a function
        of the current progress remaining (from 1 to 0)
    :param buffer_size: size of the replay buffer
    :param learning_starts: how many steps of the model to collect transitions for before learning starts
    :param batch_size: Minibatch size for each gradient update
    :param tau: the soft update coefficient ("Polyak update", between 0 and 1) default 1 for hard update
    :param gamma: the discount factor
    :param train_freq: Update the model every ``train_freq`` steps. Alternatively pass a tuple of frequency and unit
        like ``(5, "step")`` or ``(2, "episode")``.
    :param gradient_steps: How many gradient steps to do after each rollout (see ``train_freq``)
        Set to ``-1`` means to do as many gradient steps as steps done in the environment
        during the rollout.
    :param optimize_memory_usage: Enable a memory efficient variant of the replay buffer
        at a cost of more complexity.
        See https://github.com/DLR-RM/stable-baselines3/issues/37#issuecomment-637501195
    :param target_update_interval: update the target network every ``target_update_interval``
        environment steps.
    :param exploration_fraction: fraction of entire training period over which the exploration rate is reduced
    :param exploration_initial_eps: initial value of random action probability
    :param exploration_final_eps: final value of random action probability
    :param max_grad_norm: The maximum value for the gradient clipping
    :param tensorboard_log: the log location for tensorboard (if None, no logging)
    :param create_eval_env: Whether to create a second environment that will be
        used for evaluating the agent periodically. (Only available when passing string for the environment)
    :param policy_kwargs: additional arguments to be passed to the policy on creation
    :param verbose: the verbosity level: 0 no output, 1 info, 2 debug
    :param seed: Seed for the pseudo random generators
    :param device: Device (cpu, cuda, ...) on which the code should be run.
        Setting it to auto, the code will be run on the GPU if possible.
    :param _init_setup_model: Whether or not to build the network at the creation of the instance
    """

    def __init__(
        self,
        policy: Union[str, Type[DQNPolicy]],
        env: Union[GymEnv, str],
        learning_rate: Union[float, Schedule] = 1e-4,
        buffer_size: int = 1000000,
        learning_starts: int = 50000,
        batch_size: Optional[int] = 32,
        tau: float = 1.0,
        gamma: float = 0.99,
        train_freq: Union[int, Tuple[int, str]] = 4,
        gradient_steps: int = 1,
        optimize_memory_usage: bool = False,
        target_update_interval: int = 10000,
        exploration_fraction: float = 0.1,
        exploration_initial_eps: float = 1.0,
        exploration_final_eps: float = 0.05,
        max_grad_norm: float = 10,
        tensorboard_log: Optional[str] = None,
        create_eval_env: bool = False,
        policy_kwargs: Optional[Dict[str, Any]] = None,
        verbose: int = 0,
        seed: Optional[int] = None,
        device: Union[th.device, str] = "auto",
        _init_setup_model: bool = True,
    ):

        super(DQN, self).__init__(
            policy,
            env,
            DQNPolicy,
            learning_rate,
            buffer_size,
            learning_starts,
            batch_size,
            tau,
            gamma,
            train_freq,
            gradient_steps,
            action_noise=None,  # No action noise
            policy_kwargs=policy_kwargs,
            tensorboard_log=tensorboard_log,
            verbose=verbose,
            device=device,
            create_eval_env=create_eval_env,
            seed=seed,
            sde_support=False,
            optimize_memory_usage=optimize_memory_usage,
            supported_action_spaces=(gym.spaces.Discrete,),
        )

        self.exploration_initial_eps = exploration_initial_eps
        self.exploration_final_eps = exploration_final_eps
        self.exploration_fraction = exploration_fraction
        self.target_update_interval = target_update_interval
        self.max_grad_norm = max_grad_norm
        # "epsilon" for the epsilon-greedy exploration
        self.exploration_rate = 0.0
        # Linear schedule will be defined in `_setup_model()`
        self.exploration_schedule = None
        self.q_net, self.q_net_target = None, None

        if _init_setup_model:
            self._setup_model()

    def _setup_model(self) -> None:
        super(DQN, self)._setup_model()
        self._create_aliases()
        self.exploration_schedule = get_linear_fn(
            self.exploration_initial_eps, self.exploration_final_eps, self.exploration_fraction
        )

    def _create_aliases(self) -> None:
        self.q_net = self.policy.q_net
        self.q_net_target = self.policy.q_net_target

    def _on_step(self) -> None:
        """
        Update the exploration rate and target network if needed.
        This method is called in ``collect_rollouts()`` after each step in the environment.
        """
        if self.num_timesteps % self.target_update_interval == 0:
            polyak_update(self.q_net.parameters(), self.q_net_target.parameters(), self.tau)

        self.exploration_rate = self.exploration_schedule(self._current_progress_remaining)
        logger.record("rollout/exploration rate", self.exploration_rate)

    def train(self, gradient_steps: int, batch_size: int = 100) -> None:
        # Update learning rate according to schedule
        self._update_learning_rate(self.policy.optimizer)

        losses = []
        for _ in range(gradient_steps):
            # Sample replay buffer
            replay_data = self.replay_buffer.sample(batch_size, env=self._vec_normalize_env)

            with th.no_grad():
                # Compute the next Q-values using the target network
                next_q_values = self.q_net_target(replay_data.next_observations)
                # Follow greedy policy: use the one with the highest value
                next_q_values, _ = next_q_values.max(dim=1)
                # Avoid potential broadcast issue
                next_q_values = next_q_values.reshape(-1, 1)
                # 1-step TD target
                target_q_values = replay_data.rewards + (1 - replay_data.dones) * self.gamma * next_q_values

            # Get current Q-values estimates
            current_q_values = self.q_net(replay_data.observations)

            # Retrieve the q-values for the actions from the replay buffer
            current_q_values = th.gather(current_q_values, dim=1, index=replay_data.actions.long())

            # Compute Huber loss (less sensitive to outliers)
            loss = F.smooth_l1_loss(current_q_values, target_q_values)
            losses.append(loss.item())

            # Optimize the policy
            self.policy.optimizer.zero_grad()
            loss.backward()
            # Clip gradient norm
            th.nn.utils.clip_grad_norm_(self.policy.parameters(), self.max_grad_norm)
            self.policy.optimizer.step()

        # Increase update counter
        self._n_updates += gradient_steps

        logger.record("train/n_updates", self._n_updates, exclude="tensorboard")
        logger.record("train/loss", np.mean(losses))

    def predict(
        self,
        observation: np.ndarray,
        state: Optional[np.ndarray] = None,
        mask: Optional[np.ndarray] = None,
        deterministic: bool = False,
    ) -> Tuple[np.ndarray, Optional[np.ndarray]]:
        """
        Overrides the base_class predict function to include epsilon-greedy exploration.

        :param observation: the input observation
        :param state: The last states (can be None, used in recurrent policies)
        :param mask: The last masks (can be None, used in recurrent policies)
        :param deterministic: Whether or not to return deterministic actions.
        :return: the model's action and the next state
            (used in recurrent policies)
        """
        if not deterministic and np.random.rand() < self.exploration_rate:
            if is_vectorized_observation(maybe_transpose(observation, self.observation_space), self.observation_space):
                n_batch = observation.shape[0]
                action = np.array([self.action_space.sample() for _ in range(n_batch)])
            else:
                action = np.array(self.action_space.sample())
        else:
            action, state = self.policy.predict(observation, state, mask, deterministic)
        return action, state

    def learn(
        self,
        total_timesteps: int,
        callback: MaybeCallback = None,
        log_interval: int = 4,
        eval_env: Optional[GymEnv] = None,
        eval_freq: int = -1,
        n_eval_episodes: int = 5,
        tb_log_name: str = "DQN",
        eval_log_path: Optional[str] = None,
        reset_num_timesteps: bool = True,
    ) -> OffPolicyAlgorithm:

        return super(DQN, self).learn(
            total_timesteps=total_timesteps,
            callback=callback,
            log_interval=log_interval,
            eval_env=eval_env,
            eval_freq=eval_freq,
            n_eval_episodes=n_eval_episodes,
            tb_log_name=tb_log_name,
            eval_log_path=eval_log_path,
            reset_num_timesteps=reset_num_timesteps,
        )

    def _excluded_save_params(self) -> List[str]:
        return super(DQN, self)._excluded_save_params() + ["q_net", "q_net_target"]

    def _get_torch_save_params(self) -> Tuple[List[str], List[str]]:
        state_dicts = ["policy", "policy.optimizer"]

        return state_dicts, []

配置正确

如果一切配置正常,那么将会得到如下结果,如图所示:

ChatGPT_Academic|ChatGPT多功能拓展

完整文本内容将会被自动保存至D:\openai.wiki\chatgpt_academic\gpt_log\chatGPT分析报告2023-04-09-12-41-53.md,打开之后的完整内容如下:

# chatGPT 分析报告
## 接下来请你逐文件分析下面的工程[0/3] 请对下面的程序文件做一个概述: D:\openai.wiki\chatgpt_academic\crazy_functions\test_project\python\dqn\dqn.py

该文件是实现了深度Q网络(Deep Q-Network, DQN)的算法,在Stable-Baselines3框架下实现,该框架是OpenAI的一份强化学习库,可以用来构建,训练和评估强化学习算法。

该文件实现了一个继承自OffPolicyAlgorithm的DQN类。DQN类的构造器根据传入的参数构建DQN算法的模型,包括policy、环境env、学习率learning_rate、缓存区大小buffer_size、起始步长learning_starts、随机梯度下降小批量batch_size等参数。

该文件实现了针对Q-learning算法的一些改进,包括目标函数的稳定化和经验回放等,其中目标网络与当前网络相互独立,缓存区中储存了智能体的历史经验序列,策略通过学习缓存区中的样本经验更新。

其中_collect_rollouts()函数中实现了在环境中收集数据至缓存区,train()函数中实现了网络的训练和更新,predict()函数中实现了针对当前状态的Q值选择动作的逐步贪心策略。该DQN算法继承了Stable-Baselines3的OffPolicyAlgorithm类,所以也包括此类的属性和方法。

## [1/3] 请对下面的程序文件做一个概述: D:\openai.wiki\chatgpt_academic\crazy_functions\test_project\python\dqn\policies.py

本程序文件是深度强化学习算法中的一个模块,负责定义了DQN的Q网络以及DQN算法所需的两个模型(当前模型和目标模型)和两个网络(行为网络和目标网络)。具体包括:

1. QNetwork类:Action-Value (Q-Value) network for DQN, 构建Q网络,包括输入观测和输出所有动作的Q值。

2. DQNPolicy类:包含Q-Value Net和目标网络的策略类, 用于定义DQN 需要构建的行为网络和目标网络。同时包含一个_update_features_extractor用于更新feature extractor

3. MlpPolicy类:继承DQNPolicy,指定features_extractor_class为FlattenExtractor,不使用cnn

4. CnnPolicy类: 继承DQNPolicy,指定features_extractor_class为NatureCNN,使用cnn,用于处理图像数据

5. register_policy函数,用于在算法的Policy类选项中注册自定义的Policy类:MlpPolicy和CnnPolicy。

整个程序实现了DQN算法的核心功能,即包括Q网络、行为网络和目标网络的构建,同时在DQNPolicy基础上提供了两种类型的policy, MlpPolicy和CnnPolicy分别适用于不同类型的观测空间。

## [2/3] 请对下面的程序文件做一个概述: D:\openai.wiki\chatgpt_academic\crazy_functions\test_project\python\dqn\__init__.py

此程序文件名为__init__.py,包含了两个导入语句。第一个导入语句从stable_baselines3.dqn.dqn模块中导入DQN类,第二个导入语句从stable_baselines3.dqn.policies模块中导入了CnnPolicy和MlpPolicy类。该程序很可能是一个稳定基线算法库的包的初始化文件,提供了DQN类和两个策略类的导入。

## 根据以上你自己的分析,对程序的整体功能和构架做出概括。然后用一张markdown表格整理每个文件的功能(包括dqn.py, policies.py, __init__.py)。

程序整体功能:实现了深度Q网络(DQN)算法,在Stable-Baselines3框架下实现,用于构建、训练和评估DQN算法。

程序的总体结构如下:

| 文件名 | 功能描述 |
| ------ | ------ |
| dqn.py | 定义了DQN算法的主要逻辑和过程,包括缓存区管理、训练、更新等逻辑 |
| policies.py | 定义了DQN算法中Q网络以及当前和目标模型等,包含了MlpPolicy和CnnPolicy两种策略定义 |
| __init__.py | 包含了DQN类和两个策略类的导入 |

详细的功能描述如下:

| 文件名 | 主要功能 |
| ------ | ------ |
| dqn.py | 实现了DQN算法的主要逻辑和过程,包括缓存区管理、训练、更新等逻辑 |
| policies.py | 定义了DQN算法中Q网络以及当前和目标模型等,包含了MlpPolicy和CnnPolicy两种策略定义。 |
| __init__.py | 包含了DQN类和两个策略类的导入。 |

注:此表格中,我们按照题目的要求对每个文件的功能进行了概述和整理,然而根据代码文件的具体实现情况,还有很多详细的细节和函数实现方式,这里没有一一列举出来。

这代表我们已经成功配置完成了所有相关内容和环境,已经可以获取正确的结果。

其它测试

以下是一些其它的测试方式案例,注意替换成自己的绝对路径。

- 测试C++项目头文件分析
    input区域 输入 `./crazy_functions/test_project/cpp/libJPG` , 然后点击 "[实验] 解析整个C++项目(input输入项目根路径)"
- 测试给Latex项目写摘要
    input区域 输入 `./crazy_functions/test_project/latex/attention` , 然后点击 "[实验] 读tex论文写摘要(input输入项目根路径)"
- 测试Python项目分析
    input区域 输入 `./crazy_functions/test_project/python/dqn` , 然后点击 "[实验] 解析整个py项目(input输入项目根路径)"
- 测试自我代码解读
    点击 "[实验] 请解析并解构此项目本身"
- 测试实验功能模板函数(要求gpt回答历史上的今天发生了什么),您可以根据此函数为模板,实现更复杂的功能
    点击 "[实验] 实验功能函数模板"

配置错误

如果您的配置是不正确的,将会得到以下几种报错信息。

API位数错误

如果您在配置文件中所填写的openAI API Key位置多或少,那么在您启动chatgpt_academic时,将会得到如下错误:

(D:\openai.wiki\chatgpt_academic\ENV) D:\openai.wiki\chatgpt_academic>python main.py
[PROXY] 网络呆梨状态:已配置。配置信息如下: {'http': 'so***5h://localhost:7890', 'https': 'so***5h://localhost:7890'}
Traceback (most recent call last):
  File "D:\openai.wiki\chatgpt_academic\main.py", line 3, in <module>
    from request_llm.bridge_chatgpt import predict
  File "D:\openai.wiki\chatgpt_academic\request_llm\bridge_chatgpt.py", line 26, in <module>
    get_conf('proxies', 'API_URL', 'API_KEY', 'TIMEOUT_SECONDS', 'MAX_RETRY', 'LLM_MODEL')
  File "D:\openai.wiki\chatgpt_academic\toolbox.py", line 466, in get_conf
    r = read_single_conf_with_lru_cache(arg)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\openai.wiki\chatgpt_academic\toolbox.py", line 451, in read_single_conf_with_lru_cache
    assert False, "正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合,请在config文件中修改API密钥, 添加海外代理之后再运行。" + \
AssertionError: 正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合,请在config文件中修改API密钥, 添加海外代理之后再 运行。(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)

可重新获取API,然后将其填写至配置文件中,注意API是被双引号所包裹的,以sk-做为开着形状的形式,例如"sk-************************",共计48位。

API信息错误

在您运行时,如果遇到下图情况,那么代表您API位数正确,但是API的密钥错误。

[Local Message] Incorrect API key. OpenAI以提供了不正确的API_KEY为由,拒绝服务.
Json异常 “error”: { “message”: “Incorrect API key provided: sk-rW3np***************************************QyKW. You can find your API key at https://platform.openai.com/account/api-keys.”, “type”: “invalid_request_error”, “param”: null, “code”: “invalid_api_key” }}
ChatGPT_Academic|ChatGPT多功能拓展

同样前往openAI的官网重新获取API即可,然后将其填写至配置文件中。

总结

ChatGPT的小工具越来越多啦,以后将会是非常高效的生产力工具。chatgpt_academic由中科院提供,安全性值得信赖,专业性也同样不用质疑。后续本站将会为您提供每一个功能的详细讲解,敬请期待。

广告:如果您没有ChatGPT的API密钥,可以通过本文章右侧边栏的增值服务,在本站购买API专用账号。

此文章由OpenAI开源维基百科原创发布,如若转载请注明出处:https://openai.wiki/chatgpt_academic.html

(0)
上一篇 2023-04-08 17:41
下一篇 2023-04-10 04:00

相关推荐

  • openAI|如何处理费率限制

    本文介绍了OpenAI API的速率限制机制和处理速率限制错误的技巧,以及限制并行请求的示例脚本。文章解释了速率限制的作用,以及通过限制请求次数和防止滥用或误用API来保护API和其用户的可靠操作。

    ChatGPT 2023-02-18
    017.7K
  • openAI|使用嵌入的语义文本搜索

    本文介绍如何使用OpenAI的文本嵌入来进行语义文本搜索。通过查询嵌入与文档嵌入进行比较,可以高效的在数据集中搜索相关文本。如何使用余弦相似度计算来搜索文本,并展示了搜索结果。提高搜索效率并降低成本。

    ChatGPT 2023-02-20
    011.1K
  • Auto-GPT|ChatGPT自动化

    Auto-GPT是一个实验性开源应用程序,展示了GPT-4语言模型的能力。它具备互联网搜索、长期和短期记忆管理、文本生成、访问流行网站和平台等功能,使用GPT-3.5和GPT-4进行文件存储和摘要。

    ChatGPT 2023-04-13
    0315.5K
  • ChatGPT|常见报错问题汇总

    本文介绍了ChatGPT常见的网络错误及其解决方法,包括:网络错误, 请求过多, 解决方法, API 接口, Plus 账号,openAI,1小时内请求过多,模型过载,引擎不存在,发生错误等解决方法。

    ChatGPT 2023-02-21
    029.7K
  • GPT-3|文本编辑示例

    本文介绍了OpenAI提供的编辑API端点及其应用案例,包括指令输入和文本输入等基本操作。然后,本文以翻译任务为例,详细介绍了如何使用编辑API端点进行无监督翻译,并提供了相应的示例和输出结果。

    ChatGPT 2023-02-20
    00852

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(3条)

  • zzzyyy
    zzzyyy 2023-06-06 16:01

    请问 “关于openAI的API Key可前往该网址获取https://platform.openai.com/account/api-keys”这个网站登不上去怎么办

  • wwf
    wwf 2024-03-15 17:11

    AttributeError: ‘Row’ object has no attribute ‘style’,最后一句执行会出现这个,请问是什么原因,大佬

微信