这篇文章,介绍一下ChatGPT Next开源项目封装的 ChatGPT API 接口网站的使用方法
功能参数设置
打开设置界面可以看到如下选项
model
model 是指使用的ChatGPT大模型类型,如上图所示,常用(默认)的是gpt-3.5-turbo,这个模型是目前速度最快,质量较好的,也是我最常用的选项。
gpt-4开头的模型,质量较高,但是速度慢,一般是在gpt-3.5模型的回复质量上有问题时,可以切换到gpt-4模型来使用,下面截图中最后一个选项也可以实时切换gpt模型
随机性
随机性范围是0到1,如果值趋近于0,则每次回复的内容越准确,如果值趋近于1,则每次回复的结果开放性越大。也就是如果想要GPT做一些精确的回答(如编程相关问题),则值小一些。但是这不是绝对的,一般情况下保持默认0.5即可。如果该参数不满足需求,可以自行调整。
附带历史消息数
是指每次聊天时,发送的历史聊天记录数量,每次发送聊天信息,调用ChatGPT的API接口时,需要附带多少之前的聊天记录信息,这里的聊天记录包括你的提问以及GPT的回复。当需要进行多次交互,进行很长的聊天时,可以把这个值调大,请求时携带更多的上下文信息,让GPT根据上下文,做出更准确的回复。(一般情况下维持默认值,感觉GPT对上下文理解不足时,值调整大一些)
历史摘要
这个是bool选择器,勾选时,代表将上下文信息压缩后发送给GPT,不勾选时,将所有聊天记录完整的发送给GPT。注意,这里的压缩不是调用数据压缩算法做压缩,而是将大段的聊天记录总结成一段更加精炼的文字,发送给GPT。
当需要GPT完整携带上下文信息时,去勾选。
面具选择
左下角新建一个聊天时,可以选择一个面具
“面具”的意思是,你需要这个GPT模型充当一个什么样的角色,完成什么样的功能,比如充当“小红书写手”输出文字会是适合在小红书上发表的文案。(程序员写代码,查资料一般用不上)
清除聊天功能
如果之前聊天已经做了多次交互,想要GPT下次回答时,不要携带之前的聊天记录,可以点击“清除聊天”,这样再次询问GPT,相当于重新开启一段对话。
注意:如果重新提问一个新的问题,必须清除之前的聊天或者重新开启一个聊天窗口,否则之前的上下文信息,会影响新问题的回答。
如何提问ChatGPT
需要遵循如下几个原则
- ****编写清晰、具体的指令。****提问时尽可能地使用非常具体的,不要带有模糊意思的语句,GPT才会给出足够准确的回答
- GPT模型偶尔会生成一些看似真实实则编造的知识,一定要注意区分回答的真实性
- GPT模型可以输出结构化信息,比如让它输出一段实现某个功能的代码、实现某个查询的SQL语句、输出带有某种结构的json文本
- 不断追问式提问,有时一个复杂的问题,GPT第一次回答的结果不够满意,你可以根据它回答的结果内容继续提问,GPT会联系上下文信息,做出更加准确的回答。来回交互提问的次数越多,GPT越能获得足够多的上下文信息。但是我实际使用过程中,感觉上下文不能太多,达到某个程度后,GPT回答的更加有问题了,这时可以重新开启一个聊天,将刚才交互中有用的部分提取出来,重新提问GPT
代码分析功能
代码中存在很多非文本内容,比如大括号、小括号、引号,这些符号都会影响GPT对这段代码的理解,可以使用反单引号 ````或者三个单引号 '''
来包装代码文本,让GPT将代码识别为一个整体。
比如,提问句如下:
'''
async def aparse(self, completion: str) -> T:
try:
parsed_completion = self.parser.parse(completion)
except OutputParserException as e:
new_completion = await self.retry_chain.arun(
instructions=self.parser.get_format_instructions(),
completion=completion,
error=repr(e),
)
parsed_completion = self.parser.parse(new_completion)
return parsed_completion
'''
请解释一下这段代码是什么意思
返回结果如下:
这段代码是一个异步函数 `aparse`,接受一个字符串参数 `completion`,并返回一个类型为 `T` 的值。
代码中的主要逻辑如下:
1. 首先,代码尝试使用 `self.parser` 对象解析 `completion` 字符串,将解析结果赋值给 `parsed_completion` 变量。
2. 如果解析过程中抛出了 `OutputParserException` 异常,意味着解析失败,代码会进入 `except` 块。
3. 在 `except` 块中,代码会调用 `self.retry_chain.arun` 异步方法,传递一些参数:
- `instructions`:通过调用 `self.parser.get_format_instructions()` 获取格式化指令。
- `completion`:原始的 `completion` 字符串。
- `error`:使用 `repr(e)` 获取异常 `e` 的字符串表示。
4. `self.retry_chain.arun` 方法会处理这些参数,并返回一个新的完成字符串 `new_completion`。
5. 接下来,代码再次使用 `self.parser` 对象解析 `new_completion` 字符串,并将解析结果赋值给 `parsed_completion` 变量。
6. 最后,函数返回 `parsed_completion`。
总体来说,这段代码的目的是尝试解析给定的 `completion` 字符串,如果解析失败,则通过调用异步方法 `self.retry_chain.arun` 获取一个修正后的字符串,并再次尝试解析该字符串。最终返回解析结果。
代码编写功能
我的提示词:
你是Python编程专家,请给一个足够典型的例子,来让我学习一下python中asyncio 特性
(提示词编写时,可以在前面添加一句你是Python编程专家
这样会使GPT回答结果更加专业化)
GPT回答:
当然!下面是一个典型的例子,演示了如何使用`asyncio`库来实现异步编程。
```python
import asyncio
async def hello():
print("Hello")
await asyncio.sleep(1)
print("World")
async def main():
await asyncio.gather(hello(), hello(), hello())
asyncio.run(main())
```
在这个例子中,我们定义了两个异步函数`hello()`和`main()`。`hello()`函数打印"Hello",然后等待一秒钟(使用`asyncio.sleep(1)`)并打印"World"。`main()`函数使用`asyncio.gather()`同时运行三个`hello()`函数。
最后,我们使用`asyncio.run()`来运行`main()`函数。这个函数会创建一个事件循环,执行异步任务,并等待它们完成。
运行这个例子,你会看到"Hello"会立即打印出来,然后等待一秒钟,最后打印出"World"。这个过程会在每个`hello()`函数中重复进行,因为我们同时运行了三个`hello()`函数。
这个例子展示了`asyncio`库的基本用法。它允许你编写异步代码,利用事件循环和协程来实现非阻塞的并发执行。你可以在`async`函数中使用`await`关键字来等待一个异步操作完成,而不会阻塞其他任务的执行。
希望这个例子能帮助你理解`asyncio`的基本概念和用法!如果你有任何问题,我会很乐意帮助你。
上面只是简单讲解了一下如何使用GPT,想要深入学习,请看其他学习链接:
- 吴恩达免费课程,中文翻译版:https://datawhalechina.github.io/prompt-engineering-for-developers/#/
- 提示词工程:https://github.com/yzfly/awesome-chatgpt-zh
欢迎访问我的博客网站,你会有不一样的发现:
https://www.nkshare.space/