我用 Rokid AIUI 做了一个自我介绍陪练,叫“说清楚”。用户先说自己的经历,模型根据上下文追问;卡住时换成句式补全,时间紧时缩短练习,结束后再单独生成整轮总结和介绍成稿。
我想解决的是开口以后接不上下一句的问题。比如说自己会用AI,接下来该讲哪个例子?这个例子又能给眼前的听众提供什么帮助?因此,我把身份、经历和帮助设成三个内容目标,把具体追问交给模型。
这次用 AIUI Studio 开发,就算没有实体眼镜,你也可以在模拟器中验证真实模型调用和页面流程。
1. 在平台建工程
先打开工作台,点击左侧“新建智能体”,选择“对话创建”,进入AIUI CODING。我先读了 AIUI 0.18.0 快速开始,再让平台启用官方aiui-dev Skill,按框架规范创建工程。
创建需求需要同时交代场景、页面和验收动作。把这个项目的要求归纳起来,可以这样描述:
创建中文自我介绍陪练“说清楚”。
按身份、具体经历、能提供的帮助组织练习。
每屏放一个问题、一条提示和少量操作。
支持语音回答、镜腿选择、暂停、重说和调整难度。
用LanguageModel结合上下文追问,最后独立生成总结。
请实际创建工程文件,并在模拟器跑完一轮。
实际创建没有一次完成。第一轮平台反复读资料、写计划,代码区还是空的。然后我把目标缩小为先创建四个文件、跑起欢迎页和基本跳转,再逐项补语音、模型和异常处理。这样每次修改都有可以检查的页面。
切到上方“代码”,先核对文件树,再打开具体文件编辑。创建目录以后,还要展开pages/index确认页面真的存在,app.json里的路径也要与它一致。只有应用入口、没有页面文件,仍然跑不出欢迎页。最后这份工程的主要文件是:
AGENTS.md 身份、场景和行为边界
app.json 页面入口、权限和全局配置
app.js 应用生命周期
pages/index/index.ink 页面逻辑、结构和样式
平台生成最小工程后,我把代码写回同一个AIUI项目。后面的效果始终在它的模拟器里检查。
补功能时,每次只给一个可检查的目标:先让欢迎页能进入第一题,再让回答产生模型请求,最后加入重说和整轮总结。一次把所有要求塞进去,出问题时很难分清是页面没有生成、事件没有触发,还是模型没有返回。
下面代码整理了当前工程的关键分支,部分清理、日志和错误处理放在文字里解释。函数之间共用页面状态,照着实现时需要放回同一个页面对象里。
2. 配好入口和权限
app.json先声明页面路径和录音权限。下面是当前配置的关键部分:
{
"name": "说清楚",
"version": "1.2.1",
"permissions": ["RECORD_AUDIO"],
"pages": ["pages/index/index"],
"window": {"navigationBarTitleText": "说清楚"}
}
最早生成的权限写过microphone、network,后来按文档改成RECORD_AUDIO。这个名称需要用平台支持的值。工程没有申请摄像头、定位或通讯录,也没有配置外部模型密钥。
AGENTS.md写清职责:只练内容和结构,不评价发音、语速或人格,不编造经历、数字和结果。这些要求还要放进页面实际发送给模型的系统提示,不能写完说明文件就认为每个请求都有约束。
AIUI CODING负责开发时生成和修改工程,LanguageModel负责产品运行时的追问与总结。两者的提示词分开:前者说明要做什么页面,后者说明怎样分析当前回答。运行时每次创建会话,都通过initialPrompts明确传入系统要求。
index.ink把页面配置、JavaScript、界面结构和样式放在一起。逻辑使用export default,页面状态通过this.setData更新,结构里读取对应字段。例如当前问题和操作按钮分别绑定question和actions,模型返回以后再一起更新。
具体编辑时,导入和页面方法放在script setup,显示问题与按钮的结构放在page,字号、边框和布局放在style。data里先给显示字段初值,再让事件改变状态。之前遇到过字段未定义的运行错误,所以我会先检查模板引用有没有在data中初始化。
页面还区分两个状态:stage表示练到身份、经历还是帮助,phase表示欢迎、回答、等待模型、查看反馈或阅读总结;收音另用voicePanel控制。处理普通回答后,页面先进入review供用户确认,再把下一问切成正式问题;这也给“这句重说”留出了位置。
问题和操作的绑定可以直接在page里看到,下面保留回答区域及按钮循环:
<page>
<view ink:if="{{!paused && phase === 'answer'}}">
<text>{{goalTitle}}</text>
<text>{{question}}</text>
</view>
<view ink:for="{{actions}}" ink:key="key"
data-key="{{item.key}}" bindtap="onAction">
<text>{{item.label}}</text>
</view>
</page>
按钮把自己的key交给onAction,再转给_act。切换页面状态时,_refresh重新生成actions,因此收音时显示“说完了”,反馈时显示“说下一句”,总结时显示“下一页”。界面文字和按键选择使用同一份数据,减少两边操作不一致的问题。
3. 接入语音和按键
首页允许先说听众和用途,也可以直接开始。练习页只保留“语音回答”“给点提示”等操作;镜腿滑动切换选项,单击确认,双击暂停或继续。
收音用平台提供的SpeechRecognition。创建识别实例后设置中文、单次识别和中间结果;中间文字只显示,最终结果才进入练习。下面摘出结果处理的主要分支,active和commit分别负责当前会话检查、提交及清理:
import { SpeechRecognition } from 'speech';
const recognition = new SpeechRecognition();
recognition.lang = 'zh-CN';
recognition.continuous = false;
recognition.interimResults = true;
recognition.onresult = e => {
if (!active()) return;
let finalText = '', interim = '';
for (let i = 0; i < (e.results || []).length; i++) {
const r = e.results[i], value = r && r[0] && r[0].transcript;
if (!value) continue;
if (r.isFinal) finalText += value;
else interim += value;
}
this._voiceFinal = finalText;
this._voiceInterim = interim;
this.setData({ speechText: cut(finalText + interim).slice(-52) });
if (finalText && !interim) commit(finalText);
};
recognition.start();
commit会先释放识别实例,再调用_route处理文字。onend也可能收到结束通知,因此要核对当前实例是否仍然有效,防止同一句话提交两次。页面离开时同样要解除回调、释放会话。
这部分踩过一个坑:主动取消收音也显示“语音暂不可用”,旧会话的错误回调还会覆盖新状态。修复时先把旧实例回调置空,再abort;每个回调检查自己是否仍是当前实例。主动取消正常返回,权限、麦克风和网络错误分别提示。
识别文字进入_route后,先判断“暂停”“继续”“重说”等命令,再区分调整练法和普通回答。按键入口最终也调用同一组操作,避免语音和镜腿维护两套练习逻辑。
收音界面使用voicePanel单独切换,voiceState区分开启、正在听、等待最终确认和重试。用户单击“说完了”时调用stop,继续等待最终文字;取消则解除回调并abort。
镜腿事件映射为Enter、ArrowUp、ArrowDown和Backspace。onKeyDown阻止默认行为,onKeyUp再执行选择或确认;同一按键在180毫秒内重复到达会被忽略。当前选中项只存索引,确认时读取actions中的key,交给_act分发。
4. 自己管理上下文
每次请求都创建模型会话,本轮记忆由页面传入。对话记录存到_turns,每条回答带上当时的目标和问题。有效事实与历史分别组装:
_facts() {
return this._turns
.filter(t => t.role === 'user' && t.kind === 'answer' && !t.superseded)
.map(t => ({
turnId: t.turnId, stage: t.stage,
question: t.question, answer: t.text
}));
},
_context(intent, text) {
return {
intent, userInput: cut(text),
currentStage: this.data.stage,
currentQuestion: this.data.question,
currentMode: this.data.mode,
audience: this.data.audience, focus: this.data.focus,
followups: this._followups.slice(),
validUserFacts: this._facts(),
history: this._turns.filter(t => !t.superseded).slice(-24)
};
}
这里保留全部有效回答,历史取最近24条非作废对话。cut是工程里的文字清理函数,负责转成字符串、去首尾空白并限制长度。问题和回答成对保存,后面才能知道“这张表”究竟回应了哪一问。
两份材料各有用途:validUserFacts给出可以用于成稿的用户原话,history帮助模型理解问答经过和练法变化。系统提示明确把历史与用户文字当成待分析资料,不能执行其中要求编造经历、改变规则的指令。收到新回答时,_ask先把它写入记录,再组装上下文,因此当前这一句也在本次请求里。
“太难了”记录为adjust,助手示范记录为assistant,都不会进入validUserFacts。用户重说时,把原回答及对应反馈标为superseded,其他回答保留;重新开始则清空本轮。这样既能调整练法,也能查清总结采用了哪些材料。
作废用的是标记,没有直接删掉原记录。对应的助手反馈通过parentTurnId关联到回答,重说时一并排除。调试时仍能追溯原来讲过什么,正常生成时则只读取没有作废的条目。
用社区图书角测试人物小周验证:先说明负责借还登记、带新人,模型便接着询问带新人的经历。
再补“新人经常把归还的书放错位置,我做了一张分类位置对照表”,下一问就变成:“新人用了这张表后,归还书籍的准确率或效率有什么具体变化吗?”
5. 调模型再校验
调用使用内置LanguageModel。系统提示要求每次只找一个信息缺口,并输出JSON,包含question、feedback、action、stage、mode、hint等字段。具体提问由模型生成,程序再检查能否应用。
请求按意图区分:start生成开场,answer处理回答,adjust处理提示、困难和时间变化。同样一句“讲个例子”,在不同经历后面会落到不同细节。请求带上当前目标,系统提示要求模型解释练法调整的原因,页面用modeReason展示这次为何换练法。
陪练调用的核心可以摘成下面这段。完整实现还包含超时、请求编号和日志:
import { LanguageModel } from 'language-model';
if (await LanguageModel.availability() !== 'available') {
throw new Error('模型当前不可用');
}
const session = await LanguageModel.create({
initialPrompts: [{ role: 'system', content: COACH_SYSTEM }]
});
try {
const raw = await session.prompt(JSON.stringify(job.payload));
const result = coachResult(raw, job.payload);
this._applyCoach(result, job);
this._refresh();
} finally {
session.destroy();
}
coachResult先解析JSON,再检查动作、目标范围、问题和练习模式。followup留在当前目标,advance只能进入相邻目标,finish要求已经到最后目标且至少有三条有效回答。通过以后,_applyCoach把反馈和下一问写入页面。
question为空、mode不在允许范围、降低难度却没有frame,也会被判为无效。界面只接受校验后的结果:普通回答先显示反馈和下一问,start或adjust则直接更新当前问题。JSON在这里承担的是页面与模型之间的约定,具体内容仍然来自本次生成。
这些限制也会约束“太难了”“只剩两分钟”。降难度应保留当前目标,精简则可以进入相邻目标。实际校验中的这一段是:
const stay = x.action === 'followup' && stage === payload.currentStage;
const shorten = x.mode === 'compact' && x.action === 'advance'
&& stage === payload.currentStage + 1;
if (!stay && !shorten) {
throw new Error('提示或降难度应留在原目标,精简模式可进入相邻目标');
}
我最初把adjust全部限制在原目标,结果连合理的精简安排也被拦住。分开判断后,“太难了”返回围绕对照表的补全句式:“有了这张表,新人______(反应/话语),______(状态变化)。”
再说“只剩两分钟”,模型切到compact,问对新志愿者最大的帮助,要求用一句话总结。这里表达的是缩短练习的要求,没有做成倒计时。
句式里举出的反馈只能当提示。系统要求模型只依据用户提供的事实,没有统计过的准确率、效率或百分比都不能补进成稿。
6. 单独生成总结
用户完成回答或主动要求总结时,_finish建立一个独立任务,再交给同一个执行函数:
const job = {
kind: 'summary',
payload: this._context('summary',
'请综合本轮有效回答,生成总结和可练习的自我介绍。')
};
this._lastJob = job;
return this._execute(job);
_execute根据kind选择SUMMARY_SYSTEM,并用summaryResult校验返回。总结要求overview、strengths、improvements、introduction、nextPractice齐全,优点要有事实依据,改进点要有可执行建议。
如果本轮还没有有效回答,_finish会先拦住。真正发出总结时,输入仍是整轮上下文,系统要求则换成整轮整理任务。优点数组里的point和evidence分别存结论与依据,改进数组里的point和suggestion分别存问题与建议,页面可以按字段组织阅读顺序。
志愿者最后补了“对照表让新人自己找到归还位置,不用反复问我。我希望带大家完成第一次值班”。生成的介绍串起职责、做法和帮助,结尾保留“我的目标是”,没有把希望写成已经取得的成绩。
界面把整体判断、介绍成稿和下次练法分组,再按文字长度拆页。这组恰好是三页,其他轮次会变化。曾经遇到接口已有结果、页面却只有标题,最后修正列表容器写法,再逐页检查内容。
结构化输出也可能失败。程序最多尝试两次;格式或字段不合要求时,把错误和上次原始输出随原上下文交给模型修正一次。仍失败就保留回答和重试入口。陪练等待上限35秒,总结45秒,不让界面无限停在处理中。
第二次请求会增加outputRepair,附上具体错误、截断后的上次输出,并要求仍使用同一份真实上下文。模型不可用或等待超时则直接结束本次尝试。等待通过Promise.race比较模型返回和超时任务,finally清除计时器并destroy会话,成功和失败都走清理。这些分支都留下记录,重试时继续采用原任务,不要求用户重新说完整段经历。
7. 测试和上架
保存代码后,进入“模拟调试”跑完一轮:回答问题、降低难度、缩短练习,最后生成总结。再换一组经历,确认追问和成稿会跟着内容变化,并检查镜腿单击、滑动和暂停是否正常。
模拟器跑通后,先在“真机调试”页填写基本信息并打包AIX,再到“提审”页填写介绍、上传截图和演示视频,提交审核。目前,AIUI Studio中我的“说清楚”智能体的状态已经显示为“已上架”。
这次从平台创建工程,到接入语音、组织上下文,再到模型追问和独立总结,做完了一个能练完整轮的自我介绍陪练。用户说出的零散经历,经过追问补充,最后能整理成一段继续练习的介绍,这就是我想做出来的结果。
欢迎大家使用。
本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。
I used Rokid AAUI to do a self-advertisement exercise called "Specify." Users start with their own experiences, and the model is based on context queries; when stuck, it is replaced by a full sentence, with shorter hours of practice, followed by a single round of summaries and presentations.
What I want to address is the problem of not being able to take up the next sentence after the opening. For example, you can use AI. What's next? What help can this be for the immediate audience? I have therefore set identity, experience and help as three content objectives, giving specific queries to the model.
This time, you can verify the real model call and page process in the simulator, even without the real glasses.
1. Construction work on the platform
Open the desk first, click on the left " New AI agent ", select " Dialogue Create ", enter AUI CODING. I've read AAUI 0.18.0 to start quickly and get the platform to start the official aui-dev Skyll and create the project according to the framework.
Creation needs to be accompanied by scenes, pages and acceptance check actions. The requirements of this project can be summarized as follows:
"Speak clearly."
Organization of exercises by identity, specific experience and available assistance.
Each screen contains a question, a hint and a few operations.
Voice answers, mirror leg selection, suspension, restatement and adjustment difficulties are supported.
Using LanguageModel in conjunction with context, the summary was produced independently.
Please actually create the project file and run a round on the simulator.
None of the actual creations were completed. The first round of the platform's rereading of information, writing of plans, and the code area are still empty. I then narrowed the target to create four files, run a welcome page and basic jumps, and then add voice, model and anomaly. So every change has a page that you can check.
Cuts to the " code " above, first checking the file tree, then opening the specific file editing. After creating the directory, expand the page/index to confirm that the page exists and that the path in the app.json is consistent with it. Only the application entrance and no page file are available. The main documents of the project are:
AGENTS.md Identity, scene and behavioural boundaries
App.json page entrance, permission and global configuration
App.js Application life cycle
Pages/index/index.ink Page Logic, Structure and Styles
When the platform generated the smallest project, I wrote back the code back to the same AIUI project. The later effects are always checked in its simulator.
When completing the function, only one detectable goal is given each time: first, let the welcome page enter the first issue, then let the response produce a model request, and finally, add a restatement and a round summary. It is difficult to determine whether the page was not generated, the event did not trigger, or the model did not return at a time when all requirements were plugged in.
The code below collates the key branches of the current project, with partial clean-up, logs and error processing explained in text. function is shared with the same page object.
2. Fitting the entrance and permission
App.json first states the page path and audio permission. The following are key components of the current configuration:
{
"name": "Specify."
"version": "1.2.1",
"permissions": ["RECORD_AUDIO"],
"pages": ["pages/index/index"],
"Window":
}
The first generated permission wrote microphones, network, which was changed to RECORD AUDIO by document. This name needs to be supported by the Platform. The project did not request a camera, location or address book, nor did it configure an external model key.
AGENTS.md writes about its duties: to practice content and structure only, not to evaluate pronunciation, speed or personality, and not to invent experiences, figures and results. These requirements are also placed in the system alert that is actually sent to the model on the page, and each request is considered to be bound by the description document.
AIUI CODISING is responsible for generating and modifying works during development, and LanguageModel is responsible for processing and summarizing products. The two prompt are separated: the former describes what to do with the page and the latter describes how to analyse the current response. When running, each session is created, the system requirements are clearly transmitted through the Initial Prompts.
index.ink combines page configuration, JavaScript, interface structure and style. Logical use of export default, with the page status updated by this.setData, and the corresponding field read in the structure. For example, the current problem and the operation buttons bind Qastion and actions, respectively, and the model is returned and updated together.
When editing, the import and page method is placed in the script setup, the structure that shows the problem and the button is placed in the page, the font, the border and the layout are placed in the style. data shows the field opening before the event changes its state. I have encountered an undefined run error in field before, so I will first check if the template references have been initialized in the data.
The page also distinguishes between two states: stage indicates an identity, experience or help, phaase welcomes, answers, waits for models, looks at feedback or reads summaries; and radio is also controlled by voicepanel. After the normal answer is processed, the page enters the review for confirmation by the user and then cuts the next question into a formal question; this also gives a place for “the restatement”.
The binding of questions and operations can be seen directly in the page and the following is reserved for the answer area and button loop:
<page>
<view ink:if="{{!paused && phase === 'answer'}}">
<text>{{goalTitle}}</text>
<text>{{question}}</text>
</view>
<view ink:for="{{actions}}" ink:key="key"
data-key="{{item.key}}" bindtap="onAction">
<text>{{item.label}}</text>
</view>
</page>
button. Toggle page status, refresh regenerates actions, so " finished " is shown on the radio, " say the next sentence " is shown on the feedback and " next page " is shown on the summary. The interface text and key selects the same data to reduce inconsistencies between the two sides.
3. Access to voice and key
The front page allows for first speaking of listeners and uses and can also start directly. The practice page retains only " voice answers ", " hints ", etc.; mirror leg slide switch options, click confirmation, double-click to suspend or continue.
SpeechRecognition provided by a radio platform. Sets the Chinese, single recognition and intermediate results after creating the recognized instance; the intermediate text is shown only and the final result enters practice. The main branches of the processing of the results are listed below, which are responsible for the current session inspection, submission and clean-up, respectively:
import { SpeechRecognition } from 'speech';
const recognition = new SpeechRecognition();
recognition.lang = 'zh-CN';
recognition.continuous = false;
recognition.interimResults = true;
recognition.onresult = e => {
if (!active()) return;
let finalText = '', interim = '';
for (let i = 0; i < (e.results || []).length; i++) {
const r = e.results[i], value = r && r[0] && r[0].transcript;
if (!value) continue;
if (r.isFinal) finalText += value;
else interim += value;
}
this._voiceFinal = finalText;
this._voiceInterim = interim;
this.setData({ speechText: cut(finalText + interim).slice(-52) });
if (finalText && !interim) commit(finalText);
};
recognition.start();
Commit will release the identification first and then call route processing text. Onend may also receive a closing notice, and it is therefore necessary to check whether the current example is still valid and to prevent submission of the same sentence twice. The same is true when the page leaves.
This part goes through a pit: the voluntary cancellation of the radio also shows that “speaks are not available for the time being” and the misalignment of the old session will overwhelm the new state. Revert the old instance back to empty at the time of repair; check if it is still the current instance for each call back. Actively cancel normal return, with permission, microphone and network error tips.
When the identifying text enters route, the “suspension” of “continues” orders, etc., before distinguishing between adjustment exercises and ordinary answers. The key entrance eventually calls for the same set of operations, avoiding the maintenance of two sets of practice logic: voice and mirror legs.
The radio interface is switched separately with voicepanel, voicestate separates open, listening, waiting for final confirmation and retry. Click " Finish " to call the stop and continue to wait for the final text; cancel the callback and abort.
Mirror leg events are mapped at Enter, ArrowUp, Arrow Down and Backspace. On KeyDown prevents default, onKeyUp executes selection or confirmation; repeat arrival within 180 ms of the same key is ignored. Only the index is available for the current selection, which will be sent to act for distribution when reading the key from actions.
4. Self-management of context
Each request creates a model session, and this round of memory is entered from the page. A record of the dialogue was kept at turns, and each reply was accompanied by the objectives and questions at the time. Valid facts and history are assembled separately:
_facts() {
return this._turns
.filter(t => t.role === 'user' && t.kind === 'answer' && !t.superseded)
.map(t => ({
turnId: t.turnId, stage: t.stage,
question: t.question, answer: t.text
}));
},
_context(intent, text) {
return {
intent, userInput: cut(text),
currentStage: this.data.stage,
currentQuestion: this.data.question,
currentMode: this.data.mode,
audience: this.data.audience, focus: this.data.focus,
followups: this._followups.slice(),
validUserFacts: this._facts(),
history: this._turns.filter(t => !t.superseded).slice(-24)
};
}
Here, the full and effective answer is reserved, and history takes from the recent 24 non-obstructive dialogue. Cut is the text cleaning function in the project, which converts to a string, removes a blank at the end and limits the length. Questions and answers are saved in pairs, and it is only then that the “this table” will know which questions it answers.
Both materials are useful: ValidUserFacts gives original user words that can be used in writing, and hestory helps models understand questions and answers and practice changes. The system alert explicitly treats history and user text as information to be analysed and does not implement the instructions it requires to invent experiences and change rules. Upon receipt of the new response, ask first entered it in the record and then assembled context, so the current sentence is also included in this request.
"It's too hard" to record "adjust" and "assist" for an assistant, without going into validUserFacts. When the user repeats, the original answer and the corresponding feedback is marked and the rest is retained; the current round is emptied when restarting. This will allow for adjustments to the practice methodology and identify the material used to summarize.
The mark is used and the original record is not directly deleted. The corresponding assistant feedback is linked to the answer through the parentTurnId and is excluded when restatement is made. Debugging can still trace what was originally mentioned and only entries that are not invalidated are read at normal generation.
The community book corner is used to test the person ' s mini-certification: the model starts with a description of the person responsible for returning the registration and bringing the new person, and then asks about the experience of the new person.
After adding, “The newcomer often misplaces the returned book, and I make a list of locations”, the next question becomes, “Did there be any specific change in the accuracy or efficiency of the returned book when the newcomer used it?”
5. Modified models recheck
Call for the built-in LanguageModel. The system hint requires that only one information gap be found each time and that JSON be exported, including Qastion, feedback, action, stage, Mode, hint, etc. field. Specific questions are generated by models and the application is checked.
The request distinguishes between the intention: the start of the start, the answer to the answer, the adjust to handle tips, difficulties and time changes. The same sentence, “Give me an example”, will be followed by different details. The request is for the current target, the system hint is for the model to explain the adjustments to the exercise, and the page displays the change of practice in ModeReason.
The core of the matching call can be taken from the following. Complete realization also includes timeout, request number and log:
import { LanguageModel } from 'language-model';
if (await LanguageModel.availability() !== 'available') {
(a) Throw new Error ('Model is not currently available');
}
const session = await LanguageModel.create({
initialPrompts: [{ role: 'system', content: COACH_SYSTEM }]
});
try {
const raw = await session.prompt(JSON.stringify(job.payload));
const result = coachResult(raw, job.payload);
this._applyCoach(result, job);
this._refresh();
} finally {
session.destroy();
}
CoachResult analyzes JSON and then examines actions, target ranges, problems and practice patterns. Followup to the current target, the advance can only reach the adjacent target, and finish requests have reached the final target and at least three effective answers. After adoption, applyCoach writes the feedback and next question on the page.
Question is empty, Mode is not allowed, difficulties are not reduced and can be invalidated. The interface only accepts the results after validation: the normal answer first shows the feedback and the next question, while the current question is updated directly by the start or adjust. JSON here has the agreement between the page and the model, which is still coming from this generation.
These restrictions also limit “too hard” to “two minutes”. The difficulty should preserve the current objective, while streamlining would allow access to adjacent objectives. The paragraph in the actual verification is:
const stay = x.action === 'followup' && stage === payload.currentStage;
const shorten = x.mode === 'compact' && x.action === 'advance'
&& stage === payload.currentStage + 1;
if (!stay && !shorten) {
(a) Throw new Error (`tips or difficulties should remain in the original target and streamlined models can enter the adjacent target');
}
I initially limited all of my adjust to the original objective, and even reasonable streamlining arrangements were blocked. When judged separately, “too hard” returns the complete sentence surrounding the control table: “with this table, the newer (reaction/word), (change of status)”.
And again, “two minutes left”, the model cuts to the compact, asking for the greatest help to new volunteers and asking to sum up in one sentence. The requirement to shorten the exercise is expressed here, without counting down.
The feedback given in the sentence is only indicative. The system requires that the model be based only on the facts provided by the user, and that no accuracy, efficiency or percentage can be added to the text without any statistics.
6. Separate summary generation
finish creates an independent task, which is then assigned to the same executing function, when the user has answered or volunteered to request a summary:
const job = {
kind: 'summary',
payload: this._context('summary',
' Please synthesize the valid answers of this round to produce a summary and a practiced self-presentation. I'm sorry.
};
this._lastJob = job;
return this._execute(job);
execute selects SUMMARY SYSTEM bykind and verifies its return. The summary calls for the full range of advantages of overview, stengths, improvements, introactivity, and nextPractice, with merit and improvements with implementable recommendations.
If this round does not answer effectively, finish will stop first. When a summary is actually issued, the input remains the whole round of context, with the system requirement being replaced by a rounding task. The point and basis of the advantage array are separate, improving the point and suggestion of the array, and the page can be read in order of field.
The volunteers finally added: “The checklist allows the newcomers to find their own place to return, without asking me repeatedly. I want to take you on duty for the first time.” The resulting introductions, which combine responsibilities, practices and help, end with “my goal” and do not capture hope as what has been achieved.
The interface groupes the overall judgement, the presentation into a draft and the next exercise, and then removes the pages by text length. The group happens to be three pages and the other rounds change. You have encountered the result of the interface, but only the title of the page, and finally amends the list container and then checks the contents page by page.
Structured output can also fail. A maximum of two attempts are made; errors and the last original output are corrected with the original context when the format or field is irregular. The answer to the question is reserved and the retry entrance. Appearance waits a maximum of 35 seconds, summing up 45 seconds, so that the interface does not stop indefinitely.
The second request would add an extraput Repair with a specific error, the last output after the break, and would require the same true context to be used. The model is not available or is waiting for timeout to close the experiment. Waiting for return through the Promise.race comparison model and for the timeout mission, technically clearing the timer and destroying, and cleaning up both success and failure. These branches are recorded, and retry continues to use the original assignment without requiring the user to repeat the full period of experience.
7. Testing and loading
Saves the code and runs a round of simulation debugging: answers questions, reduces difficulties, shortens exercises, and eventually produces summaries. Another set of experiences to confirm that questioning and writing changes with content and to check whether mirror leg clicks, slides and pauses are normal.
After the simulator runs, basic information is completed and AIX is packaged on the “real machine debugging” page, followed by presentations, uploading intercepts and presentation videos on the “advertising” page for review. At present, my status of AI agent has been shown to be “on board” in IAU Studio.
This time, from the platform creation project to access voice, organization of context, to model queries and independent summaries, a self-presentation companion exercise was completed that was able to practice the full wheel. The fragmented experience that the users have described, supplemented by follow-up questions, can eventually be translated into an introduction that continues to practice, and that is what I want to do.
Welcome.
Auto-fetched and translated by AI Atlas. All rights belong to the original author.