Acabei de corrigir um bug em nossa plataforma de assistente Yusmart AI, o final é sangrento! Apresse-se e compartilhe com todos e, a propósito, compartilhe as ideias padrão de bugs para solução de problemas.
A coisa é assim, um pequeno parceiro criou um assistente de IA chamado [Desenvolvedor de Software] na Plataforma Yucongming ( www.yucongming.com ). Quando procuro por "desenvolvimento de software", encontro este modelo:
Como resultado, quando você pesquisa por "desenvolvedor de software", que é o nome completo do assistente, não encontra nenhum resultado? !
Ao encontrar esse tipo de coisa, comece primeiro pelo front-end: primeiro confirme se os parâmetros de solicitação enviados pelo front-end estão corretos.
Pressione F12 para abrir o console de rede e verifique se a palavra-chave de pesquisa foi passada sem problemas:
Em seguida, a pele do peixe sobe para o back-end ao longo do cabo de rede, primeiro é necessário confirmar se os dados mais originais foram encontrados no banco de dados e, em seguida, considerar se foram filtrados pelo código comercial.
Para abrir o log de consulta do banco de dados localmente, é utilizado o framework MyBatis Plus. O código para abrir o log é o seguinte:
mybatis-plus:
configuration:
map-underscore-to-camel-case: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Execute a busca novamente, e os registros SQL impressos ficam conforme a figura:
Coloque os parâmetros no modelo de instrução SQL, ou seja, nome como '%desenvolvedor de software%', parece que não há problema.
Verifique novamente e, em seguida, colocamos o SQL costurado no console do banco de dados para consulta real:
O resultado da consulta de resultado é 0:
Estranho, não existe tal registro no banco de dados? Mas por que encontro esse assistente quando procuro por "desenvolvimento de software"?
Em seguida, usei o id do assistente para consultar o banco de dados e descobri que realmente existem dados chamados "desenvolvedor de software".
Estou com raiva, por que não consigo descobrir? ! Você também pode adivinhar.
Neste momento, eu realmente tenho uma ideia: é porque o nome armazenado no banco de dados é inconsistente com o formato do nome (ou caracteres) que vemos? Então copiei o valor de name do banco de dados, conforme a figura:
Como resultado, o nome copiado do banco de dados é usado como condição de consulta e o resultado pode ser encontrado!
Portanto, há a seguinte captura de tela mágica, duas instruções SQL "idênticas", uma com resultados e outra sem resultados:
Basicamente, pode-se confirmar que este "desenvolvedor de software" não é o outro "desenvolvedor de software", e as duas strings são inconsistentes!
Então, usei essas duas strings para gerar códigos MD5 Hash e descobri que os códigos Hash eram diferentes, indicando que as strings originais eram diferentes.
Para uma comparação mais precisa, verifica-se que a palavra "人" é diferente:
Poço! Quem pode ver a diferença entre esses dois personagens "pessoas"!
Qual é a diferença? Pergunte ao Yusmart AI ~
Como resultado, o caso foi resolvido em um segundo: verifica-se que a primeira "pessoa" é um personagem de largura total, o que é realmente verdade. . . Calças tailandesas são quentes!
Isso é sobre todo o caso. Portanto, o que vemos pode não ser verdade. Esse bug me lembra de muitos amigos que muitas vezes confundem vírgulas em chinês e inglês e dois-pontos em chinês e inglês quando foram para a faculdade. Esse tipo de bug é realmente desconcertante. Espero que todos os amigos programadores tentem não se deparar com isso.Se você se deparar com isso, pense no meu artigo, talvez você tenha uma solução.