up
This commit is contained in:
@@ -319,7 +319,7 @@ func handleChat(ctx *gin.Context) {
|
||||
toolNames = append(toolNames, tool.Function.Name)
|
||||
}
|
||||
emitTrace("function_tools", "prepare", "success", "已启用 Function Calling 工具", map[string]interface{}{"tools": toolNames})
|
||||
openaiMsgs = append([]openaiMessage{{Role: "system", Content: "可用工具使用规则:当用户询问本月、今天、本周、下周等相对日期的日程时,先调用 time 获取明确 start_date/end_date,再调用 ops_ai_assistant_schedule_query 查询日程。不要臆造工具结果中不存在的日程。"}}, openaiMsgs...)
|
||||
openaiMsgs = append([]openaiMessage{{Role: "system", Content: "可用工具使用规则:当用户询问“我是谁”“当前登录用户是谁”“我的用户信息”等当前身份问题时,调用 ops_ai_assistant_current_user;工具返回 loggedIn=true 时按工具结果回答当前用户信息,返回 loggedIn=false 时说明不知道并提示需要登录才能获取信息。当用户询问本月、今天、本周、下周等相对日期的日程时,先调用 time 获取明确 start_date/end_date,再调用 ops_ai_assistant_schedule_query 查询日程。不要臆造工具结果中不存在的信息。"}}, openaiMsgs...)
|
||||
var toolExecuted bool
|
||||
openaiMsgs, toolExecuted, err = runOpenAIToolLoop(ctx.Request.Context(), profile, openaiMsgs, functionTools, currentUser, tracker, emitTrace)
|
||||
if err != nil {
|
||||
@@ -983,6 +983,22 @@ func executeAIFunctionTool(ctx context.Context, name string, rawArgs []byte, cur
|
||||
runtime := agents.FunctionToolRuntime{}
|
||||
if currentUser != nil {
|
||||
runtime.UserID = currentUser.ID
|
||||
runtime.UserName = currentUser.Name
|
||||
runtime.UserEmail = currentUser.Email
|
||||
runtime.UserType = currentUser.Type
|
||||
if userInfo := GetUserInfoFromUserID(currentUser.ID); userInfo != nil {
|
||||
runtime.UserInfo = &agents.CurrentUserInfo{
|
||||
ID: userInfo.ID,
|
||||
UserID: userInfo.UserID,
|
||||
FirstName: userInfo.FirstName,
|
||||
Username: userInfo.Username,
|
||||
Birthdate: userInfo.Birthdate.Format("2006-01-02"),
|
||||
Gender: userInfo.Gender,
|
||||
AvatarPath: userInfo.AvatarPath,
|
||||
Region: userInfo.Region,
|
||||
Language: userInfo.Language,
|
||||
}
|
||||
}
|
||||
}
|
||||
return agents.ExecuteFunctionTool(ctx, runtime, name, rawArgs)
|
||||
}
|
||||
|
||||
@@ -109,6 +109,7 @@ func ApiAIChatInit() {
|
||||
func ensureBuiltinAIChatTools() error {
|
||||
builtins := []TabAIChatTool{
|
||||
{Name: "time", Enabled: true, Description: "解析当前时间、相对日期和日期范围。", SortOrder: 0},
|
||||
{Name: "ops_ai_assistant_current_user", Enabled: true, Description: "返回当前登录用户信息;未登录时提示需要登录才能获取信息。", SortOrder: 5},
|
||||
{Name: "ops_ai_assistant_schedule_query", Enabled: true, Description: "按日期范围查询当前用户可见的 OPS 日历/日程。", SortOrder: 10},
|
||||
}
|
||||
for _, builtin := range builtins {
|
||||
@@ -204,6 +205,7 @@ func seedAIChatConfigFromYAMLIfEmpty() error {
|
||||
if len(tools) == 0 {
|
||||
tools = []models.ConfigsAIChatTool_{
|
||||
{Name: "time", Enabled: true, Description: "解析当前时间、相对日期和日期范围。"},
|
||||
{Name: "ops_ai_assistant_current_user", Enabled: true, Description: "返回当前登录用户信息;未登录时提示需要登录才能获取信息。"},
|
||||
{Name: "ops_ai_assistant_schedule_query", Enabled: true, Description: "按日期范围查询当前用户可见的 OPS 日历/日程。"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,6 +140,7 @@ type CalendarScheduleEvent struct {
|
||||
ScheduleType string `json:"schedule_type"`
|
||||
IsPublic bool `json:"is_public"`
|
||||
Remark string `json:"remark,omitempty"`
|
||||
AccessNote string `json:"access_note,omitempty"`
|
||||
CanEdit bool `json:"canEdit"`
|
||||
}
|
||||
|
||||
@@ -188,6 +189,7 @@ func (calendarScheduleProvider) QuerySchedules(ctx context.Context, query agents
|
||||
ScheduleType: event.ScheduleType,
|
||||
IsPublic: event.IsPublic,
|
||||
Remark: event.Remark,
|
||||
AccessNote: event.AccessNote,
|
||||
CanEdit: event.CanEdit,
|
||||
})
|
||||
}
|
||||
@@ -249,9 +251,15 @@ func QueryCalendarSchedulesForAI(query CalendarScheduleQuery) ([]CalendarSchedul
|
||||
result := make([]CalendarScheduleEvent, 0, len(events))
|
||||
for _, event := range events {
|
||||
canEdit := false
|
||||
accessNote := ""
|
||||
if currentUserID > 0 {
|
||||
calendarCreatorID := calendarCreators[event.CalendarID]
|
||||
canEdit = event.UserID == currentUserID || calendarCreatorID == currentUserID || slices.Contains(calendarAdmins, currentUserID)
|
||||
if !event.IsPublic && event.ScheduleType == "work" {
|
||||
accessNote = "非公开工作日程,仅因当前用户具备相关权限可见"
|
||||
} else if !event.IsPublic {
|
||||
accessNote = "非公开日程,仅因当前用户具备相关权限可见"
|
||||
}
|
||||
}
|
||||
result = append(result, CalendarScheduleEvent{
|
||||
ID: event.ID,
|
||||
@@ -263,6 +271,7 @@ func QueryCalendarSchedulesForAI(query CalendarScheduleQuery) ([]CalendarSchedul
|
||||
ScheduleType: event.ScheduleType,
|
||||
IsPublic: event.IsPublic,
|
||||
Remark: event.Remark,
|
||||
AccessNote: accessNote,
|
||||
CanEdit: canEdit,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user