ai_scheduler/internal/tools/normal_chat.go

87 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tools
import (
"ai_scheduler/internal/config"
"ai_scheduler/internal/entitys"
"ai_scheduler/internal/pkg"
"ai_scheduler/internal/pkg/utils_ollama"
"context"
"encoding/json"
"fmt"
"github.com/ollama/ollama/api"
)
// NormalChatTool 普通对话
type NormalChatTool struct {
llm *utils_ollama.Client
config *config.Config
}
// NewNormalChatTool 实例普通对话
func NewNormalChatTool(llm *utils_ollama.Client, config *config.Config) *NormalChatTool {
return &NormalChatTool{llm: llm, config: config}
}
// Name 返回工具名称
func (w *NormalChatTool) Name() string {
return "normalChat"
}
// Description 返回工具描述
func (w *NormalChatTool) Description() string {
return "用户想进行一般性问答"
}
type NormalChat struct {
ChatContent string `json:"chat_content"`
}
// Definition 返回工具定义
func (w *NormalChatTool) Definition() entitys.ToolDefinition {
return entitys.ToolDefinition{}
}
// Execute 执行直连天下订单详情查询
func (w *NormalChatTool) Execute(ctx context.Context, requireData *entitys.RequireData) error {
var req NormalChat
if err := json.Unmarshal([]byte(requireData.Match.Parameters), &req); err != nil {
return fmt.Errorf("invalid zltxOrderDetail request: %w", err)
}
if req.ChatContent == "" {
req.ChatContent = "介绍一下你能做什么"
}
// 这里可以集成真实的直连天下订单详情API
return w.chat(requireData, &req)
}
// getMockZltxOrderDetail 获取模拟直连天下订单详情数据
func (w *NormalChatTool) chat(requireData *entitys.RequireData, chat *NormalChat) (err error) {
//requireData.Ch <- entitys.Response{
// Index: w.Name(),
// Content: "<think></think>",
// Type: entitys.ResponseStream,
//}
err = w.llm.ChatStream(context.TODO(), requireData.Ch, []api.Message{
{
Role: "system",
Content: "你是一个聊天助手",
},
{
Role: "assistant",
Content: fmt.Sprintf("聊天记录:%s", pkg.JsonStringIgonErr(requireData.Histories)),
},
{
Role: "user",
Content: chat.ChatContent,
},
}, w.Name(), w.config.Ollama.GenerateModel)
if err != nil {
return fmt.Errorf("%s", err)
}
return
}