欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

服务器发送事件 (SSE) GPT 场景实施 - 服务器端(后端)

最编程 2024-10-16 12:35:57
...

服务端的任务通常是调用gpt的接口,然后流式读取,读到什么马上返回给前端。

这里给一个python的demo:

from sse_starlette.sse import ServerSentEvent, EventSourceResponse

def create_chat_completion(messages):
    # 发起请求
    response = openai.ChatCompletion.create(
        engine="gpt-35-turbo",
        messages=messages,
        stream=True, # 该参数需要设置为true
        max_tokens=1000
    )
    # 循环处理stream结果
    for item in response:
        # yield ServerSentEvent(json.dumps(item, ensure_ascii=False), event='delta')
        result = json.dumps(item)
        print(result)
        yield ServerSentEvent(json.dumps(item))

@router.post("/summary")
async def summary(contentNeedSummary: posts.ContentNeedSummary, user = Depends(get_token_header)):    
	messages = [
        {"role": "system", "content": "可以预置一些系统的设置"},
        {"role": "user", "content": contentNeedSummary.content}
    ]
    return EventSourceResponse(create_chat_completion(messages))

可以看到上面的方法,前端调用/summary接口后,进入summary函数,做一些这个方法特有的设置之后,return了EventSourceResponse(create_chat_completion(messages))。create_chat_completion再实现通用的调用gpt的方法,每得到一个响应,马上用ServerSentEvent包裹返回给前端。

也就是说,整个过程,是前端发起SSE请求服务端,服务端(可以做一些别的处理,比如鉴权和预置系统数据)再发起SSE请求GPT接口;在返回结果的过程中,GPT接口流式输出给服务端,服务端(可以做一些别的处理,比如处理好返回结果的格式,计算token成本)马上返回给前端,比如GPT接口流式输出了“你好”,服务端马上返回了“你好”给前端显示在网页上,再返回“,我是GPT”,服务端接着返回给前端显示在网页上。

这样的处理方式可以让结果尽快显示出来,也可以借由服务端的处理,保证安全和计算成本,以及处理好数据格式。