Aprendizagem pessoal com IA
e orientação prática
TRAE

Implementação de uma base de conhecimento local/API baseada no DeepSeek-R1 e acesso ao WeChat BOT

No artigo anterior, "OTutoriais de implantação local do DeepSeek-R1 e de acesso ao WeChat BotEm "DeepSeek-R1", implantamos o DeepSeek-R1 localmente e acessamos um bot do WeChat para conversar conosco, mas hoje eu gostaria de compartilhar com você uma maneira mais interessante de brincar com ele: como alimentar nosso assistente de IA com algumas coisas secas, para que ele possa se transformar em um consultor profissional que realmente sabe o que está fazendo!

 


Em seguida, vou orientá-lo a concluir todo o processo de criação da base de conhecimento, incluindo a configuração do ambiente, a implantação da base de conhecimento, o upload de informações, bem como alguns detalhes das dicas de ajuste. Por fim, colocaremos essa IA "cheia de conhecimento" no robô do WeChat para criar um assistente inteligente que realmente entenda você e o setor!

Em primeiro lugar, vamos dar uma olhada no resultado, que é o resultado depois que eu carreguei uma consulta de informações sobre "Classificação de incapacidade por lesão humana":

 

Implementação do DeepSeek-R1

DeepSeek Há duas maneiras de implementar, seja localmente ou acessando uma API de terceiros.

Prós e contras de ambos:

  • implantação local
    Vantagens: dados totalmente privados, baixos custos a longo prazo, capacidade de resposta
    Desvantagens: consome aritmética local, requer máquinas mais bem configuradas
  • Chamada de API
    Vantagens: acesso rápido, livre de manutenção, escalabilidade resiliente
    Desvantagens: os dados precisam ser repassados a terceiros, os custos de longo prazo são incontroláveis

DeepSeek local

Primeiro, você precisa ter certeza de que instalou o ollama e o ollama está funcionando corretamente.

DeepSeekAPI

Na verdade, eu ia escrever esta postagem apenas sobre a abordagem de implementação local .....

No entanto, como a versão web do DeepSeek tem estado "em greve" ultimamente, fui forçado a experimentar a versão local. ChatBox Eu não esperava experimentar uma versão completa do R1, e foi muito divertido! Acho que essa solução também tem um cheiro bom, então, a propósito, escreverei na forma de API.

Aqui, estou fornecendo duas plataformas para você acessar de acordo com sua escolha.

Primeiro, precisamos obter a APIkey e, em seguida, preencher a configuração da base de conhecimento com a APIkey.

 

Arca vulcânica

site oficial
https://console.volcengine.com/ark

preços

Entrada: ¥2/M Tokens

Saída: ¥8/M Tokens

entradaAPIKey管理CriarAPIkey

Nova chave secreta, copiar APIkey

Fluxo baseado em silício

Fluxo baseado em silício site oficial

https://cloud.siliconflow.cn/account/ak

preços

Entrada: ¥4/M Tokens

Saída: ¥16/M Tokens

Vá para o lado esquerdo da telaAPI秘钥Clique em新建秘钥chave secreta de pós-cópia

 

repositório

Instalação da base de conhecimento

Em seguida, precisamos acessar a base de conhecimento, e aqui usamosAnythingLLMO projeto.

 

O AnythingLLM é uma estrutura de aplicativos de código aberto do Large Language Model (LLM) projetada para ajudar os usuários a criar e implantar facilmente perguntas e respostas inteligentes, análise de documentos e outros aplicativos baseados em dados privados.

Acesse o site do AnythingLLM e faça o download do instalador.

https://anythingllm.com/

Execute o instalador e, em seguida, ele fará o download das dependências adicionais necessárias (GPU, suporte a NPG)

Se o download falhar, ou se você fechar a janela de download e pular esta etapa, o AnythingLLM ainda assim será instalado com êxito.

Não se preocupe neste ponto, você pode fazer a instalação manualmente.

O link da web tem umlibZip.

Extraia o arquivo zip e coloque a pasta extraída no diretório你的安装目录AnythingLLMresourcesollamaDentro do catálogo.

Configuração da base de conhecimento

