So nutzen Sie ein bekanntes GPT in China, mit Online-Erfahrungslink

Online-Erlebnis

Fügen Sie hier eine Bildbeschreibung ein

Drei Möglichkeiten:
1. Um auf openai zuzugreifen, brauchte man früher eine ausländische Mobiltelefonnummer. Jetzt scheint es nicht mehr nötig zu sein, diese zu verifizieren, aber man muss immer noch die Mobiltelefonnummer verifizieren, wenn man die API aufruft. 2.
Kaufen Sie eine 3. Zugriff über einige inländische
Paket-Websites, wobei im Allgemeinen teure Mitgliedsbeiträge erhoben werden

Der Autor verwendet eine verbesserte Version von Lösung 2, indem er eine Reihe von Überbrückungsdiensten auf ausländischen Servern bereitstellt und diese dann über inländische Server aufruft.
Das Folgende ist Teil des Codes:

public void streamCompletions(HttpServletResponse response, List<OpenAIResponsiveAPI.Message> messages, Float temperature) {
    
    
        OpenAiStreamApi.completionsStream(messages, temperature).blockingForEach(chunk -> {
    
    
            if (response.containsHeader("Content-Type")) {
    
    
                response.setHeader("Content-Type", "text/event-stream");
            } else {
    
    
                response.setHeader("Content-Type", "text/event-stream");
                response.setHeader("Cache-Control", "no-cache");
                response.setHeader("Connection", "keep-alive");
            }
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write("data: " + chunk);
            response.getWriter().flush();
            try {
    
    
                Thread.sleep(10);
            } catch (Exception ex) {
    
    
            }
        });
}

public abstract class StreamApiUtil {
    
    

    protected static final ObjectMapper mapper = defaultObjectMapper();

    public static ObjectMapper defaultObjectMapper() {
    
    
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        return mapper;
    }

    public static <T> Flowable<T> stream(Call<ResponseBody> apiCall, Class<T> cl) {
    
    
        return stream(apiCall).map(sse -> {
    
    
            T t = mapper.readValue(sse.getData(), cl);
            return t;
        });
    }

    public static Flowable<SSE> stream(Call<ResponseBody> apiCall) {
    
    
        return stream(apiCall, false);
    }

    public static Flowable<SSE> stream(Call<ResponseBody> apiCall, boolean emitDone) {
    
    
        return Flowable.create(emitter -> apiCall.enqueue(new ResponseBodyCallback(emitter, emitDone)), BackpressureStrategy.BUFFER);
    }

}

public class OpenAiUtil extends StreamApiUtil {
    
    
    public static Flowable<OpenAiResult> completionsStream(List<Message> messages, float temperature) {
    
    
        Map<String, Object> params = new HashMap<>();
        params.put("messages", messages);
        params.put("temperature", temperature);
        return stream(OPEN_AI_API.createCompletionStream(params), OpenAiResult.class);
    }
}

public interface OpenAiApi {
    
    

    @Streaming
    @POST("/api/chat-ai/completionsStream")
    Call<ResponseBody> createCompletionStream(@Body Map request);

}

Klicken Sie hier, um es online zu erleben

Supongo que te gusta

Origin blog.csdn.net/qq_27574367/article/details/135140327
Recomendado
Clasificación