pip install -U bida
from bida import ChatLLM
llm = ChatLLM (
model_type = 'openai' , # 调用openai的chat模型
model_name = 'gpt-4' ) # 设定模型为:gpt-4,默认是gpt3.5
result = llm . chat ( "从1加到100等于多少?只计算奇数相加呢?" )
print ( result )
from bida import ChatLLM
llm = ChatLLM (
model_type = "baidu" , # 调用百度文心一言
stream_callback = ChatLLM . stream_callback_func ) # 使用默认的流式输出函数
llm . chat ( "你好呀,请问你是谁?" )
empresa modelo | Tipo de modelo | Nome do modelo | Seja para apoiar | ilustrar |
---|---|---|---|---|
OpenAI | Bater papo | gpt-3.5, gpt-4 | √ | Suporta todos os modelos gpt3.5 e gpt4 |
Conclusão de texto | texto-davinci-003 | √ | Modelo de classe de geração de texto | |
Incorporações | incorporação de texto-ada-002 | √ | modelo vetorizado | |
Baidu-Wen Xin Yiyan | Bater papo | ernie-bot, ernie-bot-turbo | √ | Modelo de bate-papo comercial Baidu |
Incorporações | incorporação_v1 | √ | Modelo de vetorização comercial do Baidu | |
Modelo hospedado | Vários modelos de código aberto | √ | Para vários modelos de código aberto hospedados pelo Baidu, configure-os você mesmo usando o protocolo de acesso de modelo de terceiros do Baidu. Para obter detalhes, consulte a seção de acesso ao modelo abaixo. | |
Alibaba Cloud-Tongyi Qianwen | Bater papo | qwen-v1, qwen-plus-v1, qwen-7b-chat-v1 | √ | Modelos de bate-papo comercial e de código aberto do Alibaba Cloud |
Incorporações | incorporação de texto-v1 | √ | Modelo de vetorização comercial Alibaba Cloud | |
Modelo hospedado | Vários modelos de código aberto | √ | Para outros tipos de modelos de código aberto hospedados pelo Alibaba Cloud, configure-os você mesmo usando o protocolo de acesso de modelo de terceiros do Alibaba Cloud. Para obter detalhes, consulte a seção de acesso ao modelo abaixo. | |
MiniMax | Bater papo | abab5, abab5.5 | √ | Modelo de bate-papo comercial MiniMax |
Bate-papo profissional | abab5.5 | √ | O modelo de bate-papo comercial MiniMax, usando o modo Chatcompletion pro personalizado, suporta cenários de conversação com várias pessoas e vários bots, conversas de amostra, restrições de formato de retorno, chamadas de função, plug-ins e outras funções | |
Incorporações | embo-01 | √ | Modelo vetorial comercial MiniMax | |
Espectro de sabedoria AI-ChatGLM | Bater papo | ChatGLM-Pro, Std, Lite, characterglm | √ | Modelo grande comercial multi-versão Zhipu AI |
Incorporações | Incorporação de texto | √ | Modelo de vetor de texto comercial Zhipu AI | |
iFlytek-Spark | Bater papo | SparkDesk V1.5, V2.0 | √ | Modelo Cognitivo Grande iFlytek Spark |
Incorporações | incorporação | √ | modelo de vetor de texto iFlytek Spark | |
SenseTime-RiRiXin | Bater papo | nova-ptc-xl-v1, nova-ptc-xs-v1 | √ | SenseNova SenseTime diário novo modelo grande |
Inteligência Baichuan | Bater papo | baichuan-53b-v1.0.0 | √ | Modelo grande Baichuan 53B |
Tencent-Hunyuan | Bater papo | TencentHunyuan | √ | Modelo grande Tencent Hunyuan |
Modelo de código aberto autoimplantado | Bate-papo, conclusão, incorporações | Vários modelos de código aberto | √ | Usando modelos de código aberto implantados pelo FastChat e outras implantações, a interface da API da Web fornecida segue APIs RESTful compatíveis com OpenAI e pode ser suportada diretamente. Para obter detalhes, consulte o capítulo de acesso ao modelo abaixo. |
Perceber :
As duas tecnologias do modelo LLM e do prompt word Prompt no AIGC são muito novas e estão se desenvolvendo rapidamente. A teoria, os tutoriais, as ferramentas, a engenharia e outros aspectos são muito deficientes. A pilha de tecnologia usada quase não se sobrepõe à experiência dos principais desenvolvedores atuais. :
Classificação | Desenvolvimento dominante atual | Projeto imediato | Desenvolva modelos, ajuste modelos |
---|---|---|---|
linguagem de desenvolvimento | Java, .Net, Javscript, ABAP, etc. | Linguagem natural, Python | Pitão |
ferramentas de desenvolvimento | Muito e maduro | nenhum | Maduro |
Limiar de desenvolvimento | inferior e maduro | baixo, mas muito imaturo | muito alto |
tecnologia de desenvolvimento | claro e constante | Fácil de começar, mas muito difícil de obter resultados estáveis | complexo e variado |
Técnicas comumente usadas | Orientado a objetos, banco de dados, big data | ajuste rápido, aprendizado incontexto, incorporação | Transformador, RLHF, ajuste fino, LoRA |
Suporte de código aberto | rico e maduro | Muito confuso em nível inferior | rico, mas imaturo |
custo de desenvolvimento | Baixo | mais alto | muito alto |
Desenvolvedor | Rico | Extremamente escasso | muito escasso |
Desenvolver modelo colaborativo | Desenvolver de acordo com documentos entregues pelo gerente de produto | Uma pessoa ou uma equipe minimalista pode lidar com todas as operações, desde os requisitos até a entrega | Desenvolvido de acordo com orientações teóricas de pesquisa |
Actualmente, quase todas as empresas de tecnologia, empresas de Internet e empresas de big data estão todas nesta direcção, mas as empresas mais tradicionais ainda estão num estado de confusão. Não é que as empresas tradicionais não precisem disso, mas sim que: 1) não têm reservas de talentos técnicos, por isso não sabem o que fazer; 2) não têm reservas de hardware e não têm; ter capacidade para o fazer; 3) O grau de digitalização dos negócios é baixo e a transformação e modernização do AIGC tem um ciclo longo e resultados lentos.
Atualmente, existem muitos modelos comerciais e de código aberto no país e no exterior, e eles estão se desenvolvendo muito rapidamente. No entanto, as APIs e os objetos de dados dos modelos são diferentes. nova versão), temos que ler os documentos de desenvolvimento e modificar o código do seu próprio aplicativo para se adaptar. Acredito que todo desenvolvedor de aplicativos testou muitos modelos e deve ter sofrido com isso.
Na verdade, embora as capacidades do modelo sejam diferentes, os modos para fornecer capacidades são geralmente os mesmos, portanto, ter uma estrutura que possa se adaptar a um grande número de APIs de modelo e fornecer um modo de chamada unificado tornou-se uma necessidade urgente para muitos desenvolvedores.
Em primeiro lugar, a bida não se destina a substituir a langchain, mas o seu posicionamento alvo e conceitos de desenvolvimento também são muito diferentes:
Classificação | cadeia de idiomas | bida |
---|---|---|
grupo-alvo | Toda a multidão de desenvolvimento na direção da AIGC | Desenvolvedores que têm necessidade urgente de combinar AIGC com desenvolvimento de aplicativos |
Suporte de modelo | Suporta vários modelos para implantação local ou remota | Somente chamadas de modelo que fornecem API Web são suportadas. Atualmente, a maioria dos modelos comerciais também podem fornecer API Web após serem implantados usando estruturas como FastChat. |
estrutura do quadro | Por fornecer muitos recursos e uma estrutura muito complexa, em agosto de 2023, o código principal tinha mais de 1.700 arquivos e 150.000 linhas de código, e o limite de aprendizado é alto. | Existem mais de dez códigos principais e cerca de 2.000 linhas de código. É relativamente fácil aprender e modificar o código. |
Suporte de função | Fornece cobertura completa de vários modelos, tecnologias e campos de aplicação na direção da AIGC | Atualmente, ele fornece suporte para ChatCompletions, Completions, Embeddings, Function Call e outras funções multimodais como voz e imagem serão lançadas em um futuro próximo. |
Incitar | Modelos de prompt são fornecidos, mas os prompts usados por suas próprias funções são incorporados ao código, dificultando a depuração e a modificação. | Modelos de prompt são fornecidos. Atualmente, não há função integrada para usar o Prompt. Se usado no futuro, o modo de pós-carregamento baseado em configuração será usado para facilitar os ajustes do usuário. |
Conversa e memória | Oferece suporte e fornece vários métodos de gerenciamento de memória | Suporte, suporte para persistência de conversação (salvo em duckdb), memória fornece recursos limitados de sessão de arquivamento e outros recursos podem ser expandidos pela estrutura de extensão |
Função e plug-in | Apoie e forneça recursos de expansão avançados, mas o efeito de uso depende dos próprios recursos do modelo grande | Compatível com modelos grandes usando a especificação Function Call da OpenAI |
Agente e Rede | Apoie e forneça recursos de expansão avançados, mas o efeito de uso depende dos próprios recursos do modelo grande | Não apoiado, pretendemos abrir outro projeto para implementá-lo, ou podemos expandir e desenvolver por conta própria com base no framework atual. |
Outras funções | Suporta muitas outras funções, como divisão de documentos (a incorporação é feita após a divisão, usada para implementar chatpdf e outras funções semelhantes) | Atualmente não há outras funções. Se forem adicionadas, serão implementadas abrindo um novo projeto compatível. Atualmente, podem ser implementadas usando a combinação de capacidades fornecidas por outros produtos. |
Eficiência operacional | Muitos desenvolvedores relatam que é mais lento do que chamar a API diretamente e o motivo é desconhecido. | Ele apenas encapsula o processo de chamada e unifica a interface de chamada, e o desempenho não é diferente de chamar a API diretamente. |
Como um projeto de código aberto líder na indústria, o langchain fez grandes contribuições para a promoção de grandes modelos e AGI. Ao mesmo tempo, também nos baseamos em muitos de seus modelos e ideias no desenvolvimento. bida. Mas o langchain quer ser uma ferramenta grande e abrangente, o que inevitavelmente leva a muitas deficiências. Os artigos a seguir têm opiniões semelhantes: Max Woolf - Chinês, Hacker News - Chinês.
Um ditado popular no círculo resume muito bem: langchain é um livro didático que todos aprenderão, mas acabarão jogando fora.
Instale o bida mais recente do pip ou pip3
pip install -U bida
Clone o código do projeto do github para o diretório local:
git clone https://github.com/pfzhou/bida.git
pip install -r requirements.txt
Modifique o arquivo no diretório raiz do código atual: A extensão de ".env.template" torna-se o arquivo de variável de ambiente ".env" . Configure a chave do modelo que você solicitou de acordo com as instruções do arquivo.
Observação : este arquivo foi adicionado à lista de ignorados e não será transmitido ao servidor git.
exemplos1.Ambiente de inicialização.ipynb
O código de demonstração a seguir usará uma variedade de modelos suportados pelo bida. Modifique e substitua o valor **[model_type]** no código pelo nome da empresa do modelo correspondente de acordo com o modelo que você comprou. para experiência:
# 更多信息参看bidamodels*.json中的model_type配置
# openai
llm = ChatLLM ( model_type = "openai" )
# baidu
llm = ChatLLM ( model_type = "baidu" )
# baidu third models(llama-2...)
llm = ChatLLM ( model_type = "baidu-third" )
# aliyun
llm = ChatLLM ( model_type = "aliyun" )
# minimax
llm = ChatLLM ( model_type = "minimax" )
# minimax ccp
llm = ChatLLM ( model_type = "minimax-ccp" )
# zhipu ai
llm = ChatLLM ( model_type = "chatglm2" )
# xunfei xinghuo
llm = ChatLLM ( model_type = "xfyun" )
# senstime
llm = ChatLLM ( model_type = "senstime" )
# baichuan ai
llm = ChatLLM ( model_type = "baichuan" )
# tencent ai
llm = ChatLLM ( model_type = "tencent" )
Modo de bate-papo: ChatCompletion, o atual modo de interação LLM convencional, bida suporta gerenciamento de sessão, persistência e gerenciamento de memória.
from bida import ChatLLM
llm = ChatLLM ( model_type = 'baidu' )
result = llm . chat ( "你好呀,请问你是谁?" )
print ( result )
from bida import ChatLLM
# stream调用
llm = ChatLLM ( model_type = "baidu" , stream_callback = ChatLLM . stream_callback_func )
result = llm . chat ( "你好呀,请问你是谁?" )
from bida import ChatLLM
llm = ChatLLM ( model_type = "baidu" , stream_callback = ChatLLM . stream_callback_func )
result = llm . chat ( "你是一个服务助理,请简洁回答我的问题。我的名字是老周。" )
result = llm . chat ( "我的名字是?" )
Para o código detalhado acima e mais exemplos funcionais, consulte o Notebook abaixo:
exemplos2.1.Modo de bate-papo.ipynb
Construa chatbot usando gradiente
Gradio é uma estrutura de interface de processamento de linguagem natural muito popular
bida + grario pode construir um aplicativo utilizável com apenas algumas linhas de código
import gradio as gr
from bida import ChatLLM
llm = ChatLLM ( model_type = 'openai' )
def predict ( message , history ):
answer = llm . chat ( message )
return answer
gr . ChatInterface ( predict ). launch ()
Para obter detalhes, consulte: demonstração do chatbot da bida+gradio
Modo de conclusão: Completions ou TextCompletions, o modo de interação LLM da geração anterior, suporta apenas conversas de rodada única, não salva registros de bate-papo e cada chamada é uma nova comunicação.
Observação: no artigo da OpenAI de 6 de julho de 2023, este modelo afirma claramente que será eliminado gradualmente. Novos modelos basicamente não fornecem funções relevantes. Mesmo os modelos suportados seguirão o OpenAI e deverão ser gradualmente eliminados. futuro. .
from bida import TextLLM
llm = TextLLM ( model_type = "openai" )
result = llm . completion ( "你是一个服务助理,请简洁回答我的问题。我的名字是老周。" )
print ( result )
Para obter detalhes de código de exemplo, consulte:
exemplos2.2.Modo de conclusão.ipynb
A palavra prompt Prompt é a função mais importante no modelo de linguagem grande. Ela subverte o modelo tradicional de desenvolvimento orientado a objetos e o transforma em: Projeto Prompt . Esta estrutura é implementada usando "Prompt Templete", que suporta funções como tags de substituição, configuração de diferentes palavras de prompt para vários modelos e substituição automática quando o modelo realiza interação.
PromptTemplate_Text é fornecido atualmente: suporta o uso de texto de string para gerar modelos de Prompt, bida também oferece suporte a modelos personalizados flexíveis e planeja fornecer a capacidade de carregar modelos de json e bancos de dados no futuro.
Consulte o arquivo a seguir para obter um código de exemplo detalhado:
exemplos2.3.Prompt prompt word.ipynb
Instruções importantes nas palavras imediatas
Em geral, é recomendado que as palavras de alerta sigam uma estrutura de três parágrafos: definição de funções, esclarecimento de tarefas e contexto (informações relacionadas ou exemplos) . Você pode consultar o método de escrita nos exemplos.
Série de cursos de Andrew Ng https://learn.deeplearning.ai/login, versão chinesa, interpretação
livro de receitas openai https://github.com/openai/openai-cookbook
Documentação do Microsoft Azure: introdução à engenharia de pontas, tecnologia de engenharia de pontas
O Prompt Engineering Guide mais popular no Github, versão chinesa
Function Calling é uma função lançada pela OpenAI em 13 de junho de 2023. Todos sabemos que os dados treinados pelo ChatGPT são baseados em antes de 2021. Se você fizer algumas perguntas relacionadas em tempo real, não poderemos responder e funcionar a chamada permite em tempo real a obtenção de dados da rede, como verificação de previsão do tempo, consulta de estoque, recomendação de filmes recentes, etc.
A tecnologia de incorporação é a tecnologia mais importante para implementar o Prompt inContext Learning. Em comparação com a recuperação de palavras-chave anterior, é mais um passo em frente.
Nota : A incorporação de dados de diferentes modelos não é universal, portanto o mesmo modelo deve ser usado para a incorporação da questão durante a recuperação.
Nome do modelo | Dimensões de saída | Número de registros em lote | Limite de token de texto único |
---|---|---|---|
OpenAI | 1536 | Sem limite | 8191 |
Baidu | 384 | 16 | 384 |
Ali | 1536 | 10 | 2048 |
MiniMax | 1536 | Sem limite | 4096 |
Espectro de sabedoria AI | 1024 | Solteiro | 512 |
iFlytek Spark | 1024 | Solteiro | 256 |
Nota: a interface de incorporação do bida suporta processamento em lote. Se o limite de processamento em lote do modelo for excedido, ele será automaticamente processado em lote e retornado junto. Se o conteúdo de um único trecho de texto exceder o número limitado de tokens, dependendo da lógica do modelo, alguns reportarão um erro e outros o truncarão.
Para exemplos detalhados, consulte: exemplos2.6.Embeddingsebedding model.ipynb
├─bida # bida框架主目录
│ ├─core # bida框架核心代码
│ ├─functions # 自定义function文件
│ ├─ *.json # function定义
│ ├─ *.py # 对应的调用代码
│ ├─models # 接入模型文件
│ ├─ *.json # 模型配置定义:openai.json、baidu.json等
│ ├─ *_api.py # 模型接入代码:openai_api.py、baidu_api.py等
│ ├─ *_sdk.py # 模型sdk代码:baidu_sdk.py等
│ ├─prompts # 自定义prompt模板文件
│ ├─*.py # 框架其他代码文件
├─docs # 帮助文档
├─examples # 演示代码、notebook文件和相关数据文件
├─test # pytest测试代码
│ .env.template # .env的模板
│ LICENSE # MIT 授权文件
│ pytest.ini # pytest配置文件
│ README.md # 本说明文件
│ requirements.txt # 相关依赖包
Esperamos nos adaptar a mais modelos e agradecemos suas valiosas opiniões para fornecer aos desenvolvedores produtos melhores juntos!