Introdução geral
O Eino é uma estrutura de código aberto baseada em Golang lançada pela equipe do CloudWeGo, com o objetivo de ser a ferramenta de desenvolvimento definitiva para aplicativos de modelo grande (LLM). Ele se baseia no excelente design de estruturas de código aberto, como LangChain e LlamaIndex, e combina resultados de pesquisa de ponta e a experiência prática interna da ByteDance para oferecer uma experiência de desenvolvimento simples, dimensionável e eficiente. O Eino ajuda os desenvolvedores a criar rapidamente aplicativos de IA confiáveis por meio de abstrações de componentes bem projetadas, recursos avançados de orquestração, suporte completo a streaming e recursos de segurança de tipos. O Eino é o primeiro aplicativo de IA a ser desenvolvido com base no Eino. O Eino tem sido amplamente utilizado na ByteDance (por exemplo, Jitter, Doubao) e agora tem código aberto no GitHub, com alta cobertura de código e uma comunidade ativa dedicada a promover a padronização e a eficiência do desenvolvimento de IA no ecossistema Golang.
Lista de funções
- Rica abstração de componentesChatModel: fornece componentes reutilizáveis, como ChatModel, Tool, ChatTemplate etc., com suporte para aninhamento e encapsulamento de lógica complexa.
- Coreografia poderosaSuporte aos modos Chain e Graph, manipulação de verificação de tipos, gerenciamento de simultaneidade e orquestração de fluxo de dados.
- Processamento completo de streamingTratamento automático de emendas, divisões, fusões e cópias de dados de streaming, adaptando-se a vários paradigmas de streaming.
- Recortes altamente escalonáveisMecanismo de retorno de chamada incorporado para dar suporte à injeção de preocupações transversais, como registro e rastreamento.
- segurança de tipoUse as verificações de tempo de compilação da Golang para garantir que as entradas e saídas correspondam.
- Conjunto de ferramentas de desenvolvimentoDepuração visual: fornece depuração visual, avaliadores, etc., cobrindo todo o ciclo de desenvolvimento.
- Exemplos de práticas recomendadasIntegrado ReAct Implementação de agentes e outros processos, com código de amostra rico.
Usando a Ajuda
Processo de instalação
O Eino é uma estrutura Golang e requer um ambiente Go para ser instalado. Aqui estão as etapas detalhadas:
- Instalar o Go
- Visite o site do Go para fazer o download da versão 1.18 ou superior.
- Após a conclusão da instalação, execute
versão go
Verifique a versão (por exemplogo1.21.0
).
- Extração de bibliotecas principais do Eino
- É executado no terminal:
acesse github.com/cloudwego/eino@latest
- Se você precisar estender o componente (por exemplo, suporte a OpenAI), execute:
go get github.com/cloudwego/eino-ext@latest
- É executado no terminal:
- Verificar a instalação
- Criação de documentos
main.go
::pacote principal import "github.com/cloudwego/eino" func main() { println("Eino instalado com sucesso!") }
- realizar
go run main.go
Se a saída for bem-sucedida, o processo estará concluído.
- Criação de documentos
- declaração de dependência
- Dependências do Eino kin-openapi versão v0.118.0 para compatibilidade com o Go 1.18.
- Opcional:EinoExt Fornecer mais implementações de componentes.
- Suporte à comunidade
- Visite o GitHub Issues para enviar um problema ou participar do grupo de usuários do Flying Book (consulte o código QR na página oficial).
Funções principais
1. use o ChatModel diretamente
ChatModel é o componente básico, usado para chamar o modelo grande para gerar conteúdo.
- exemplo de código
package main import ( "context" "github.com/cloudwego/eino-ext/components/model/openai" "github.com/cloudwego/eino/schema" ) func main() { ctx := context.Background() config := &openai.Config{APIKey: "Sua chave OpenAI-API"} model, err := openai.NewChatModel(ctx, config) if err ! = nil { panic(err) } messages := []*schema.Message{ {Role: schema.System, Content: "Você é um assistente."} , {Role: schema.User, Content: "Como serão os aplicativos de IA no futuro?"} , } msg, err := model.Generate(ctx, messages) if err ! = nil { panic(err) } println(msg.Content) }
- Instruções de operação
- despesa ou gasto
NewChatModel
Inicializa a instância do modelo, passando o contexto e a configuração da API. - invocações
Gerar
gera uma saída sem fluxo. - Outros modelos (por exemplo, LLaMA) podem ser suportados por meio de componentes de extensão.
- despesa ou gasto
2. orquestração de processos simples com o Chain
O Chain é adequado para processos lineares, como modelos + modelos.
- exemplo de código
package main import ( "contexto" "github.com/cloudwego/eino" "github.com/cloudwego/eino-ext/components/model/openai" ) func main() { ctx := context.Background() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "Sua chave de API"}) prompt := eino.NewChatTemplate("Hello, my name is {{.name}}") chain, _ := eino.NewChain[map[string]any, *eino.Message](). AppendChatTemplate(prompt). AppendChatModel(model). Compile(ctx) result, _ := chain.Invoke(ctx, map[string]any{"name": "Eino"}) println(result.Content) }
- Instruções de operação
Nova cadeia
Definir os tipos de entrada e saída queAnexar
Adicionar nó.Compilar
A cadeia de compilação.Invocar
Executar e retornar o resultado.- Bom para tarefas sequenciais simples de ida e volta.
3. uso do Graph para agendamento complexo
O Graph suporta gráficos direcionados cíclicos ou acíclicos, adequados para cenários como chamadas de ferramentas.
- exemplo de código
package main import ( "contexto" "github.com/cloudwego/eino" "github.com/cloudwego/eino-ext/components/model/openai" "github.com/cloudwego/eino/schema" ) func main() { ctx := context.Background() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "Sua chave de API"}) graph := eino.NewGraph[map[string]any, *schema.Message]() graph.AddChatModelNode("model", model) graph.AddEdge(eino.START, "model") graph.AddEdge("model", eino.END) runnable, _ := graph.Compile(ctx) result, _ := runnable.Invoke(ctx, map[string]any{"query": "Hello, world!"}) println(result.Content) }
- Instruções de operação
Adicionar*Nó
Adição de nós.AddEdge
Defina a direção do fluxo de dados.- Suporte para ramificação (
AddBranch
) e chamadas de ferramentas. corrente (de água, etc.)
intercambiávelInvocar
Obter saída de streaming.
4. configuração de streaming
O Eino oferece quatro paradigmas de streaming: Invoke, Stream, Collect e Transform.
- Exemplo de saída de fluxo contínuo
stream, _ := runnable.Stream(ctx, map[string]any{"query": "Hello, world!"}) for chunk := range stream { if chunk.Err ! = nil { panic(chunk.Err) } print(chunk.Value.Content) }
- Análise funcional
- O Eino lida automaticamente com a emenda (por exemplo, para nós que não são de fluxo) e a divisão (por exemplo, cópia ao ramificar) de fluxos.
- Os nós downstream não precisam se preocupar com o estado do fluxo upstream e a estrutura lida com isso de forma transparente.
5. adição de um mecanismo de retorno de chamada
Os retornos de chamada são usados para registro, rastreamento e outras extensões.
- exemplo de código
handler := eino.NewHandlerBuilder(). OnStartFn(func(ctx context.Context, info *eino.RunInfo, input eino.CallbackInput) context.Context { println("Iniciando:", info.NodeID) return ctx }).Build() result, _ := runnable.Invoke(ctx, map[string]any{"query": "test"}, eino.WithCallbacks(handler))
- Pontos de operação
- apoiar algo
No início
eOnEnd
Cinco tipos de cortes, como. - aceitável
ComCallbacks
Especifique o nó ou o efeito global.
- apoiar algo
Operação da função em destaque
1. agente ReAct
- Descrição funcional
O ReAct Agent combina o ChatModel e as chamadas de ferramentas para permitir loops de decisão autônomos. - procedimento
- consulta react.go.
- Execute o exemplo: configure o modelo e as ferramentas, chame a função
Invocar
Implementação.
2. depuração visual
- Descrição funcional
aprovar (um projeto de lei ou inspeção etc.) Eino Devops Fornece depuração da interface do usuário. - procedimento
- puxar
eino-ext
Armazém, executardevops
visualize a configuração do documento.
- puxar