大数跨境

转型 AI 开发——LangChain实战第四课:为什么 Few-shot 是智能体的必修课?

转型 AI 开发——LangChain实战第四课:为什么 Few-shot 是智能体的必修课? 玩AI的方可乐
2025-09-19
1
导读:手把手教学,10 分钟见结果

 

你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
用AI编程开发过Web应用网站,浏览器插件,

微信小程序,AI智能体,RAG系统。

注公众号&添加微信:ThinkFun666

领取【AI编程资料包】



 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

去年6月份,我做了一个连自己都觉得疯狂的决定:裸辞,All in AI。

现在已经换赛道成功,继续在工作中探索。


 

 

今天继续给同学们分享智能体的开发技巧。我们做 AI 应用,不是为了闲聊几句,而是要让 AI 在 业务场景里,稳定地完成一份工作

这时候就要上新玩法了——Few-shot Prompt

在智能体开发里,Few-shot 不只是个小技巧,能决定 AI 能不能听懂你话,精准干活

很多人一开始都用原生 API 来写 Few-shot,结果越写越乱,维护起来头大。

其实用 LangChain,你就能把 Few-shot 变成模板化配置,不但更清爽,还能复用在不同场景。


什么是 Few-shot?

简单理解,就是“先给 AI 看几个样子,它再模仿着做”。

比如你想让 AI 写周报,直接说“帮我写周报”,AI 可能写得七零八落;

但如果你先给它一份参考格式,AI 就能对照着,稳定地产出。

这就好像,你给它立了一个人设,还顺手塞了一个 SOP。


下面我举个很好理解的例子:STAR 法则写周报

STAR 是很多大厂写周报常用的套路:

  • • S(Situation):我遇到什么情境
  • • T(Task):我要完成什么任务
  • • A(Action):我采取了什么行动
  • • R(Result):最后有什么结果

有了这个框架,AI 写出来的周报就很清晰。

我们自己平时一开始写周报,如果没模板,可能想到什么写什么,把工作都挨个列出来,但是很容易写成流水账。自己照着模板写又很烦,写个周报动辄半小时起步。

而让AI帮我们套模板,5分钟列完工作,立马给你全新的优雅版本。

老规矩,上代码。


原生写法,新建文件 04_few-shot.py


            
            
            
            
             
            
            
            
            import os
from
 openai import OpenAI
from
 dotenv import load_dotenv

load_dotenv()
client = OpenAI(api_key=os.getenv("deepseek_api_key"), base_url="https://api.deepseek.com/v1")

# 初始化对话历史,包含系统提示和few-shot示例

messages = [
    {"role": "system", "content": "你是一名专业的职场助理,专门帮忙写STAR格式的周报。用户会提供工作内容,你需要按照STAR格式整理成周报。"},
    # few-shot 示例作为参考

    {"role": "system", "content": """以下是周报示例:
【S】项目组新启动了A系统;
【T】我负责搭建基础脚手架;
【A】完成了TDD链路和数据库迁移;
【R】交付了一个可复用的基础版本。"""
},
    {"role": "user", "content": "本周完成了项目脚手架的搭建,并做了数据库迁移初始化"},
    {"role": "assistant", "content": "【S】项目组启动了新系统开发;\n【T】我负责搭建项目基础架构;\n【A】完成了项目脚手架搭建和数据库迁移初始化工作;\n【R】为团队提供了完整的开发基础环境,后续开发可以直接基于此架构进行。"}
]

print
("=== 周报助理 ===")
print
("我是你的专业周报助理,请直接告诉我你本周的工作内容,我会帮你整理成STAR格式的周报。")
print
("输入 'quit' 退出程序")
print
()

while
 True:
    user_input = input("请输入你的工作内容: ")
    
    if
 user_input.lower() == 'quit':
        print
("再见!")
        break

    
    if
 user_input.strip() == "":
        print
("请输入有效的工作内容")
        continue

    
    # 添加用户输入到对话历史

    messages.append({"role": "user", "content": user_input})
    
    try
:
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=messages
        )
        
        answer = response.choices[0].message.content
        print
(f"\n=== 周报 ===")
        print
(answer)
        print
()
        
        # 添加AI回复到对话历史

        messages.append({"role": "assistant", "content": answer})
        
    except
 Exception as e:
        print
(f"发生错误: {e}")
        # 如果出错,移除刚添加的用户消息

        messages.pop()


