Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f5ed55c

Browse files
docs:更新专栏
1 parent 597bcd5 commit f5ed55c

13 files changed

+1292
-6
lines changed

‎.vscode/.server-controller-port.log‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"port": 9149,
3-
"time": 1737701531002,
2+
"port": 9146,
3+
"time": 1738581319562,
44
"version": "0.0.3"
55
}

‎docs/.vuepress/config.js‎

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ module.exports = {
809809
text: '职业',
810810
items: [{
811811
text: '职业规划',
812-
link: '/md/career/01-Java工程师必读书单.md'
812+
link: '/md/career/为什么中国的程序员有35岁危机'
813813
},
814814
{
815815
text: '晋升',
@@ -821,6 +821,11 @@ module.exports = {
821821
link: '/md/career/经常被压缩开发时间,延期还要背锅,如何破局?'
822822
},
823823

824+
{
825+
text: '书单',
826+
link: '/md/career/Java-reading-list'
827+
},
828+
824829
{
825830
text: '00-如何学习项目管理专栏',
826831
link: '/md/mgr/00-如何学习项目管理专栏.md'
@@ -1959,8 +1964,7 @@ module.exports = {
19591964
collapsable: false,
19601965
sidebarDepth: 0,
19611966
children: [
1962-
"01-Java工程师必读书单",
1963-
"02-为什么中国的程序员有35岁危机",
1967+
"为什么中国的程序员有35岁危机",
19641968
"03-新人程序员入行忠告",
19651969
"04-外企也半夜发布上线吗?",
19661970
"05-中外程序员到底有啥区别?",
@@ -1975,6 +1979,11 @@ module.exports = {
19751979
"workplace-jargon",
19761980
"workplace-rule",
19771981
"big-company-work-style",
1982+
"研发的立足之本到底是啥?",
1983+
"must-have-soft-skills-for-rd",
1984+
"no-tech-no-future-for-rd",
1985+
"moat-of-rd",
1986+
"life-beyond-career-growth",
19781987
]
19791988
},
19801989

@@ -1985,6 +1994,7 @@ module.exports = {
19851994
children: [
19861995
"p6-promotion-guide",
19871996
"why-hard-work-didnt-get-you-promoted-the-overlooked-truth",
1997+
"performance-review-guideline",
19881998
]
19891999
},
19902000

@@ -1997,6 +2007,17 @@ module.exports = {
19972007
]
19982008
},
19992009

2010+
2011+
{
2012+
title: "书单",
2013+
collapsable: false,
2014+
sidebarDepth: 0,
2015+
children: [
2016+
"Java-reading-list",
2017+
"efficient-professional-reading-list",
2018+
]
2019+
},
2020+
20002021
],
20012022

20022023
"/md/vue/": [{
@@ -2134,6 +2155,16 @@ module.exports = {
21342155
"02-常用Prompt",
21352156
]
21362157
},
2158+
2159+
{
2160+
title: "Dify",
2161+
collapsable: false,
2162+
sidebarDepth: 0,
2163+
children: [
2164+
"what-is-llmops",
2165+
"integrate-dify-and-aws-services-to-enable-more-flexible-translation-workflows",
2166+
]
2167+
},
21372168
],
21382169

21392170
"/md/AI/ml/": [{
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# 集成 Dify 和 AWS Service 实现更具灵活性的翻译工作流
2+
## 0 前言
3+
4+
基于Dify现有能力,已能对不少业务场景提供帮助,但对一些特定诉求,还要借助其扩展机制,本文利用翻译场景举例详细说明。
5+
6+
## 1 翻译场景复杂性分析
7+
8+
翻译是从简单到复杂各级都存在的场景,比较简单的翻译可能一句简单 Prompt,但对复杂、效果要求较高翻译场景,可能需要一些复杂 LLM 编排,如吴恩达开源的 Translation Agent 工作。
9+
10+
从效果层面看,有些翻译要求比较高的意译水平,比如广告词的翻译,需要理解原文的深层含义,而非逐字翻译。类似场景实践,采用多轮调用 COT 的技巧,还需不断反思修正,得最优答案。这种场景往往要求灵活 LLM 编排能力。这种场景是 Dify 擅长。
11+
12+
也有另外一些翻译场景,要求非常高的场景化和专业化,比如游戏论坛的评论翻译,需要通过 Prompt 给出目标受众期待的语气和翻译风格,同时还需要专词映射机制,来支持一些专业的游戏词汇(角色/道具/活动)或者黑话。
13+
14+
参考栏中的一文中介绍了专词翻译的方案,其中借助分词器进行专词提取和 KV 数据库存贮映射关系,方案中包含的 DynamoDB & Glue 服务,其服务能力是目前 Dify 所不具备的,单纯依靠 Dify 无法支持这种翻译诉求。
15+
16+
### 方案的问题
17+
18+
它是基于代码实现,未提供友好的界面来调整 Prompt,对于复杂的 LLM 编排仅仅只能通过修改代码实现,没有足够的灵活性去应对各种各样的具体场景,也缺乏通用能力的支持,比如想要实现 stream response 则比较麻烦,而 Dify 的 API 发布能力则可以很轻松的弥补这一点,同时还可以利用 Dify API 监控等一系列通用能力。
19+
20+
为结合两者的优势,本文尝试了对两者进行集成实践。
21+
22+
## 2 Dify与外部工具集成
23+
24+
Dify社区版文档中,目前主要提供 2 种集成:
25+
26+
- HTTP 节点:允许通过 Restful API 与外部接口进行交互。
27+
- 自定义工具:通过自定义工具添加一种新的节点类型,可以编排在工作流中。
28+
29+
AWS的能力从原则上可与 Dify 通过这两种方式进行集成,但依然存在一些
30+
31+
### 2.1 问题
32+
33+
#### 2.1.1 HTTP 方式存在鉴权问题
34+
35+
鉴权步骤较麻烦,且需要用到 AK/SK,可能受安全方面限制。
36+
37+
可通过自定义工具来对接 AWS 的能力,自定义工具本质上是运行在 Dify docker 运行的实例中的,无需 AK/SK 的配置,直接通过实例上 AWS IAM Role 来获得执行权限。
38+
39+
#### 2.1.2 AWS的一些能力
40+
41+
并非直接可访问的 SAAS API 服务,需预先私有化部署,如一直没人用或使用过少,可能存在闲置率率过高问题。其它类似案例设计方案时,主要基于 serverless 服务搭建,大大降低空置问题,其中 Lambda 的接口设计时,也提供多种接口,除了直接翻译,还可以支持获取专词映射和切词结果。
42+
43+
### 2.2 集成过程
44+
45+
#### 2.2.1 部署 Dify
46+
47+
采用社区版 – Docker Compose 方式进行部署。
48+
49+
#### 2.2.2 编辑自定义工具
50+
51+
参考Dify文档定义工具,一个工具一般对应两个文件:
52+
53+
##### 1 python 文件
54+
55+
为对接 AWS 服务的连接器,一般利用 boto3 来访问 AWS 服务,Dify 的 Docker 环境中已集成 boto3 的依赖。参考实现:
56+
57+
![](https://my-img.javaedge.com.cn/javaedge-blog/2025/02/70978988bea0a796b69ebe11a695c845.png)
58+
59+
##### 2 yaml 文件
60+
61+
为该工具的输入输出的界面定义文件,参考代码,注意 name 字段需要和真实文件名保持一致,否则加载时会出现问题。
62+
63+
![](https://my-img.javaedge.com.cn/javaedge-blog/2025/02/e2504b5de83fe524aab040af28ac0999.png)
64+
65+
#### 2.2.3 构建自定义 Docker 镜像
66+
67+
参考下面伪代码:
68+
69+
```bash
70+
# 按照下面步骤把工具对应的代码文件置入指定位置
71+
cp -r ${tool_folder} ~/dify/api/core/tools/provider/builtin/
72+
73+
# 构建新镜像
74+
cd ~/dify/api
75+
sudo docker build -t dify-api:${tag} .
76+
77+
# 指定启动镜像
78+
cd ../dify/docker/
79+
vim docker-compose.yaml
80+
# 修改image
81+
# image: langgenius/dify-api:0.6.11 => image: langgenius/dify-api:${tag}
82+
83+
# 停止docker (也可以只更新修改过镜像的Container)
84+
sudo docker compose down
85+
86+
# 启动docker
87+
sudo docker compose up -d
88+
```
89+
90+
#### 2.2.4 添加自定义工具到工作流
91+
92+
检查自定义工具是否安装成功。
93+
94+
若安装成功,可在 dify 首页的 Tools Tab 中看到新增的工具集:
95+
96+
![](https://my-img.javaedge.com.cn/javaedge-blog/2025/02/3c8c664942e76c359bc0fe66fac50e59.png)
97+
98+
工作流编排的时候,右键添加节点,可在 Tools/Built-in 中看到添加的自定义工具:
99+
100+
![](https://my-img.javaedge.com.cn/javaedge-blog/2025/02/3d4cbb271630c0a977637503dc924bb7.png)
101+
102+
#### 2.2.5 调试自定义 Tool
103+
104+
当工具没有正确加载不可见时。参考下面伪代码,查看服务的日志,根据日志来修改代码:
105+
106+
```bash
107+
# 查看dify-api所在的container id
108+
sudo docker ps -a
109+
110+
# 查看dify-api 这个container的日志
111+
sudo docker logs <container_id_or_name>
112+
```
113+
114+
## 3 总结
115+
116+
至此,即可基于Dify强大功能,构建高效、智能翻译服务,满足各种复杂可定制化的翻译需求。通过实践此集成:
117+
118+
- 简化开发过程
119+
- 充分发挥Dify在 LLMOps 优势,为用户提供高质量的翻译体验
120+
- 大大扩展了 Dify 的能力边界,让它具备了专词召回的能力
121+
- 对其他复杂AIGC相关场景提供参考
122+
123+
参考:
124+
125+
- https://aws.amazon.com/cn/blogs/china/implementing-llm-translation-with-word-mapping-capabilities-based-on-aws-services/

‎docs/md/AI/llm/what-is-llmops.md‎

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# 什么是 LLMOps?
2+
3+
## 0 前言
4+
5+
LLMOps(Large Language Model Operations),管理和运维大语言模型 (LLM) 所涉及的实践和流程,涵盖了大型语言模型(如GPT系列)开发、部署、维护和优化的一整套实践和流程。
6+
7+
## 1 目标
8+
9+
确保高效、可扩展和安全地使用这些强大的 AI 模型来构建和运行实际应用程序。它涉及到模型训练、部署、监控、更新、安全性和合规性等方面。
10+
11+
LLMOps(即大语言模型运维)是指。LLM 是一种基于大型文本和代码数据集训练的人工智能 (AI) 模型,能够执行各种与语言相关的任务,例如文本生成、翻译和问答。
12+
13+
## 2 LLMOps能做啥?
14+
15+
LLMOps 涉及一系列全面的活动,包括:
16+
17+
- **模型部署和维护**:在云平台或本地基础设施上部署和管理 LLM
18+
- **数据管理**:挑选和准备训练数据,以及监控和维护数据质量
19+
- **模型训练和微调**:训练和优化 LLM 以提升其在特定任务上的表现
20+
- **监控和评估**:跟踪 LLM 性能、找出错误并优化模型
21+
- **安全与合规性**:确保 LLM 运维的安全性和法规遵从性
22+
23+
### LLMOps V.S MLOps
24+
25+
LLMOps 是 MLOps(机器学习运维)的一个专业子集,主要侧重于管理 LLM 时遇到的挑战和要求。虽然 MLOps 涵盖管理机器学习模型的一般原则和实践,但 LLMOps 处理 LLM 的独特特征,例如大小较大、训练要求复杂和计算需求高。
26+
27+
## 3 LLMOps 如何运作?
28+
29+
LLMOps 涉及许多不同的步骤,包括:
30+
31+
**数据收集和准备**:LLM 需要大量数据才能进行训练。这些数据必须以适合训练模型的方式进行收集和准备。
32+
33+
**模型开发**:使用各种技术开发 LLM,包括非监督式学习、监督式学习和强化学习。
34+
35+
**模型部署**:LLM 开发完成后,必须部署到生产环境。这涉及设置必要的基础设施,以及将模型配置为在特定平台上运行。
36+
37+
**模型管理**:LLM 需要持续管理,以确保其按预期运行。这包括监控模型的性能、根据需要重新训练模型,以及确保模型的安全性。
38+
39+
## 4 优势
40+
41+
LLMOps为希望有效管理和部署 LLM(大语言模型)的组织提供了诸多好处。这些好处包括:
42+
43+
### 性能
44+
45+
LLMOps 工具和技术通过找出并解决瓶颈、微调模型参数以及实现高效的部署策略,可帮助组织优化其 LLM 的性能。这可以提高准确率、缩短回答时间并改善整体用户体验。
46+
47+
### 可伸缩性
48+
49+
LLMOps 提供了一个可伸缩且灵活的框架来管理 LLM,使组织能够轻松适应不断变化的需求和要求。
50+
51+
### 降低风险
52+
53+
LLMOps 可帮助组织降低与部署和运维 LLM 相关的风险。通过实施强大的监控系统、制定灾难恢复计划并进行定期安全审核,LLMOps 可降低服务中断、数据泄露和其他中断的可能性。这种主动式方法可最大限度地降低潜在风险的影响,并确保 LLM 的持续可用性和可靠性。
54+
55+
### 提升效率
56+
57+
LLMOps 可简化 LLM 的整个生命周期,从数据准备和模型训练到部署和监控。自动化工具和标准化流程可减少手动任务、优化资源利用率并最大限度地缩短模型开发和部署所需的时间,从而提高效率。
58+
59+
## 5最佳实践
60+
61+
LLMOps(大语言模型运维)最佳实践是一系列准则和建议,可帮助组织高效地管理和部署 LLM(大语言模型)。这些最佳实践涵盖 LLMOps 生命周期的各个方面,包括数据管理、模型训练、部署和监控。
62+
63+
### 5.1 数据管理
64+
65+
- **使用高质量数据**:LLM 需要大量高质量的数据才能有效训练。组织应确保用于训练的数据干净、准确,并且与预期应用场景相关。
66+
- **高效管理数据**:LLM 可以在训练和推理期间生成大量数据。组织应实施高效的数据管理策略(例如数据压缩和数据分区),以优化存储和检索。
67+
- **建立数据治理机制**:应制定清晰的数据治理政策和流程,以确保在整个 LLMOps 生命周期中,以安全且负责任的方式使用数据。
68+
69+
### 5.2 模型训练
70+
71+
- **选择合适的训练算法**:不同的训练算法适用于不同类型的 LLM 和任务。组织应仔细评估可用的训练算法,并选择最符合其具体要求的算法。
72+
- **优化训练参数**:超参数调优对于优化 LLM 性能非常重要。尝试不同的训练参数(例如学习速率和批次大小),以找到模型的最佳设置。
73+
- **监控训练进度**:定期监控训练进度对于发现潜在问题并进行必要的调整至关重要。组织应实现指标和信息中心来跟踪关键训练指标,例如损失和准确率。
74+
75+
### 5.3 部署
76+
77+
- **选择合适的部署策略**:LLM 可以通过多种方式进行部署,例如基于云的服务、本地基础设施或边缘设备。请仔细考虑 LLM 的具体要求,并选择最符合其需求的部署策略。
78+
- **优化部署性能**:部署后,应监控并优化 LLM,以提升性能。这可能涉及扩缩资源、调整模型参数或实现缓存机制以缩短回答时间。
79+
- **确保安全性**:应实施强有力的安全措施来保护 LLM 及其处理的数据。包括访问权限控制、数据加密和定期安全审核。
80+
81+
### 5.4 监控
82+
83+
- **制定监控指标**:应制定关键绩效指标 (KPI) 来监控 LLM 的健康状况和性能。这些指标可能包括准确率、延迟时间和资源利用率。
84+
- **实施实时监控**:应实施实时监控系统,以检测和应对运维期间可能出现的任何问题或异常情况。
85+
- **分析监测数据**:应定期分析监测数据,以发现趋势、模式和潜在的改进方面。这项分析有助于优化 LLMOps 流程,并确保持续交付高质量的 LLM。
86+
87+
## 6 用 Dify 前后开发 AI 应用差异
88+
89+
90+
91+
| 步骤 | 未使用 LLMOps 平台 | 使用 Dify LLMOps 平台 | 时间差异 |
92+
| ------------------ | --------------------------------------------- | -------------------------------------------------- | -------- |
93+
| 开发应用前&后端 | 集成和封装 LLM 能力,花费较多时间开发前端应用 | 直接使用 Dify 的后端服务,可基于 WebApp 脚手架开发 | -80% |
94+
| Prompt Engineering | 仅能通过调用 API 或 Playground 进行 | 结合用户输入数据所见即所得完成调试 | -25% |
95+
| 数据准备与嵌入 | 编写代码实现长文本数据处理、嵌入 | 在平台上传文本或绑定数据源即可 | -80% |
96+
| 应用日志与分析 | 编写代码记录日志,访问数据库查看 | 平台提供实时日志与分析 | -70% |
97+
| 数据分析与微调 | 技术人员进行数据管理和创建微调队列 | 非技术人员可协同,可视化模型调整 | -60% |
98+
| AI 插件开发与集成 | 编写代码创建、集成 AI 插件 | 平台提供可视化工具创建、集成插件能力 | -50% |
99+
100+
在使用 LLMOps 平台如 Dify 之前,基于 LLM 开发应用的过程可能会非常繁琐和耗时。开发者需要自行处理各个阶段的任务,这可能导致效率低下、难以扩展和安全性问题。以下是使用 LLMOps 平台前的开发过程:
101+
102+
1. 数据准备:手动收集和预处理数据,可能涉及到复杂的数据清洗和标注工作,需要编写较多代码。
103+
2. Prompt Engineering:开发者只能通过调用 API 或 Playground 进行 Prompt 编写和调试,缺乏实时反馈和可视化调试。
104+
3. 嵌入和上下文管理:手动处理长上下文的嵌入和存储,难以优化和扩展,需要不少编程工作,熟悉模型嵌入和向量数据库等技术。
105+
4. 应用监控与维护:手动收集和分析性能数据,可能无法实时发现和处理问题,甚至可能没有日志记录。
106+
5. 模型微调:自行处理微调数据准备和训练过程,可能导致效率低下,需要编写更多代码。
107+
6. 系统和运营:需要技术人员参与或花费成本开发管理后台,增加开发和维护成本,缺乏多人协同和对非技术人员的友好支持。
108+
109+
引入 Dify 这样的 LLMOps 平台后,基于 LLM 开发应用的过程将变得更加高效、可扩展和安全。以下是使用像 Dify 这样的 LLMOps 进行 LLM 应用开发的优势:
110+
111+
1. 数据准备:平台提供数据收集和预处理工具,简化了数据清洗和标注的工作,最小化甚至消除了编码工作。
112+
2. Prompt Engineering:所见即所得的 Prompt 编辑和调试,可根据用户输入的数据进行实时优化和调整。
113+
3. 嵌入和上下文管理:自动处理长上下文的嵌入、存储和管理,提高效率和扩展性,无需编写大量代码。
114+
4. 应用监控与维护:实时监控性能数据,快速发现和处理问题,确保应用程序的稳定运行,提供完整的日志记录。
115+
5. 微调数据准备:提供人工标注知识库的批量导出,在应用运营过程中收集线上反馈数据持续改善模型效果。
116+
6. 系统和运营:易用的界面,非技术人员也可参与,支持多人协同,降低开发和维护成本。与传统开发方式相比,Dify 提供了更加透明和易于监控的应用管理,让团队成员更好地了解应用的运行情况。
117+
118+
另外,Dify 将提供 AI 插件开发和集成的功能,使得开发者可以轻松地为各种应用创建和部署基于 LLM 的插件,进一步提升了开发效率和应用的价值。

‎docs/md/career/01-Java工程师必读书单.md‎ renamed to ‎docs/md/career/Java-reading-list.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 01-Java工程师必读书单
1+
# Java工程师必读书单
22

33
以下皆出自本人亲自翻阅过的书籍,体验良好,豆瓣大众也以为然,遂列举,以供后浪规划学习。
44

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /