第一个AI应用

1. 环境准备

1.1 安装Go环境

关于go的环境安装可以查看Go基础教程open in new window

安装好go之后,运行命令:

# go version
# go version go1.24.6 windows/amd64
1
2

我们使用的是1.24版本,建议大家在学习时,和我使用相同的版本。

1.2 安装和配置Ollama

Ollama是一个开源工具,让你可以在自己的电脑上运行大语言模型。

  1. 访问Ollama官网open in new window下载适合你操作系统的版本
  2. 运行安装程序,按照提示完成安装

安装好之后,启动ollama,如果环境变量配置没有问题,打开命令行:

# ollama list
1

这个命令,会列出使用ollama安装的模型,我们需要安装一个模型,这里我们选用魔塔社区的模型,下载速度快,我们使用Qwen3-32B这个模型,如果电脑配置低,可以选用Qwen3-8B模型,千问3在实际测试中,表现不错,适合做为基础的学习模型:

# ollama pull modelscope.cn/Qwen/Qwen3-32B-GGUF:latest
1

1.3 开通阿里云百炼

如果本地不具备安装Ollama的条件,我们可以使用在线的语言模型API,这里我们选择使用阿里云百炼。

首次使用,是有免费额度的,足够我们使用。

配置说明地址:首次调用通义千问APIopen in new window

流程:

  1. 注册阿里云账号
  2. 前往阿里云百炼控制台,开通阿里云百炼
  3. 前往API-KEYopen in new window页面,创建API-KEY,需要使用API-KEY才能调用大模型

2. 创建第一个AI对话应用

在日常生活中,我们使用AI大模型的最常用方式就是对话的方式,所以我们来开发一个简单的对话应用,做为我们的入门案例,从而快速了解Eino的使用。

2.1 直接生成回复

package main

import (
	"context"

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

func main() {
	//这里先使用ollama的方式实现
	ctx := context.Background()
	model, err := ollama.NewChatModel(ctx, &ollama.ChatModelConfig{
		BaseURL: "http://127.0.0.1:11434",
		Model:   "modelscope.cn/Qwen/Qwen3-32B-GGUF:latest",
	})
	if err != nil {
		panic(err)
	}
	//创建message,这个就相当于给大模型的提示词,分为系统输入和用户输入
	//系统输入就是预设的提示词,用户输入就是用户输入的内容
	message := []*schema.Message{
		schema.SystemMessage("你是一个乐于助人的助手"),
		schema.UserMessage("请介绍一下Go语言的特点"),
	}
	//调用大模型并生成响应
	response, err := model.Generate(ctx, message)
	if err != nil {
		panic(err)
	}
	println("model: ", response.Content)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

2.2 流式对话

package main

import (
	"context"

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

func main() {
	//这里先使用ollama的方式实现
	ctx := context.Background()
	model, err := ollama.NewChatModel(ctx, &ollama.ChatModelConfig{
		BaseURL: "http://127.0.0.1:11434",
		Model:   "modelscope.cn/Qwen/Qwen3-32B-GGUF:latest",
	})
	if err != nil {
		panic(err)
	}
	//创建message,这个就相当于给大模型的提示词,分为系统输入和用户输入
	//系统输入就是预设的提示词,用户输入就是用户输入的内容
	message := []*schema.Message{
		schema.SystemMessage("你是一个乐于助人的助手"),
		schema.UserMessage("请介绍一下Go语言的特点"),
	}
	//获取流式回复
	stream, err := model.Stream(ctx, message)
	if err != nil {
		panic(err)
	}
	defer stream.Close()

	for {
		chunk, err := stream.Recv()
		if err != nil {
			break
		}
		print(chunk.Content)
	}
	//换行
	println()
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

2.3 使用阿里百炼

package main

import (
	"context"

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

func main() {
	//这里先使用ollama的方式实现
	ctx := context.Background()
	model, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{
		BaseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
		Model:   "qwen3-32b",
		APIKey:  "you api key",
	})
	if err != nil {
		panic(err)
	}
	//创建message,这个就相当于给大模型的提示词,分为系统输入和用户输入
	//系统输入就是预设的提示词,用户输入就是用户输入的内容
	message := []*schema.Message{
		schema.SystemMessage("你是一个乐于助人的助手"),
		schema.UserMessage("请介绍一下Go语言的特点"),
	}
	//获取流式回复
	stream, err := model.Stream(ctx, message)
	if err != nil {
		panic(err)
	}
	defer stream.Close()

	for {
		chunk, err := stream.Recv()
		if err != nil {
			break
		}
		print(chunk.Content)
	}
	//换行
	println()
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44