18c9354095
- 注入数据库、运行时配置、统一响应、文件存储和平台 AI 能力,补充业务读写工具与客户快捷操作契约。 - 移除模块内重复的组织、客户、工单、标签、技能、旧工作流、MCP 和迁移实现,将身份权限与业务主体交由宿主管理。 - 使用 libSQL 重构向量存储,并完善图片消息、访客身份、排队调度、企业微信和支持聊天页面。 - 统一 HTTP、DTO 与 WebSocket 的 snake_case 协议,补齐模块初始化、业务动作和公共载荷等回归测试。
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package instruction
|
||
|
||
import "strings"
|
||
|
||
type Assembler struct{}
|
||
|
||
type AssemblerInput struct {
|
||
AgentInstruction string
|
||
ToolAppendices []string
|
||
}
|
||
|
||
type AssemblySummary struct {
|
||
SectionTitles []string
|
||
HasAgentRule bool
|
||
HasToolRule bool
|
||
}
|
||
|
||
type AssemblyResult struct {
|
||
Text string
|
||
Summary AssemblySummary
|
||
}
|
||
|
||
func NewAssembler() *Assembler {
|
||
return &Assembler{}
|
||
}
|
||
|
||
func (a *Assembler) Build(input AssemblerInput) string {
|
||
return a.Assemble(input).Text
|
||
}
|
||
|
||
func (a *Assembler) Assemble(input AssemblerInput) AssemblyResult {
|
||
parts := make([]string, 0, 3)
|
||
summary := AssemblySummary{SectionTitles: make([]string, 0, 3)}
|
||
if agentInstruction := strings.TrimSpace(input.AgentInstruction); agentInstruction != "" {
|
||
parts = append(parts, buildInstructionSection("Agent 规则", agentInstruction))
|
||
summary.HasAgentRule = true
|
||
summary.SectionTitles = append(summary.SectionTitles, "Agent 规则")
|
||
}
|
||
if appendix := buildToolAppendix(input.ToolAppendices); appendix != "" {
|
||
parts = append(parts, buildInstructionSection("工具补充规则", appendix))
|
||
summary.HasToolRule = true
|
||
summary.SectionTitles = append(summary.SectionTitles, "工具补充规则")
|
||
}
|
||
return AssemblyResult{
|
||
Text: strings.TrimSpace(strings.Join(parts, "\n\n")),
|
||
Summary: summary,
|
||
}
|
||
}
|
||
|
||
func buildInstructionSection(title, body string) string {
|
||
title = strings.TrimSpace(title)
|
||
body = strings.TrimSpace(body)
|
||
if body == "" {
|
||
return ""
|
||
}
|
||
if title == "" {
|
||
return body
|
||
}
|
||
return title + ":\n" + body
|
||
}
|
||
|
||
func buildToolAppendix(input []string) string {
|
||
if len(input) == 0 {
|
||
return ""
|
||
}
|
||
parts := make([]string, 0, len(input))
|
||
for _, item := range input {
|
||
item = strings.TrimSpace(item)
|
||
if item == "" {
|
||
continue
|
||
}
|
||
parts = append(parts, item)
|
||
}
|
||
return strings.TrimSpace(strings.Join(parts, "\n\n"))
|
||
}
|