构建工业级的LLM应用程序

近期被一篇名叫《Building LLM applications for production》的文章吸引,作者叫

Chip Huyen,一名作者和和计算机科学家,越南人。她是Claypot AI的联合创始人,这是一个实时机器学习平台。之前,曾在 NVIDIA、Snorkel AI、Netflix 和 Primer 构建了机器学习工具。作者毕业于斯坦福大学,《设计机器学习系统》是亚马逊网站人工智能畅销书方面的畅销书。

这篇文章比较长, 笔者简要的总结以下几个部分。

使用大模型有哪些挑战?

用大型语言模型(LLMs)存在以下挑战: 

1. 生成合适的提示(prompts):大型语言模型的输出结果受到提示的影响,选择合适的提示非常重要,但这并不是一项简单的任务。为了达到期望的结果,需要进行提示优化和调试。

2. 提示版本控制:小幅更改提示可能导致完全不同的结果。跟踪和管理每个提示的性能非常重要。使用版本控制工具(如Git)对每个提示及其性能进行版本管理是一种可行的方法。

3. 提示优化:有许多关于如何优化提示的论文和博客文章。优化提示的目的是提高模型的性能和输出质量。这可能涉及到使用不同的技巧和方法,如解释模型的思考过程、生成多个输出并选择最佳输出等。 

4. 开销和延迟:使用大型语言模型进行推理会产生一定的成本和延迟。更详细和复杂的提示通常会产生更好的性能,但也会增加推理的成本。在计算资源和时间预算有限的情况下,需要权衡性能和成本之间的关系。

5. 数据规模限制:大型语言模型的输入有一定的限制,无法处理过于庞大的数据。在处理大规模生产数据时,需要考虑数据的分批处理或其他数据处理方法。

6. 模型更新问题:随着时间的推移,大型语言模型可能会过时,需要重新训练或微调。当使用新模型时,无法保证所有的提示仍然按预期工作,可能需要重新编写提示。因此,如果预计会更换使用的模型,就需要使用评估示例对所有的提示进行单元测试。需要注意的是,这些挑战并不适用于所有的大型语言模型应用场景,但它们是常见的问题,需要认真考虑和解决。

大模型工业化应用,技术栈是哪些

 - 大型语言模型(LLM):例如GPT、Bart等。- 提示工程工具:用于处理提示的不确定性,包括提示评估和提示版本控制工具。 

- 多任务和控制流工具:用于构建复杂的应用程序的任务和控制流集成工具,例如if语句、for循环、SQL执行器、bash、网络浏览器、第三方API等。

- 精调和蒸馏工具:用于将大型模型精调为小型模型的工具,减小模型大小和运行成本。

- 集成测试工具:用于对整个应用程序进行集成测试的工具。需要注意的是,具体的技术栈可能因应用场景和需求的不同而有所差异。

自然语言的模糊性

在计算机的大部分历史中,工程师都用编程语言编写指令。编程语言“大部分”都是精确的。模棱两可会导致开发人员感到沮丧甚至充满仇恨(想想Python或JavaScript中的动态类型)。

在提示工程中,指令是用自然语言编写的,自然语言比编程语言灵活得多。这可以带来出色的用户体验,但可能会导致非常糟糕的开发人员体验。

灵活性来自两个方向:用户如何定义指令,以及LLM如何响应这些指令。

首先,用户定义的提示的灵活性会导致静默失败。如果有人不小心对代码进行了一些更改,例如添加随机字符或删除行,则可能会引发错误。但是,如果有人不小心更改了提示,它仍然会运行,但给出非常不同的输出。

虽然用户定义的提示的灵活性只是一个烦恼,但LLM生成的响应中的歧义可能会破坏交易。它会导致两个问题:

  1. 不明确的输出格式:LLM 之上的下游应用程序期望某种格式的输出,以便它们可以解析。我们可以制作提示以明确输出格式,但不能保证输出始终遵循此格式。

    f635df6e7307b7690507c3d5734b72fb.png
  2. 用户体验不一致:使用应用程序时,用户期望一定的一致性。想象一下,一家保险公司每次您检查他们的网站时都会给您不同的报价。LLM 是随机的 – 不能保证 LLM 每次都会为相同的输入提供相同的输出。

    您可以通过设置温度= 0来强制LLM给出相同的响应,这通常是一种很好的做法。虽然它主要解决了一致性问题,但它并没有激发对系统的信任。想象一下,只有当一位老师坐在一个特定的房间里时,他才会给你一致的分数。如果那个老师坐在不同的房间,那个老师给你的分数会很疯狂。

    ed29f0b04c766fec1aa368b3bc528566.png

如何解决这个歧义问题?

这似乎是OpenAI正在积极尝试缓解的问题。他们有一个笔记本,其中包含有关如何提高模型可靠性的提示。

几个与LLM合作多年的人告诉我,他们只是接受了这种模糊性,并围绕这一点建立了他们的工作流程。与开发确定性程序相比,这是一种不同的心态,但并非不可能习惯。

这种歧义可以通过应用尽可能多的工程严谨性来缓解。在本文的其余部分,我们将讨论如何使即时工程(如果不是确定性)系统化。


及时评估

提示工程的常用技术是在提示中提供一些示例,并希望LLM将从这些示例(少数学习者)中推广出来。

举个例子,考虑尝试给文本一个争议分数——这是一个有趣的项目,我做的是找到推文的受欢迎程度和争议性之间的相关性。以下是带有 4 个几个示例的缩短提示:

示例:争议评分器

Given a text, give it a controversy score from 0 to 10.

Examples:

1 + 1 = 2
Controversy score: 0

Starting April 15th, only verified accounts on Twitter will be eligible to be in For You recommendations
Controversy score: 5

Everyone has the right to own and use guns
Controversy score: 9

Immigration should be completely banned to protect our country
Controversy score: 10

The response should follow the format:

Controversy score: { score }
Reason: { reason }

Here is the text.

在进行少量学习时,要记住两个问题:

  1. LLM是否理解提示中给出的示例。评估这一点的一种方法是输入相同的示例,并查看模型是否输出预期的分数。如果模型在提示中给出的相同示例中表现不佳,则可能是因为提示不明确 - 您可能希望重写提示或将任务分解为较小的任务(并将它们组合在一起,在本文的第二部分中详细讨论)。

  2. LLM是否过度适合这些少数例子。您可以在单独的示例中评估模型。

我还发现有用的一件事是要求模型给出可以给出特定标签的示例。例如,我可以要求模型给我一些文本示例,它给出的分数是 4。然后我会将这些示例输入到 LLM 中,看看它是否确实会输出 4。

from llm import OpenAILLM

def eval_prompt(examples_file, eval_file):
    prompt = get_prompt(examples_file)
    model = OpenAILLM(prompt=prompt, temperature=0)
    compute_rmse(model, examples_file)
    compute_rmse(model, eval_file)
eval_prompt("fewshot_examples.txt", "eval_examples.txt")
提示版本控制

对提示的微小更改可能会导致非常不同的结果。对每个提示的性能进行版本控制和跟踪至关重要。你可以使用 git 对每个提示及其性能进行版本控制,但如果会有像 MLflow 或 Weights & Biases 这样的工具用于提示实验,我不会感到惊讶。

提示优化

关于如何优化提示的论文+博客文章已经很多了。我同意Lilian Weng在她有用的博客文章中的观点,即大多数关于提示工程的论文都是可以用几句话解释的技巧。OpenAI有一个很棒的笔记本,通过示例解释了许多技巧。以下是其中的一些:

  • 提示模型逐步解释或解释它如何得出答案,这种技术称为思维链或 COT(Wei 等人,2022 年)。权衡:由于输出令牌数量增加,COT 可能会增加延迟和成本 [请参阅成本和延迟部分]

  • 为同一输入生成多个输出。通过多数票选择最终输出(也称为 Wang 等人的自洽技术,2023 年),或者您可以要求您的 LLM 选择最佳输出。在 OpenAI API 中,您可以通过传入参数 n 为同一输入生成多个响应(如果您问我,这不是理想的 API 设计)。

  • 将一个大提示分解为更小、更简单的提示。

许多工具承诺自动优化您的提示——它们非常昂贵,通常只是应用这些技巧。这些工具的一个好处是它们没有代码,这使得它们对非编码人员有吸引力。

成本和延迟

成本

您在提示中输入的详细信息和示例越明确,模型性能就越好(希望如此),并且您的推理成本就越高。

