Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Knowledge retrieval funciona no Playground, mas não via código java

Seguindo os passos da aula 4 Knowledge retrieval, funciona executando no Playground, mas não via código java. Via código java executa como se a IA não encontrasse os arquivos. Em julho/2024, as configurações na OpenAI, Playground, Assistants, Tools estão um pouco diferentes do que é apresentado nos vídeos da aula. Utilizei a opção 'File search' e adicionei os dois arquivos em '+ Files'. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá William, tudo bem?

Peço que faça algumas verificações. Primeiro, verifique se o "Retrieval" está habilitado para que o Assistant consiga acessar os arquivos que você adicionou.

Além disso, certifique de que você está utilizando a mesma chave de API no código Java que está configurada no Playground, e se ela está certinha.

Você mencionou que utilizou a opção 'File search' e adicionou os arquivos. No código Java, você também precisa garantir que esses arquivos estão sendo carregados corretamente. Verifique se o caminho dos arquivos está correto no código Java.

Caso o problema persista, fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

O Playground atual já está numa versão mais atual do que o que foi exposto na aula. Atual = v2 / Aula = v1 E a versão v1 fica com várias opções desabilitadas e não é possível adicionar os arquivos. Tentei usar a v2 com o que fosse "compatível", foi possível adicionar arquivos, mantive o código java exatamente igual ao da aula, também me certifiquei da chave de API (configurada em Environment variables) e ids corretos. Mas o resultado é que não são levados em conta os arquivos já adicionados via playground.

solução!

Fiz algumas alterações e deram certo.

Na classe ChatbotService, modifiquei o prompt do sistema com algo um pouco mais específico (conforme outro tópico do fórum):

var promptSistema = "Você é um chatbot de atendimento a clientes de um e-commerce. Você não deve responder perguntas que não sejam dados do e-commerce informado! Além disso, acesse os arquivos associados a você e a thread para responder as perguntas.";

Na classe OpenAIClient, passei a listar os ids dos Files adicionados via Playground e setei em MessageRequest, assim a thread passou a reconhecê-los.

        List<String> fileIds = service.listFiles().stream()
                .map(File::getId)
                .toList();

        System.out.println("\n");
        System.out.println("File ids: " + fileIds);

        var messageRequest = MessageRequest
                .builder()
                .role(ChatMessageRole.USER.value())
                .content(dados.promptUsuario())
                .fileIds(fileIds)
                .build();

        System.out.println("Assistant id: " + this.assistantId);

        System.out.println("Thread id: " + this.threadId);

        if (this.threadId == null) {
            var threadRequest = ThreadRequest
                    .builder()
                    .messages(Arrays.asList(messageRequest))
                    .build();

            var thread = service.createThread(threadRequest);

            this.threadId = thread.getId();

            try {
                Thread.sleep(1000 * 3);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        } else {
            service.createMessage(this.threadId, messageRequest);
        }

        System.out.println("Thread id: " + this.threadId);

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade