如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
The project is based on hpal that provides a son set configuration based on the folder structure, the only thing that I disabled was model since they use an ORM different from what we will use.
First of all for hpal everything is a plugin, so we have 3 main ones
redisrasa (not created yet)libThe plugins are available to any piece of code that have access to the hapijs server object but even if that is the case we should always access the object in the correct places:
route -> service -> model
So in other words, even if a route have access to a model it should do so using the service and not directly. Or even if a model have access to the server object and the rest of the services it should not do it since is in the wrong direction.
Not all models are the same and not all of them are going to be related to the database or to the models that hapijs will use.
For example we have a model that defines how and object will look in redis and expose the functionality to manipulate this object.
There will be another model for a rasa endpoint that will encapsulate the call to an endpoint and manage the response
And then there will be the category models, even if in our case there will be a 1:1 match with the rasa models this are going to be kept separate because their function will be different.
The category models will be part of the route an provide validation (using Joi library) and also serves as documentation to build the swagger json.
In some cases we will need a mapper that will convert from one model to a category model or vise versa, this is because we will need to massage some properties before saving it to redis or when we read them and before sending it to eh UI.
Located at: ./plugin/redis
This plugin have 2 main functions
In this folder we will find the redis models, this will contain all the properties and function calls to the DB.
Is model extends a our base model class and at the same time a https://maritz.github.io/nohm/ class. The base class will expose some shorcut functions that are used across all modes like: findById, findAll, delete, etc. But this function will make use of nohm too.
** IMPORTANT **
The plugin will expose to the server is a Nohm client, we are not going to expose the redis client itself. So when we call server.app.redis we are getting the nohm client, and to get and specific model we use Nohm's factory to get it:
const AgentModel = server.app.redis.factory('Agent'); const agent = AgentModel.findById({id:1}); //we can use nohm directly to find an object by id but the above code looks more readable const agent = server.app.redis.factory('Agent', 1);
Located at: ./plugin/rasa (not yet created)
This plugin have 2 main functions
The models will be initialized with the axios client
module.exports = class Parse { constructor({axios}){ this.client=axios; } async post({payload}){ const result = await this.client.post(payload); // Do something with the result if needed. return result; } };
Then we will call it from the service like this
const ParseModel = server.app.rasa.Parse; const result = ParseModel.post({payload});
Located at: ./lib
This is the main application, where all the our business logic will be and wire everything together.
./lib/models: models used by hapijs routes./lib/routes: this is a combination between route configuration and controller, since the controllers are going to be really thin then it is fine to have it here. This will setup the route and the handler will ONLY get the data from the request, if any, and call the a service../lib/validators: hapijs validators./lib/routes: Will contain the business logic as granular as needed, services can call each other so we can reuse the code where we need it. We might need to do a better organization of the files in this folder since the number of files will grow.We are using the latest JS functions like import, async, await, etc. To have code that is easier to read, mostly by the use of await/async so we don't have a ton of callbacks.
Nohm and hapijs provides its own validation methods, I decided not to use nohm at all and just validate when an endpoint is called instead of having to double the validations in both places.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务