unit-minions
unit-minions 是一个专注于提升软件研发效率的开源项目,旨在帮助开发者亲手训练专属的 LoRA(低秩适应)微调模型。它基于 Llama 和 ChatGLM 等主流大语言模型,提供了一套完整的教程、代码及数据集,让用户能够低成本地定制 AI 助手,以胜任用户故事生成、测试代码编写、代码辅助补全以及自然语言转 SQL 等专业任务。
该项目主要解决了通用大模型在特定研发场景下专业度不足、数据隐私顾虑以及高昂的微调门槛问题。通过标准化的数据准备流程和详细的训练笔记(Notebook),unit-minions 将复杂的模型微调过程变得透明且可操作,使工程师能够根据团队的具体需求构建更懂业务逻辑的 AI 工具。
unit-minions 特别适合软件开发工程师、技术团队负责人以及对大模型应用感兴趣的研究人员使用。其独特亮点在于不仅提供了现成的训练成果,更强调了“授人以渔”的完整链路:从数据清洗、指令构建到最终模型训练与评估,甚至包含了与 OpenAI 模型的效果对比视频。这使得用户不仅能获得可用的模型,还能深入理解 AI 研发提效背后的方法论,从而更好地将人工智能融入日常开发工作流中。
使用场景
某电商团队的后端工程师正面临紧急需求,需要在两天内为新的“会员积分兑换系统”完成从需求拆解到核心代码及测试用例的全套开发工作。
没有 unit-minions 时
- 需求转化低效:产品经理提供的粗略业务描述,需要工程师手动花费数小时拆解为标准的用户故事和开发任务,容易遗漏边界条件。
- 重复编码耗时:编写基础的 Repository 层代码和复杂的 SQL 查询逻辑占据了大量时间,挤占了核心业务逻辑的思考空间。
- 测试覆盖不足:由于工期紧张,往往只能手动编写少量核心测试用例,导致边缘场景的单元测试缺失,上线风险高。
- 上下文切换频繁:在查阅文档、编写 SQL、切换 IDE 写代码之间反复跳转,严重打断开发心流,降低整体产出效率。
使用 unit-minions 后
- 故事自动拆解:利用训练好的 LoRA 模型,一键将模糊的业务需求转化为结构清晰、包含验收标准的用户故事列表,准确率显著提升。
- 代码智能生成:通过自然语言描述直接生成符合团队规范的 Repository 实现代码及对应的 SQL 语句,减少 80% 的样板代码编写时间。
- 测试同步完备:针对生成的业务代码,自动产出高覆盖率的单元测试用例,确保逻辑健壮性,让工程师敢于快速提交代码。
- 流程无缝衔接:在统一的微调模型辅助下,从需求到代码再到测试的流转更加顺畅,工程师可专注于架构设计与难点攻关。
unit-minions 通过定制化训练研发专用模型,将原本割裂的开发环节串联成自动化流水线,真正实现了从“手写代码”到“指挥 AI 编程”的效能跃迁。
运行环境要求
- 未说明
- 训练必需(项目使用 OpenBayes 云 GPU)
- 支持 LLaMA-7B 和 ChatGLM-6B 模型进行 LoRA 微调
未说明

