AI助力个人开发:7天完成医疗文献检索小程序
哈哈
如果一个人很难开办软件公司,那么不同技术是一个很难逾越的鸿沟。
大模型来了,我尝试着一个人开发了微信小程序、私有化部署了大模型,还搞了一堆的数字模拟人出来。突然看到,无穷无尽的开发任务一个个在奔涌而来,我不是在做梦,一个人的软件公司的架构越来越清晰。
来吧,有感兴趣的吗?有对C++、python、VUE、node.js等还有一系列开发工具的使用说明书头疼的嘛。哈哈哈,来吧,一个人可以搞定的。
一个人用7天业余时间搞定一个小程序
我就用我做的一个微信小程序智能体来做个示范,讲述一下如何用AI大模型帮你搞定软开中的所有问题。
先声明我再次之前没有开发过小程序,也没有在微信平台开发的经验。
本地化部署DS
首先,我在自己的电脑上部署了DS,运行了CODER大模型。
我的电脑配置是i7+windows11+nvidia 3070(8G)+64G,这个的投入成本在3年前是16000元。
以前我的电脑上全是yolo的算法,完成各类机器视觉工业检测的项目。现在用的最多的是DS。
我先描述一下这个小程序的功能。
海外公开数据集的查询,提供关键字的分析、中英文互译、综述生成、word下载。这个详细的描述在我的另一篇文章中有阐述。《如何建立一个可以自动从pubmed检索指定的数据并填充到本地数据库的工具?如何建立一个可以自动从pubmed检索指定的数据并填充到本地数据库的工具?_pubmed 转接口-CSDN博客
利用大模型完成架构搭建
我在构思这个智能体时,考虑到自然语言对关键字的分割,生成检索用的关键字。这个需要调用DS,提供相关功能。检索关键字要准确投入到数据库API,对返回的结果要进行去重和筛选,这样也需要DS对其进行数据清洗。输出的结果要进行中文翻译,同样用DS解决。生成综述的过程也需要DS,给他提示词,要求他按格式完成即可。最后话可以生成word版本的综述文章下载。
说实在的,我在此之前没有相关开发经验,不知道能否实现,就问了DS。每一步如何实现,代码如何上传、如何保护API的KEY安全等问题,从一个小白逐渐完成了一个功能,最后把小程序提交上线。整个流程全是我一个人类,当然还有一个大模型的AI在帮助我。整个开发周期7个晚上。哈哈哈,程序员的通病,喜欢熬夜,一行行代码变成一项项完备的功能时,兴奋自然超过了一切。
我知道,很多程序员质疑如此操作是不是会让这个行业失去就业机会。我想这个时代需要的是更加完备和高效的工作能力,如何过一个程序员可以调用十几个AI机器人帮助他完成工作,哪个企业不喜欢呢?
利用大模型完成UI设计
对了,界面我说给我更换一个科技感强烈的,你猜,AI会怎么说?
这些似乎大家觉得也没啥,DS会干这些,给些文字建议,如何变成代码可是个头疼的事,最要命的是出了问题需要调整代码,又该如何呢?很简单啊,问DS啊。官网的DS总是说自己忙对吧,一晚上的程序调试,会要问几十个到上百个问题,用官网的DS肯定要崩溃的。这就是我为什么说要本地化部署的原因了。不厌其烦,关闭联网,拒绝透露商业机密。哈哈哈哈。
来看看DS的优秀代码能力
我让他帮我把UI代码实现一下,2分钟了,他还在写代码。你的工作就是乘机喝口茶,等他干完,按照目录一个文件一个粘进去,用ctrl+c和ctrl+v完成工作。你就偷偷乐吧。
miniprogram/├── app.js├── app.json├── app.wxss├── pages/│ ├── index/ # 首页│ │ ├── index.js│ │ ├── index.json│ │ ├── index.wxml│ │ └── index.wxss│ ├── list/ # 搜索结果页│ │ ├── list.js│ │ ├── list.json│ │ ├── list.wxml│ │ └── list.wxss│ └── detail/ # 详情页│ ├── detail.js│ ├── detail.json│ ├── detail.wxml│ └── detail.wxss└── components/ └── sci-card/ # 科技感卡片组件 ├── sci-card.js ├── sci-card.json ├── sci-card.wxml └── sci-card.wxss
看看,DS给的文件目录,你对照微信开发工具,简单吧。
搜多结果页代码:
‹ 搜索结果 ≡ <input class=\"search-input\" placeholder=\"输入新关键词...\" value=\"{{query}}\" bindinput=\"onInput\" /> <view class=\"filter-panel sci-card\" wx:if=\"{{showFilter}}\"> 时间范围 <picker range=\"{{yearRange}}\" value=\"{{yearIndex}}\" bindchange=\"changeYear\"> {{yearRange[yearIndex]}} <block wx:for=\"{{articles}}\" wx:key=\"pmid\"> <sci-card title=\"{{item.title}}\" authors=\"{{item.authors}}\" journal=\"{{item.journal}}\" year=\"{{item.year}}\" pmid=\"{{item.pmid}}\" bindtap=\"viewDetail\" data-pmid=\"{{item.pmid}}\" /> <view class=\"loading-box\" wx:if=\"{{loading}}\"> 正在加载... <view class=\"no-more\" wx:if=\"{{!hasMore && articles.length > 0}}\"> 没有更多结果了 <view class=\"empty\" wx:if=\"{{articles.length === 0 && !loading}}\"> 未找到相关文献
详情页 (pages/detail)代码:
‹ 文献详情 <text class=\"icon\" wx:if=\"{{isFavorite}}\">★ ☆ {{article.title}} 作者 <block wx:for=\"{{article.authors}}\" wx:key=\"index\"> {{item.name}} <text wx:if=\"{{index , {{article.institute}} 期刊信息 {{article.journal}} {{article.year}} Vol.{{article.volume}}, Iss.{{article.issue}} PP.{{article.pages}} 摘要 {{article.abstract}} <view class=\"sci-card\" wx:if=\"{{article.keywords.length > 0}}\"> 关键词 <block wx:for=\"{{article.keywords}}\" wx:key=\"index\"> {{item}} <view class=\"sci-card\" wx:if=\"{{showCitationChart}}\"> 引用图谱
后端BFF示例代码:
const express = require(\'express\');const axios = require(\'axios\');const app = express();const PORT = 3000;// PubMed API配置const PUBMED_API = \'https://eutils.ncbi.nlm.nih.gov/entrez/eutils\';const API_KEY = \'your_pubmed_api_key\';// 搜索接口app.get(\'/search\', async (req, res) => { try { const { query, page = 1, size = 10 } = req.query; // 第一步:搜索获取PMID列表 const searchRes = await axios.get(`${PUBMED_API}/esearch.fcgi`, { params: { db: \'pubmed\', term: query, retstart: (page - 1) * size, retmax: size, api_key: API_KEY, retmode: \'json\' } }); const idList = searchRes.data.esearchresult.idlist || []; // 第二步:获取文章详情 const detailRes = await axios.get(`${PUBMED_API}/esummary.fcgi`, { params: { db: \'pubmed\', id: idList.join(\',\'), api_key: API_KEY, retmode: \'json\' } }); // 转换数据格式 const articles = idList.map(id => { const article = detailRes.data.result[id]; return { pmid: id, title: article.title, authors: article.authors.map(a => a.name).join(\', \'), journal: article.source, year: article.pubdate?.split(\' \')[0] || \'N/A\', abstract: article.abstract || \'暂无摘要\' }; }); res.json({ articles, total: searchRes.data.esearchresult.count }); } catch (error) { console.error(\'PubMed搜索错误:\', error); res.status(500).json({ error: \'搜索失败\' }); }});// 文章详情接口app.get(\'/article/:pmid\', async (req, res) => { try { const { pmid } = req.params; const response = await axios.get(`${PUBMED_API}/efetch.fcgi`, { params: { db: \'pubmed\', id: pmid, api_key: API_KEY, retmode: \'xml\' } }); // 这里需要解析XML数据,简化处理 const article = parsePubMedXML(response.data); res.json(article); } catch (error) { console.error(\'获取文章详情错误:\', error); res.status(500).json({ error: \'获取详情失败\' }); }});app.listen(PORT, () => { console.log(`BFF服务运行在 http://localhost:${PORT}`);});
总结
AI大模型的成熟,让程序开发变得更加迅捷,软件开发模型也将迎来新的改变,迅捷开发已经是最大限度地拉近了客户和程序员的距离,大模型的加入,用自然语言提出要求,就可以编制成熟的代码。这就是AI大模型带给软件开发最大的触动。我听过王教授的课,他曾提到未来的程序员就是领着一群AI机器人来做开发,当时我还觉得有点遥远,哈哈哈哈哈。希望大家可以勇敢尝试人工智能带来的欢乐。
我开发的微信小程序:微力pubmed助手。
欢迎大家来评论区留言,讨论更多的可能性。