需通过结构化提示词、分阶段生成、注释标记、反向提示和模块路径引导五种方法,确保codegeex生成符合六边形架构的go代码:domain层无外部依赖,application层依赖倒置,adapter层仅调用上层接口。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望使用CodeGeeX生成符合Go语言六边形架构(Hexagonal Architecture)规范的代码结构,则需明确领域层、应用层、适配器层的职责边界,并引导模型按分层契约输出可编译、无依赖污染的骨架代码。以下是实现该目标的具体方法:
一、通过结构化提示词约束分层生成
CodeGeeX对架构类请求响应质量高度依赖提示词的精确性。需在输入中显式声明各层命名、接口契约与依赖方向,避免生成违反“内核不可依赖外圈”的代码。
1、在CodeGeeX输入框中键入如下提示词:“请生成Go语言六边形架构代码,包含domain(含Entity、Repository接口)、application(含UseCase结构体及方法)、adapter(含HTTP handler和InMemoryRepository实现),所有外部依赖仅从application层向下注入,domain层不得import任何adapter或framework包”。
2、确认生成代码中domain目录下无import "net/http"、"github.com/gin-gonic/gin"等框架相关路径。
3、检查application/usecase.go中是否通过构造函数接收Repository接口,而非具体实现类型。
二、分阶段调用CodeGeeX生成各层代码
一次性生成完整架构易导致层间耦合。应拆解为独立指令,确保每层代码严格遵循依赖倒置原则,由外向内逐步构建可验证契约。
1、首步输入:“生成Go domain层代码:定义Order实体结构体,定义OrderRepository接口含Save、FindById方法,返回error不使用任何第三方包”。
2、第二步输入:“生成Go application层代码:定义OrderService结构体,接收OrderRepository接口,实现CreateOrder方法,参数为Order实体,返回Order和error”。
3、第三步输入:“生成Go adapter层代码:定义InMemoryOrderRepository结构体,实现OrderRepository接口,使用map[string]Order存储;定义HTTP handler函数,接收*gin.Context,调用OrderService.CreateOrder”。
三、使用注释标记强制隔离依赖
CodeGeeX可能默认引入标准库以外的包。需在提示词中嵌入强制性注释规则,使其将依赖约束转化为代码内显式声明,便于后续静态检查。
1、输入提示词时,在关键位置加入:// DEPENDENCY-RULE: domain/ must not import anything outside stdlib or ./domain/。
CodeGeeX 2.21.0是智谱AI推出的AI编程助手版本,对Inline Chat功能进行了重大优化,包括UI设计升级、支持流式输出以提升响应速度,并新增“查看思路”按钮以便理解代码原理。同时,该版本在编辑器中新增CodeLens控件,支持一键“解释”代码或“添加注释”。目前该工具对个人开发者免费开放。
2、在application层提示词末尾追加:// DEPENDENCY-RULE: application/ may import domain/ but must not import adapter/ or framework packages。
3、在adapter层提示词开头声明:// DEPENDENCY-RULE: adapter/ may import domain/ and application/ only, no direct domain struct construction。
四、基于已有项目结构反向提示生成
若已有部分代码(如domain/entity.go),可将其粘贴至CodeGeeX并附加指令,让模型严格遵循现有接口签名生成下游层,避免契约偏移。
1、粘贴已存在的domain/order.go内容,后接:“根据上述Order和OrderRepository接口,生成application/order_service.go,要求UseCase方法签名匹配接口方法,不修改原有domain代码”。
2、粘贴刚生成的application/order_service.go,后接:“根据上述OrderService结构体和方法,生成adapter/http_order_handler.go,使用net/http标准库,调用service.CreateOrder并写入ResponseWriter”。
3、验证生成的handler是否未出现“&domain.Order{}”字面量初始化,而是通过service方法返回值获取实例。
五、利用Go Module路径引导包依赖关系
CodeGeeX能识别模块路径语义。通过预设go.mod中各层module路径,可强化其对导入路径合法性的判断,减少越界引用。
1、在提示词开头声明:“本项目module路径为:domain → example.com/myapp/domain,application → example.com/myapp/application,adapter → example.com/myapp/adapter”。
2、要求生成domain代码时,所有package声明必须为package domain,且无import指向example.com/myapp/application。
3、要求生成adapter代码时,import列表中必须包含example.com/myapp/domain和example.com/myapp/application,禁止出现example.com/myapp/domain/xxx内部子包路径。