快速开始
《AI 研发提效研究:自己动手训练 LoRA》
PS:代码补全、文档生成相关的微调见:https://github.com/unit-mesh/unit-eval
声明:本项目提供的数据集、LoRA 二进制,皆为 OpenAI 生成或网上公开项目。我们仅提供了模型训练相关教程,使用者实际训练的内容所造成的一切后果由使用者本人负责。
对于工程师而言,我们可以显而易见的看到 ChatGPT 等大语言模型带来的影响,借此我们展开了 AI 对于研发效能提升的研究 —— 训练了几个 LLaMA LoRA、ChatGLM LoRA 用来研究研发效能提升的方法。
这个项目是我们的研究成果,包括了一些视频介绍、训练好的模型、训练代码、训练数据、训练过程中的一些记录。
训练完的 LoRA 见 Release。
训练 Notebook:
LLaMA 系列在线视频:
ChatGLM 系列在线视频:
目录:
Introduction
相关数据转换参见:https://github.com/unit-mesh/minions-data-prepare
PS:如果你需要的是更好的代码生成,建议采用:https://huggingface.co/Salesforce/codegen-16B-mono
云 GPU
我们使用的是 OpenBayes 提供的云 GPU:https://openbayes.com/console/signup?r=phodal_uVxU
OpenBayes 模型可以使用:
- llamba-7b-hf:https://openbayes.com/console/open-tutorials/models/LHney50G1TB/1/overview
- chatglm-6b: https://openbayes.com/console/open-tutorials/models/D24PPO2ItU4/1/overview
Roadmap
Roadmap:
- 训练:领域知识(Done)
- 训练:测试代码生成(Done)
- 训练:生成用户故事(Done)
- 训练:代码辅助生成(Done)
- 训练:SQL 转换(Done)
- 训练:文本转代码(Done)
- 训练:……
- 训练:生成 Unit Mesh 的代码块
Sponsors
Thanks: AIOS Club for OpenAI Key, Thanks OpenBayes for Cloud GPU
总结设计:流程标准化
AI 感性提效依赖于对研发效能的标准化,并尽可能细地拆分每一个步骤。
研发效能
为了训练的结果更加准确,我们详细拆分了软件开发的步骤,以确保每一步生成的是准确,进而驱动出准确的结果。如下是我们早期拆分的一小部分细流程的示例:
- split_user_story_tasks
- create_agile_user_story
- design_restful_api
- design_plantuml_java_datastructure
- implementation_mock_mvc_test
- implementation_spring_controller
- implementation_controller_test
- implementation_spring_service
- ….
我们需要拆分到每一个尽可能小的步骤,在每一个细化的步骤里,喂入数据,才会让 AI 产生最大的复读机效果。
Unit Mesh
Todos
数据准备
我们使用非常简单的 instruct,并尽可能提供,以便于集成到工具中使用。如下:
- 领域知识。instruction:领域知识。
- 拆分任务。instruction:split user story tasks,input:折分用户故事任务
- 需求细化。instruction:create Agile user story for following topic,input:功能的基本信息
- 代码生成。instruction:Implement the method xxx,input:类的基本信息
- 测试生成。instruction:Write test for follow code,input:类的基本信息
- SQL 生成。instruction:text to sql,input:问题
- 文本转 Java 代码。instruction:text to java code,input:问题
对应的功能介绍:
- 需求细化。AI 辅助将模糊的需求转变为的需求设计,比如 “注册” 功能,生成为:”作为一个用户 xxx,填入用户名、密码信息等等,接着由人类去检查和完善。
- 代码生成。AI 辅助将详细的需求设计翻译为目标的代码,再接着由人类去检查和完善。
- 测试生成。AI 辅助根据生成的代码生成对应的测试代码,再接着由人类去检查和完善。
从测试结果来看,随着数据量的增多,比如 20000 个代码用例比 10000 个代码用例更加的 “聪明”。
任务拆分 + 用户故事生成
基本思路:
- 结合常见的领域(如在线网站),借用 OpenAI 生成用户任务(如登录、浏览列表等等)
- 根据用户故事生成用户故事。
- 训练 Alpaca LoRA。
如下所示:

