translate

command
v0.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 28, 2025 License: Apache-2.0 Imports: 10 Imported by: 0

README ยถ

ๆ™บ่ƒฝ็ฟป่ฏ‘็ณป็ปŸ (Multi-Agent Translation System)

่ฟ™ๆ˜ฏไธ€ไธชไฝฟ็”จๅคšไธช AI Agent ๅไฝœ็š„ๆ™บ่ƒฝ็ฟป่ฏ‘็ณป็ปŸ๏ผŒ่ƒฝๅคŸ่‡ชๅŠจๆฃ€ๆต‹่พ“ๅ…ฅๆ–‡ๆœฌ็š„่ฏญ่จ€ๅนถ็ฟป่ฏ‘ๆˆไธญๆ–‡ใ€‚

๐ŸŽฏ ็ณป็ปŸๆžถๆž„

่ฏฅ็ณป็ปŸไฝฟ็”จไธคไธชไธ“้—จ็š„ Agent ๅไฝœๅฎŒๆˆ็ฟป่ฏ‘ไปปๅŠก๏ผš

1. ๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ Agent (Language Detection Agent)
  • ่Œ่ดฃ: ่ฏ†ๅˆซ่พ“ๅ…ฅๆ–‡ๆœฌไฝฟ็”จ็š„่ฏญ่จ€
  • ่ƒฝๅŠ›: ๆ”ฏๆŒๅคš็ง่ฏญ่จ€่ฏ†ๅˆซ๏ผˆ่‹ฑ่ฏญใ€ๆณ•่ฏญใ€ๆ—ฅ่ฏญใ€่ฅฟ็ญ็‰™่ฏญใ€ๅพท่ฏญใ€ไฟ„่ฏญใ€ไธญๆ–‡ใ€้Ÿฉ่ฏญ็ญ‰๏ผ‰
  • ่พ“ๅ‡บ: ่ฟ”ๅ›žๆฃ€ๆต‹ๅˆฐ็š„่ฏญ่จ€ๅ็งฐ๏ผˆไธญๆ–‡๏ผ‰
2. ๐ŸŒ ็ฟป่ฏ‘ Agent (Translation Agent)
  • ่Œ่ดฃ: ๅฐ†ๆ–‡ๆœฌ็ฟป่ฏ‘ๆˆ็ฎ€ไฝ“ไธญๆ–‡
  • ่ƒฝๅŠ›:
    • ไฟๆŒๅŽŸๆ–‡่ฏญๆฐ”ๅ’Œ้ฃŽๆ ผ
    • ๅ‡†็กฎใ€่‡ช็„ถใ€ๆต็•…็š„็ฟป่ฏ‘
    • ไฟ็•™ไธ“ๆœ‰ๅ่ฏๅ’Œๆ ผๅผ
  • ไผ˜ๅŒ–: ๅฆ‚ๆžœๆฃ€ๆต‹ๅˆฐ่พ“ๅ…ฅๅทฒ็ปๆ˜ฏไธญๆ–‡๏ผŒๅˆ™่ทณ่ฟ‡็ฟป่ฏ‘

๐Ÿš€ ็‰นๆ€ง

  • ๅคš Agent ๅไฝœ: ไธคไธชไธ“้—จ็š„ Agent ๅˆ†ๅทฅๅˆไฝœ
  • ่‡ชๅŠจ่ฏญ่จ€ๆฃ€ๆต‹: ๆ— ้œ€ๆ‰‹ๅŠจๆŒ‡ๅฎšๆบ่ฏญ่จ€
  • ้ซ˜่ดจ้‡็ฟป่ฏ‘: ไฝฟ็”จ DeepSeek Chat ๆจกๅž‹็กฎไฟ็ฟป่ฏ‘่ดจ้‡
  • ๆ™บ่ƒฝไผ˜ๅŒ–: ่‡ชๅŠจ่ทณ่ฟ‡ไธญๆ–‡ๅˆฐไธญๆ–‡็š„็ฟป่ฏ‘
  • ๅคš่ฏญ่จ€ๆ”ฏๆŒ: ๆ”ฏๆŒ่‹ฑ่ฏญใ€ๆณ•่ฏญใ€ๆ—ฅ่ฏญใ€่ฅฟ็ญ็‰™่ฏญใ€ๅพท่ฏญใ€ไฟ„่ฏญ็ญ‰ไธปๆต่ฏญ่จ€
  • Token ไฝฟ็”จ่ฟฝ่ธช: ๅฎžๆ—ถๆ˜พ็คบๆฏๆฌกๆ“ไฝœ็š„ token ๆถˆ่€—ๅ’Œๆˆๆœฌ
  • ๆˆๆœฌไผฐ็ฎ—: ๅŸบไบŽ DeepSeek ๅฎ˜ๆ–นๅฎšไปท่‡ชๅŠจ่ฎก็ฎ—ไฝฟ็”จๆˆๆœฌ

๐Ÿ“ฆ ไพ่ต–

  • Go 1.25.0+
  • GoAgent ๆก†ๆžถ
  • DeepSeek API Key

๐Ÿ”ง ้…็ฝฎ

