大数跨境

转型 AI 开发——LangChain 实战第九课:周报助手开发实战,AI 智能体开发原来可以这么简单?

转型 AI 开发——LangChain 实战第九课:周报助手开发实战,AI 智能体开发原来可以这么简单? 玩AI的方可乐
2025-09-24
1
导读:手把手教学,10 分钟见结果

 

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

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

注公众号&添加微信:ThinkFun666

领取【AI编程资料包】



 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

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

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


 


 

 

写周报是打工人绕不开的痛点。明明有在努力工作,但是写的时候不知道写什么,按照什么格式写合适,既然如此,今天给大家分享下:

如何用 LangChain 做一个 周报助手
解决这个痛点。

下面内容完完全全的实战干货,看完这节课,你可以轻松做出很多智能体。


下面我们先进行核心技术选型

  1. 1. 窗口记忆
    用 LangChain 自带的 ConversationBufferWindowMemory,只保留最近 20 轮。对于绝大多数不复杂的场景,这个记忆信息量足够用了。
  2. 2. 流式输出
    我们都知道,模型一次性给答案需要等待比较长的时间,体验很差,所以我们用了 streaming=True 和 StreamingStdOutCallbackHandler()实现流式输出,让用户觉得AI“秒懂”,“秒反馈”,交互更自然。
  3. 3. 链式调用
    输入 → 记忆 → Prompt → LLM → 输出解析。整个流程像一条流水线,模块清晰,不用自己拼接逻辑,非常丝滑,易扩展,代码可读性强。

老规矩,下面我们上代码。
新建代码文件09_chain_memory_stream.py


             
             
             
             
              
             
             
             
             import os
from
 dotenv import load_dotenv

from
 langchain_openai import ChatOpenAI
from
 langchain.prompts import ChatPromptTemplate
from
 langchain_core.output_parsers import StrOutputParser
from
 langchain.memory import ConversationBufferWindowMemory
from
 langchain_core.runnables import RunnablePassthrough
from
 langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

load_dotenv()

# 1. 初始化 LLM(开启流式输出)

llm = ChatOpenAI(
    model="deepseek-chat",
    base_url="https://api.deepseek.com/v1",
    api_key=os.getenv("deepseek_api_key"),
    streaming=True,
    callbacks=[StreamingStdOutCallbackHandler()],
    temperature=0.7
)

# 2. 定义窗口记忆(只保留最近 20 轮对话)

memory = ConversationBufferWindowMemory(
    k=20,
    memory_key="chat_history",
    return_messages=True
)

# 3. 定义 Prompt

prompt = ChatPromptTemplate.from_template(
    """
你是一个周报助手。请基于以下历史对话和用户的新输入,给出简洁、直接可用的回复。

历史对话:
{chat_history}

用户的新输入:
{human_input}
"""

)

# 4. 把 memory 包装成可在 LCEL 管道里用的 Runnable

def
 load_memory(_):
    return
 {"chat_history": memory.load_memory_variables({})["chat_history"]}

# 5. LCEL 链:输入 → 记忆 → Prompt → LLM → Parser

parser = StrOutputParser()
chain = (
    {"human_input": RunnablePassthrough(), "chat_history": load_memory}
    | prompt
    | llm
    | parser
)

print
("=== 周报助手(链 + 窗口记忆(k=20) + 流式输出)===\n")
print
("你可以输入多轮对话,比如:先写周报,再让它改短一点。输入 quit 退出。\n")

while
 True:
    user_input = input("你:")
    if
 user_input.lower() in ["quit", "exit", "退出"]:
        print
("退出。")
        break


    print
("AI:", end="", flush=True)
    result = chain.invoke(user_input)
    print
("\n")  # 流式输出已经逐字打印,这里只补换行

    # 更新记忆

    memory.save_context({"human_input": user_input}, {"output": result})


代码其实很简单,做智能体也很简单。

把代码跑起来的同学应该能看到,这个周报助手,用起来体验和DeepSeek,豆包这类产品差不多。

思考的结果符合期望,也能够流式输出高效反馈。

那除了周报助手,还有其他好做又常见的智能体方向吗?
答案包有的。

其实,周报助手只是一个“模版”。换个 Prompt,你就能做出很多类似的小智能体,比如:

  • • PPT 制作助手
  • • 心理分析助手
  • • 爆款分析助手

本质上,你只需要在代码中做这些控制,就能轻松搞定简单的智能体开发:

  1. 1. 换 Prompt(定义它是什么角色),
  2. 2. 调整记忆策略(窗口、摘要、全量),
  3. 3. 是否要流式输出(决定体验感)。

 

 


 

 

 

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

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


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

当前是27/100。

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


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



我的免费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