LLMOP 面向LLM编程,让你的接口和代码对LLM更友好!

news2024/9/25 13:18:26

LLM Oriented Programming

ApiHug Lint 检查报告 - ApiHugApihug quality lint tools to check api design violationsicon-default.png?t=N7T8https://apihug.com/zhCN-docs/tool/apihug-lint

​LLMOP

面向LLM编程(LLMOP)代表了我们构思和设计API的范式转变。该方法旨在创建不仅对应用程序有效,而且对人类和大型语言模型(LLM)都可理解的API:

  1. 易读性APILLMOP框架下的API设计注重人类可读性,采用清晰、描述性强的命名和文档,便于开发者和利益相关者理解API功能和目的,促进团队协作。
  2. OpenAPI规范整合LLMOP与OpenAPI规范结合,实现API的标准化生成和验证,确保文档和工具的一致性和易用性。
  3. 重心API设计LLMOP将API设计视为软件开发的关键环节,更多关注用户需求和业务目标,打造易于使用、维护和演进的API。
  4. 交互性和反馈循环LLMOP设计的API融入交互功能,利用LLM为开发者提供实时反馈和建议,创造动态的开发体验,提升生产力和创新性。
  5. 多模态交互支持LLMOP API支持多种交互方式,包括文本、语音和视觉输入,提高API的可访问性和用户友好度。

总之,LLMOP通过使API开发更具包容性,改变了API开发的方式。通过优先考虑可读性、利用OpenAPI等标准、关注深思熟虑的设计、增强交互性和支持多模态交互,我们可以创建不仅强大而且直观易用的API。

这种方法为未来铺平了道路,使API在软件应用和人类理解中都发挥重要作用。

​Summary

随着大型语言模型(LLM)的兴起,我们站在了技术革新的前沿。

这些模型不仅为组织带来了前所未有的机遇,也带来了整合现有资产的挑战。

现有API和数据积累,在LLM的辅助下,可以转化为推动创新和增长的强大动力。

然而,整合这些资产并非易事。在融合过程充满挑战,我们对LLM的潜力和边界尚未完全理解,同时现有资产中也存在质量不一的问题。面对这些难题,我们提出了两种策略:

  1. 绿地重建:一种彻底的重建策略,适合独立或低耦合业务,尽管需要大量投资且风险较高,但能实现快速转型。
  2. 渐进整合:通过适配器和桥接技术逐步整合现有资产,保持业务连续性,同时引入新技术,为多数业务提供灵活且风险可控的方案。

通过精心设计的整合计划,可以确保在LLM时代中,组织能够有效地转化并优化其资产,实现持续的创新和发展。

在API开发领域,采取自顶向下的策略,强化API风格指南的执行和严格的lint工具集成,保持API描述的有序性和清晰性,确保它们易于管理且一致:

  1. 标准强化:实施全面API风格指南,采用自顶向下方式,确保编码约定和设计原则的统一性。
  2. Lint合规性检查:利用lint工具自动识别并纠正风格偏差,预防错误并维护代码质量。
  3. CI流水线集成:将lint集成到CI流水线中,确保新代码在集成前自动经过标准合规性审查。
  4. 开发者教育:强调遵守API风格指南的重要性和lint的优势,+ 简单易学!

这些方法不仅维护了API的完整性,而且培养了一个纪律严明、高标准的开发环境,从而形成了坚固、可扩展且可靠的API,这些API构成了我们软件架构的基础。

​ApiHug

在 SDK 1.0.8-RELEASE 后我们引入了简单Lint 工具, 使用简单的几个 配置 rule,检查你的API设计规范(未来可以持续添加)。

在API 设计规范上,其实业界有 stoplight style 开源 spectral来设计和调整自己公司的API设计行为规范。 这里面包含如 url 如何设计,命名用那种风格(比如羊肉串还是驼峰?);由于ApiHug的swagger 文档是通过DSL 编译后生成, 这部分尚比较容易控制;