่Žทๅ– DeepSeek API Key
  1. ่ฎฟ้—ฎ DeepSeek ๅฎ˜็ฝ‘
  2. ๆณจๅ†Œ่ดฆๅทๅนถ่Žทๅ– API Key
  3. ่ฎพ็ฝฎ็Žฏๅขƒๅ˜้‡๏ผš
export DEEPSEEK_API_KEY="your-api-key-here"

๐ŸŽฎ ไฝฟ็”จๆ–นๆณ•

่ฟ่กŒๆ‰น้‡ๆต‹่ฏ•็คบไพ‹
cd examples/translate
go run main.go
่ฟ่กŒไบคไบ’ๅผ็คบไพ‹
cd examples/translate/interactive
go run main.go "Hello, world!"
# ๆˆ–่€…ไธๅธฆๅ‚ๆ•ฐ๏ผŒ็จ‹ๅบไผšๆ็คบ่พ“ๅ…ฅ
go run main.go
ไปฃ็ ็คบไพ‹
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/kart-io/goagent/builder"
    "github.com/kart-io/goagent/core/state"
    "github.com/kart-io/goagent/llm"
    "github.com/kart-io/goagent/llm/providers"
)

func main() {
    // 1. ๅˆๅง‹ๅŒ– DeepSeek ๅฎขๆˆท็ซฏ
    apiKey := os.Getenv("DEEPSEEK_API_KEY")
    llmClient, err := providers.NewDeepSeek(&llm.Config{
        APIKey:      apiKey,
        Model:       "deepseek-chat",
        Temperature: 0.3,
        MaxTokens:   2000,
    })
    if err != nil {
        log.Fatal(err)
    }

    // 2. ๅˆ›ๅปบ็ฟป่ฏ‘็ณป็ปŸ
    translator := NewMultiAgentTranslator(llmClient)

    // 3. ๆ‰ง่กŒ็ฟป่ฏ‘
    ctx := context.Background()
    result, err := translator.Translate(ctx, "Hello, world!")
    if err != nil {
        log.Fatal(err)
    }

    // 4. ๆŸฅ็œ‹็ป“ๆžœ
    fmt.Printf("ๅŽŸๆ–‡: %s\n", result.OriginalText)
    fmt.Printf("ๆฃ€ๆต‹่ฏญ่จ€: %s\n", result.DetectedLanguage)
    fmt.Printf("็ฟป่ฏ‘็ป“ๆžœ: %s\n", result.TranslatedText)
}

// ๅˆ›ๅปบ Agent ๆ—ถ้œ€่ฆๆไพ›ๅˆๅง‹็Šถๆ€
func createAgent(llmClient llm.Client, systemPrompt string) *builder.ConfigurableAgent[any, core.State] {
    agent, err := builder.NewAgentBuilder[any, core.State](llmClient).
        WithSystemPrompt(systemPrompt).
        WithState(state.NewAgentState()).  // ๅฟ…้กปๆไพ›ๅˆๅง‹็Šถๆ€
        Build()

    if err != nil {
        log.Fatal(err)
    }

    return agent
}

๐Ÿ“Š ็ณป็ปŸๆต็จ‹ๅ›พ

ๆ•ดไฝ“ๆ‰ง่กŒๆต็จ‹
graph TD
    Start([ๅผ€ๅง‹]) --> Input[็”จๆˆท่พ“ๅ…ฅๆ–‡ๆœฌ]
    Input --> Init[ๅˆๅง‹ๅŒ–็ฟป่ฏ‘็ณป็ปŸ]
    Init --> CreateAgents[ๅˆ›ๅปบ Agent]

    CreateAgents --> DetectionAgent[่ฏญ่จ€ๆฃ€ๆต‹ Agent]
    CreateAgents --> TranslationAgent[็ฟป่ฏ‘ Agent]

    DetectionAgent --> Execute[ๆ‰ง่กŒ็ฟป่ฏ‘ๆต็จ‹]
    TranslationAgent --> Execute

    Execute --> Step1[ๆญฅ้ชค1: ่ฏญ่จ€ๆฃ€ๆต‹]
    Step1 --> LLM1[่ฐƒ็”จ DeepSeek LLM]
    LLM1 --> DetectResult[่Žทๅ–่ฏญ่จ€ๅ็งฐ]

    DetectResult --> Check{ๆ˜ฏๅฆไธบไธญๆ–‡?}
    Check -->|ๆ˜ฏ| SkipTranslate[่ทณ่ฟ‡็ฟป่ฏ‘]
    Check -->|ๅฆ| Step2[ๆญฅ้ชค2: ๆ‰ง่กŒ็ฟป่ฏ‘]

    Step2 --> LLM2[่ฐƒ็”จ DeepSeek LLM]
    LLM2 --> TransResult[่Žทๅ–็ฟป่ฏ‘็ป“ๆžœ]

    SkipTranslate --> Output[่พ“ๅ‡บ็ป“ๆžœ]
    TransResult --> Output

    Output --> End([็ป“ๆŸ])

    style Start fill:#90EE90
    style End fill:#FFB6C1
    style LLM1 fill:#87CEEB
    style LLM2 fill:#87CEEB
    style Check fill:#FFD700
่ฏฆ็ป†ๅทฅไฝœๆต็จ‹
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    ็”จๆˆท่พ“ๅ…ฅๆ–‡ๆœฌ                               โ”‚
โ”‚                 "Hello, how are you?"                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              MultiAgentTranslator.Translate()                โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  ๅˆๅง‹ๅŒ– TranslationResult                            โ”‚   โ”‚
โ”‚  โ”‚  result.OriginalText = "Hello, how are you?"        โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            ๆญฅ้ชค 1: ่ฏญ่จ€ๆฃ€ๆต‹ (detectLanguage)                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  ๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ Agent                                   โ”‚   โ”‚
โ”‚  โ”‚  โ”œโ”€ System Prompt: "ไฝ ๆ˜ฏ่ฏญ่จ€ๆฃ€ๆต‹ไธ“ๅฎถ..."            โ”‚   โ”‚
โ”‚  โ”‚  โ”œโ”€ Input: "Hello, how are you?"                    โ”‚   โ”‚
โ”‚  โ”‚  โ”œโ”€ DeepSeek LLM ๅค„็†                                โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€ Output: "่‹ฑ่ฏญ"                                   โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                              โ”‚
โ”‚  result.DetectedLanguage = "่‹ฑ่ฏญ"                            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ
                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                  โ”‚ ๆ˜ฏไธญๆ–‡? โ”‚
                  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
                 ๅฆ โ”‚        โ”‚ ๆ˜ฏ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚           โ”‚                     โ”‚
         โ–ผ           โ–ผ                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๆญฅ้ชค 2: ็ฟป่ฏ‘ (translateText)โ”‚    โ”‚  ่ทณ่ฟ‡็ฟป่ฏ‘         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚    โ”‚  result.         โ”‚
โ”‚  โ”‚ ๐ŸŒ ็ฟป่ฏ‘ Agent           โ”‚โ”‚    โ”‚  TranslatedText  โ”‚
โ”‚  โ”‚ โ”œโ”€ System Prompt:      โ”‚โ”‚    โ”‚  = ๅŽŸๆ–‡           โ”‚
โ”‚  โ”‚ โ”‚  "ไฝ ๆ˜ฏ็ฟป่ฏ‘ไธ“ๅฎถ..."    โ”‚โ”‚    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚  โ”‚ โ”œโ”€ Input: "่ฏทๅฐ†ไปฅไธ‹    โ”‚โ”‚             โ”‚
โ”‚  โ”‚ โ”‚  ่‹ฑ่ฏญๆ–‡ๆœฌ็ฟป่ฏ‘ๆˆไธญๆ–‡"  โ”‚โ”‚             โ”‚
โ”‚  โ”‚ โ”œโ”€ DeepSeek LLM ๅค„็†   โ”‚โ”‚             โ”‚
โ”‚  โ”‚ โ””โ”€ Output:             โ”‚โ”‚             โ”‚
โ”‚  โ”‚    "ไฝ ๅฅฝ๏ผŒไฝ ๅฅฝๅ—๏ผŸ"    โ”‚โ”‚             โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚             โ”‚
โ”‚                            โ”‚             โ”‚
โ”‚ result.TranslatedText =    โ”‚             โ”‚
โ”‚   "ไฝ ๅฅฝ๏ผŒไฝ ๅฅฝๅ—๏ผŸ"          โ”‚             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜             โ”‚
              โ”‚                            โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚       ่ฟ”ๅ›ž TranslationResult   โ”‚
         โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
         โ”‚  โ”‚ OriginalText: "Hello..." โ”‚ โ”‚
         โ”‚  โ”‚ DetectedLanguage: "่‹ฑ่ฏญ" โ”‚ โ”‚
         โ”‚  โ”‚ TranslatedText:          โ”‚ โ”‚
         โ”‚  โ”‚   "ไฝ ๅฅฝ๏ผŒไฝ ๅฅฝๅ—๏ผŸ"        โ”‚ โ”‚
         โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ’ก ็คบไพ‹่พ“ๅ‡บ

========================================
=== ๆ™บ่ƒฝ็ฟป่ฏ‘็ณป็ปŸ (Multi-Agent) ===
========================================

ไฝฟ็”จ DeepSeek Chat ๆจกๅž‹

ใ€ๆต‹่ฏ• 1ใ€‘
่พ“ๅ…ฅ: Hello, how are you today?
------------------------------------------------------------
๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ไปฃ็†: ๆญฃๅœจ่ฏ†ๅˆซ่ฏญ่จ€...
โœ“ ๆฃ€ๆต‹ๅฎŒๆˆ: ่‹ฑ่ฏญ (ไฝฟ็”จ 245 tokens)
๐ŸŒ ็ฟป่ฏ‘ไปฃ็†: ๆญฃๅœจ็ฟป่ฏ‘ๆ–‡ๆœฌ...
โœ“ ็ฟป่ฏ‘ๅฎŒๆˆ (ไฝฟ็”จ 312 tokens)
ๆฃ€ๆต‹่ฏญ่จ€: ่‹ฑ่ฏญ
็ฟป่ฏ‘็ป“ๆžœ: ไฝ ๅฅฝ๏ผŒไฝ ไปŠๅคฉๅฅฝๅ—๏ผŸ
Token ไฝฟ็”จๆƒ…ๅ†ต:
  - ่ฏญ่จ€ๆฃ€ๆต‹: 245 tokens
  - ็ฟป่ฏ‘: 312 tokens
  - ๆ€ป่ฎก: 557 tokens