OpenAI API 对输入和输出令牌收费。根据任务的不同,简单的提示可能是 300 - 1000 个令牌之间的任何内容。如果您想包含更多上下文,例如将您自己的文档或从 Internet 检索到的信息添加到提示中,则仅提示就可以轻松达到 10k 个令牌。

长提示的成本不在于实验,而在于推理。

在实验方面,快速工程是一种廉价而快速的启动和运行方法。例如,即使您将 GPT-4 与以下设置结合使用,您的实验费用仍将略高于 300 美元。传统的 ML 收集数据和训练模型的成本通常要高得多,并且需要更长的时间。

  • 提示:10k 代币(0.06 美元/1k 代币)

  • 输出:200 个代币(0.12 美元/1k 个代币)

  • 评估 20 个示例

  • 尝试 25 种不同版本的提示

LLMOps 的成本在推理中。

  • 如果您使用 GPT-4,输入中有 10k 个代币,输出中有 200 个代币,则预测费用为 0.624 美元。

  • 如果您将 GPT-3.5-turbo 与 4k 代币一起使用用于输入和输出,它将是 0.004 美元/预测或 4 美元/1k 预测。

  • 作为思维练习,在 2021 年,DoorDash ML 模型每天做出 10 亿次预测。如果每个预测的成本为 0.004 美元,那就是每天 40 万美元!

  • 相比之下,AWS 个性化预测成本约为 0.0417 USD/1k,AWS 欺诈检测预测成本约为 7.5 USD/1k 预测 [每月超过 100 个预测]。对于任何中等规模的公司来说,AWS 服务通常被认为过于昂贵(且灵活性较低)。

延迟

输入令牌可以并行处理,这意味着输入长度不应对延迟产生太大影响。

但是,输出长度会显著影响延迟,这可能是由于输出令牌是按顺序生成的。

即使对于极短的输入(51 个令牌)和输出(1 个令牌),gpt-3.5-turbo 的延迟也约为 500 毫秒。如果输出令牌增加到 20 个以上,则延迟超过 1 秒。

这是我运行的一个实验,每个设置运行 20 次。所有运行都在 2 分钟内发生。如果我再做一次实验,延迟会有很大的不同,但 3 个设置之间的关系应该是相似的。

这是使用OpenAI等API生产LLM应用程序的另一个挑战:API非常不可靠,并且尚未承诺何时提供SLA。

# 代币P50 延迟(秒)p75 延迟p90 延迟
输入:51 个令牌,输出:1 个令牌0.580.630.75
输入:232 个令牌,输出:1 个令牌0.530.580.64
输入:228 个代币,输出:26 个代币1.431.491.62

目前尚不清楚,有多少延迟是由于模型、网络(我想由于运行之间的高差异而很大)或一些低效的工程开销造成的。在不久的将来,延迟很可能会显着减少。

虽然对于许多用例来说,半秒似乎很高,但考虑到模型的大小和使用 API 的规模,这个数字令人印象深刻。gpt-3.5-turbo的参数数量不是公开的,但估计在150B左右。在撰写本文时,没有开源模型那么大。谷歌的T5是11B参数,Facebook最大的LLaMA模型是65B参数。人们在这个 GitHub 线程上讨论了他们需要什么配置才能使 LLaMA 模型工作,似乎让 30B 参数模型工作已经足够困难了。最成功的似乎是randaller,他能够在30 GB的RAM上获得128B参数模型的工作,只需几秒钟即可生成一个令牌。

LLM 不可能进行成本 + 延迟分析

LLM应用程序世界发展如此之快,以至于任何成本+延迟分析都必然会很快过时。Scribd应用研究高级经理Matt Ross告诉我,他的用例的估计API成本在过去一年中下降了两个数量级。延迟也显著降低。同样,许多团队告诉我,他们觉得他们必须每周重新进行可行性估算并购买(使用付费API)与构建(使用开源模型)决策。

提示 vs. 微调 vs. 替代方案

  • 提示:对于每个示例,明确告知模型应如何响应。

  • 微调:训练模型如何响应,因此不必在提示中指定。

805c46a9a20d31362c697a2657c22fe6.png

在考虑提示与微调时,有 3 个主要因素:数据可用性、性能和成本。

如果只有几个示例,则提示可以快速轻松地开始。由于最大输入令牌长度,提示中可以包含的示例数存在限制。

