mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-06-28 00:40:05 +02:00
Add files via upload
This commit is contained in:
@@ -184,6 +184,7 @@ func RunEinoSingleChatModelAgent(
|
||||
Name: einoSingleAgentName,
|
||||
Description: "Eino ADK ChatModelAgent with MCP tools for authorized security testing.",
|
||||
Instruction: ins,
|
||||
GenModelInput: literalInstructionGenModelInput,
|
||||
Model: mainModel,
|
||||
ToolsConfig: mainToolsCfg,
|
||||
MaxIterations: maxIter,
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package multiagent
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/eino/adk"
|
||||
"github.com/cloudwego/eino/schema"
|
||||
)
|
||||
|
||||
// literalInstructionGenModelInput passes Instruction through as a system message without
|
||||
// FString template formatting. Eino defaultGenModelInput formats instruction whenever
|
||||
// SessionValues exist; prompts with literal curly braces (project blackboard "{关系边: ...}",
|
||||
// JSON examples, link syntax) then fail with "could not find key".
|
||||
//
|
||||
// Matches eino/adk/prebuilt/deep genModelInput — the supported fix per Eino docs.
|
||||
func literalInstructionGenModelInput(ctx context.Context, instruction string, input *adk.AgentInput) ([]adk.Message, error) {
|
||||
msgs := make([]adk.Message, 0, len(input.Messages)+1)
|
||||
if instruction != "" {
|
||||
msgs = append(msgs, schema.SystemMessage(instruction))
|
||||
}
|
||||
msgs = append(msgs, input.Messages...)
|
||||
return msgs, nil
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package multiagent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/cloudwego/eino/adk"
|
||||
"github.com/cloudwego/eino/schema"
|
||||
)
|
||||
|
||||
func TestLiteralInstructionGenModelInput_PreservesLiteralCurlyBraces(t *testing.T) {
|
||||
t.Parallel()
|
||||
instruction := "- [finding/x] summary {关系边: discovered_on←target/dev}\n" +
|
||||
"如 finding 上 {from:target/*, type:discovered_on}"
|
||||
msgs, err := literalInstructionGenModelInput(context.Background(), instruction, &adk.AgentInput{
|
||||
Messages: []adk.Message{schema.UserMessage("继续")},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if len(msgs) != 2 {
|
||||
t.Fatalf("expected 2 messages, got %d", len(msgs))
|
||||
}
|
||||
if msgs[0].Role != schema.System {
|
||||
t.Fatalf("first message must be system, got %s", msgs[0].Role)
|
||||
}
|
||||
for _, want := range []string{"{关系边:", "{from:target/*, type:discovered_on}"} {
|
||||
if !strings.Contains(msgs[0].Content, want) {
|
||||
t.Fatalf("system content missing %q: %q", want, msgs[0].Content)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -254,10 +254,11 @@ func RunDeepAgent(
|
||||
)
|
||||
}
|
||||
sa, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
|
||||
Name: id,
|
||||
Description: desc,
|
||||
Instruction: subInstrFinal,
|
||||
Model: subModel,
|
||||
Name: id,
|
||||
Description: desc,
|
||||
Instruction: subInstrFinal,
|
||||
GenModelInput: literalInstructionGenModelInput,
|
||||
Model: subModel,
|
||||
ToolsConfig: adk.ToolsConfig{
|
||||
ToolsNodeConfig: compose.ToolsNodeConfig{
|
||||
Tools: subToolsForCfg,
|
||||
@@ -479,6 +480,7 @@ func RunDeepAgent(
|
||||
Name: orchestratorName,
|
||||
Description: orchDescription,
|
||||
Instruction: supInstr,
|
||||
GenModelInput: literalInstructionGenModelInput,
|
||||
Model: mainModel,
|
||||
ToolsConfig: mainToolsCfg,
|
||||
MaxIterations: deepMaxIter,
|
||||
|
||||
Reference in New Issue
Block a user