步骤 1. 生成用户任务
- 调用 OpenAI 按分类创建用户任务。prompt 如下:
为 ${domain} 应用设计一份用户故事地图,基于你的理解。以下是要求:
1. 用户故事地图应仅包含用户任务,以展示用户如何与应用交互。
2. 我们的用户故事地图应基于你对 ${domain} 应用及其用户的理解,并旨在解决他们的需求和痛点。
3. 你可以使用任何工具或格式来创建用户故事地图,但需确保其易于分享且便于利益相关者理解。
4. 表述应简洁明了。
5. 返回格式如下:
###
用户任务:
1. ...
###
示例输出:
用户任务:
1. 浏览并搜索动画和漫画
2. 查看动画和漫画的详细信息
3. 创建账户
4. 登录账户
5. 将动画和漫画添加到收藏夹
6. 下载动画和漫画
7. 与朋友分享动画和漫画
8. 对动画和漫画进行评分和评论
9. 创建并上传动画和漫画
10. 参与在线论坛和讨论
步骤 2. 分解用户任务为用户故事
- 调用 OpenAI 根据用户任务创建用户故事。prompt 如下:
为以下需求编写用户故事:${domain} 应用的 ${story_name} 功能。要求如下:
1. 必须考虑尽可能多的异常场景,添加更多验收条件。
2. 返回模板如下所示:
###
用户故事:可以选择宝贝出行服务
作为 莉莉妈
我想 在滴滴打车的手机客户端里选择宝贝出行服务
以便于 我能够带宝宝打车出行的时候打到有儿童座椅的车
AC 1: 莉莉妈可以选择宝贝出行服务
假设 xxx
当 xxx
于是 xxx
###
示例输出:
用户故事:可以创建和上传动画和漫画
作为一个 Animation and Comics 应用的用户
我想要创建和上传动画和漫画
以便于我可以分享我的作品给其他用户
AC 1: 用户可以创建和上传动画和漫画
假设 用户已经登录到 Animation and Comics 应用
当 用户点击创建和上传动画和漫画按钮
于是 用户可以创建和上传动画和漫画
代码辅助生成
基本思路:

步骤 1. 准备数据
- 下载 GitHub 上的项目(需要包含测试用例)
- 遍历
src/main下的 Java 文件。 - 生成每个类的基本信息:
PostService(PostRepository, UserRepository, ImageService)
- fields: postRepository:PostRepository, userRepository:UserRepository, userPosts:Set<Post>, imageService:ImageService
- methods: findAll(): List<Post>, addNewPost(Post): Post, saveImageToPost(String, MultipartFile, Post): int
步骤 2. 生成指令
预期 JSON 格式:
- instruction: 实现方法 ${methodName}
- input: ${classInformation}
- output: ${code}
示例:
{"instruction":"实现方法 action","input":"com.thoughtworks.go.config.rules.AbstractDirective(DirectiveType, DirectiveType, String, String, String)\n- fields: action:String, type:String, resource:String, configErrors:ConfigErrors, directiveType:DirectiveType\n- methods: validate(ValidationContext): void, isInvalid(String, List<String>): boolean, matchesAction(String): boolean, matchesType(Class<? extends Validatable>): boolean, matchesResource(String): boolean, errors(): ConfigErrors, addError(String, String): void, equals(Object): boolean, action(): String, type(): String, resource(): String, hashCode(): int, hasErrors(): boolean, getDirectiveType(): DirectiveType","output":"public abstract class AbstractDirective implements Directive {\n\n @ConfigAttribute(value = \"action\", optional = false)\n protected String action;\n\n @ConfigAttribute(value = \"type\", optional = false)\n protected String type;\n\n @ConfigValue\n private String resource;\n\n private final ConfigErrors configErrors = new ConfigErrors();\n\n private DirectiveType directiveType;\n\n public AbstractDirective(DirectiveType allow) {\n this.directiveType = allow;\n }\n\n public AbstractDirective(DirectiveType allow, String action, String type, String resource) {\n this.directiveType = allow;\n this.action = action;\n this.type = type;\n this.resource = resource;\n }\n\n @Override\n public String action() {\n return this.action;\n }\n}\n"}
类信息格式
格式规范:
包名.类名(类的构造类型)
- fields:成员变量集合(变量名:类型)
- methods:方法抽象集合(方法名(参数类型): 输出类型)
结果:
com.thoughtworks.go.config.rules.AbstractDirective(DirectiveType, DirectiveType, String, String, String)
- fields: action:String, type:String, resource:String, configErrors:ConfigErrors, directiveType:DirectiveType
- methods: validate(ValidationContext): void, isInvalid(String, List<String>): boolean, matchesAction(String): boolean, matchesType(Class<? extends Validatable>): boolean, matchesResource(String): boolean, errors(): ConfigErrors, addError(String, String): void, equals(Object): boolean, action(): String, type(): String, resource(): String, hashCode(): int, hasErrors(): boolean, getDirectiveType(): DirectiveType
其它:核心代码逻辑
val javaProcessor = JavaProcessor(file.readText())
val shotClass = javaProcessor.toShortClass() ?: return@forEach
javaProcessor
.removePackage()
.removeAllImport()
.removeLicenseInfoBeforeImport()
javaProcessor.splitMethods().forEach { (key, value) ->
CodegenPrompt(
instruction = "实现方法 $key",
input = shotClass.toString(),
output = value
).let { prompt ->
val output = Json.encodeToString(prompt)
File("$targetPath${key}.json").writeText(output)
}
}
测试代码生成
基本思路