============================================================

ใ€ๆต‹่ฏ• 2ใ€‘
่พ“ๅ…ฅ: Bonjour, comment allez-vous?
------------------------------------------------------------
๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ไปฃ็†: ๆญฃๅœจ่ฏ†ๅˆซ่ฏญ่จ€...
โœ“ ๆฃ€ๆต‹ๅฎŒๆˆ: ๆณ•่ฏญ (ไฝฟ็”จ 238 tokens)
๐ŸŒ ็ฟป่ฏ‘ไปฃ็†: ๆญฃๅœจ็ฟป่ฏ‘ๆ–‡ๆœฌ...
โœ“ ็ฟป่ฏ‘ๅฎŒๆˆ (ไฝฟ็”จ 298 tokens)
ๆฃ€ๆต‹่ฏญ่จ€: ๆณ•่ฏญ
็ฟป่ฏ‘็ป“ๆžœ: ไฝ ๅฅฝ๏ผŒๆ‚จๅฅฝๅ—๏ผŸ
Token ไฝฟ็”จๆƒ…ๅ†ต:
  - ่ฏญ่จ€ๆฃ€ๆต‹: 238 tokens
  - ็ฟป่ฏ‘: 298 tokens
  - ๆ€ป่ฎก: 536 tokens
============================================================

ใ€ๆต‹่ฏ• 3ใ€‘
่พ“ๅ…ฅ: ใ“ใ‚“ใซใกใฏใ€ใŠๅ…ƒๆฐ—ใงใ™ใ‹๏ผŸ
------------------------------------------------------------
๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ไปฃ็†: ๆญฃๅœจ่ฏ†ๅˆซ่ฏญ่จ€...
โœ“ ๆฃ€ๆต‹ๅฎŒๆˆ: ๆ—ฅ่ฏญ (ไฝฟ็”จ 252 tokens)
๐ŸŒ ็ฟป่ฏ‘ไปฃ็†: ๆญฃๅœจ็ฟป่ฏ‘ๆ–‡ๆœฌ...
โœ“ ็ฟป่ฏ‘ๅฎŒๆˆ (ไฝฟ็”จ 305 tokens)
ๆฃ€ๆต‹่ฏญ่จ€: ๆ—ฅ่ฏญ
็ฟป่ฏ‘็ป“ๆžœ: ไฝ ๅฅฝ๏ผŒๆ‚จๅฅฝๅ—๏ผŸ
Token ไฝฟ็”จๆƒ…ๅ†ต:
  - ่ฏญ่จ€ๆฃ€ๆต‹: 252 tokens
  - ็ฟป่ฏ‘: 305 tokens
  - ๆ€ป่ฎก: 557 tokens
============================================================

ใ€ๆต‹่ฏ• 4ใ€‘
่พ“ๅ…ฅ: ไฝ ๅฅฝ๏ผŒไปŠๅคฉๅคฉๆฐ”ๆ€Žไนˆๆ ท๏ผŸ
------------------------------------------------------------
๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ไปฃ็†: ๆญฃๅœจ่ฏ†ๅˆซ่ฏญ่จ€...
โœ“ ๆฃ€ๆต‹ๅฎŒๆˆ: ไธญๆ–‡ (ไฝฟ็”จ 235 tokens)
๐ŸŒ ็ฟป่ฏ‘ไปฃ็†: ๆญฃๅœจ็ฟป่ฏ‘ๆ–‡ๆœฌ...
โœ“ ็ฟป่ฏ‘ๅฎŒๆˆ (ไฝฟ็”จ 0 tokens)
ๆฃ€ๆต‹่ฏญ่จ€: ไธญๆ–‡
็ฟป่ฏ‘็ป“ๆžœ: ไฝ ๅฅฝ๏ผŒไปŠๅคฉๅคฉๆฐ”ๆ€Žไนˆๆ ท๏ผŸ
Token ไฝฟ็”จๆƒ…ๅ†ต:
  - ่ฏญ่จ€ๆฃ€ๆต‹: 235 tokens
  - ็ฟป่ฏ‘: 0 tokens
  - ๆ€ป่ฎก: 235 tokens
============================================================

โœจ ็ฟป่ฏ‘็ณป็ปŸๆต‹่ฏ•ๅฎŒๆˆ!

๐Ÿ“Š ๆ€ปไฝ“็ปŸ่ฎก:
  - ๆ€ป Token ไฝฟ็”จ้‡: 3,850 tokens
  - ๆ€ปๆˆๆœฌ: $0.000809

