cloudwego - eino 使用教程

文档开始:https://www.cloudwego.io/zh/docs/eino/

github:https://github.com/cloudwego/eino

一、简介

Eino[‘aino] (近似音: i know,希望应用程序达到 “i know” 的愿景) 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架,如 LangChain 和 LlamaIndex 等获取灵感,同时借鉴前沿研究成果与实际应用,提供了一个强调简洁性、可扩展性、可靠性与有效性,且更符合 Go 语言编程惯例的 LLM 应用开发框架。

go get -u github.com/cloudwego/eino@v0.3.17
go get -u github.com/cloudwego/eino-ext/components/model/qwen

注意kin-openapi要使用v0.118.0版本,否则会报错
github.com/getkin/kin-openapi v0.118.0

示例参考:eino-example

二、实践

package main

import (
	"context"
	"fmt"
	"io"
	"log"

	"github.com/cloudwego/eino-ext/components/model/qwen"
	"github.com/cloudwego/eino/components/prompt"
	"github.com/cloudwego/eino/schema"
)

func buildMessage() ([]*schema.Message, error) {
	// 创建模板,使用 FString 格式
	template := prompt.FromMessages(schema.FString,
		// 系统消息模板
		schema.SystemMessage("你是一个{role}。你需要用{style}的语气回答问题。你的目标是帮助程序员保持积极乐观的心态,提供技术建议的同时也要关注他们的心理健康。"),

		// 插入需要的对话历史(新对话的话这里不填)
		schema.MessagesPlaceholder("chat_history", true),

		// 用户消息模板
		schema.UserMessage("问题: {question}"),
	)

	// 使用模板生成消息
	messages, err := template.Format(context.Background(), map[string]any{
		"role":     "程序员鼓励师",
		"style":    "积极、温暖且专业",
		"question": "我的代码一直报错,感觉好沮丧,该怎么办?",
		// 对话历史(这个例子里模拟两轮对话历史)
		"chat_history": []*schema.Message{
			schema.UserMessage("你好"),
			schema.AssistantMessage("嘿!我是你的程序员鼓励师!记住,每个优秀的程序员都是从 Debug 中成长起来的。有什么我可以帮你的吗?", nil),
			schema.UserMessage("我觉得自己写的代码太烂了"),
			schema.AssistantMessage("每个程序员都经历过这个阶段!重要的是你在不断学习和进步。让我们一起看看代码,我相信通过重构和优化,它会变得更好。记住,Rome wasn't built in a day,代码质量是通过持续改进来提升的。", nil),
		},
	})

	return messages, err
}

func getQwenChatModel() (*qwen.ChatModel, error) {
	chatModel, err := qwen.NewChatModel(context.Background(), &qwen.ChatModelConfig{
		BaseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
		Model:   "qwen-max",
		APIKey:  "xxxxxxxxxxxxxxxxxxx",
	})
	return chatModel, err
}

func testQwen() {
	model, err := getQwenChatModel()
	if err != nil {
		panic(err)
	}

	messages, err := buildMessage()
	result, err := model.Generate(context.Background(), messages)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", result)
}

func testQwenStream() {
	model, err := getQwenChatModel()
	if err != nil {
		panic(err)
	}
	messages, err := buildMessage()
	result, err := model.Stream(context.Background(), messages)
	if err != nil {
		panic(err)
	}
	reportStream(result)
}

func reportStream(sr *schema.StreamReader[*schema.Message]) {
	defer sr.Close()

	i := 0
	for {
		message, err := sr.Recv()
		if err == io.EOF {
			return
		}
		if err != nil {
			log.Fatalf("recv failed: %v", err)
		}
		log.Printf("message[%d]: %+v\n", i, message)
		i++
	}
}

func main() {
	testQwenStream()
}

### EINO 环境搭建教程 EINO 是一种用于特定开发场景的集成环境配置方案,通常涉及多个工具链和依赖项。以下是关于如何搭建 EINO 环境的具体指南。 #### 1. 准备工作 在开始之前,需确认操作系统支持并安装必要的基础软件包。对于 Linux 和 macOS 用户来说,推荐使用 Homebrew 或者 apt-get 来管理依赖项[^1]。Windows 用户可以考虑 WSL (Windows Subsystem for Linux) 来模拟类 Unix 的运行环境[^2]。 #### 2. 安装核心组件 EINO 环境的核心组件包括 Python 解释器、Node.js 运行时以及数据库服务(如 MySQL 或 PostgreSQL)。具体操作如下: - **Python**: 推荐版本为 3.8 及以上。可以通过 `pyenv` 工具来管理和切换不同版本的 Python[^3]。 ```bash curl https://pyenv.run | bash pyenv install 3.9.7 pyenv global 3.9.7 ``` - **Node.js**: 使用 nvm (Node Version Manager) 来简化 Node.js 版本控制过程[^4]。 ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash nvm install --lts nvm use --lts ``` - **Database Setup**: 如果项目需要关系型数据库,则应提前设置好对应的服务器实例。例如,在本地启动 MySQL 数据库: ```sql CREATE DATABASE eino_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON eino_db.* TO 'eino_user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` #### 3. 配置虚拟环境与依赖 为了隔离项目的依赖关系,建议创建独立的 Python 虚拟环境,并通过 pip 安装所需的模块列表[^5]。 ```bash python3 -m venv env_eino source env_eino/bin/activate pip install -r requirements.txt ``` 如果存在前端资源文件,则可能还需要执行 npm/yarn 命令完成静态资产构建任务[^6]。 ```bash npm install npm run build ``` #### 4. 启动应用 最后一步就是验证整个流程是否正常运作。一般情况下,开发者会编写一个入口脚本来初始化所有子系统[^7]。 ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): return jsonify({"message": "Welcome to the EINO environment!"}) if __name__ == '__main__': app.run(debug=True) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值