Após a conclusão da instalação, entre na interface do AnythingLLM, onde você precisa selecionar um modelo grande padrão.

configuração local

Se você estiver usando uma implementação local do DeepSeek, role para baixo para encontrar oOllamaBasta escolher.

Configuração da API

Se você estiver usando uma API de terceiros, esta etapa não precisa ser selecionadaollamaEncontre-o aqui.Generic OpenAI

Generic OpenAI:

 

Conecte-se a qualquer serviço compatível com o formato de interface OpenAI por meio de uma configuração personalizada.

Há 5 parâmetros a serem preenchidos aqui

Use a API de fluxo baseada em silicone:

BaseURLendereço de solicitação

https://api.siliconflow.cn/v1

APIkeyChave secreta da API, preencha a que você acabou de receber.

ChatModelNameNome do modelo

Pro/deepseek-ai/DeepSeek-R1

Token context window(janela de contexto)

4096

Max Tokens(Número máximo de tokens)

4096 ou 8192, dependendo de sua situação.

Use a API Volcano Ark:

BaseURLendereço de solicitação

https://ark.cn-beijing.volces.com/api/v3

APIkeyChave secreta da API, preencha a que você acabou de receber.

ChatModelNameNome do modelo

O nome do modelo do Volcano Ark precisa ser preenchido com o ID do ponto de acesso. Precisamos ir à plataforma para criar o ponto de acesso.

Comece ativando o DeepSeekR1 primeiro!

Come to Online Reasoning - Criando pontos de acesso

Confirmar o acesso

Essa ID é a ID do ponto de acesso, basta preencher esse valor.

Token context window(janela de contexto)

4096

Max Tokens(Número máximo de tokens)

4096 ou 8192, dependendo de sua situação.

Quando as configurações acima estiverem concluídas, não se esqueça de tocar emSaveChanageSalvar.

Criação de espaço de trabalho

A próxima etapa dessa interface de privacidade é informar como salvar os dados e como usar essas instruções, de qualquer forma, são todos conjuntos de palavras que podem ser ignorados diretamente na próxima etapa

Esta etapa é a tela de boas-vindas, nada de especial, simplesmente pule-a!

Crie um nome para o espaço de trabalho. É recomendável que você use inglês, pois isso será útil se você quiser usar a API para chamá-lo mais tarde.

Agora, digite AnythingLLM A interface principal do jogo já está pronta. Ela ensinará você a jogar com um exemplo de diálogo

Clique no espaço de trabalho que acabamos de nomear à esquerda para entrar em uma nova tela de diálogo.

Aqui está um diálogo simples para testar se a chamada do modelo foi bem-sucedida.

Configuração do espaço de trabalho

Clique no botão Setup (Configuração) no lado direito do espaço de trabalho para acessar a interface Setup (Configuração).

Vá para as configurações do bate-papo, onde podemos ajustar os detalhes do modelo

Aqui é onde você ajusta o modelo grande atualmente em uso. O padrão é usar o modelo definido pelo sistema, que foi definido anteriormenteollama

Outros modelos locais grandes ou serviços de API também estão disponíveis.

O modo é dividido em chat e consulta, consulta significa usar apenas a função de contexto de consulta (você precisa ter seus próprios documentos carregados), chat significa usar a função de chat + consulta

Número de contextos

Você pode interpretá-la como uma palavra-chave pessoal, que pode ser modificada para chinês ou deixada como padrão.

Informações sobre alimentação

Em seguida, você precisa alimentar a base de conhecimento, clicar no espaço de trabalho ao lado de上传按钮

Acesso à interface de gerenciamento da base de conhecimento

Oferece suporte a upload em lote, Excel, world, txt e outros formatos de arquivo. Aqui eu fiz o upload de um arquivo《人体损伤致残程度分级》.pdf.

Selecione o arquivo e clique emMove to WorkSpaceEsta etapa adiciona arquivos da área temporária ao espaço de trabalho.

Você pode ver os arquivos carregados transferidos à direita, aqui clique no botãoSace and EmbedFaça uma defesa.

Dicas abaixoWorkSpace updated successfullyIndica um salvamento bem-sucedido.

