admin管理员组文章数量:1130349
聊一聊如何开发 ChatGPT的聊天应用
个人一直想做一个个人用的ChatGPT聊天应用,Github上倒是一大堆开源项目,也能够快速部署使用。但是总归有一个痛点——技术栈不完全吻合,改起来费事儿。能够用的网站担心不安全,盗用openai_key什么的,再有的网站限制了每天的问题次数,需要充值,收费等等…原因,我还是下定决心自己做一个个人专属的ChatGPT应用网站。
废话不多说,先剖析一下作成这样一个网站要解决哪些技术难点?
事前探究
- Openai key哪里找?
可以去淘宝上进行购买现成的Key,个人觉得还比较划算。
- 国内无法使用Openai key怎么办?
- 翻墙
这部分个人不太推荐,毕竟翻墙是违法的,而且大部分VPN应用都有站点想,而且不是特别稳定。- 国外服务器搭建代理服务器,然后国内使用代理服务器访问
这种方式我尝试了香港云服务器的Squid正向代理,但是几经周折都没成功,很遗憾只能放弃。- 国外服务器 + 开发后台Openai中转服务
前两种方式可能不太适合我吧,于是乎开始了中转openai服务的程序开发的探索。
- 如何开发Openai中转服务?用什么进行开发?
使用python的fastapi库充当后台server,rquests库构筑oepani请求获取结果并不做任何处理返回给前端。至于为什么不用 openai库,第一个是由于官方维护老是出现新版本opeani库不兼容旧版的问题,第二也是因为自己构筑请求相关的参数,相对透明,可控性比较高。说白了就是openai调用失败了,你可能都不知道为什么,所以为什么不使用requests库自主去构建呢?
- 如何转发官方的提供的steam模式的接口?
两种方式:
1、使用官方提供的openai库
# 请求封装实体
class AskRequest(BaseModel):
max_tokens: int = Field(default=2048)
messages: list
model: str = Field(default="gpt-3.5-turbo")
stream: bool = Field(default=False)
temperature: float = Field(default=0.7)
top_p: float = Field(default=0.8)
# JSON格式封装
def chat(ask_req: AskRequest):
try:
# LangChainのstreamはコールバック周りが複雑な印象なので一旦openaiをそのまま使う
response = openai.ChatCompletion.create(
# model=query_data.model,
model=ask_req.model,
# SSEを使うための設定
stream=False,
messages=ask_req.messages,
temperature=ask_req.temperature,
top_p=ask_req.top_p,
max_tokens=ask_req.max_tokens
)
return response
except:
return {
"code": 500,
"data": traceback.format_exc()
}
# 流式封装
async def chat_stream(ask_req: AskRequest):
try:
# LangChainのstreamはコールバック周りが複雑な印象なので一旦openaiをそのまま使う
response = openai.ChatCompletion.create(
# model=query_data.model,
model=ask_req.model,
# SSEを使うための設定
stream=True,
messages=ask_req.messages,
temperature=ask_req.temperature,
top_p=ask_req.top_p,
max_tokens=ask_req.max_tokens
)
for item in response:
yield {
"data": item}
except:
yield {
"data": traceback.format_exc()}
yield {
"data": "[DONE]"}
# 请求转发接口
@app.post("/v1/chat/completions")
async def ask_stream(request: Request, ask_req: AskRequest):
try:
if ask_req.stream:
聊一聊如何开发 ChatGPT的聊天应用
个人一直想做一个个人用的ChatGPT聊天应用,Github上倒是一大堆开源项目,也能够快速部署使用。但是总归有一个痛点——技术栈不完全吻合,改起来费事儿。能够用的网站担心不安全,盗用openai_key什么的,再有的网站限制了每天的问题次数,需要充值,收费等等…原因,我还是下定决心自己做一个个人专属的ChatGPT应用网站。
废话不多说,先剖析一下作成这样一个网站要解决哪些技术难点?
事前探究
- Openai key哪里找?
可以去淘宝上进行购买现成的Key,个人觉得还比较划算。
- 国内无法使用Openai key怎么办?
- 翻墙
这部分个人不太推荐,毕竟翻墙是违法的,而且大部分VPN应用都有站点想,而且不是特别稳定。- 国外服务器搭建代理服务器,然后国内使用代理服务器访问
这种方式我尝试了香港云服务器的Squid正向代理,但是几经周折都没成功,很遗憾只能放弃。- 国外服务器 + 开发后台Openai中转服务
前两种方式可能不太适合我吧,于是乎开始了中转openai服务的程序开发的探索。
- 如何开发Openai中转服务?用什么进行开发?
使用python的fastapi库充当后台server,rquests库构筑oepani请求获取结果并不做任何处理返回给前端。至于为什么不用 openai库,第一个是由于官方维护老是出现新版本opeani库不兼容旧版的问题,第二也是因为自己构筑请求相关的参数,相对透明,可控性比较高。说白了就是openai调用失败了,你可能都不知道为什么,所以为什么不使用requests库自主去构建呢?
- 如何转发官方的提供的steam模式的接口?
两种方式:
1、使用官方提供的openai库
# 请求封装实体
class AskRequest(BaseModel):
max_tokens: int = Field(default=2048)
messages: list
model: str = Field(default="gpt-3.5-turbo")
stream: bool = Field(default=False)
temperature: float = Field(default=0.7)
top_p: float = Field(default=0.8)
# JSON格式封装
def chat(ask_req: AskRequest):
try:
# LangChainのstreamはコールバック周りが複雑な印象なので一旦openaiをそのまま使う
response = openai.ChatCompletion.create(
# model=query_data.model,
model=ask_req.model,
# SSEを使うための設定
stream=False,
messages=ask_req.messages,
temperature=ask_req.temperature,
top_p=ask_req.top_p,
max_tokens=ask_req.max_tokens
)
return response
except:
return {
"code": 500,
"data": traceback.format_exc()
}
# 流式封装
async def chat_stream(ask_req: AskRequest):
try:
# LangChainのstreamはコールバック周りが複雑な印象なので一旦openaiをそのまま使う
response = openai.ChatCompletion.create(
# model=query_data.model,
model=ask_req.model,
# SSEを使うための設定
stream=True,
messages=ask_req.messages,
temperature=ask_req.temperature,
top_p=ask_req.top_p,
max_tokens=ask_req.max_tokens
)
for item in response:
yield {
"data": item}
except:
yield {
"data": traceback.format_exc()}
yield {
"data": "[DONE]"}
# 请求转发接口
@app.post("/v1/chat/completions")
async def ask_stream(request: Request, ask_req: AskRequest):
try:
if ask_req.stream:
版权声明:本文标题:聊一聊如何开发 ChatGPT的聊天应用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1763944374a2973697.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论