当然,根据任务微调模型所需的示例数量取决于任务和模型。但是,根据我的经验,如果您对 100 个示例进行微调,则可以预期模型性能会发生显着变化。但是,结果可能不会比提示好多少。

在《提示值多少个数据点?》(2021 年)中,Scao 和 Rush 发现一个提示值大约 100 个示例(警告:任务和模型之间的差异很高——见下图)。总体趋势是,随着示例数量的增加,微调将提供比提示更好的模型性能。可用于微调模型的示例数量没有限制。

0b29b0debf21473de4f296aef04dd435.png

微调的好处是双重的:

  1. 你可以获得更好的模型性能:可以使用更多的例子,例子成为模型内部知识的一部分。

  2. 您可以降低预测成本。您可以在模型中烘焙的指令越多,您需要放入提示的指令就越少。比如说,如果你可以在每次预测的提示中减少 1k 个代币,对于 gpt-1.3-turbo 上的 5M 个预测,你将节省 2000 美元。

提示调整

介于提示和微调之间的一个很酷的想法是提示调整,由 Leister 等人在 2021 年推出。从提示开始,而不是更改此提示,以编程方式更改此提示的嵌入。为了使提示调优起作用,您需要能够将提示的嵌入输入到LLM模型中,并从这些嵌入生成令牌,目前,这只能使用开源LLM来完成,而不是在OpenAI API中完成。在 T5 上,提示调优似乎比提示工程性能好得多,并且可以赶上模型调优(见下图)。

e5d9c8cbb66e9e2e3b3c96f4f298d71a.png
通过蒸馏进行微调

2023 年 7 月,一群斯坦福大学的学生发布了一个有前途的想法:在更大的语言模型(text-davinci-7 – 003 亿个参数)生成的示例上微调一个较小的开源语言模型(LLaMA-175B,LLaMA 的 003 亿参数版本)。这种训练小模型以模仿大模型行为的技术称为蒸馏。由此产生的微调模型的行为类似于text-davinci-<>,但体积更小,运行成本更低。

为了微调,他们使用了52k条指令,他们将其输入到text-davinci-003中以获得输出,然后用于微调LLaMa-7B。生成成本低于 500 美元。微调的培训过程成本低于 100 美元。参见斯坦福羊驼:遵循指令的LLaMA模型(Taori等人,2023)。

fa1f5f67bf760e21bbb8a616461b8929.png

这种方法的吸引力是显而易见的。3 周后,他们的 GitHub 存储库获得了近 20K 颗星!!相比之下,HuggingFace 的 transformers 存储库花了一年多的时间才达到类似数量的星星,而 TensorFlow 存储库花了 4 个月的时间。

5cd0ca0ff3ad770cfd17e27e4e7d4981.png
有希望的场景

人工智能助手

这是最受欢迎的消费者用例。有为不同用户组的不同任务构建的 AI 助手——用于日程安排、做笔记、结对编程、回复电子邮件、帮助父母、预订、预订航班、购物等的 AI 助手。– 但是,当然,最终目标是可以为您提供所有帮助的助手。

这也是所有大公司多年来都在努力的圣杯:谷歌与谷歌助理和巴德,Facebook与M和Blender,OpenAI(以及扩展,Microsoft)与ChatGPT。Quora被AI取代的风险非常高,它发布了自己的应用程序Poe,可让您与多个LLM聊天。我很惊讶苹果和亚马逊还没有加入竞争。

聊天机器人

就API而言,聊天机器人类似于AI助手。如果AI助手的目标是完成用户赋予的任务,那么聊天机器人的目标是更多地成为伴侣。例如,您可以拥有像名人、游戏/电影/书籍角色、商人、作家等一样说话的聊天机器人。

米歇尔·黄(Michelle Huang)使用她的童年日记条目作为GPT-3与内在小孩交谈的提示的一部分。

消费聊天机器人领域最有趣的公司可能是 Character.ai。它是人们创建和共享聊天机器人的平台。作为写作,平台上最受欢迎的聊天机器人类型是动漫和游戏角色,但您也可以与心理学家、结对编程伙伴或语言练习伙伴交谈。您可以说话,表演,绘制图片,玩基于文本的游戏(如AI地牢),甚至为角色启用语音。我尝试了一些流行的聊天机器人——它们似乎都还不能进行对话,但我们才刚刚开始。如果有一个收入分享模式,以便聊天机器人创建者可以获得报酬,事情会变得更加有趣。

