第一个AI应用
1. 环境准备
1.1 安装Go环境
关于go的环境安装可以查看Go基础教程。
安装好go之后,运行命令:
# go version
# go version go1.24.6 windows/amd64
1
2
2
我们使用的是1.24版本,建议大家在学习时,和我使用相同的版本。
1.2 安装和配置Ollama
Ollama是一个开源工具,让你可以在自己的电脑上运行大语言模型。
- 访问Ollama官网下载适合你操作系统的版本
- 运行安装程序,按照提示完成安装
安装好之后,启动ollama,如果环境变量配置没有问题,打开命令行:
# ollama list
1
这个命令,会列出使用ollama安装的模型,我们需要安装一个模型,这里我们选用魔塔社区的模型,下载速度快,我们使用Qwen3-32B
这个模型,如果电脑配置低,可以选用Qwen3-8B
模型,千问3在实际测试中,表现不错,适合做为基础的学习模型:
# ollama pull modelscope.cn/Qwen/Qwen3-32B-GGUF:latest
1
1.3 开通阿里云百炼
如果本地不具备安装Ollama的条件,我们可以使用在线的语言模型API,这里我们选择使用阿里云百炼。
首次使用,是有免费额度的,足够我们使用。
配置说明地址:首次调用通义千问API
流程:
- 注册阿里云账号
- 前往阿里云百炼控制台,开通阿里云百炼
- 前往API-KEY页面,创建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
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
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
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