Skip to content

Latest commit

 

History

History
371 lines (284 loc) · 8.54 KB

File metadata and controls

371 lines (284 loc) · 8.54 KB

Dify API 到本地Agent迁移总结

变更概述

将翻译系统从依赖 Dify API 迁移到完全本地化的 Agent 架构,使用 Claude API 和自定义工具。

新增文件

Agent核心文件

server/agent/
├── index.js                              # Agent协调器
└── tools/
    ├── feishu-knowledge-base.js         # 飞书知识库工具
    ├── preprocess-text.js               # 预处理文本工具
    └── translate-agent.js               # 翻译Agent工具

路由文件

server/routes/
└── translate-local.js                    # 本地Agent路由(新)

MCP服务器(可选,未来扩展用)

mcp-server/
├── package.json
├── index.js
├── README.md
└── tools/
    ├── feishu-knowledge-base.js
    ├── preprocess-text.js
    └── translate-agent.js

文档

README-LOCAL-AGENT.md                     # 详细架构文档
QUICKSTART.md                            # 快速启动指南
MIGRATION-SUMMARY.md                     # 本文件
test-local-agent.js                      # 测试脚本

修改的文件

1. server/index.js

变更: 添加模式切换逻辑

// 旧代码
import translateRoutes from './routes/translate.js'

// 新代码
const USE_LOCAL_AGENT = process.env.USE_LOCAL_AGENT !== 'false'
let translateRoutes
if (USE_LOCAL_AGENT) {
  const module = await import('./routes/translate-local.js')
  translateRoutes = module.default
} else {
  const module = await import('./routes/translate.js')
  translateRoutes = module.default
}

2. package.json

变更: 添加 Anthropic SDK 依赖

"dependencies": {
  "@anthropic-ai/sdk": "^0.32.1",
  // ... 其他依赖
}

环境变量变更

新增配置项

# 模式选择(新增)
USE_LOCAL_AGENT=true                    # true=本地Agent, false=Dify API

# Claude API(本地Agent必需)
ANTHROPIC_API_KEY=sk-ant-xxx            # Anthropic API密钥

# 飞书配置(可选)
FEISHU_APP_ID=cli_xxx                   # 飞书应用ID
FEISHU_APP_SECRET=xxx                   # 飞书应用密钥

保留的配置(Dify模式用)

DIFY_API_KEY=xxx
DIFY_BASE_URL=https://api.dify.ai/v1
DIFY_APP_ID=xxx

架构对比

旧架构(Dify API)

┌─────────┐      ┌──────────┐      ┌──────────┐
│  前端   │ ───> │ Express  │ ───> │ Dify API │
│  Vue 3  │ <─── │  Server  │ <─── │          │
└─────────┘      └──────────┘      └──────────┘

问题:

  • 依赖外部服务
  • 调试困难
  • 定制化受限
  • 成本不透明

新架构(本地Agent)

┌─────────┐      ┌──────────┐      ┌─────────────┐
│  前端   │      │ Express  │      │ Agent协调器  │
│  Vue 3  │ ───> │  Server  │ ───> │             │
│         │ <─── │          │ <─── │  ┌────────┐ │
└─────────┘      └──────────┘      │  │Tool 1  │ │ ──> 飞书API
                                    │  │飞书知识库│ │
                                    │  └────────┘ │
                                    │  ┌────────┐ │
                                    │  │Tool 2  │ │ ──> Claude
                                    │  │预处理   │ │     API
                                    │  └────────┘ │
                                    │  ┌────────┐ │
                                    │  │Tool 3  │ │ ──> Claude
                                    │  │翻译Agent│ │     API
                                    │  └────────┘ │
                                    └─────────────┘

优势:

  • ✅ 完全控制
  • ✅ 易于调试
  • ✅ 高度定制
  • ✅ 成本透明
  • ✅ 独立部署

功能对比

功能 Dify API 本地Agent 状态
文本分析 等效
术语提取 等效
术语匹配 等效
翻译执行 等效
知识库管理 改进
长文本处理 ⚠️ 改进
批量翻译 新增
本地缓存 新增
日志调试 ⚠️ 改进

API兼容性

所有前端 API 保持不变,无需修改前端代码:

  • POST /api/submit-text
  • POST /api/confirm-nouns
  • POST /api/start-translation
  • GET /api/session/:sessionId
  • POST /api/upload-file
  • GET /api/history

工作流对比

Dify工作流(从yml文件分析)

开始 → if-else判断 → 
  ├─ 分析模式 → 加载飞书 → LLM分析 → 返回结果
  ├─ 翻译模式 → 加载术语 → LLM翻译 → 返回结果
  └─ 其他 → 错误处理

本地Agent工作流

开始 → 
  ├─ 提交文本
  │   └─ 加载知识库 → 预处理分析 → 返回报告
  ├─ 确认术语
  │   └─ 保存术语 → 更新知识库
  └─ 开始翻译
      └─ 加载术语 → 执行翻译 → 返回结果

关键实现

1. 飞书知识库工具

功能:

  • 加载术语对照表
  • 查询单个术语
  • 添加新术语
  • 30分钟本地缓存

特点:

  • 飞书API未配置时使用模拟数据
  • 不影响核心功能

2. 预处理工具

功能:

  • 文档领域识别
  • 专有名词提取
  • 术语数据库匹配
  • 生成分析报告

AI模型: Claude 3.5 Sonnet

提示词: 结构化的分析模板,包含:

  • 文档信息分析
  • 术语分类
  • 确认文案生成
  • 翻译策略建议

3. 翻译Agent

功能:

  • 专业翻译执行
  • 术语一致性保证
  • 长文本自动分段
  • 格式保持

AI模型: Claude 3.5 Sonnet

特点:

  • 智能分段(>3000字符)
  • 每段独立翻译
  • 自动合并结果
  • 频率限制保护

性能优化

  1. 术语缓存: 减少API调用
  2. 智能分段: 避免超时
  3. 并发控制: 防止频率限制
  4. 模拟数据: 开发环境友好

成本分析

Dify API(估算)

  • 固定订阅费用
  • 调用次数限制
  • 不透明的计费

本地Agent

  • 仅 Claude API 费用
  • 按 token 计费
  • 完全透明
  • 可优化空间大

示例:

  • 输入: 2000字 ≈ 3000 tokens
  • 输出: 2000字 ≈ 3000 tokens
  • 单次翻译成本: ~$0.09 (Claude 3.5 Sonnet)

测试

运行测试脚本

node test-local-agent.js

测试覆盖:

  1. ✅ 加载知识库
  2. ✅ 查询术语
  3. ✅ 预处理文本
  4. ✅ 执行翻译

手动测试

# 1. 启动服务
npm run server

# 2. 测试API
curl -X POST http://localhost:3001/api/submit-text \
  -H "Content-Type: application/json" \
  -d '{"text":"测试文本","language_from":"ZH","language_to":"EN"}'

部署变更

环境变量

生产环境需添加:

USE_LOCAL_AGENT=true
ANTHROPIC_API_KEY=your_real_api_key
FEISHU_APP_ID=your_feishu_app_id
FEISHU_APP_SECRET=your_feishu_secret

依赖安装

npm install

启动命令(无变化)

npm run server
npm run dev

回滚方案

如需回滚到Dify API:

  1. 修改 .env:

    USE_LOCAL_AGENT=false
  2. 重启服务:

    npm run server

后续计划

  • 实现真实的飞书API读写
  • 添加术语数据库持久化
  • 支持更多AI模型
  • 批量翻译优化
  • 翻译质量评估
  • 用户权限管理

技术债务

  1. 飞书API仅实现了模拟,需要完整实现
  2. 术语库使用内存存储,应迁移到数据库
  3. 错误处理可以更细化
  4. 需要添加单元测试

文档

总结

成功完成从 Dify API 到本地 Agent 的完整迁移

🎯 核心优势:

  • 完全控制
  • 易于定制
  • 成本透明
  • 独立部署

🔧 技术栈:

  • Claude 3.5 Sonnet
  • Express + Node.js
  • 飞书API (可选)
  • Vue 3 (前端无变化)

📊 兼容性: 100% API兼容,前端无需修改

🚀 可扩展性: 清晰的工具架构,易于添加新功能