๐Ÿ“Š Token ไฝฟ็”จไธŽๆˆๆœฌ

Token ่ฟฝ่ธชๆœบๅˆถ

็ณป็ปŸไฝฟ็”จ GoAgent ็š„ CostTrackingCallback ๅฎžๆ—ถ่ฟฝ่ธชๆฏๆฌก LLM ่ฐƒ็”จ็š„ token ไฝฟ็”จๆƒ…ๅ†ต๏ผš

// ๅˆ›ๅปบ token ่ฟฝ่ธชๅ™จ
pricing := map[string]float64{
    "deepseek-chat": 0.21 / 1_000_000, // DeepSeek ๅนณๅ‡ไปทๆ ผ๏ผš$0.21/M tokens
}
tokenTracker := core.NewCostTrackingCallback(pricing)

// ๆทปๅŠ ๅˆฐ Agent ้…็ฝฎ
agent, err := builder.NewAgentBuilder[any, core.State](llmClient).
    WithSystemPrompt(systemPrompt).
    WithState(state.NewAgentState()).
    WithCallbacks(tokenTracker). // ๆทปๅŠ  token ่ฟฝ่ธชๅ›ž่ฐƒ
    Build()
DeepSeek ๅฎšไปท

ๆ นๆฎ DeepSeek ๅฎ˜ๆ–นๅฎšไปท๏ผˆๆˆช่‡ณ 2025-01๏ผ‰๏ผš

ๆจกๅž‹ ่พ“ๅ…ฅไปทๆ ผ ่พ“ๅ‡บไปทๆ ผ ๅนณๅ‡ไปทๆ ผ
deepseek-chat $0.14/M tokens $0.28/M tokens $0.21/M tokens

ๆณจๆ„: ๆœฌ็คบไพ‹ไฝฟ็”จๅนณๅ‡ไปทๆ ผ $0.21/M tokens ่ฟ›่กŒไผฐ็ฎ—๏ผŒๅฎž้™…ๆˆๆœฌๅฏ่ƒฝ็•ฅๆœ‰ไธๅŒใ€‚

Token ไฝฟ็”จๅˆ†ๆž

ๅ…ธๅž‹็ฟป่ฏ‘ไปปๅŠก็š„ token ๆถˆ่€—๏ผš

ๆ“ไฝœ Token ่Œƒๅ›ด ่ฏดๆ˜Ž
่ฏญ่จ€ๆฃ€ๆต‹ 200-300 tokens ๅŒ…ๅซ System Prompt + ่พ“ๅ…ฅๆ–‡ๆœฌ
ๆ–‡ๆœฌ็ฟป่ฏ‘ 250-400 tokens ๅŒ…ๅซ System Prompt + ่พ“ๅ…ฅๆ–‡ๆœฌ + ่พ“ๅ‡บ
่ทณ่ฟ‡็ฟป่ฏ‘๏ผˆไธญๆ–‡๏ผ‰ 0 tokens ๆ™บ่ƒฝไผ˜ๅŒ–๏ผŒๆฃ€ๆต‹ๅˆฐไธญๆ–‡ๅŽไธ่ฐƒ็”จ็ฟป่ฏ‘ LLM
ๆˆๆœฌไผ˜ๅŒ–ๅปบ่ฎฎ
  1. ๆ‰น้‡ๅค„็†: ไธ€ๆฌกๅค„็†ๅคšไธชๆ–‡ๆœฌๅฏไปฅๅˆ†ๆ‘Š System Prompt ็š„ token ๆˆๆœฌ
  2. ็ผ“ๅญ˜็ป“ๆžœ: ๅฏนไบŽ้‡ๅค็ฟป่ฏ‘็š„ๆ–‡ๆœฌๅฏไปฅไฝฟ็”จ็ผ“ๅญ˜
  3. ่ฏญ่จ€้ข„ๅˆค: ๅฆ‚ๆžœๅทฒ็Ÿฅๆบ่ฏญ่จ€๏ผŒๅฏไปฅ่ทณ่ฟ‡่ฏญ่จ€ๆฃ€ๆต‹ๆญฅ้ชค
  4. ็ฎ€ๅŒ– Prompt: ๅœจไฟ่ฏ่ดจ้‡็š„ๅ‰ๆไธ‹๏ผŒๅฏไปฅ้€‚ๅฝ“็ฎ€ๅŒ– System Prompt
TranslationResult ็ป“ๆž„
type TranslationResult struct {
    OriginalText      string `json:"original_text"`      // ๅŽŸๆ–‡
    DetectedLanguage  string `json:"detected_language"`  // ๆฃ€ๆต‹ๅˆฐ็š„่ฏญ่จ€
    TranslatedText    string `json:"translated_text"`    // ็ฟป่ฏ‘็ป“ๆžœ
    TokensUsed        int    `json:"tokens_used"`        // ๆ€ป token ๆ•ฐ
    DetectionTokens   int    `json:"detection_tokens"`   // ่ฏญ่จ€ๆฃ€ๆต‹ token
    TranslationTokens int    `json:"translation_tokens"` // ็ฟป่ฏ‘ token
}

