当前位置: 首页 > news >正文

AutoDev 1.1.3 登场,个性化 AI 辅助:私有化大模型、自主设计 prompt、定义独特规则...

在过去的半个月里,我们为开源辅助编程工具 AutoDev 添加了更强大的自定义能力,现在你可以:

  • 使用自己部署的开源大模型

  • 自己配置 Intellij IDEA 中的行为

  • 自定义开发过程中的规范

当然了,如果您自身拥有开发能力的话,建议您自己基于 AutoDev 定制。毕竟,为 AutoDev 添加太多的自定义能力,会导致架构的复杂性螺旋上升。

AutoDev 现在已支持多语言(不同语言能力有所差异)、多 IDE,因此只在 JetBrains 任何一个本地 IDE 的插件市场里,搜索 AutoDev 并安装 即可。

d9965f80fe80299bfd885b6392635d32.png

自定义大语言模型

343cef62f0af3cd5b9b11cb4390b4b5f.png

我们通过 Thoughtworks 正在的开源底层模型平台 Gluon Meson,构建了一个统一的大语言模型接口。随后,我们测试了切换几个开源模型:清华大学 ChatGLM2-6B、阿里云通义千问 Qwen-7B 等,均可以流畅使用 —— 模型太小,在诸如需要上下文补全的能力没有那么强。

考虑到提供更好的开发者体验,现在的 AutoDev 只支持服务端的流式返回,为此我们在源码中提供了一个 FastAPI + EventSourceResponse 的示例作为参考。

请求结构

我们发送给服务端的接口将类似于:

{"messages": [{ "role": "user", "message": "I'm Nihillum." },{ "role": "assistant", "message": "OK" },{ "role": "user", "message": "What did I just say?" }]
}

根据现有的 #25 issue 设计情况,我们也将在未来提供更多的可配置的 headers 等

响应结果

对于结果来说,为了方便支持不同的模型,我们使用了 JSON Path 来处理返回结果。如下是一个简单的 JSON Path 的配置示例。

$.choices[0].content

随后,将从 content 中取值,并处理。

详细见 README.md 中的 Custom LLM Server 部分。

自定义 prompt 行为项

为了配合不同大模型的能力差异,我们参考了 JetBrains AI Assistant 的设计,也在 AutoDev 中引入了自定义行为的方式,即你可以自定义自己的行为,并配置 prompt 的上下文。诸如于,你可以自定义一个将 Rust 转为 Kotlin 语言的行为项:

975208c35460b1788cbe838ecac86742.png

为此,只需要添加一个对应的 JSON 配置即可:

{"prompts": [{"title": "\uD83C\uDDE8\uD83C\uDDF3 翻译成 Kotlin","autoInvoke": false,"matchRegex": ".*","priority": 1000,"template": "Translate the following code to Kotlin.\n${SIMILAR_CHUNK}\nCompare these snippets:\n${METHOD_INPUT_OUTPUT}\nHere is the code:\n${SELECTION}"}]
}

其中的 priority 是用来配置在菜单中的顺序,template 则是发送给 LLM 的 prompt。除此,在 template 中,为了更好的支持一些高级的特征,我们配置了一些上下文变量:

  • ${SELECTION}:所选代码

  • ${SIMILAR_CHUNK}:相似的代码片段

  • ${METHOD_INPUT_OUTPUT}:方法的输入与输出

规范变量:

  • ${SPEC_*}:从配置文件的规范部分加载规范,比如 ${SPEC_controller}将会从配置中加载 spec.controller

详细见 README.md 中的 Custom Action 部分。

自定义规范

在自定义操作项中,我们会定义一些不同任务的配置规则,诸如于 SPEC_controller 便会从 spec 中读取对应的内容,作为配置 prompt 的一部分:

{"spec": {"controller": "- Use BeanUtils.copyProperties in the Controller for DTO to Entity conversion.\n- Avoid using Autowired.\n- Use Swagger Annotations to indicate API meanings.\n- Controller methods should capture and handle business exceptions, rather than throwing system exceptions.","service": "- Service layer should use constructor injection or setter injection; avoid using the @Autowired annotation.","entity": "- Entity classes should use JPA annotations for database mapping.\n- The entity class name should match the corresponding database table name. Entity classes should use annotations to mark primary keys and table names, for example: @Id, @GeneratedValue, @Table, etc.","repository": "- Repository interfaces should extend the JpaRepository interface to inherit basic CRUD operations.","ddl": "- Fields should be constrained with NOT NULL constraints to ensure data integrity."}
}

然后,你就可以愉快地进行 AI 辅助编程了。

小结

031970ce43065f82f57657fe2b132fbe.png

如果大家遇到什么问题或者有什么好玩的新需求,欢迎来 GitHub 讨论:https://github.com/unit-mesh/auto-dev

http://www.lryc.cn/news/132479.html

相关文章:

  • win11 python 调用edge调试过程
  • DS-排序回顾
  • clion软件ide的安装和环境配置@ubuntu
  • Cpp学习——类与对象3
  • 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)
  • ahooks.js:一款强大的React Hooks库及其API使用教程(四)
  • FOSSASIA Summit 2023 - 开源亚洲行
  • QT 基本对话框
  • ​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.
  • Azure静态网站托管
  • LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表
  • 常用消息中间件介绍
  • 装饰器读取不到被装饰函数的参数-已解决
  • python爬虫爬取中关村在线电脑以及参数数据
  • chatGPT-对话爱因斯坦
  • 嵌入式软件开发中的数据类型转换
  • The Go Blog 01:反射的法则(译文)
  • Visual Studio Code前端开发插件推荐
  • jps(JVM Process Status Tool):虚拟机进程状况工具
  • 初阶c语言:实战项目三子棋
  • 计网第三章(数据链路层)(三)
  • 蓝桥杯每日N题 (砝码称重)
  • Opencv 视频的读取与写入
  • LeetCode 833. Find And Replace in String【字符串,哈希表,模拟】1460
  • Cesium轨迹漫游及视角切换
  • 构建去中心化微服务集群,满足高可用性和高并发需求的实践指南!
  • 开集输出和开漏输出
  • 解决内网GitLab 社区版 15.11.13项目拉取失败
  • 【MySQL--->表的约束】
  • github中Keyless Google Maps API在网页中显示地图和标记 无需api key