admin 管理员组文章数量: 1184232
使用fastapi搭建ChatGPT对话后台
参考资料:使用fastapi搭建ChatGPT对话后台
效果:在本地构建网页达成类似chatgpt的对话效果,一个字一个字的返回生成结果
ChatGPT初步调用
import os
import fastapi
import dotenv
from httpx import AsyncClient
from typing import List,Dict
dotenv.load_dotenv('./env')
# print(os.getenv('OPENAI_API_BASE'))
async def request(val: List[dict[str,str]]):
"""
发起请求
val: 对话内容
"""
url = "https://xiaoai.plus/v1/chat/completions"
headers ={
"Content-Type": "application/json",
"Authorization": "Bearer " + os.getenv("OPENAI_API_KEY")
}
params = {
"model": "gpt-3.5-turbo",
"messages": val, # [{"role": "user", "content": "Say this is a test!"}]
"temperature": 0.7,
"n": 1,
"max_tokens": 3000,
"stream": False
}
async with AsyncClient() as clinet:
response = await clinet.post(url, headers=headers,json=params,timeout=60)
print(response.json())
if __name__ == '__main__':
import asyncio
asyncio.run(request([{
"role": "user", "content": "Hello!"}]))
{
'id': 'chatcmpl-ABYGZNDqhtZn5igtaukBbLPWrdTPZ', 'object': 'chatpletion', 'created': 1727316691, 'model': 'gpt-3.5-turbo', 'choices': [{
'index': 0, 'message': {
'role': 'assistant', 'content': 'Hello! How can I assist you today?'}, 'finish_reason': 'stop'}], 'usage': {
'prompt_tokens': 9, 'completion_tokens': 9, 'total_tokens': 18}, 'system_fingerprint': 'fp_808245b034'}
对回答进行解析, 这里的结果是一次性返回消息内容
{
"id": "chatcmpl-ABYGZNDqhtZn5igtaukBbLPWrdTPZ", # 唯一标识符,用于追踪请求
"object": "chatpletion", # 对象类型,表示这是一个聊天完成事件
"created": 1727316691, # 创建时间戳,表示响应创建的时间
"model": "gpt-3.5-turbo", # 使用的模型名称
"choices": [ # 选择列表,可能包含多个回复,这里只有一个
{
"index": 0, # 当前选择的索引
"message": {
# 选择的消息内容
"role": "assistant", # 消息角色,这里是助手
"content": "Hello! How can I assist you today?" # 消息内容
},
"finish_reason": "stop" # 完成原因,这里是"stop",表示模型决定停止生成更多内容
}
],
"usage": {
# 使用情况,包括token使用情况
"prompt_tokens": 9, # 提示token的数量
"completion_tokens": 9, # 完成token的数量
"total_tokens": 18 # 总token的数量
},
"system_fingerprint": "fp_808245b034" # 系统指纹,用于识别请求的系统环境
}
流式调用ChatGPT
修改上述代码中的"stream": True与print(response.text)部分
import os
import fastapi
import dotenv
from httpx import AsyncClient
from typing import List,Dict
dotenv.load_dotenv('./env')
# print(os.getenv('OPENAI_API_BASE'))
async def request(val: List[dict[str,str]]):
"""
发起请求
val: 对话内容
"""
url = "https://xiaoai.plus/v1/chat/completions"
headers ={
"Content-Type": "application/json",
"Authorization": "Bearer " + os.getenv("OPENAI_API_KEY")
}
params = {
"model": "gpt-3.5-turbo",
"messages": val, # [{"role": "user", "content": "Say this is a test!"}]
"temperature": 0.7,
"n": 1,
"max_tokens": 3000,
"stream": True
}
async with AsyncClient() as clinet:
response = await clinet.post(url, headers=headers,json=params,timeout=60)
print(response.text)
if __name__ == '__main__':
import asyncio
asyncio.run(request([{
"role": "user", "content": "Hello!"}]))
可以看到GPT的结果是一个词一个词的返回的
data: {
"id":"chatcmpl-ABYJD1L22azzx2PK9IyqCaw2RrC7J","object":"chatpletion.chunk","created":1727316855,"model":"gpt-3.5-turbo","system_fingerprint":"fp_808245b034","choices":[{
"index":0,"delta":{
"role":"assistant","content"
版权声明:本文标题:使用fastapi搭建ChatGPT对话后台 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1763944029a3280744.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论