Aqui você precisa clicar emPin to workspaceEste botão.

Fixar no espaço de trabalho::

 

Se, ao usar o AnythingLLM, você perceber que não está obtendo respostas satisfatórias por padrão, poderá melhorar a qualidade das respostas fixando documentos. Essa é uma maneira rápida de aumentar a precisão e a relevância de suas respostas.

Em termos simples, a fixação de documentos é o processo de "alimentar" o conteúdo de um documento diretamente no modelo de linguagem para que ele possa consultar esse conteúdo ao responder a uma pergunta e fornecer uma resposta melhor.

Em seguida, voltamos à página Conversations (Conversas), criamos uma nova conversa, fazemos uma pergunta e verificamos se a base de conhecimento foi adicionada com êxito.

resolução de erros

Você pode ver que o DeepSeek respondeu à pergunta em conjunto com as informações carregadas, mas há erros na resposta.

Por exemplo, a primeira pergunta:

Pergunte:

 

Qual é a classificação para duas costelas quebradas?

Resposta:

 

Com base nas informações contextuais fornecidas, os Padrões de Classificação de Incapacidade por Lesão Humana para fraturas de costela são os seguintes:

Lesão grave de grau 2: fratura de mais de quatro costelas ou mais de duas costelas com movimento paradoxal;

Lesões leves de primeiro grau: fraturas da primeira à terceira costela.

No caso de uma fratura de duas costelas, se não for acompanhada de atividade paradoxal ou outras condições graves (por exemplo, mais de quatro), ela é classificada como uma lesão leve de primeiro grau. Assim, duas costelas fraturadas são classificadas:

ferimentos leves (primeiro grau)

Entretanto, no arquivo carregado, duas costelas quebradas são classificadas como uma lesão menor de segundo grau. Esse é um erro bastante grave para um aplicativo de consultoria jurídica.

Não há necessidade de pressa quando se trata desse tipo de incapacidade de responder a perguntas, vamos solucionar a causa.

Dei uma olhada mais de perto no arquivo PDF carregado e descobri que ele continha muitas tabelas, formatação especial e uma grande quantidade de conteúdo não utilizado. Essas "impurezas" afetam a capacidade da IA de entender o que realmente queremos que ela aprenda.

Toda essa formatação bagunçada pode fazer com que a IA perca a noção dos pontos principais, como quando vemos um livro bagunçado. Por isso, reorganizei o conteúdo principal em um documento conciso do Word, excluí o conteúdo inutilizável e o alimentei novamente na IA.

Um trecho do conteúdo do documento agrupado:

5.6.4轻伤二级
b)肋骨骨折2处以上。
c) 胸骨骨折;锁骨骨折;肩胛骨骨折。
d)胸锁关节脱位;肩锁关节脱位。
e) 胸部损伤,致皮下气肿1周不能自行吸收。
f) 胸腔积血;胸腔积气。
g)胸壁穿透创。
h)胸部挤压出现窒息征象。
5.6.5轻微伤
a)肋骨骨折;肋软骨骨折。
5.7    腹部损伤
5.7. 1重伤一级
a)肝功能损害(重度)。
b)胃肠道损伤致消化吸收功能严重障碍,依赖肠外营养。
c) 肾功能不全(尿毒症期)。

Tentei fazer a pergunta novamente e, dessa vez, a resposta foi muito mais precisa!

Essa é apenas a solução mais simples. Se quiser que a IA responda com mais precisão, você também pode tentar ajustar o formato do documento, otimizar o método de pesquisa, ajustar os parâmetros da IA e assim por diante. Mas falaremos sobre essas jogadas avançadas mais tarde.

 

Acesso ao WeChat BOT

Obter a chave secreta do AnythingLLM

show (um ingresso)AnythingLLMinterface, vá para Configurações - Chave secreta da API - Gerar nova chave secreta da API

Usando o pacote de integração

Eu coloqueiAnythingLLMinterface paraNGCBOTe transformados em um pacote integrado.

Descompacte o link da Web na seçãoNGCBOT_LLM.zipZip, clique duas vezes启动器.exePronto para funcionar.

Há três coisas que você precisa fazer antes de usá-lo!

