A API Retrieve recupera conteúdo de uma base de conhecimento do Agent Storage. Ela oferece suporte a recuperação vetorial, recuperação de texto completo e recuperação híbrida. Configure a estratégia de Rerank para controlar como os resultados de múltiplos caminhos de recuperação são combinados e classificados.
Pré-requisitos
Você já crie uma base de conhecimento e documentos importados. O status do documento deve ser
Completed. Documentos com statusPendingouIndexingnão podem ser recuperados.Se os subespaços estiverem ativados para a base de conhecimento, passe o parâmetro
subspaceao recuperar o conteúdo.
Prioridade da configuração de recuperação
A configuração de recuperação (retrievalConfiguration) da API Retrieve determina os parâmetros efetivos seguindo esta ordem de prioridade:
|
Prioridade |
Origem |
Descrição |
|
1 (mais alta) |
Parâmetros da API Retrieve |
A |
|
2 |
Configuração no nível da base de conhecimento |
Definida durante a criação da base de conhecimento. Modifique-a a qualquer momento usando UpdateKnowledgeBase. |
|
3 (mais baixa) |
Valores padrão do sistema |
Recuperação híbrida vetorial e de texto completo com fusão ponderada WEIGHT (vetor 0,7 : texto completo 0,3), retornando 20 resultados. |
Para a solicitação de recuperação mais simples, passe apenas knowledgeBaseName e retrievalQuery. O sistema utilizará então a configuração da base de conhecimento ou os valores padrão.
Tipos de recuperação
|
Tipo |
Descrição |
Cenários |
|
|
Recuperação vetorial baseada em similaridade semântica. |
Descreva necessidades em linguagem natural que exigem compreensão semântica. Por exemplo, "como instale" pode corresponder a "etapas de implantação". |
|
|
Recuperação de texto completo baseada em correspondência de palavras-chave. |
Insira palavras-chave exatas, nomes próprios ou identificadores. |
A recuperação vetorial e a recuperação de texto completo são complementares: a primeira é eficaz para compreensão semântica, enquanto a segunda destaca-se na correspondência exata. Ative ambos os tipos de recuperação e use o Rerank para combinar os resultados. Para uma recuperação híbrida, passe ambos os tipos em searchType.
Estratégias de Rerank
O Rerank combina e classifica os resultados provenientes da recuperação vetorial e da recuperação de texto completo, retornando os resultados finais.
WEIGHT (fusão ponderada)
Aplica pesos proporcionais às pontuações das recuperações vetorial e de texto completo. WEIGHT é a estratégia padrão do sistema. Utilize-a quando precisar de controle refinado sobre a contribuição de cada caminho de recuperação. Esta é a escolha recomendada como padrão.
|
Parâmetro |
Tipo |
Valor padrão |
Descrição |
|
|
double |
0.7 |
Peso atribuído à recuperação vetorial. |
|
|
double |
0.3 |
Peso atribuído à recuperação de texto completo. |
RRF (fusão de classificação recíproca)
Combina resultados de múltiplos caminhos de recuperação ponderando o recíproco de suas classificações. O RRF não exige chamadas adicionais de modelo, oferece baixa latência e entrega resultados estáveis.
|
Parâmetro |
Tipo |
Valor padrão |
Descrição |
|
|
double |
1.0 |
Peso atribuído à recuperação vetorial. |
|
|
double |
1.0 |
Peso atribuído à recuperação de texto completo. |
|
|
int |
60 |
Parâmetro do algoritmo RRF. Deve ser maior que 0. |
Configure o RRF conforme o exemplo abaixo:
{
"rerankingConfiguration": {
"type": "RRF",
"numberOfResults": 5,
"rrfConfiguration": {
"denseVectorSearchWeight": 0.6,
"fullTextSearchWeight": 0.4,
"k": 20
}
}
}
MODEL (Rerank por modelo)
Invoca um modelo de Rerank, como gte-rerank-v2, para reclassificar os resultados candidatos. Essa estratégia proporciona a maior qualidade de classificação, mas adiciona latência e custo computacional.
|
Parâmetro |
Tipo |
Valor padrão |
Descrição |
|
|
string |
|
Provedor do modelo de Rerank. Atualmente, apenas o Bailian é suportado. |
|
|
string |
|
Nome do modelo de Rerank. |
Recomendações de estratégia
|
Cenário |
Estratégia recomendada |
|
Cenários gerais sensíveis à latência. |
RRF |
|
Necessidade de controle refinado da proporção entre recuperação vetorial e de texto completo. |
WEIGHT |
|
Exigência da maior qualidade de classificação, com aceitação de latência adicional. |
MODEL |
Filtragem por metadados
Use o parâmetro filter para filtrar resultados com base em condições de metadados durante a recuperação e restringir o escopo de candidatos. Defina os campos de filtro via metadata no momento da criação da base de conhecimento. Para obter a lista completa de operadores, consulte Retrieve Knowledge API.
Operadores de comparação
|
Operador |
Símbolo |
Descrição |
Tipos aplicáveis |
|
|
= |
Igual a. |
Todos os tipos |
|
|
≠ |
Diferente de. |
Todos os tipos |
|
|
> |
Maior que. |
long, double, date |
|
|
≥ |
Maior ou igual a. |
long, double, date |
|
|
< |
Menor que. |
long, double, date |
|
|
≤ |
Menor ou igual a. |
long, double, date |
Operadores de conjunto e correspondência
|
Operador |
Descrição |
Tipos aplicáveis |
|
|
O valor pertence ao conjunto especificado. |
Todos os tipos |
|
|
O valor não pertence ao conjunto especificado. |
Todos os tipos |
|
|
Corresponde a um prefixo de string. |
string |
|
|
Corresponde a texto contido em uma string. |
string |
|
|
Um campo de lista contém o elemento especificado. |
list |
Operadores de combinação lógica
|
Operador |
Descrição |
|
|
Todas as condições devem ser atendidas. |
|
|
Qualquer condição pode ser atendida. |
|
|
Nenhuma das condições pode ser atendida. |
Os operadores andAll, orAll e notAll suportam aninhamento, permitindo a construção de lógicas de filtro combinadas complexas.
Exemplos de filtro
Consulte documentos cuja categoria seja "technology" ou "science", cuja pontuação seja maior ou igual a 60 e cujo título comece com a palavra chinesa para "product":
{
"filter": {
"andAll": [
{"in": {"key": "category", "value": ["technology", "science"]}},
{"greaterThanOrEquals": {"key": "score", "value": 60}},
{"startsWith": {"key": "title", "value": "产品"}}
]
}
}
Use orAll para implementar lógica OR e consultar documentos cujo status seja "active" ou cuja pontuação seja maior que 90:
{
"filter": {
"orAll": [
{"equals": {"key": "status", "value": "active"}},
{"greaterThan": {"key": "score", "value": 90}}
]
}
}
Execute recuperação
O texto de recuperação
textpode conter no máximo 128 caracteres ou caracteres chineses. Solicitações que excedam esse limite retornarão erro. Caso tenha requisitos específicos de negócio, abra um ticket ou participe do grupo de troca técnica do Tablestore 36165029092 para entrar em contato com o suporte técnico.
Defina os campos de filtro como metadados ao crie a base de conhecimento. Caso contrário, as condições de filtro não terão efeito.
O parâmetro
kdo RRF deve ser maior que 0. Se não for, o sistema retornaráVALIDATION_ERROR.Documentos com status
PendingouIndexingnão estão disponíveis para recuperação. Aguarde até que o status mude paraCompleted.Se a base de conhecimento tiver subespaços ativados, passe obrigatoriamente o parâmetro
subspace. A ausência desse parâmetro resultará em erro.
Console
Console
Faça login no console do Agent Storage, abra a base de conhecimento desejada, clique em Retrieval Test no painel de navegação à esquerda e verifique o resultado da recuperação conforme descrito a seguir:
Insira o texto de recuperação na caixa de entrada Content. Se os subespaços estiverem ativados para a base de conhecimento, insira também o nome do subespaço.
Em Search Type, selecione Vector Retrieval ou Full-text Retrieval.
Defina Vector TopK, Full-text TopK e Rerank TopK. Mantenha os valores padrão se desejar.
Selecione uma Rerank Strategy: Model, Weight ou RRF. Ao escolher Weight, defina os pesos para as recuperações vetorial e de texto completo. Mantenha os valores padrão se desejar.
Adicione condições de filtro de metadados caso a base de conhecimento possua campos de metadados definidos.
Clique em Run Retrieval. Em Retrieved Chunks, visualize o conteúdo dos trechos correspondentes, a source e a pontuação de relevância. No primeiro teste, utilize os parâmetros padrão. Após confirme que o conteúdo alvo foi recuperado, ajuste gradualmente o TopK e a estratégia de Rerank.
SDK
Python
Python
Exemplo mínimo: sem passagem de parâmetros de recuperação. A solicitação utiliza a configuração no nível da base de conhecimento ou os valores padrão do sistema.
from tablestore_agent_storage import AgentStorageClient
client = AgentStorageClient(
api_key="<your-api-key>",
ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
ots_instance_name="<instance-name>",
)
resp = client.retrieve({
"knowledgeBaseName": "product_docs_kb",
"retrievalQuery": {"type": "TEXT", "text": "What are the installation steps for the product?"}
})
for r in resp["data"]["retrievalResults"]:
print(f"[{r['score']:.4f}] {r['content'][:80]}...")
Exemplo completo: defina parâmetros de recuperação na solicitação para substituir a configuração no nível da base de conhecimento.
resp = client.retrieve({
"knowledgeBaseName": "product_docs_kb",
"subspace": ["default"],
"retrievalQuery": {"type": "TEXT", "text": "What are the installation steps for the product?"},
"retrievalConfiguration": {
"searchType": ["DENSE_VECTOR", "FULL_TEXT"],
"denseVectorSearchConfiguration": {"numberOfResults": 10},
"fullTextSearchConfiguration": {"numberOfResults": 10},
"rerankingConfiguration": {
"type": "RRF",
"numberOfResults": 5,
"rrfConfiguration": {
"denseVectorSearchWeight": 0.6,
"fullTextSearchWeight": 0.4,
"k": 60
}
},
"filter": {
"andAll": [
{"in": {"key": "category", "value": ["产品文档"]}}
]
}
}
})
for result in resp["data"]["retrievalResults"]:
print(f"[score={result['score']:.4f}] {result['content'][:100]}...")
print(f" source: {result['ossKey']}, chunkId: {result['chunkId']}")
Utilize classes Model para construir a solicitação, garantindo melhor conclusão de código e verificação de tipos na IDE.
from tablestore_agent_storage import AgentStorageClient
from tablestore_agent_storage.models import (
RetrieveRequest, RetrievalQuery, RetrievalQueryType
)
client = AgentStorageClient(
api_key="<your-api-key>",
ots_endpoint="https://<instance>.<region>.ots.aliyuncs.com",
ots_instance_name="<instance-name>",
)
resp = client.retrieve(RetrieveRequest(
knowledge_base_name="product_docs_kb",
retrieval_query=RetrievalQuery(
text="What are the installation steps for the product?",
type=RetrievalQueryType.TEXT
)
))
TypeScript
import { AgentStorageClient } from '@tablestore/agent-storage';
const client = new AgentStorageClient({
apiKey: '<your-api-key>',
endpoint: 'https://<instance>.<region>.ots.aliyuncs.com',
instanceName: '<instance-name>',
});
const resp = await client.retrieve({
knowledgeBaseName: 'product_docs_kb',
retrievalQuery: { type: 'TEXT', text: 'What are the installation steps for the product?' },
});
for (const r of resp.data.retrievalResults) {
console.log(`[${r.score.toFixed(4)}] ${r.content.slice(0, 80)}...`);
}
API
Chame Retrieve para execute a recuperação. Para obter detalhes completos sobre campos de solicitação, campos de resposta e descrições de operadores de filtro, consulte Retrieve Knowledge API.
Ajuste fino da recuperação
Relações do parâmetro numberOfResults
O processo de recuperação envolve três configurações de numberOfResults. Compreender a relação entre elas é fundamental para o ajuste fino:
denseVectorSearchConfiguration.numberOfResults = N1 ← Vector retrieval recall count
fullTextSearchConfiguration.numberOfResults = N2 ← Full-text retrieval recall count
rerankingConfiguration.numberOfResults = N3 ← Final return count after Rerank
N1 e N2 determinam o tamanho do pool de candidatos. Valores maiores aumentam a taxa de recall, mas também elevam o custo computacional.
N3 define a quantidade de resultados finais retornados. Geralmente, N3 < N1 e N3 < N2.
(Recomendado) Inicie com N1 = N2 = 20 e N3 entre 5 e 10. Ajuste esses valores gradualmente com base nos resultados obtidos.
Seleção do tipo de recuperação
|
Cenário |
Tipo de recuperação recomendado |
Descrição |
|
Perguntas em linguagem natural. |
|
A recuperação vetorial captura a semântica, enquanto a recuperação de texto completo garante correspondências de palavras-chave. |
|
Palavras-chave ou identificadores exatos. |
Priorize |
A recuperação vetorial não é sensível a correspondências exatas. |
|
Cenários de compreensão puramente semântica. |
Priorize |
Por exemplo, "como instale" corresponde a "etapas de implantação". |
Recomendações de uso do filtro de metadados
O filtro restringe o escopo de candidatos antes da recuperação, melhorando tanto a precisão da busca quanto o desempenho.
Defina os campos de filtro como metadados durante a criação da base de conhecimento. Não é possível adicioná-los em tempo de execução.
Para filtragem por intervalo de datas, prefira o tipo
dateem vez do tipostringpara habilitar operadores de comparação de intervalo.