语法分析思路:
- 方式 1 - 在时间有限的情况下,基于 OpenAI 的数据来完善。但是,OpenAI 编写的测试用例不一定靠谱,所以让他生成业务代码。
- 方式 2 - 在时间充裕的情况下,可以分析 AST 来合并第一和第二步,也是比较合理的方案,毕竟 OpenAI 的 API 很贵。
步骤 1. 生成测试代码
- 下载 GitHub 上的项目(需要包含测试用例)
- 建立每个项目的
src/main下的 Java 文件 map,如果同时存在对应的测试文件,则拉入的数据集中。 - 并生成每个测试对应的类的基本信息(以减少 OpenAI Token 使用):
org.unitmesh.processor.TestClass(String, Int)
- fields: field1:String, field2:Int
- methods: method1(String, Int): String, method2(): Int
- 按测试用例(即 @Test 方法)拆分每个测试文件,拆成 N 个(即 test1、test2 是两个不同的数据)
class TestProcessorTest {
@Test
void test1() {
}
@Test
void test2() {
}
}
最后,生成的数据如下:
{"classInfo": "com.thoughtworks.go.security.AESEncrypter(AESCipherProvider)\n- fields: ENCODER:Base64.Encoder, DECODER: Base64.Decoder, cipherProvider:AESCipherProvider, ivProvider:IVProvider\n- methods: createIVProviderInstance(): IVProvider, canDecrypt(String): boolean, encrypt(String): String, decrypt(String): String, createSecretKeySpec(): SecretKeySpec", "testMethod": "public class AESEncrypterTest {\n\n private AESEncrypter aesEncrypter;\n\n @Test public void shouldGenerateEncryptedText() throws CryptoException {\n String encrypt = aesEncrypter.encrypt("p@ssw0rd");\n assertThat(encrypt).startsWith("AES");\n assertThat(encrypt.split(":")).hasSize(3);\n }\n}\n", "id": "task_0"}
步骤 2. 借助 OpenAI Davinci 编写实现代码(可选)
详细代码见:test-to-code.py
- 将上面的数据转换为 JSONL,合并成 prompt。
- 让 Davinci 完成填空题。
最后生成的 prompt 示例如下:
你是一名程序员,正在使用 TDD 方法实现一个方法。以下是需求:
1. 根据以下类信息和测试代码编写方法。
2. 尽量考虑边界情况。
3. 只需返回代码,无需解释。
类信息:
###
io.github.robwin.swagger.test.AbstractContractValidator()
- 方法:findExpectedPaths(Swagger, SwaggerAssertionConfig): Map<String,Path>, getPathsIncludingBasePath(Swagger):
Map<String,Path>, getPathsWithPrefix(Swagger, String): Map<String,Path>, isBlankOrSlash(String): boolean
###
测试代码:
###
/**
* 测试 AbstractContractValidator。
*/
@RunWith(Enclosed.class)
public class AbstractContractValidatorTest {
/**
* 测试 getPathsIncludingBasePath()。
*/
public static class GetPathsIncludingBasePath {
@Test
public void shouldReturnPathsPrefixedIfBasePathSet() {
// 给定
Swagger swagger = buildSwaggerFrom("/swagger.json");
// 当
Map<String, Path> paths = new DummyValidator().getPathsIncludingBasePath(swagger);
// 则
paths.entrySet().forEach(e -> assertThat(e.getKey(), startsWith(swagger.getBasePath())));
}
}
/**
* 测试 findExpectedPaths()。
*/
public static class FindExpectedPaths {
}
private static class DummyValidator extends AbstractContractValidator {
}
}
###
文本转代码
使用的是已有的 Datasets,包括:
- text-to-sql - 用于将自然语言转换为 SQL 语句的数据集
- text-to-code - 用于将自然语言转换为代码的数据集
不过,这两个代码集质量都不高,但是基本可用。
文本生成 repository
数据准备
- 解析 Kotlin 项目代码,提取出所有的类和方法。
- 建立 Repository 方法与类型的对应关系。
- 生成 Repository 方法的基本信息。
- 调用 OpenAI 生成数据
格式如下:
instruction:
我想查找特定月份(monthly_id)下在某个日期(date)之前的所有费用(expense),以方便了解特定月份内的开销情况。
input:
data class ExpenseEntity(....)
output:
@Query("SELECT * FROM expense WHERE monthly_id = :recurringExpenseId AND date < :beforeDate")
suspend fun getAllExpensesForRecurringExpenseBeforeDate(recurringExpenseId: Long, beforeDate: LocalDate): List<ExpenseEntity>
输出示例:
evaluate("text to kotlin repository with class", "我想查询指定年龄的用户(User)的博客数量。\n ###data class User(var age: Int,
val blogId: Int) data class Post(val title: String)###", 0.1, 0.75, 40, 4, 512)
@Query("SELECT COUNT(*) FROM User WHERE age = :age")
abstract fun getBlogCount(age: Int): Long
领域知识
训练 1:PDF
基本思路:
- 将 PDF 文件转换为文本
- 将文本按标题的方式拆分成
instruction和output两部分,input为 null。
示例:
instruction: 介绍一下财通财通宝的基金管理人、基金托管人在履行各自职责的过程中,违反《基金法》?
(一)基金管理人、基金托管人在履行各自职责的过程中,违反《基金法》等法律法规的规定或者基金合同约定, 给基金财产或者基金份额持有人造成损害的,
应当分别对各自的行为依法承担赔偿责任;因共同行为给基金财产或者基金份额持有人造成损害的,应当承担连带赔偿责任,对 损失的赔偿,仅限于直接损失。
但是发生下列情况,当事人可以免责: 1.基金管理人及基金托管人按照中国证监会的规定或当时有效的法律法规的作为或不作为而造成的损失等;
2.基金管理人由于按照基金合同规定的投资原则而行使或不行使其投资权而造成的损失等; 3.不可抗力。
训练与结果
基于 Meta 的 Llama 训练 LoRA
训练:
- 方式 1:直接使用:alpaca-lora.ipynb
- 方式 2:直接使用:OpenBayes 容器 (PS:使用我的专用邀请链接,注册 OpenBayes,双方各获得 60 分钟 RTX 3090 使用时长,支持累积,永久有效: https://openbayes.com/console/signup?r=phodal_uVxU) )
训练时间:
- 3400+ 用户故事,约 25 分钟
- 8000+ 测试代码,约 1 小时
- 10000+ 代码辅助生成,约 1.5 小时
- 20000+ 代码辅助生成,约 3 小时
- 40000+ 代码辅助生成,约 6 小时
相关背景:
- 基础模型:Meta 开源 LLaMA 系列模型:llama-7b-hf
- Stanford Alpaca: https://github.com/tatsu-lab/stanford_alpaca
- Alpaca Lora:https://github.com/tloen/alpaca-lora
由于,我们的目标不是对模型调优、生成通用的模型,而是训练特定用途的 Lora。因此,我们没有加入:Stanford Alpaca 中的数据, 故所需要时间更短,如 8000+ 测试代码只需要 1 小时,3400+ 的用户故事只需要 25 分钟。
训练 1:测试代码生成
训练结果(LoRA)见:https://github.com/unit-mesh/unit-minions/releases/tag/v0.0.1
print(evaluate("write test", """
public Set<String> listFilesUsingJavaIO(String dir) {
return Stream.of(new File(dir).listFiles())
.filter(file -> !file.isDirectory())
.map(File::getName)
.collect(Collectors.toSet());
}
""", 0.1, 0.75, 40, 4, 512))
## Output:
public class ListFilesUsingJavaIOTest {
@Test
public void shouldListFilesUsingJavaIO() {
Set<String> files = ListFilesUsingJavaIO.listFilesUsingJavaIO(new File("dir"));
assertThat(files, containsInAnyOrder("file1", "file2", "file3"));
}
}
训练 2:拆分用户故事
训练结果(LoRA)见:https://github.com/unit-mesh/unit-minions/releases/tag/v0.0.2
注意:
- 如果数据集太小,设置一下 val_set_size,比如:
--val_set_size 500 - 如果数据集太小,设置一下 val_set_size,比如:
--val_set_size 500 - 如果数据集太小,设置一下 val_set_size,比如:
--val_set_size 500
示例输出:
print(evaluate("create Agile user story for following topic: ", "购买电影票", 0.1, 0.75, 40, 4, 512))
用户故事:可以购买电影票
作为一个电影票购买者
我想在购买电影票应用中购买电影票
以便于我可以购买电影票
AC 1: 电影票购买者可以在购买电影票应用中购买电影票
假设 电影票购买者已经登录购买电影票应用
当 电影票购买者点击“购买电影票”按钮
于是 电影票购买者可以在购买电影票应用中购买电影票
AC 2: 电影票购买者可以在购买电影票应用中查看购买记录
假设 电影票购买者已经登录购买电影票应用
当 电影票购买者点击“查看购买记录”按钮
于是 电影票购买者 kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 3: 电影票购买者 kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 4: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 5: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 6: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 7: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 8: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 9: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 10: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 11: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 12: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 13: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 14: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 15: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 16: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 17: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 18: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
AC 19: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungen sehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 20: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 21: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 22: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 23: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 24: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 25: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 26: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungssehen
AC 27: The Käufer kannn in der Kauf von Film Tickets App kaufen und die Kaufaufzeichnungsseen
Assumption: Der Käufer hat bereits den Kauf von Film Tickets App eingeloggt
When the Käufer den Knopf “View Purchase Records” drückt
Then the K…
### 用户故事生成
示例 1:
evaluate("指令:创建用户故事\n输入:电影网站:查看订单详情 \n回答:")
指令:创建用户故事 输入:电影网站:查看订单详情 回答:
用户故事:可以查看订单详情
作为一个电影网站的用户
我希望查看订单详情
这样我就可以了解订单的详细信息,比如订单号、订单状态、订单内容等。
AC 1:用户可以查看订单详情
假设 用户已经登录
当 用户点击“查看订单详情”按钮
于是 用户可以成功查看订单详情,包括订单号、订单状态、订单内容等。
AC 2:用户可以查看订单详情
假设 用户没有登录
当 用户点击“查看订单详情”按钮
于是 系统会提示用户先登录,登录后才能查看订单详情,包括订单号、订单状态、订单内容等。
示例 2:
evaluate("指令:创建用户故事\n输入:团购网站:用户注册\n回答:")
指令:创建用户故事
输入:团购网站:用户注册
回答:
团购网站的用户注册故事:
作为一个团购网站的用户
我希望注册一个团购网站的用户账号
这样我就可以使用团购服务,比如购买商品、服务等。
AC 1:团购网站的用户注册账号
假设 用户输入了正确的注册信息
当 用户提交注册信息
于是 用户可以成功注册一个团购网站的用户账号
AC 2:团购网站的用户注册账号
假设 用户输入了错误的注册信息
当 用户提交注册信息
于是 系统会提示用户输入正确的注册信息,并允许用户重新提交注册信息
```
版本历史
v0.0.62023/05/22v0.0.52023/04/11v0.0.42023/04/08v0.0.32023/04/05v0.0.22023/04/04v0.0.12023/04/02常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备