Há três coisas que você precisa fazer antes de usá-lo!

Há três coisas que você precisa fazer antes de usá-lo!

Primeiro, certifique-se de que não haja chinês no diretório de seu pacote de integração; haverá um erro se houver chinês!

demonstração correta

F:AIAIpackageNGCBot

falsa demonstração

F:微信BOTAIpackageNGCBot

Em segundo lugar, instale a versão especificada do WeChat.

Há uma versão da Microsoft no link da Web

WeChatSetup-3.9.10.27.exe

Ao instalar essa versão, o computador que originalmente tinha a Microsoft não precisa excluir, substituindo diretamente a instalação.

Em terceiro lugar, modifique o arquivo de configuração do NGCBOT.

exigem uma compreensão completa deConfigConfig.yamlO arquivo de configuração pode ser modificado.

Há três alterações no arquivo de configuração

1. modifique a configuração do superadministrador.

Aqui, preencha o ID do micro-sinal que você configurou, lembre-se de sempre alterá-lo! Caso contrário, tudo será enviado para mim ....

Como faço para obter essa ID? Use o microsinal que deseja configurar como administrador, envie uma mensagem para o bot e, em seguida, verá o ID da pessoa que enviou a mensagem no console.

2) Modifique a configuração de prioridade da IA.

Esta é a ordem em que as interfaces ai são executadas; um número menor na frente significa prioridade. A configuração padrão é a prioridade AnythingLLM.

3.AnythingLLM configuration.

Aqui você precisa alterar oworkspaceeAnythingLLMkeyEsses dois valores estão corretos.

workspacePreencha o nome do espaço de trabalho que você criou com o AnythingLLM, em letras minúsculas.

AnythingLLMkeyPreencha a chave secreta que você recebe no AnythingLLM. Não a chave secreta do Silicon Flow ou a do Volcano Ark!

Lembre-se de deixar o portador na frente.

Depois de seguir as etapas acima para fazer alterações, clique duas vezes no ícone启动器.exeEntão você pode se divertir!

A aquisição do pacote de integração está no final do artigo.

Parabéns! Qualquer pessoa que veja isso é 👍🏻👍🏻

Se você quiser apenas começar a brincar rapidamente com os bots da base de conhecimento, veja aqui.

Aqui está o que está escrito para os pequenos que querem se aprofundar no assunto

  • Como chamar a interface AnythingLLM
  • Como ampliar a funcionalidade do NGCBOT

Continue lendo se você estiver interessado

 

desenvolvimento e expansão

chamada de interface

 

Esta etapa é adequada para aqueles que desejam expandir sua pesquisa de desenvolvimento. Se você for um iniciante e quiser reproduzir o pacote de integração diretamente, pule esta etapa.

OK, vamos avançar um pouco mais. Entradas do navegador[http://localhost:3001/api/docs/](http://localhost:3001/api/docs/)Vá para a página da API.

Aqui, como a documentação oficial original da API não pode ser acessada na Web, ela foi alterada para acesso local à documentação da API.

Depois de entrar na página de descrição da API, você pode ver que há várias interfaces aqui. E ela suporta a depuração diretamente nessa página.

Antes de começarmos a acessar, precisamos autorizar a chave secreta, clique no botãoAuthorize.

Cole a chave AnythingLLMAPI na tela aberta; a autorização foi bem-sucedida!

Em seguida, desça e encontre/v1/workspace/{slug}/chatEssa API

Descrição do parâmetro

parâmetros instruções nota
lesma espaço de trabalho Rejeitar caracteres chineses, letras maiúsculas e outros caracteres especiais, apenas letras minúsculas
mensagem Mensagem A mensagem que você deseja enviar
modo paradigma O esquema é dividido em chat e consulta; consulta significa usar apenas a função de contexto de consulta (você precisa ter seus próprios documentos carregados); chat significa usar a função de chat

Exemplo de uma solicitação (corpo da solicitação)

curl --location 'http://localhost:3001/api/v1/workspace/newwork/chat' 
--header 'Authorization: Bearer 7X26VBD-0824RMG-MD0VV2X-PC02ZJ4' 
--header 'Content-Type: application/json' 
--data '{
  "message": "两根肋骨骨折是什么等级?",
  "mode": "chat"
}'

