最新在Win或Linux下部署一个Ollama都很简单,在Github上也有介绍和资料,Linux下 curl -fsSL https://ollama.com/install.sh | sh 即可。
要服务器上安装,其它客户端调用,主要是修改环境变量 OLLAMA_HOST=“0.0.0.0” 这样的地址即可,问答中也有介绍。环境变量 OLLAMA_MODELS 应该是指定模型的地址。
注意修改后要重载并启动
sudo systemctl daemon-reload
sudo service ollama restart
网友的示例代码,应该大同小异。
结合之前的TTS,再加上语音识别,估计能整合一个智能AI。加上博客的聊天窗,也是不复杂的。
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
type Question struct {
Model string `json:"model"`
Prompt string `json:"prompt"`
}
type Anwser struct {
Model string `json:"model"`
CreatedAt string `json:"created_at"`
Response string `json:"response"`
Done bool `json:"done"`
}
func main() {
client := &http.Client{Timeout: 100 * time.Second}
url := "http://localhost:11434/api/generate"
jsonStr, _ := json.Marshal(Question{
Model: "codeqwen",
Prompt: "为什么天空是蓝色的?",
})
contentType := "application/json"
requestBody := bytes.NewReader(jsonStr)
req, _ := http.NewRequest("POST", url, requestBody)
req.Header.Set("Content-Type", contentType)
// 发送HTTP请求
resp, err := client.Do(req)
if err != nil {
panic(err)
}
//按行流式读取数据
reader := bufio.NewReader(resp.Body)
for {
line, err := reader.ReadBytes('\n')
if err != nil {
if err == io.EOF {
break
}
panic(err)
}
Anwser := Anwser{}
err = json.Unmarshal(line, &Anwser)
if err != nil {
panic(err)
}
fmt.Print(Anwser.Response)
if Anwser.Done {
fmt.Println("")
break
}
}
}
在官方的Github中,也有Golang的示例代码,例如以下这个流工反馈:
package main
import (
"context"
"fmt"
"log"
"github.com/ollama/ollama/api"
)
func main() {
client, err := api.ClientFromEnvironment()
if err != nil {
log.Fatal(err)
}
// 默认情况下就是流式反馈.
req := &api.GenerateRequest{
Model: "gemma:7b",
Prompt: "godot的最新版本是多少?",
// Stream: new(bool), // 不用流式
}
ctx := context.Background()
respFunc := func(resp api.GenerateResponse) error {
fmt.Print(resp.Response) // 若需要,AI自动会带上换行
return nil
}
err = client.Generate(ctx, req, respFunc)
if err != nil {
log.Fatal(err)
}
fmt.Println()
}
若需要一次性输出结果,只需要Stream设置为False即可。