所以 ApiHug 对于 API 设计的控制比较简单:

  1. 描述的有,API 描述, 字段描述, 常量的描述, 可以限制丰富程度(目前尚不能判断表达是否达意—瞎写凑字的)
  2. RAFT RAFT里面关于API 描述(questions) few-shot 例子如:
{
  "api_name": "Gmail API - Users.getProfile",
  "api_call": "service.users().getProfile(userId='me').execute()",
  "api_version": "1.0",
  "api_arguments": {
    "userId": "The user's email address. The special value 'me' can be used to indicate the authenticated user."
  },
  "functionality": "Gets the current user's Gmail profile.",
  "env_requirements": [
    "google-auth",
    "google-auth-oauthlib",
    "google-auth-httplib2",
    "google-api-python-client"
  ],
  "example_code": "from googleapiclient.discovery import build \n from oauth2client import file, client, tools \n store = file.Storage('token.json') \n creds = store.get() \n service = build('gmail', 'v1', credentials=creds) \n results = service.users().getProfile(userId='me').execute()",
  "meta_data": {
    "description": "The Users.getProfile method of Gmail API allows for retrieving basic profile information of a user, such as the email address and account ID.",
    "documentation_link": "https://developers.google.com/gmail/api/reference/rest/v1/users/getProfile"
  },
  "questions": [
    "How can I fetch my Gmail account's email address?",
    "How can I obtain the total messages in my gmail inbox."
  ]
}

当然这个离未来和LLM 世界无缝打通还有很长的路要走, 现在是打好基础为未来联通做好储备。

​Configuration

升级步骤:

  1. SDK版本: {your_project}/gradle/libs.versions.toml 修改: apihug = "xxx" 到 1.0.8-RELEASE+ 版本;参考 apihug-demo/libs.versions.toml
  2. lint 配置: .apihuglint.properties 来自: apihug-demo-proto

在proto模块正常编译(build 或者独立 wire )完成后, 在您proto模块build({PROTO_MODULE}/build/reports/api-lint/) 目录下会多出来两个文件:

  1. report.html 报告生成
  2. report.json 报告json版本
参数列子备注
violation.limit20if violation count exceed, fail the compiler
service.name.length5min service name length
service.description.length5min service description length
service.api.name.length5min api name length
service.api.description.length20min api description length
service.api.questions.size2min api questions list size
service.api.question.length5min api single question length
message.name.length5min message name length
message.description.length5min message description length
message.field.name.length3min message field name length
message.field.description.length10min message field description length
entity.name.length5min entity name length
entity.description.length5min entity description length
entity.column.length5min entity column length
entity.column.description.length5min entity column description length
entity.table.explicitfalseTable name should set explicitly
entity.column.explicitfalseTable name should set explicitly
eum.name.length5min Enum name length
eum.description.length5min Enum description length
eum.item.name.length5min Enum item name length
eum.item.description.length5min Enum item description length

​Report

HTML

ApiHug lint report sample

Json

[
{
  "proto" : "com/apihug/sample/proto/api/demo001/api.proto", 
  "kind" : "Service", 
  "target" : "VIPService#GetMeSth", 
  "rule" : "Service method description too short", 
  "description" : "Given [Get me something] expect >= 20"
}
]

​Refer

  1. stoplight-spectral
  2. real-world-rulesets
  3. gorilla RAFT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TRIZ理论在传感技术创新中的应用优势

传感技术作为连接物理世界与数字世界的桥梁,正以前所未有的速度推动着社会进步与产业升级。而TRIZ(发明问题解决理论)这一强大的创新方法论,也开始悄然在传感技术领域绽放异彩,为创新者提供了前所未有的设计灵感与解决…

CCF CSP题解:因子化简(202312-2)

链接和思路 OJ链接:传送门。 问题重述 本题基于一个基本事实,即任何一个大整数 n n n都可以唯一地分解为如下形式 n p 1 t 1 p 2 t 2 ⋯ p m t m n p_1^{t_1} \times p_2^{t_2} \times \cdots \times p_m^{t_m} np1t1​​p2t2​​⋯pmtm​​其中…

软件测试 | 测试用例Ⅱ

基于需求的设计方法 测试人员接到需求后,要对需求进行分析和验证,从合理的需求中进一步分析细化需求,从细化的需求中找出测试点,根据这些测试点再去设计测试用例。 上面就是根据需求文档先设计出来的初步的测试用例,而…

数据库表太多,如何快速定位到需要字段

MySQL数据库表太多,如何快速定位到需要字段 问题: 数据库的表太多,自己只通过后端代码,知道数据字段名。现在想搜索数据库中所有表,查到对应字段,实现报表开发。 一、方案 在MySQL数据库中,如…

【web网页制作】中国传统文化书法主题html网页制作开发div+css(6页面附效果源码)

HTMLCSS传统文化主题书法网页制作 🍔涉及知识🥤写在前面🍧一、网页主题🌳二、网页效果菜单切换效果PageA、整体页Page1、主页Page2、行书页Page3、楷书页Page4、隶书页Page5、篆书页Page6、草书页 🐋三、网页架构与技术…