LangChain 写法,新建文件 04_few-shot_langchain.py


            
            
            
            
             
            
            
            
            import os
from
 langchain_openai import ChatOpenAI
from
 langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from
 dotenv import load_dotenv

load_dotenv()

llm = ChatOpenAI(
    model="deepseek-chat"
    base_url="https://api.deepseek.com/v1",
    api_key=os.getenv("deepseek_api_key")
)

# 初始化对话历史,包含系统提示和few-shot示例

messages = [
    SystemMessage(content="你是一名专业的职场助理,专门帮忙写STAR格式的周报。用户会提供工作内容,你需要按照STAR格式整理成周报。"),
    # few-shot 示例作为参考

    SystemMessage(content="""以下是周报示例:
【S】项目组新启动了A系统;
【T】我负责搭建基础脚手架;
【A】完成了TDD链路和数据库迁移;
【R】交付了一个可复用的基础版本。"""
),
    HumanMessage(content="本周完成了项目脚手架的搭建,并做了数据库迁移初始化"),
    AIMessage(content="【S】项目组启动了新系统开发;\n【T】我负责搭建项目基础架构;\n【A】完成了项目脚手架搭建和数据库迁移初始化工作;\n【R】为团队提供了完整的开发基础环境,后续开发可以直接基于此架构进行。")
]

print
("=== 周报助理 (LangChain版) ===")
print
("我是你的专业周报助理,请直接告诉我你本周的工作内容,我会帮你整理成STAR格式的周报。")
print
("输入 'quit' 退出程序")
print
()

while
 True:
    user_input = input("请输入你的工作内容: ")
    
    if
 user_input.lower() == 'quit':
        print
("再见!")
        break

    
    if
 user_input.strip() == "":
        print
("请输入有效的工作内容")
        continue

    
    # 添加用户输入到对话历史

    messages.append(HumanMessage(content=user_input))
    
    try
:
        response = llm.invoke(messages)
        
        print
(f"\n=== 周报 ===")
        print
(response.content)
        print
()
        
        # 添加AI回复到对话历史

        messages.append(response)
        
    except
 Exception as e:
        print
(f"发生错误: {e}")
        # 如果出错,移除刚添加的用户消息

        messages.pop()
最后,我们来看看运行效果。

对比原生和langchain的few-shot写法,结合我们昨天讲的内容,可以看到:

langchain写起few-shot,更加模板化、结构化,显得更优雅。

我们开发智能体的过程中,灵活使用Few-shot 这种方式,可以让 AI 不再是“聊天机器人”。

而是能根据 既定 SOP,做流程化工作

 


对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。

想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。


接下来100天,我会记录从Java程序员到AI应用开发工程师的完整转型路:每一个困惑、每一次突破、每一个真实瞬间。

当前是23/100。

如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,
那就跟着我的记录,一起探索。


继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666



我的免费AI编程交流群,欢迎加入讨论AI编程玩法(加我微信,说明需求和来意,申请入群)




 


不懂编程的小白,如何入门AI编程和商业化?

如何系统地掌握这些方法?如何找到有价值的商业化方向?如何在遇到瓶颈时获得启发和帮助?

如果你也对AI编程充满热情,渴望用AI创造出属于自己的应用并探索商业化机会;如果你想提升在AI时代的核心竞争力,让AI成为你事业的加速器。

那么,我非常推荐你加入“AI编程复利商业化星球”!




在这个社群,你将获得:

  • 9次价值千元的AI编程死磕实战训练营

  • 超级大佬的实战经验分享,商业化思路,前沿AI工具和技巧

  • 和一群积极的AI编程同行者共舞


让我们一起,用AI编程,不仅创造工具,更创造价值,实现个人和商业上的持续“进化”与“复利”!

 

 

 



推荐阅读:

我就喜欢干这种傻事!为什么转型AI应用开发,我不建议你直接从看书开始学起?

猛然醒悟:原来 AI 编程这件事情,是有门槛的,90%的新手卡在这些地方

30岁转行 AI 应用开发:多久能学会?答案出乎意料

30岁,我放弃写了7年的Java,成功转型AI应用开发

30岁,转型AI应用开发,需要会什么技术?

30岁,空窗期一年,靠什么成功转型AI应用开发?

30岁,没报课,如何从0自学转型AI应用开发?

【声明】内容源于网络
0
0
玩AI的方可乐
1234
内容 502
粉丝 0
玩AI的方可乐 1234
总阅读204
粉丝0
内容502