Eino: Open Source Golang Big Model Application Development Framework от ByteDance
Общее введение
Eino - это фреймворк с открытым исходным кодом на базе языка Golang, созданный командой CloudWeGo и призванный стать идеальным инструментом разработки приложений для больших моделей (LLM). Он опирается на превосходный дизайн таких открытых фреймворков, как LangChain и LlamaIndex, и сочетает в себе результаты передовых исследований и внутренний практический опыт ByteDance для обеспечения простой, масштабируемой и эффективной разработки. Eino помогает разработчикам быстро создавать надежные AI-приложения благодаря хорошо продуманным абстракциям компонентов, мощным возможностям оркестровки, полной поддержке потоковой передачи и функциям безопасности типов. Eino Eino широко используется в компании ByteDance (например, Jitter, Doubao), а в настоящее время находится в открытом доступе на GitHub, имеет высокий уровень покрытия кода и активное сообщество, занимающееся стандартизацией и повышением эффективности разработки ИИ в экосистеме Golang.

Список функций
- Богатая абстракция компонентов: Предоставляет многократно используемые компоненты, такие как ChatModel, Tool, ChatTemplate и т.д., поддерживая вложенность и инкапсуляцию сложной логики.
- Мощная хореография: Поддерживает режимы цепочки и графа, выполняет проверку типов, управление параллелизмом и оркестровку потоков данных.
- Полная обработка потоков: Автоматически обрабатывает сплит, разделение, слияние и копирование потоковых данных, адаптируясь к различным парадигмам потоковой передачи.
- Масштабируемые вырезы: Встроенный механизм обратных вызовов для поддержки инжекции сквозных задач, таких как протоколирование и трассировка.
- безопасность типа: Используйте проверки времени компиляции Golang, чтобы убедиться, что входные и выходные данные совпадают.
- Набор инструментов для разработки: Обеспечивает визуальную отладку, оценщики и т.д., охватывая весь цикл разработки.
- Примеры лучших практик: Встроенный ReAct Реализация агентов и других процессов с богатым примером кода.
Использование помощи
Процесс установки
Eino - это фреймворк Golang, и для его установки требуется среда Go. Ниже приведены подробные шаги:
- Установите Go
- Посетите веб-сайт Go, чтобы загрузить версию 1.18 или выше.
- После завершения установки запустите
go version
Проверьте версию (например.go1.21.0
).
- Извлечение библиотек ядра Eino
- Запускается в терминале:
go get github.com/cloudwego/eino@latest
- Если вам нужно расширить компонент (например, для поддержки OpenAI), выполните это:
go get github.com/cloudwego/eino-ext@latest
- Запускается в терминале:
- Проверка установки
- Создание документов
main.go
::package main import "github.com/cloudwego/eino" func main() { println("Eino installed successfully!") }
- осуществлять
go run main.go
Если выход успешный, процесс завершен.
- Создание документов
- заявление о зависимости
- Зависимости Эйно kin-openapi версия v0.118.0 для совместимости с Go 1.18.
- Дополнительно:EinoExt Предоставьте больше реализаций компонентов.
- Поддержка общества
- Посетите GitHub Issues, чтобы отправить проблему или присоединиться к группе пользователей Flying Book (см. QR-код на официальной странице).
Основные функции
1. Используйте ChatModel напрямую
ChatModel - это базовый компонент, который используется для вызова большой модели для генерации контента.
- пример кода
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: "你的OpenAI-API-Key"} model, err := openai.NewChatModel(ctx, config) if err != nil { panic(err) } messages := []*schema.Message{ {Role: schema.System, Content: "你是一个助手。"}, {Role: schema.User, Content: "未来AI应用是什么样?"}, } msg, err := model.Generate(ctx, messages) if err != nil { panic(err) } println(msg.Content) }
- Инструкция по эксплуатации
- расход или издержки
NewChatModel
Инициализируйте экземпляр модели, передав ему контекст и конфигурацию API. - приглашения
Generate
метод генерирует непотоковый вывод. - Другие модели (например, LLaMA) могут поддерживаться с помощью компонентов расширения.
- расход или издержки
2. Оркестрирование простых процессов с помощью Chain
Цепочка подходит для линейных процессов, таких как шаблоны + модели.
- пример кода
package main import ( "context" "github.com/cloudwego/eino" "github.com/cloudwego/eino-ext/components/model/openai" ) func main() { ctx := context.Background() model, _ := openai.NewChatModel(ctx, &openai.Config{APIKey: "你的API-Key"}) prompt := eino.NewChatTemplate("你好,我的名字是{{.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) }
- Инструкция по эксплуатации
NewChain
Определите типы входных и выходных сигналов, которыеAppend
Добавьте узел.Compile
Цепочка компиляции.Invoke
Выполните и верните результат.- Хорошо подходит для выполнения простых последовательных задач "туда-сюда".
3. Использование графика для составления сложных расписаний
Graph поддерживает циклические или ациклические направленные графы, что подходит для таких сценариев, как вызовы инструментов.
- пример кода
package main import ( "context" "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: "你的API-Key"}) 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": "你好,世界!"}) println(result.Content) }
- Инструкция по эксплуатации
Add*Node
Добавление узлов.AddEdge
Определите направление потока данных.- Поддержка ветвления (
AddBranch
) и вызовы инструментов. Stream
сменныеInvoke
Получение потокового вывода.
4. Настройка потоковой передачи
Eino предоставляет четыре парадигмы потоковой передачи данных: Invoke, Stream, Collect и Transform.
- Пример потокового вывода
stream, _ := runnable.Stream(ctx, map[string]any{"query": "你好,世界!"}) for chunk := range stream { if chunk.Err != nil { panic(chunk.Err) } print(chunk.Value.Content) }
- Функциональный анализ
- Eino автоматически обрабатывает сращивание (например, в узлы, не относящиеся к потоку) и разделение (например, копирование при разветвлении) потоков.
- Узлам нисходящего потока не нужно заботиться о состоянии восходящего потока, фреймворк обрабатывает его прозрачно.
5. Добавление механизма обратного вызова
Обратные вызовы используются для ведения журнала, трассировки и других расширений.
- пример кода
handler := eino.NewHandlerBuilder(). OnStartFn(func(ctx context.Context, info *eino.RunInfo, input eino.CallbackInput) context.Context { println("开始:", info.NodeID) return ctx }).Build() result, _ := runnable.Invoke(ctx, map[string]any{"query": "测试"}, eino.WithCallbacks(handler))
- Рабочие точки
- адъювант
OnStart
, иOnEnd
Пять видов разрезов, таких как. - проходной
WithCallbacks
Укажите узел или глобальный эффект.
- адъювант
Функциональное управление
1. ReAct Agent
- Функциональное описание
Агент ReAct сочетает в себе ChatModel и вызовы инструментов, чтобы обеспечить автономный цикл принятия решений. - процедура
- консультация react.go.
- Запустите пример: настройте модель и инструменты, вызовите
Invoke
Реализация.
2. Визуальная отладка
- Функциональное описание
пройти (законопроект, проверку и т.д.) Эйно Девопс Обеспечивает отладку пользовательского интерфейса. - процедура
- тянуть
eino-ext
Склад, бегdevops
модуль, просмотрите конфигурацию документа.
- тянуть
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...