微前端集成优化:让所有子应用体积更小,加载更快!

简介 随着前端的日益发展,微前端架构越来越受到青睐。它通过将前端应用拆分为多个独立的子应用,每个子应用可以独立开发、部署和运行,从而提升了开发效率和团队协作。目前主流的微前端方案应该是qiankun了。 以笔者公司为例,采用…

AI在医学领域:基础模型和视觉-语言模型在计算病理学应用概述

近年来,人工智能(AI)基于方法在计算病理学(CPath)领域中的应用迅速增长,这主要得益于数字幻灯片扫描仪的广泛采用。因此,大规模的全幻灯片图像(Whole Slide Images, WSIs&#xff09…

Linux内存管理(1)——MMU内存管理单元及Buddy算法详解

文章目录 1.内存管理单元(MMU)1.1 MMU的作用1.2 MMU相关概念1.3 ARM处理器访问内存过程 2.内存优化之buddy伙伴算法2.1 背景2.2 优缺点2.2 原理 最近复习Linux内存管理部分,简单将自己的理解记录一下 内存:包括随机存储器&#xf…

委托 by 操作符

属性委托给属性 使用 by:: 操作符,代表调用系统内置的方法。 读:getVaule 写:setValue 共享同一个数据。 /*** 属性委托给属性* by:: 系统内置的方法,非自定义的* 共享同一个数据*/ var num:Float 9999.0f/*** newNum属性委托…

黑神话悟空-画质提升+帧数提升+超宽屏+写实画质补丁+无光追也可拥有的超强画质

超真实画质提升!!! 下载地址:https://pan.quark.cn/s/529202fbbbef

Python | Leetcode Python题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目: 题解: import random class RandomizedCollection:def __init__(self):"""Initialize your data structure here."""self.table {}self.ns []def insert(self, val: int) -> bool:"""Inserts …

WPF 手撸插件 七 日志记录(二)

1、本文使用Serilog进行记录日志,目前想只用log4net进行日志记录,但是Serilog有想学习一下,所有这里使用控制台项目来学习一下Serilog。我使用的还是.Net Framework 4.5. 2、NuGet 安装Serilog 2.12.0、Serilog.Sinks.Console 4.1.0&#xf…

智能学习辅助系统——后端部分

目录 前言 一、准备工作 1.需求&环境搭建 1.1需求说明 1.2环境搭建 2.开发规范 2.1 开发规范-REST 2.2 开发规范-统一响应结果 3.开发流程 二、部门管理 1.查询部门 (1)原型和需求 (2)接口文档 (3&…

阿里巴巴1688 阿里228滑块 网站分析(不涉及逆向)

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我…

R语言统计分析——回归模型深层次分析

参考资料:R语言实战【第2版】 本文主要讨论回归模型的泛化能力和变量相对重要性的方法。 1、交叉验证 从定义上看,回归方法就是从一堆数据中获取最优模型参数。对于OLS(普通最小二乘)回归,通过使得预测误差&#xff0…

【书生大模型实战营(暑假场)】进阶任务六 MindSearch CPU-only 版部署

进阶任务六 MindSearch CPU-only 版部署 任务文档GitHub CodeSpace硅基流动HuggingFace Space 任务: MindSearch 部署到Github Codespace 和 Hugging Face Space 笔者部署在 HuggingFace 的 MindSearch 模型链接为:ccdgyro/MindSearch 1 开发机创建和环…

重塑视频监控体验:WebRTC技术如何赋能智慧工厂视频高效管理场景

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。 EasyCVR平台不仅兼容多种主流标准协议及私有协议/SDK的接入(如&…

汽车线束品牌服务商推荐-力可欣:致力于汽车连接线束和汽车连接器的开发、生产和应用

汽车线束品牌服务商推荐-力可欣:致力于汽车连接线束和汽车连接器的开发、生产和应用

医院建筑的电气设计——保障医疗质量与安全的坚固基石

医疗资源与水平的提升成为了衡量民生福祉的重要标尺。随着一批批新建医院及既有医院的华丽蜕变,从社区医院到综合医院,再到医疗城、医疗集聚区的崛起,不仅彰显了政府对民生健康的深切关怀,也预示着我国医疗体系正迈向智能化、高效…

C++初学(17)

17.1、字符函数库cctype C有一个与字符相关的、非常方便的函数软件包,它可以简化如确定字符是否为大写字母、数字或标点符号等工作。这些函数的原型是在头文件cctype中定义的。如果ch是一个字母,则isalpha(ch)函数返回一个非零值,否则返回0。…