d0edd3cf2c0580d6a54e0320ed1f971b.png

编程和游戏

这是LLM应用程序的另一个流行类别,因为LLM在编写和调试代码方面非常出色。GitHub Copilot是一个先驱(截至撰写本文时,其VSCode扩展的下载量已达到5万次)。使用LLM编写代码的演示非常酷:

  1. 从自然语言创建 Web 应用

  2. 查找安全威胁:套接字 AI 会检查代码库中的 npm 和 PyPI 包是否存在安全威胁。当检测到潜在问题时,他们会使用 ChatGPT 来汇总调查结果。

  3. 赌博

    1. 创建游戏:例如,Wyatt Cheng有一个很棒的视频,展示了他如何使用ChatGPT克隆Flappy Bird。

    2. 生成游戏角色。

    3. 让您与游戏角色进行更逼真的对话:看看 Convai 的这个很棒的演示!

学习

每当ChatGPT关闭时,OpenAI的不和谐就会充斥着抱怨没有完成家庭作业的学生。一些人的回应是完全禁止在学校使用ChatGPT。有些人有一个更好的主意:如何结合 ChatGPT 来帮助学生更快地学习。我认识的所有EdTech公司都在全速探索ChatGPT。

一些用例:

  • 总结书籍

  • 自动生成测验,以确保学生理解书籍或讲座。ChatGPT 不仅可以生成问题,还可以评估学生输入的答案是否正确。

    • 我尝试过,ChatGPT似乎很擅长为设计机器学习系统生成测验。将发布即将生成的测验!

  • 对论文进行评分/提供反馈

  • 浏览数学解决方案

  • 成为辩论伙伴:ChatGPT 非常擅长在同一辩论主题的不同方面。

随着在家上学的兴起,我希望看到很多 ChatGPT 的应用程序来帮助父母在家上学。

与数据对话

据我观察,这是迄今为止最受欢迎的企业应用程序。许多初创公司正在构建工具,让企业用户以自然语言或问答方式查询其内部数据和策略。有些专注于垂直行业,例如法律合同、简历、财务数据或客户支持。给定公司的所有文档、政策和常见问题解答,您可以构建一个可以响应您的客户支持请求的聊天机器人。

执行此应用程序的主要方法通常涉及以下4个步骤:

  1. 将内部数据组织到数据库中(SQL 数据库、图形数据库、嵌入/矢量数据库或仅文本数据库)

  2. 给定自然语言的输入,将其转换为内部数据库的查询语言。例如,如果它是 SQL 或图形数据库,则此过程可以返回 SQL 查询。如果是嵌入数据库,则可能是 ANN(近似最近邻)检索查询。如果只是纯文本,则此过程可以提取搜索查询。

  3. 在数据库中执行查询,获取查询结果。

  4. 将此查询结果转换为自然语言。

虽然这是非常酷的演示,但我不确定这个类别的防御性如何。我见过初创公司构建应用程序,让用户在Google Drive或Notion等数据库之上进行查询,感觉这是Google Drive或Notion 可以在一周内实现的功能。

OpenAI有一个非常好的教程,介绍如何与矢量数据库交谈。

LLM可以为我做数据分析吗?

我尝试将一些数据输入到 gpt-3.5-turbo 中,它似乎能够检测到一些模式。但是,这仅适用于可以放入输入提示的小数据。大多数生产数据都大于此。

f9e8667ce27827cbb9a9e87f028d2c58.png

搜索和推荐

搜索和推荐一直是企业用例的基本要素。它正在经历LLM的复兴。搜索主要是基于关键字的:你需要一个帐篷,你搜索一个帐篷。但是,如果您还不知道需要什么怎么办?例如,如果你在 11 月去俄勒冈州的树林里露营,你最终可能会做这样的事情:

  1. 搜索以阅读其他人的经历。

  2. 阅读这些博客文章并手动提取所需项目列表。

  3. 在 Google 或其他网站上搜索这些项目中的每一个。

如果您直接在亚马逊或任何电子商务网站上搜索“11 月在俄勒冈州露营所需的东西”,您会得到这样的信息:

ae57293fc007263275f10a3495dbf966.png

