资讯动态

astron-rpa AI Service 翻译 Prompt 深度解析:中文工程名一键生成英文 snake_case 标识符

发布时间:2026/10/13 9:30:45 来源:尧图企业网站定制
工作流自动化低代码桌面应用AI Agent后端【免费下载链接】astron-rpaAgent-ready RPA suite with out-of-the-box automation tools. Built for individuals and enterprises.项目地址https://gitcode.com/gh_mirrors/as/astron-rpa点击查看免费下载导读在 astron-rpa 仓库的 AI 服务backend/ai-service中translate_prompt.md是一个面向工程名称翻译场景的精简提示词模板它让大模型把中文工程名翻译成简短、保留原意、全小写且用下划线分隔单词的英文标识符。本篇文章将完整剖析该模板的原文、它背后的占位符替换机制$namesafe_substitute、Prompt 注册中心prompt_dict/format_prompt以及对外 HTTP 调用方式POST /v1/chat/prompt。读完本文你将掌握该模板在 RPA 组件命名场景中的实际用法、完整的 curl 调用示例、请求参数含义、积分计费规则以及如何仿照它扩展新的原子能力 Prompt。一、模板原文与四条硬性翻译约束模板文件位于 backend/ai-service/app/prompts/translate_prompt.md全文如下与仓库原文件逐字一致你是一个翻译大师你擅长把下面的中文的工程名称翻译成英文要求简短干练但保持原有的意思单词和单词之间用下划线分隔所有字母均为小写 工程名称$name 请你只返回翻译后的结果这份模板虽然只有 4 句有效指令但每一句都对应一条可被大模型严格执行的约束也是后续校验输出的依据约束原文表述输出要求角色设定你是一个翻译大师限定翻译专业语境抑制泛化回答精炼简短干练优先用最少的单词表达核心语义语义保留保持原有的意思不允许意译过度、丢失原工程名含义命名风格单词之间用下划线分隔对应 snake_case例如user_management_system大小写所有字母均为小写严格全小写不允许 CamelCase / PascalCase输出纯净只返回翻译后的结果不附加解释、引号或任何多余文本便于下游直接解析其中只返回翻译后的结果这一句在工程上非常重要它保证了接口响应可以直接作为标识符使用无需再写正则清洗代码。这一点在 backend/ai-service/app/routers/v1/chat.py 的响应组装逻辑中可以看到后端直接取data[choices][0][message][content]放入响应体data字段返回。二、占位符机制$name与safe_substitute模板中出现的$name是变量占位符实际内容由调用方在请求参数中注入。模板文件本身不包含任何处理逻辑真正的替换发生在 Prompt 加载工具中。2.1 模板注册与读取backend/ai-service/app/utils/prompt.py 维护了一个 Prompt 注册表prompt_dict其中translate映射到translate_prompt.md见 prompt.py 第 10 行prompt_dict { # 主要原子能力 translate: translate_prompt.md, code_review: code_review_prompt.md, document_summary: document_summary_prompt.md, sql_generator: sql_generator_prompt.md, business_analysis: business_analysis_prompt.md, email_writer: email_writer_prompt.md, # 招聘相关 recruit_keywords: recruit/recruit_keywords_prompt.md, ... }模板文件统一存放在 backend/ai-service/app/prompts 目录下PROMPTS_DIR通过Path(__file__).parent.parent / prompts动态定位与代码位置解耦。2.2 替换函数format_promptformat_prompt负责把模板渲染为最终提示词核心实现基于 Python 标准库string.Templatedef format_prompt(prompt_type: str, params: dict {}) - str: 格式化prompt模板 from string import Template template_file_name prompt_dict.get(prompt_type) if not template_file_name: raise ValueError(fUnknown prompt type: {prompt_type}) template_file_path PROMPTS_DIR / template_file_name if not template_file_path.exists(): raise FileNotFoundError(fPrompt template not found: {template_file_path}) # 读取文件 content template_file_path.read_text(encodingutf-8) template Template(content) return template.safe_substitute(**params)关键点使用safe_substitute而非substitute当params中缺少某个占位符时safe_substitute不会抛KeyError而是保留$name原文避免因参数缺失导致整个请求崩溃相对的缺点是模板中残留的$name会被原样发给大模型。$是模板语法保留符如果未来在模板正文中需要书写美元金额如费用为 $100必须写成$$100转义这一点在维护模板时需要格外注意。参数以 dict 传入对translate场景只需{name: 用户管理系统}渲染后即得到带具体工程名的完整提示词。2.3 渲染效果示例假设name 用户管理系统渲染后的最终提示词为你是一个翻译大师你擅长把下面的中文的工程名称翻译成英文要求简短干练但保持原有的意思单词和单词之间用下划线分隔所有字母均为小写 工程名称用户管理系统 请你只返回翻译后的结果示例模型输出示意非仓库实际响应user_management_system。最终输出的英文标识符可直接用于组件目录名、包名或环境变量名等场景。三、对外调用方式POST /v1/chat/prompt翻译模板通过 AI Service 的预设 Prompt 接口对外暴露。接口定义位于 backend/ai-service/app/routers/v1/chat.pyrouter.post(/prompt) async def chat_prompt( params: ChatPromptParam, points_context: PointsContext Depends( PointChecker( get_settings().AICHAT_POINTS_COST, PointTransactionType.AICHAT_COST ), ), ): ...路由注册在 app/main.pyapp.include_router(chat.router, prefix/v1)因此完整路径为POST /v1/chat/prompt。3.1 请求参数ChatPromptParam参数 Schema 定义在 backend/ai-service/app/schemas/chat.pyclass ChatPromptParam(BaseModel): model: str Field(DEFAULT_MODEL, examples[DEFAULT_MODEL]) stream: bool Field(False, examples[True]) prompt_type: str Field( ..., examples[translate, code_review, document_summary, sql_generator, business_analysis, email_writer], description预设prompt类型, ) params: Optional[dict] Field( None, examples[ {name: 用户管理系统}, # translate ... ], descriptionprompt模板参数, )字段类型必填说明modelstring否使用的模型名默认maas/deepseek-v3.2见 schemas/chat.py 第 5 行streamboolean否是否流式返回默认falseprompt_typestring是预设 Prompt 类型translate即为本文主题paramsobject否注入模板的参数translate 场景传{name: 工程名}3.2 完整 curl 调用示例请求头需携带用户身份详见下文认证与积分一节示例如下curl -X POST http://localhost:8010/v1/chat/prompt \ -H Content-Type: application/json \ -H X-User-Id: 2 \ -d { model: maas/deepseek-v3.2, stream: false, prompt_type: translate, params: {name: 用户管理系统} }3.3 响应结构非流式响应经过后端二次封装返回统一标准结构StandardResponse定义于 backend/ai-service/app/schemas/init.py{ code: 0000, msg: 调用 translate prompt 成功, data: user_management_system }code0000表示成功5001表示错误ResCode枚举。data直接取自上游choices[0].message.content即模型返回的翻译结果字符串。3.4 错误处理路由层有两类显式校验chat.py 第 57-68 行未知 prompt_typeparams.prompt_type not in prompt_dict时返回400并附带当前可用类型列表{detail: Unknown prompt type: xxx. Available types: [translate, code_review, ...]}模板文件缺失format_prompt内部抛出的FileNotFoundError会被捕获并转为400。上游调用异常模型 API 超时返回504大模型调用超时请稍后重试其他错误按上游状态码透传见 services/chat.py。四、认证与积分计费机制/v1/chat/prompt不是一个免费接口它通过PointChecker依赖注入执行积分检查与扣费这也是模板能力被纳入商用平台管理的一部分。4.1 用户身份解析用户 ID 从请求头解析支持两种头名见 backend/ai-service/app/dependencies/init.py优先读取X-User-Id其次读取user_id两者都缺失时返回401 Missing X-User-Id or user_id header.。4.2 积分检查与扣除PointChecker见 backend/ai-service/app/dependencies/points.py在请求进入时先尝试为用户发放月度积分内部走 Redis开销极小读取缓存积分若低于本次消耗值points self.points_cost返回403 Insufficient points.返回PointsContext在请求成功后由路由调用await points_context.deduct_points()完成扣费chat.py 第 85 行。翻译能力归属于AICHAT_COST交易类型单次扣费金额由AICHAT_POINTS_COST配置决定默认值为100见 backend/ai-service/app/config.py 第 19 行。运维侧可通过环境变量调整例如AICHAT_POINTS_COST100注意该接口先检查、成功后再扣费即调用失败模型异常、模板缺失等不会扣积分只有正常返回时才产生消费记录。五、在 RPA 工程命名场景中的实际应用回到 astron-rpa 仓库本身翻译模板的价值与工程命名强相关。从仓库目录结构可以观察到engine/components 下的组件普遍采用astronverse-模块名的 snake_case 命名例如astronverse-database、astronverse-browser、astronverse-encrypt、astronverse-email、astronverse-excel、astronverse-verifycode等。可以推断当业务侧提供的是中文工程名如数据库组件浏览器组件时translate模板能把这些中文名规整为与上述命名风格一致的小写下划线标识符供后续目录创建、包导入、配置文件引用使用。典型接入方式有两种单次调用通过/v1/chat/prompt接口批量翻译若干工程名人工确认后落盘程序化嵌入在自动化流程中把待创建工程的中文名作为params.name动态注入将返回结果直接用作目录/包名实现中文需求 → 规范标识符的链路闭环。由于模板强制要求所有字母均为小写且单词间用下划线翻译结果天然满足 Python 包名、文件系统目录名、数据库表名等场景的常见约束这也是该模板区别于普通中英翻译 Prompt 的核心设计点。六、模板扩展指南注册新的原子能力translate模板是prompt_dict中主要原子能力的典型代表了解它的接入方式即可按同样套路扩展新能力新增模板文件在 backend/ai-service/app/prompts 目录或其子目录如recruit/、smart/下创建xxx_prompt.md正文中使用$param形式声明占位符注册类型在 prompt.py 的prompt_dict中增加一行映射如my_new_ability: my_new_ability_prompt.md更新 Schema 示例可选在 schemas/chat.py 的paramsexamples 中补充新能力的参数示例便于 Swagger 文档展示默认文档地址http://localhost:8010/docs复用积分链路新能力若同样走PointChecker会沿用AICHAT_COST计费与AICHAT_POINTS_COST扣费无需额外改动。此外format_prompt也被智能组件服务复用在 app/routers/smart_component.py 中通过format_prompt(request.sceneCode, {})按场景码加载对应模板作为 system 消息。这进一步说明translate_prompt.md所处的 Prompt 体系是整个 AI Service 原子能力的通用底座而非孤立的翻译功能。七、使用前提与注意事项运行环境接口由 AI Service 提供需先按 backend/ai-service/README.zh.md 配置AICHAT_BASE_URL、AICHAT_API_KEY、MySQL、Redis 等环境变量并执行uv run python run.py dev启动默认端口8010。依赖模型默认模型为maas/deepseek-v3.2不同模型对只返回结果指令的遵守程度可能有差异若响应夹杂解释性文字可考虑调低temperature接口允许范围 0.0~2.0以提升输出稳定性。参数缺失行为由于采用safe_substitute若params未传name模板中的$name会原样进入提示词模型输出将不可控——调用方应在业务侧做好参数校验。流式模式stream: true时接口直接透传上游text/event-stream响应见 services/chat.py翻译结果需由调用方自行解析 SSE 数据此时响应体不再是上述StandardResponse结构。测试佐证仓库的接口测试覆盖了非流式与流式两种调用路径见 tests/routers/test_chat.py可作为接入回归验证的参考。结语translate_prompt.md用最短的指令把中文工程名 → 英文 snake_case 标识符这一高频命名需求封装为 AI Service 的原子能力模板负责约束输出格式prompt_dictformat_prompt负责模板注册与参数注入/v1/chat/prompt接口负责对外服务并接入积分计费。理解这一整套链路你就能在 astron-rpa 的 AI 服务体系中自如地复用、校验和扩展各类预设 Prompt把大模型的输出稳定地工程化、产品化。赞分享工作流自动化低代码桌面应用AI Agent后端【免费下载链接】astron-rpaAgent-ready RPA suite with out-of-the-box automation tools. Built for individuals and enterprises.项目地址https://gitcode.com/gh_mirrors/as/astron-rpa点击查看免费下载相关推荐Astron-RPA AI 服务工程名翻译 Prompt 模板解析从 snake_case 输出约定到 /v1/chat/prompt 调用链Astron RPA AI 服务工程名翻译 Prompt 模板解析从 snake_case 输出约定到 /v1/chat/prompt 调用链 导读 本文聚焦工作流自动化桌面应用AI 应用企业应用后端前端UMAP precomputed_knn 实战指南复用 K 近邻图加速参数搜索与精确复现UMAP precomputed_knn 实战指南复用 K 近邻图加速参数搜索与精确复现 本文围绕 umap learn 仓库中 doc/precompute工作流自动化低代码桌面应用AI Agent后端astron-rpa 中的代码审查 Prompt基于 AI Service 预设模板实现 LLM 代码审查astron rpa 中的代码审查 Prompt基于 AI Service 预设模板实现 LLM 代码审查 导读 本文围绕 astron rpa 仓库中 AI工作流自动化桌面应用AI 应用企业应用后端前端上一篇GEOFlow一键部署脚本使用教程在VPS上三步搭建生产级GEO内容平台下一篇Ghidra MCP 函数文档化工作流V5详解7步打造生产级逆向文档的完整流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