Skip to content

Commit f5ed55c

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

13 files changed

+1292
-6
lines changed

.vscode/.server-controller-port.log

+2-2
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

+34-3
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/": [{
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+
##### ① 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+
##### ② 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

+118
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

+1-1
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)