但是,如果在亚马逊上搜索“11 月在俄勒冈州露营所需的物品”实际上会返回露营旅行所需的物品清单怎么办?

今天,使用LLM是可能的。例如,应用程序可以分为以下步骤:

  1. 任务 1:将用户查询转换为产品名称列表 [LLM]

  2. 任务 2:对于列表中的每个产品名称,从产品目录中检索相关产品。

2f656e5316dae251f267890740faab13.png 5a4906047bbf397f24caee47c9169174.png

如果这行得通,我想知道我们是否会有LLM SEO:让LLM推荐你的产品的技术。

结论

我们仍处于LLM应用程序的早期阶段 - 一切都发展得如此之快。我最近读了一本关于LLM的书,我的第一个想法是:其中大部分将在一个月内过时。API 每天都在变化。正在发现新的应用程序。基础设施正在积极优化。成本和延迟分析需要每周进行一次。

并非所有这些变化都很重要。例如,许多即时的工程论文让我想起了深度学习的早期,当时有数千篇论文描述了初始化权重的不同方法。我想调整提示的技巧,例如:,,从长远来看,写作而不是写作并不重要。"Answer truthfully""I want you to act like …""question: ""q:"

鉴于LLM似乎非常擅长为自己编写提示–请参阅大型语言模型是人类级别的提示工程师(Zhou等人,2022) –谁知道我们需要人类来调整提示?

然而,鉴于发生了这么多事情,很难知道哪些会重要,哪些不会。

我最近在LinkedIn上问人们如何跟上这个领域的最新情况。该策略的范围从忽略炒作到尝试所有工具。

  1. 忽略(大部分)炒作

    Vicki Boykis(高级机器学习工程师@Duo Security):我做与工程或数据领域任何新框架相同的事情:我浏览每日新闻,忽略大部分内容,然后等待六个月,看看有什么坚持。任何重要的事情都会存在,并且会有更多的调查文件和经过审查的实施来帮助了解正在发生的事情。

  2. 仅阅读摘要

    Shashank Chaurasia(工程@Microsoft):我使用BingChat的创意模式给我一个与Gen AI相关的新文章,博客和研究论文的快速摘要!我经常与研究论文和github存储库聊天以了解详细信息。

  3. 尝试使用最新工具

    Chris Alexiuk(创始ML工程师@Ox):我只是尝试使用每个工具进行构建 - 这样,当下一步出现时,我只看三角洲。

您的策略是什么?

——————————————————————————————————————

最近关注的朋友越来越多,还有朋友问用 ChatGPT 能做什么?学了AI感觉没有地方可以用。AI 对我真的有红利吗?国内能不能用啊?

考虑到各种朋友们的问题,虽然有些东西1个月就过时了。但掌握了学习的方法,就能与时俱进。我联合了两位大咖,共同开发设计了:《AI启航实用变现手册》,提供各类AI工具使用教程及变现方法和路径。

同时还在筹备知识星球的建设,以及赠送给会员的福利AI产品:不用魔法,体验AI 智能聊天,AI 绘画,保证学会工具的使用后,可以上手实际操作。

我们的目标解决朋友们 AI 学习中的四个核心问题:信息差,认知差,执行差,人脉差。

手册初稿含两方面的内容:一、如何利用AI去提升效率;二、用AI变现指南

af9c463576ac7d4445a4cb281bbe4910.png

变现部分是实际实打实的操作记录和赚钱过程拆解,初版就共15万字,内容将来还会持续更新,将来还会带领朋友们进行实际的操作。

这个是抖音的一个视频,上线一两天,23.8万的播放。

c717c8de15eda0c1c57bce5a45c92e48.png

手册涵盖了目前市面上最全、最新的教程,价值 ¥199 元,

现开始阶段优惠, ¥39.9元。3天内不满意,可以无条件退款。后面随内容更新和销售增加,逐步恢复原价。

喜欢手册的朋友,也可以推荐给朋友,设置了分销比例45%,推荐两册,就相当于白得手册。

点下面👇二维码,长按识别,就可以购买了。

4b74171f83bee4c5cf96367310854bf8.png

买了手册的朋友,加我微信 foghuang,拉你进AI学习交流群。

可以加入技术琐话读者群,请后台回复:读者群

技术琐话 

以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值