Respostas

{
    "id": "488ff13e-0206-4014-bf50-ea2d8e78c1c3",
    "type": "textResponse",
    "close": true,
    "error": null,
    "chatId": 17,
    "textResponse": "<think>n好的,我现在需要解决用户的问题:“两根肋骨骨折是什么等级?” 用户之前已经询问过这个问题,并且我给出了一个回答,但现在他再次提问,可能希望得到更详细或不同的解释。nn首先,回顾一下上下文。在提供的Context 0中,5.6.4轻伤二级部分提到了b)肋骨骨折2处以上属于轻伤二级。因此,两根肋骨骨折符合这一标准,应定级为轻伤二级。nn用户可能是一名法律工作者、家属或受伤者本人,想要了解骨折的严重程度以便处理工伤赔偿或其他相关事宜。他们可能对分级标准不太熟悉,所以才会多次询问。nn在思考过程中,我需要确认是否还有其他相关的评定标准会影响结果。例如,是否有特殊情况如骨折的位置、是否伴随内脏损伤等,这些因素可能会改变评定等级。但根据提供的Context,没有提到这些情况,因此只能基于给出的信息进行判断。nn此外,用户可能希望知道如何申请工伤认定或后续的赔偿流程,但由于信息有限,我无法提供具体步骤,但可以建议他们联系劳动保障部门或医疗机构获取专业指导。nn总结来说,两根肋骨骨折属于轻伤二级,这是根据提供的标准得出的结论。用户可能需要进一步的法律或医疗咨询来处理相关事宜。n</think>nn根据您提供的上下文信息:nn在 **5.6.4 轻伤二级** 中提到:n- **b) 肋骨骨折2处以上**。nn因此,**两根肋骨骨折属于轻伤二级**。",
    "sources": [
        {
            "text": "5.2.4轻伤二级nna)面部单个创口或者瘢痕长度4.5cm 以上;多个创口或者瘢痕长度累计6.0cm 以上。nnb)面颊穿透创,皮肤创口或者瘢痕长度1.0cm以上。nnc)口唇全层裂创,皮肤创口或者瘢痕长度1.0cm 以上。nnd) 面部块状瘢痕,单块面积3.0cm²以上或多块面积累计5.0cm²以上。nne) 面部片状细小瘢痕或者色素异常,面积累计8.0cm²以上。f)眶壁骨折(单纯眶内壁骨折除外)。nng)眼睑缺损。nnh) 一侧眼睑轻度外翻。nni) 一侧上眼睑下垂覆盖瞳孔。nnj) 一侧眼睑闭合不全。nnk)一侧泪器损伤伴溢泪。nn1)耳廓创口或者瘢痕长度累计6.0cm以上。nnm)耳廓离断、缺损或者挛缩畸形累计相当于一侧耳廓面积15%以上。n)鼻尖或者一侧鼻翼缺损。nno) 鼻骨粉碎性骨折;双侧鼻骨骨折;鼻骨骨折合并上颌骨额突骨折;鼻骨骨折合并鼻中隔骨折;双侧上颌骨额突骨折。nnp) 舌缺损。nnq) 牙齿脱落或者牙折2枚以上。nnr) 腮腺、颌下腺或者舌下腺实质性损伤。nns) 损伤致张口困难I 度 。nnt)颌骨骨折(牙槽突骨折及一侧上颌骨额突骨折除外)。u)颧骨骨折。nn5.2.5轻微伤nnnnnnnnnna)面部软组织创。nnb)面部损伤留有瘢痕或者色素改变。nnc) 面部皮肤擦伤,面积2.0cm²以上;面部软组织挫伤;面部划伤4.0cm以上。nnd)眶内壁骨折。nne)眼部挫伤;眼部外伤后影响外观。nnf) 耳廓创。nng) 鼻骨骨折;鼻出血。h)上颌骨额突骨折。nni) 口腔粘膜破损;舌损伤。nnj) 牙齿脱落或者缺损;牙槽突骨折;牙齿松动2枚以上或者Ⅲ度松动1枚以上。nn5.3  听器听力损伤nn5.3. 1重伤一级nna) 双耳听力障碍(≥91dB HL)。nn5.3.2重伤二级nna) 一耳听力障碍(≥91dB HL)。nnb) 一耳听力障碍(≥81dB  HL),另一耳听力障碍(≥41dB HL)。nnc) 一耳听力障碍(≥81dB   HL),伴同侧前庭平衡功能障碍。nnd) 双耳听力障碍(≥61dB HL)。nne) 双侧前庭平衡功能丧失,睁眼行走困难,不能并足站立。nn5.3.3轻伤一级nna)双耳听力障碍(≥41dB HL)。nnb)双耳外耳道闭锁。nn5.3.4轻伤二级nna) 外伤性鼓膜穿孔6周不能自行愈合。b...continued on in source document...",
            "id": "210f98f0-d656-4c0f-b3d5-d617f6398eca",
            "url": "file://C:\Users\XX\AppData\Roaming\anythingllm-desktop\storage\hotdir\新建 DOCX 文档.docx",
            "title": "新建 DOCX 文档.docx",
            "docAuthor": "no author found",
            "description": "No description found.",
            "docSource": "pdf file uploaded by the user.",
            "chunkSource": "localfile://C:\Users\XX\Desktop\新建 DOCX 文档.docx",
            "published": "2025/2/7 13:00:52",
            "wordCount": 126,
            "token_count_estimate": 3870
        }
    ],
    "metrics": {
        "prompt_tokens": 431,
        "completion_tokens": 326,
        "total_tokens": 757,
        "outputTps": 63.178294573643406,
        "duration": 5.16
    }
}

Dessa forma, concluímos o teste de chamada da interface AnythingLLM. De acordo com essa interface, você pode implementar sua própria lógica de negócios. Abaixo, combinamos o WeChat BOT para implementar o robô da base de conhecimento.

Modificações do NGC

Os projetos NGCBOT precisam estar emApiServerAiServerAiDialogue.pyAdição de uma chamada ao scriptAnythingLLMA lógica do

Aqui, colocarei apenas o código.

def getAnythingLLM(self, content, messages):
"""
本地 AnythingLLM 模型
:param content: 对话内容
:param messages: 消息列表
:return:
"""
op(f'[*]: 正在调用本地AnythingLLM对话接口... ...')
messages.append({"role": "user", "content": f'{content}'})

data = {
"model": self.anythingLLMConfig.get('anythingllmModel'),
"message": content
}

headers = {
"Content-Type": "application/json", 
"Authorization": self.anythingLLMConfig.get('anythingllmKey')
}

try:
resp = requests.post(
url=self.anythingLLMConfig.get('anythingllmApi').format(workspace=self.anythingLLMConfig.get('workspace')),
headers=headers,
json=data,
timeout=300
)

resp.encoding = 'utf-8'
json_data = resp.json()

assistant_content = json_data['textResponse']

if "</think>" in assistant_content:
assistant_content = assistant_content.split("</think>")[1].strip()

messages.append({"role": "assistant", "content": f"{assistant_content}"})
if len(messages) == 21:
del messages[1]
del messages[2]
return assistant_content, messages
except Exception as e:
op(f'[-]: 本地AnythingLLM对话接口出现错误, 错误信息: {e}')
return None, [{"role": "system", "content": f'{self.systemAiRole}'}]

 

Adicione oanythingLLMConfig

self.anythingLLMConfig = {
            'anythingllmApi': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmApi'],
            'anythingllmKey': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmKey'],
            'anythingllmModel': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmModel'],
            'workspace': configData['apiServer']['aiConfig']['AnythingLLM']['workspace']
        }

 

Aquisição de pacotes de integração

Tootsie Labs - Edição Windowns

Quark:
https://pan.quark.cn/s/8d1293227cf9

Baidu.
https://pan.baidu.com/s/1wx8LmbY2XBaJAAJvmGK06g?pwd=8d5m

Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Implementação de uma base de conhecimento local/API baseada no DeepSeek-R1 e acesso ao WeChat BOT
pt_BRPortuguês do Brasil