๐Ÿ—๏ธ ็ณป็ปŸ่ฎพ่ฎก

็ณป็ปŸๆžถๆž„ๅ›พ
graph TB
    subgraph "็”จๆˆทๅฑ‚"
        User[็”จๆˆท]
        CLI[ๅ‘ฝไปค่กŒ็•Œ้ข]
    end

    subgraph "ๅบ”็”จๅฑ‚"
        Main[main.go<br/>ๆ‰น้‡ๆต‹่ฏ•]
        Interactive[interactive/main.go<br/>ไบคไบ’ๅผ]
    end

    subgraph "ไธšๅŠกๅฑ‚ - MultiAgentTranslator"
        Translator[็ฟป่ฏ‘ๅ่ฐƒๅ™จ]
        DetectLang[detectLanguage<br/>่ฏญ่จ€ๆฃ€ๆต‹ๆ–นๆณ•]
        TransText[translateText<br/>็ฟป่ฏ‘ๆ–นๆณ•]
    end

    subgraph "Agent ๅฑ‚"
        DetectionAgent[๐Ÿ” ่ฏญ่จ€ๆฃ€ๆต‹ Agent<br/>ConfigurableAgent]
        TranslationAgent[๐ŸŒ ็ฟป่ฏ‘ Agent<br/>ConfigurableAgent]
    end

    subgraph "LLM ๅฑ‚"
        DeepSeek[DeepSeek LLM Provider<br/>deepseek-chat]
    end

    subgraph "ๆก†ๆžถๅฑ‚ - GoAgent"
        Builder[AgentBuilder<br/>ๆž„ๅปบๅ™จ]
        State[AgentState<br/>็Šถๆ€็ฎก็†]
        LLMClient[LLM Client<br/>ๆŽฅๅฃ]
    end

    User --> CLI
    CLI --> Main
    CLI --> Interactive
    Main --> Translator
    Interactive --> Translator

    Translator --> DetectLang
    Translator --> TransText

    DetectLang --> DetectionAgent
    TransText --> TranslationAgent

    DetectionAgent --> Builder
    TranslationAgent --> Builder

    Builder --> State
    Builder --> LLMClient

    DetectionAgent --> DeepSeek
    TranslationAgent --> DeepSeek

    LLMClient --> DeepSeek

    style User fill:#90EE90
    style DeepSeek fill:#87CEEB
    style Translator fill:#FFD700
    style DetectionAgent fill:#FFA07A
    style TranslationAgent fill:#FFA07A
ๅบๅˆ—ๅ›พ - Agent ไบคไบ’ๆต็จ‹
sequenceDiagram
    participant U as ็”จๆˆท
    participant M as main.go
    participant T as ็ฟป่ฏ‘ๅ™จ
    participant DA as ่ฏญ่จ€ๆฃ€ๆต‹Agent
    participant TA as ็ฟป่ฏ‘Agent
    participant LLM as DeepSeekๆจกๅž‹

    U->>M: ่พ“ๅ…ฅๆ–‡ๆœฌ "Hello, world!"
    M->>T: ๅˆ›ๅปบ็ฟป่ฏ‘ๅ™จๅฎžไพ‹

    Note right of T: ๅˆๅง‹ๅŒ–้˜ถๆฎต
    T->>DA: createLanguageDetectionAgent()
    T->>TA: createTranslationAgent()

    M->>T: Translate(ctx, text)

    Note over T,DA: ๆญฅ้ชค1: ่ฏญ่จ€ๆฃ€ๆต‹
    T->>T: ๅˆๅง‹ๅŒ– TranslationResult
    T->>DA: detectLanguage(ctx, "Hello, world!")
    DA->>LLM: Execute() - ่ฏ†ๅˆซ่ฏญ่จ€
    LLM-->>DA: "่‹ฑ่ฏญ"
    DA-->>T: return "่‹ฑ่ฏญ"
    T->>T: result.DetectedLanguage = "่‹ฑ่ฏญ"

    Note over T: ๆญฅ้ชค2: ๆกไปถๅˆคๆ–ญ
    T->>T: if language != "ไธญๆ–‡"

    Note over T,TA: ๆญฅ้ชค3: ๆ‰ง่กŒ็ฟป่ฏ‘
    T->>TA: translateText(ctx, text, "่‹ฑ่ฏญ")
    TA->>TA: ๆž„ๅปบๆ็คบ่ฏ
    TA->>LLM: Execute() - ็ฟป่ฏ‘ๆ–‡ๆœฌ
    LLM-->>TA: "ไฝ ๅฅฝ๏ผŒไธ–็•Œ๏ผ"
    TA-->>T: return "ไฝ ๅฅฝ๏ผŒไธ–็•Œ๏ผ"
    T->>T: result.TranslatedText = "ไฝ ๅฅฝ๏ผŒไธ–็•Œ๏ผ"

    T-->>M: return TranslationResult
    M->>U: ๆ˜พ็คบ็ฟป่ฏ‘็ป“ๆžœ

    Note over U: ๅŽŸๆ–‡: Hello, world!<br/>ๆฃ€ๆต‹่ฏญ่จ€: ่‹ฑ่ฏญ<br/>็ฟป่ฏ‘็ป“ๆžœ: ไฝ ๅฅฝ๏ผŒไธ–็•Œ๏ผ
