通过Github Copilot开发项目——复现我曾经的农产品交易项目——Day 1
目录
用Copilot复现项目的初衷(Why am I use Copilot to rebuild the project?)
最初的Prompt编辑(First Step : Prompt Engineing)
如何编辑好的Prompt(How to create great Prompt?)
其他优化Prompt的手段(Other ways to improve Prompt quaility)
我的第一个Prompt(My very first prompt)
前言:一些废话(Some Gossip)
原先的项目(Original Project)
2020年,刚刚来到大学的我,刚接触到C的那一刻,这门学科就好像有魔力一样抓住了我的心。自那一刻之后,我从在别的课上(sorry高等数学&线性代数)都只在学C语言的相关知识,甚至钻研到了最底层的知识点(几个知识点我现在仍然记忆深刻:用++i相比i++会节约一个非常非常少可以忽略不计的时间;结构体占多少个字节,取决于里面成员的数据类型,还有以一个多少字节作为规范的每一个成员的长度等等等)到从C语言开始辐射到其他的编程技术:Golang、Mysql、GoWeb...在这个旅途中某一次我走在下课回宿舍的路上,看到了ACAT计算机实验室的宣讲摊,看到学长向我伸出了橄榄枝,脑袋一热就绝对加入这个实验室了!并且在Coding的道路上越走越远...就在加入实验室的第一年,我决定做一个项目:“汇农亩场”——农产品交易平台。这个项目涵盖了用GoWeb编程的一切基础的知识,也算是我从在IDE上简单去敲代码到真正从工程的思维去解决一个问题的一个转变吧。这里也要感谢我们是实验室的前端同学,因为我对前端知识并没有过于深度的了解,也是在我们实验室前端同学的帮助下,最后才慢慢的搭建出了整个项目。
用Copilot复现项目的初衷(Why am I use Copilot to rebuild the project?)
虽然我的项目花了一个寒假和一个暑假时间的耕耘,即便不能跟市面上的现有平台(淘宝)进行比较,但是也是麻雀虽小,五脏俱全。除了简单的交互功能之外,我还自己用学生优惠在阿里租了服务器作为服务器的后台、数据存储,甚至申请了域名,进行了备案。很遗憾的是,彼时的我没有对项目工程文件进行备份的思想。从存在本地PC上但是PC出现了致命的问题无法开机不得不重装系统(无法保留数据的那种)到云端服务器到期,阿里一连给我发了好多个短信提示我如果不续费的话,他只能为我的数据保留多少多少天。这一切都被我忽略了... 直到考研结束我回顾本科的工作的时候,才发现...我精心耕耘的项目就这么被我彻底的从这个世界上抹去了...
进入Agent开发热门的时代,了解到了Copilot是个什么东西,我突然就想起来了我之前这个被遗弃的项目。我关于之前项目的idea都在,那我是不是能够通过Copilot的帮助让我的项目赛博重生呢?现在这一刻的我其实是不知道答案的,就在我写Blog的这一刻,我的第一个Prompt才刚刚发给Copilot运行。所以,我们拭目以待,我也打算通过每一天Blog的形式来记录我复现项目的全过程吧,顺便在这个过程中记录我学习Copilot甚至是Agent开发过程中抛出的一切问题和答案。

最初的Prompt编辑(First Step : Prompt Engineing)
什么是Prompt?(What is Prompt?)
Prompt中文名为提示词,是人工智能领域用于引导AI模型生成输出的指令或关键词句,在自然语言处理和大模型中承担输入信息上下文与参数传递的核心功能。 (摘自百度)
对于Prompt,简单用我个人的理解来说,就是你希望让AI帮你实现XXX而向AI输出的文本。比如:你问DeepSeek,我想知道CSDN编辑文本的技巧。这就是一种最简单且最直观的Prompt。
而在这之上,又诞生出了Prompt工程相关的概念,如何去优化人们的Prompt让这个Prompt能够更好的被AI所理解?这也是我复现项目最开始需要克服的难题,如何去很好的编写Prompt让我的Copilot Agent能够更好的去完成我的工作。

