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

Travei. Erro com o parametro file_ids

Não consegui subir a aplicação mais depois de fazer o refactor desse exercicio.

No próprio PyCharm ja mostra com erro como elemento não esperado.

imagem contendo o erro de unexpected argument

Depois de subir a aplicação, o erro é apresentado ao enviar uma mensagem: Erro de comunicação com OpenAI: Messages.create() got an unexpected keyword argument 'file_ids'

Tentei pesquisar na internet, e vi que na documentação é usado um parametro tool_resources, mas do formato que tem na doc não funciona também.

Da o erro Erro de comunicação com OpenAI: Messages.create() got an unexpected keyword argument 'tool_resources'

Alguem já passou por isso?

4 respostas
solução!

Depois de muito pesquisar, consegui resolver.

A versão do assistente usada no curso é a V1, mas já existe a V2 e usei os links a seguir para me ajudar na correção

https://platform.openai.com/docs/assistants/migration/what-has-changed https://platform.openai.com/docs/assistants/tools/file-search

As alterações efetuadas foram as que seguem:

No arquivo de tools o tipo 'retrieval' não existe mais, agora é 'file_search'

tools = [
    {
        'type': 'file_search'
    }
]

Os arquivos agora, são alocados em um vector_store, e no arquivo do assistente ficou assim:

def create_thread(vector_store):
    return client.beta.threads.create(
        tool_resources={
            'file_search': {
                'vector_store_ids': [vector_store.id]
            }
        }
    )


def create_vector_store():
    vector_store = client.beta.vector_stores.create(name='Ecomart Vector Store')

    file_paths = [
        'data/ecomart_data.txt',
        'data/ecomart_politics.txt',
        'data/ecomart_products.txt'
    ]
    file_streams = [open(path, 'rb') for path in file_paths]

    client.beta.vector_stores.file_batches.upload_and_poll(
        vector_store_id=vector_store.id,
        files=file_streams
    )

    return vector_store

Ainda no assitente, o parametro file_ids, também não existe mais. Agora tem que informar o tool_resources, como segue

def create_assistant(vector_store):
    assistant = client.beta.assistants.create(
        name='Ecomart Assistant',
        instructions=f'''
            Você é um chatbot de atendimento a clientes de um e-commerce. 
            Você não deve responder perguntas que não sejam dados do ecommerce informado!
            Além disso, acesse os arquivos associados a você e a thread para responder as perguntas.
        ''',
        model=model,
        tools=tools,
        tool_resources={
            'file_search': {
                'vector_store_ids': [vector_store.id]
            }
        }
    )
    return assistant

O get_json eu mudei também, para incluir o vector_store_id

    if not os.path.exists(filename):
        vector_store = create_vector_store()
        thread = create_thread(vector_store)
        assistant = create_assistant(vector_store)

        data = {
            'assistant_id': assistant.id,
            'vector_store_id': vector_store.id,
            'thread_id': thread.id
        }

Nas mensagens, o parametro file_ids também não existe mais, eu omiti ele (funciona sem por que a thread tem o vector_store associado)

            client.beta.threads.messages.create(
                thread_id=thread_id,
                role="user",
                content=prompt
                # file_ids=file_ids
            )

Espero que isso ajude vocês.

Obrigado por compartilhar.

Obrigado compartilhar. Consegue compartilhar todo o código refatorado também?

Caio, o meu código está no git se quiser dar uma olhada.

https://github.com/josielborges/chatbot-gpt