ๆ•ฐๆฎๆตๅ›พ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        ๆ•ฐๆฎๆตๅ‘                                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่พ“ๅ…ฅๆ–‡ๆœฌ
   โ”‚
   โ”‚  "Hello, world!"
   โ”‚
   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  TranslationResult                   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ OriginalText: "Hello, world!"  โ”‚ โ”‚
โ”‚  โ”‚ DetectedLanguage: ""           โ”‚ โ”‚
โ”‚  โ”‚ TranslatedText: ""             โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ไผ ้€’็ป™่ฏญ่จ€ๆฃ€ๆต‹ Agent
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ่ฏญ่จ€ๆฃ€ๆต‹ Agent ่พ“ๅ…ฅ                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Input: "Hello, world!"         โ”‚ โ”‚
โ”‚  โ”‚ SystemPrompt: "ไฝ ๆ˜ฏ่ฏญ่จ€ๆฃ€ๆต‹ไธ“ๅฎถ"โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ่ฐƒ็”จ DeepSeek LLM
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  LLM ๅค„็†                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Model: deepseek-chat           โ”‚ โ”‚
โ”‚  โ”‚ Temperature: 0.3               โ”‚ โ”‚
โ”‚  โ”‚ MaxTokens: 2000                โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ่ฟ”ๅ›žๆฃ€ๆต‹็ป“ๆžœ
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ่ฏญ่จ€ๆฃ€ๆต‹ Agent ่พ“ๅ‡บ                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Output: "่‹ฑ่ฏญ"                  โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ๆ›ดๆ–ฐ็ป“ๆžœ
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  TranslationResult (ๆ›ดๆ–ฐๅŽ)          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ OriginalText: "Hello, world!"  โ”‚ โ”‚
โ”‚  โ”‚ DetectedLanguage: "่‹ฑ่ฏญ"       โ”‚ โ”‚
โ”‚  โ”‚ TranslatedText: ""             โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ไผ ้€’็ป™็ฟป่ฏ‘ Agent
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฟป่ฏ‘ Agent ่พ“ๅ…ฅ                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Input: "่ฏทๅฐ†ไปฅไธ‹่‹ฑ่ฏญๆ–‡ๆœฌ็ฟป่ฏ‘ๆˆ โ”‚ โ”‚
โ”‚  โ”‚        ไธญๆ–‡๏ผšHello, world!"    โ”‚ โ”‚
โ”‚  โ”‚ SystemPrompt: "ไฝ ๆ˜ฏ็ฟป่ฏ‘ไธ“ๅฎถ"   โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ่ฐƒ็”จ DeepSeek LLM
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  LLM ๅค„็†                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Model: deepseek-chat           โ”‚ โ”‚
โ”‚  โ”‚ Temperature: 0.3               โ”‚ โ”‚
โ”‚  โ”‚ MaxTokens: 2000                โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ่ฟ”ๅ›ž็ฟป่ฏ‘็ป“ๆžœ
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฟป่ฏ‘ Agent ่พ“ๅ‡บ                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Output: "ไฝ ๅฅฝ๏ผŒไธ–็•Œ๏ผ"          โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ๆ›ดๆ–ฐ็ป“ๆžœ
                   โ”‚
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  TranslationResult (ๆœ€็ปˆ)            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ OriginalText: "Hello, world!"  โ”‚ โ”‚
โ”‚  โ”‚ DetectedLanguage: "่‹ฑ่ฏญ"       โ”‚ โ”‚
โ”‚  โ”‚ TranslatedText: "ไฝ ๅฅฝ๏ผŒไธ–็•Œ๏ผ" โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ”‚  ่ฟ”ๅ›ž็ป™็”จๆˆท
                   โ”‚
                   โ–ผ
                ่พ“ๅ‡บ็ป“ๆžœ
MultiAgentTranslator ็ป“ๆž„
type MultiAgentTranslator struct {
    llmClient         llm.Client
    detectionAgent    *builder.ConfigurableAgent[any, core.State]
    translationAgent  *builder.ConfigurableAgent[any, core.State]
}
ๆ ธๅฟƒๆ–นๆณ•
  1. Translate(ctx, text) - ไธป็ฟป่ฏ‘ๆต็จ‹

    • ่ฐƒ็”จ่ฏญ่จ€ๆฃ€ๆต‹ Agent
    • ่ฐƒ็”จ็ฟป่ฏ‘ Agent
    • ่ฟ”ๅ›žๅฎŒๆ•ด็ป“ๆžœ
  2. detectLanguage(ctx, text) - ่ฏญ่จ€ๆฃ€ๆต‹

    • ไฝฟ็”จไธ“้—จ็š„ๆฃ€ๆต‹ Agent
    • ่ฟ”ๅ›ž่ฏญ่จ€ๅ็งฐ๏ผˆไธญๆ–‡๏ผ‰
  3. translateText(ctx, text, language) - ๆ–‡ๆœฌ็ฟป่ฏ‘

    • ไฝฟ็”จไธ“้—จ็š„็ฟป่ฏ‘ Agent
    • ๆ™บ่ƒฝ่ทณ่ฟ‡ไธญๆ–‡ๅˆฐไธญๆ–‡็š„็ฟป่ฏ‘