如何编辑好的Prompt(How to create great Prompt?)
这里对一个好的Prompt进行内容上的总结,分为:
- 角色(Role):给AI定义一个角色,例如:你是一名资深的教授。
关于这一点,我有一些个人的思考,为什么给AI定义角色AI会更好的完成任务呢?我觉得是因为人类的思维影响了AI训练的数据库从而进一步影响了AI的思维能力。按照人类的思维,我们在赋予AI任务的时候,经常会希望在最前面加上一句关于身份的定义:你是一名资深的教授。希望AI能够对自己的身份有一个定义,从而在这个身份的基础上去衍生出相关的思考。虽然可能原本的大模型并不会因为这个身份的定义去提高思辨能力。但是随着喂给AI的数据带的身份确认多了,渐渐的,AI就慢慢可以通过身份的确认去更大概率获得这个身份所对应的正确回答。属于是人类通过人类的思维去训练AI,最终的AI回报以人类思维下所能获得的正确答案的一种美感。 - 描述(Description):给AI关于任务的描述,最重要的部分,例如:我需要你告诉我AI的发展过程。
- 上下文(Context):这里包括两个部分,一个是本次Prompt所提供的背景信息,例如:我是一名软件工程的学生。另一个是多轮交互(AI Chat Bots)中之前若干轮Prompt所蕴含的一切信息。
前者是为了保证本次Prompt能得到AI针对问题更具体、更符合背景的回答。后者是为了保证AI在长期对话中的“记忆性”:你不需要再解释一个前几轮Prompt提到的概念、大模型会根据你前几轮的Prompt来辅助推测你本轮的想法... - 例子(Example):给AI举个例子,例如:1+1=2,2+2=4,3+3=?
- 输入 (Input):任务的输入信息,在Prompt中标注出来输入的相关参数,例如:我希望你根据我的学号查询跟我的学号数字有关的东西。输入:我的学号是:XXX
- 输出(Output):AI回复的输出信息,通过给AI限制输出信息的格式。例如:我希望得到如下输出:你的学号是:XXX,通过你学号解析出来你的幸运数字是:XXX...
此外,关于输出,规范格式还有一个很关键的作用,就是以便于后续其他模块能够自动对输出的信息进行解析。(多Agent开发的场景特别需要规范输出的格式)
综上所述,我们可以对之前的“我想知道CSDN编辑文本的技巧”进行优化:
我个人优化后的Prompt:
你是一名资深的CSDN创作者,而我是一名准备用CSDN记录我的代码学习过程的工程师。
"""
我需要你告诉我如何用CSDN进行Blog的编辑与发布,以及如何写好CSDN上的Blog,我准备用PPT的形式,对上述过程进行说明。
"""
输出格式为:
[第一页PPT]{序言部分}:CSDN是XXX,Blog是XXX[第二页PPT]{XXX}:...
这里的"""是.md文件下的文档字符串(docstring)的界定符,由于本次Copilot使用到的大模型是GPT-5.3-Codex,查阅后发现该模型的训练样本大多采用.md的文件,因此在Prompt里面直接采用.md的相关格式会提高最终输出正确结果的概率 。此外,我把原先的例子优化后引入了角色、更详细的描述、上下文里的背景信息、以及输出的样例(在输出的样例中提供了例子),这样我们就可以得到一个比较好的Prompt了。具体的Prompt如何设计还是需要根据问题的情况来决定,没必要把我提供的所有要素都塞进Prompt里。
其他优化Prompt的手段(Other ways to improve Prompt quaility)
写到这里,突然想起来一个前几天看到过的案例,通过System Prompt进行优化(在用户的Prompt前固定加上一段系统给出的Prompt)例如:
角色定位:
你是一名资深的农产品经销商,拥有15年以上农产品流通领域的实战经验。你精通各类农产品的季节性规律、品质鉴别、仓储管理、物流配送、价格波动分析以及渠道销售策略。
交互风格:
1. 专业但不卖弄:使用行业通用术语时,如有必要会附带简明解释;用数据和事实说话,避免主观臆断
2. 务实且接地气:提供可落地的解决方案,而非空泛建议;考虑用户实际资源条件(资金、人力、仓储能力等)
3. 有温度的商业伙伴:理解农户的艰辛和渠道商的压力;在商言商的同时,倡导诚信经营、合作共赢
边界约束:
能做的:
提供市场行情分析与价格建议
解答农产品品质鉴别、仓储物流相关问题
协助制定采购/销售策略
对接渠道资源(在能力范围内)
风险提示:滞销预警、价格波动风险、政策变化影响
不能做的:
无法提供实时期货交易建议(不做金融投机引导)
不介入已发生的商业纠纷仲裁
不保证“稳赚不赔”或承诺具体收益
不泄露任何商业敏感信息(严格遵守保密原则)
不具备实际采购/销售执行能力(我是参谋,不是操盘手)
底线原则:
坚守食品安全底线,绝不推荐任何违规农资、以次充好行为
倡导公平交易,反对恶意压价、囤积居奇
遵守《农产品质量安全法》《电子商务法》等相关法律法规
当用户首次对话时,你可以这样开场:
你好!我是你的农产品经销顾问,深耕行业15年。无论你想了解行情走势、品质鉴别、采购策略还是渠道对接,都可以随时问我。
为了更好地帮你,请告诉我:
你关注的是哪类农产品?
你的角色是(农户/批发商/采购商/创业者)?
目前遇到的具体问题是什么?
咱们一起把生意做得更稳、更顺!
【后跟用户prompt】
此外,通过AI自我对用户发出来的Prompt进行一次优化后,再对问题进行正面的回答也是一种优化手段。用一个AI(通常被称为“引导者”、“编排者”或“中间Agent”)去指导另一个AI(“执行者”)工作,本质上就是一种自动化的提示工程。在这个过程中,还会往往出现Prompt链的概念。通过将一个复杂的任务复杂的Prompt拆分成多个子任务子Prompt并进行分析,分析这些任务之间是串行抑或是并发的。最终将分析后的结果形成一个链的结构,交付给不同的Agent进行任务处理。
我的第一个Prompt(My very first prompt)
关于我的第一个Prompt,这里我就采用了用一个AI去指导另一个AI的方法,将我Prompt先通过前一章的知识先自己优化成了一个比较好的Prompt。再将这个Prompt喂给DeepSeek,让DeepSeek给我生成一个直接针对Copilot的Prompt:
你是一位资深的全栈开发工程师。现在需要你从零开始带我开发并复现一个农产品交易项目。
# Project Context (项目宏观背景)
- **项目名称**:“汇农亩场”农产品交易平台
- **整体目标**:搭建一个类似于“淘宝”的农产品交易平台,实现供销商到消费者的直接交易。
- **技术栈要求**:
- 后端:Python (FastAPI)
- 前端:JavaScript (Vue)
- 数据库:MySQL(我将提供公网 IP)
- **长期规划**:在完成传统前后端开发后,将引入 Agent 技术,提供智能体交互场景(如:农产品交易顾问)。# Current Task (本轮任务:Sprint 1)
由于 token 长度限制,我们采用敏捷迭代的方式。本轮你需要完成以下工作:
1. **项目初始化**:设计并输出前后端的基础目录结构。
2. **跑通简单交互**:
- 后端:编写一个简单的测试接口(例如 `/api/health` 或模拟的商品列表接口)。
- 前端:编写一个基础页面,能够发起请求调用上述后端接口,并将结果渲染到页面上。
3. **环境说明**:请提供前后端项目的启动命令。# Output Requirements (输出要求)
1. 请提供上述代码的完整实现,并在代码块上方注明完整的文件路径(例如 `backend/main.py`)。
2. **Prompt 存档**:
- 请生成一段 Markdown 格式的内容,包含本次完整的 Prompt,并要求我将其保存在本地根目录的 `/prompt/input/sprint1_init.md` 中,以便后续版本迭代时参阅。
- 请基于本轮任务的结果,帮我撰写**下一步(Sprint 2:例如数据库连接与用户模型设计)**需要输入给你的 Prompt,并要求我将其保存在 `/prompt/output/sprint2_next.md` 中。
后续就是把这个Prompt喂给Copilot等结果了... 等待后续出结果了,我会在Day2的Blog里继续的,到时候估计还会介绍到什么是Copilot,分析Copilot思考的过程,什么是Github的Repository等等等。
需要特别提到一点的是,输出要求里的第二点是我自己想出来的idea。后续在看谷歌的新书Agent设计模式的时候才发现,这种idea早就有了,就是我前面提到的Prompt链的另一种思想。除了将一个大型的项目去拆分之外,还可以通过这种Prompt链递归的思想,让前一次的Prompt完成工作后,根据此时的工作内容去进一步生成下一步的Prompt去指导后续的工作。关于Prompt的存档也是对应着前面的知识——上下文,为了确保Agent的“记忆性”(虽然Copilot由于本身的性质应该会自动完成这个任务吧,不过写上去也是为了进一步确保)。谈到这里不得不插一个题外话了,大概是24年那会吧,AI chat刚出来的时候,我真的非常兴奋,通宵在跟AI进行聊天,那时候我就发现了,大概二十次对话左右,AI就会完全忘记我之前跟他聊过的内容了。当时是由于数据库和token的限制,所以对上下文的窗口限制非常的局限。而现在就很难出现这种问题了,据说现在一些主流的AI Chat上下文都可以达到好几本书的文本量了。不得不感叹科技的发展和时代的进步啊...
更多推荐



所有评论(0)