๐ŸŽฏ ๆ”ฏๆŒ็š„่ฏญ่จ€

  • โœ… ่‹ฑ่ฏญ (English)
  • โœ… ๆณ•่ฏญ (French)
  • โœ… ๆ—ฅ่ฏญ (Japanese)
  • โœ… ่ฅฟ็ญ็‰™่ฏญ (Spanish)
  • โœ… ๅพท่ฏญ (German)
  • โœ… ไฟ„่ฏญ (Russian)
  • โœ… ไธญๆ–‡ (Chinese)
  • โœ… ้Ÿฉ่ฏญ (Korean)
  • โœ… ๅ…ถไป–่ฏญ่จ€๏ผˆ่‡ชๅŠจ่ฏ†ๅˆซ๏ผ‰

โš™๏ธ ้…็ฝฎ้€‰้กน

DeepSeek ้…็ฝฎ
&llm.Config{
    APIKey:      "your-api-key",
    Model:       "deepseek-chat",  // DeepSeek ๅฏน่ฏๆจกๅž‹
    Temperature: 0.3,               // ไฝŽๆธฉๅบฆ่Žทๅพ—ๆ›ดๅ‡†็กฎ็š„็ฟป่ฏ‘
    MaxTokens:   2000,              // ๆœ€ๅคง token ๆ•ฐ
}
Agent ้…็ฝฎ

ๅฏไปฅ้€š่ฟ‡ builder.NewAgentBuilder ่‡ชๅฎšไน‰ Agent ้…็ฝฎ๏ผš

  • System Prompt๏ผˆ็ณป็ปŸๆ็คบ๏ผ‰
  • Temperature๏ผˆๆธฉๅบฆ๏ผ‰
  • Max Tokens๏ผˆๆœ€ๅคง token ๆ•ฐ๏ผ‰
  • ๅ…ถไป–ๅ‚ๆ•ฐ

๐Ÿ” ๆžถๆž„็ฌฆๅˆๆ€ง

่ฏฅๅฎž็Žฐ้ตๅพช GoAgent ็š„ 4 ๅฑ‚ๆžถๆž„๏ผš

  • โœ… Layer 4 (Examples): ไฝไบŽ examples/translate/
  • โœ… ๅฏผๅ…ฅ่ง„ๅˆ™: ๅชไปŽ Layer 1 (interfaces) ๅ’Œ Layer 2 (core, builder, llm) ๅฏผๅ…ฅ
  • โœ… ๆ— ๅพช็Žฏไพ่ต–: ๆฒกๆœ‰ๅ‘ไธŠๅฏผๅ…ฅๆˆ–ๅพช็Žฏไพ่ต–
  • โœ… ไปฃ็ ่ดจ้‡: ้ตๅพช Go ไปฃ็ ่ง„่Œƒๅ’Œๆœ€ไฝณๅฎž่ทต

๐Ÿ› ๏ธ ๆ‰ฉๅฑ•ๅปบ่ฎฎ

ๆทปๅŠ ๆ›ดๅคš่ฏญ่จ€ๆ”ฏๆŒ

ๅœจ createLanguageDetectionAgent ็š„ system prompt ไธญๆทปๅŠ ๆ–ฐ่ฏญ่จ€่ง„ๅˆ™ใ€‚

ๆ”ฏๆŒๅ…ถไป–็›ฎๆ ‡่ฏญ่จ€

ไฟฎๆ”น createTranslationAgent ็š„ system prompt๏ผŒๆ”ฏๆŒ็ฟป่ฏ‘ๆˆๅ…ถไป–็›ฎๆ ‡่ฏญ่จ€ใ€‚

ๆทปๅŠ ็ผ“ๅญ˜

ไฝฟ็”จ GoAgent ็š„ไธญ้—ดไปถ็ณป็ปŸๆทปๅŠ ็ฟป่ฏ‘็ป“ๆžœ็ผ“ๅญ˜๏ผŒๆ้ซ˜ๆ€ง่ƒฝใ€‚

ๆ‰น้‡็ฟป่ฏ‘

ๆ‰ฉๅฑ• MultiAgentTranslator ๆ”ฏๆŒๆ‰น้‡็ฟป่ฏ‘ๅคšไธชๆ–‡ๆœฌใ€‚

๐Ÿ“ ่ฎธๅฏ่ฏ

้ตๅพช GoAgent ้กน็›ฎ็š„่ฎธๅฏ่ฏใ€‚

๐Ÿค ่ดก็Œฎ

ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ


ๆœ€ๅŽๆ›ดๆ–ฐ: 2025-11-15 ไฝœ่€…: GoAgent Team

Documentation ยถ

The Go Gopher

There is no documentation for this package.

Directories ยถ

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL