利用LangChain优化团队工作周报自动汇总:替代多智能体的可控解决方案

前段时间写了一篇关于使用CrewAI来实现的多智能体,来实现团队工作周报的汇总工作的案例,很多朋友反馈使用多智能体的过程中,智能体的"自由发挥"不太可控,导致生成的结果不稳定,甚至出现幻觉的情况,为了解决这个问题,我们今天来尝试一下单纯使用LangChain看看是否还有相同的问题,效果会不会好点。

步骤一:环境准备与需求分析

在开始编写脚本之前,我们需要确保开发环境已经准备就绪,并对需求进行详细分析。

环境准备

  • 确保Python环境已安装并配置好。
  • 安装必要的Python库,如email用于发送邮件,langchain用于处理文本等。
  • 确保有访问阿里企业邮箱SMTP服务的权限。

需求分析

  • 读取./docs目录下所有以.md格式存放的个人工作周报文件。
  • 汇总这些周报为一份团队工作周报。
  • 使用阿里企业邮箱将汇总的周报发送给领导。

步骤二:读取个人工作周报

首先,我们需要编写一个函数来读取每个员工的工作周报。我们将遍历./docs目录下的所有.md文件,并读取它们的内容。

python 复制代码
import os

def read_weekly_reports(directory):
    reports = {}
    for filename in os.listdir(directory):
        if filename.endswith('.md'):
            name = filename.split('.')[0]  # 假设文件名是"姓名 工作周报"
            with open(os.path.join(directory, filename), 'r', encoding='utf-8') as file:
                reports[name] = file.read()
    return reports

步骤三:汇总工作周报

接下来,我们需要将读取到的个人周报汇总成一份团队周报。我们将创建一个新的函数来完成这项任务。

python 复制代码
def summarize_reports(reports):
    summary = "团队工作周报:\n\n"
    all_str = ""
    for name, report in reports.items():
        all_str += f"{name}:\n{report}\n\n"
    # 初始化LLM
    llm = ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"),model="gpt-3.5-turbo-0125")

    from langchain_core.prompts import ChatPromptTemplate
    prompt = ChatPromptTemplate.from_messages([
        ("system", "你是一个部门工作周报撰写者"),
        ("user", f"""
        请根据以下的个人工作周报内容,要求markdown格式,将个人周报合并,生成部门本周工作总结,生成的部门工作周报不包含人名:
        
        {all_str} """)
    ])
    from langchain_core.output_parsers import StrOutputParser
    
    output_parser = StrOutputParser()

    chain = prompt | llm | output_parser
    summary = chain.invoke({"input": all_str})

    return summary

步骤四:发送邮件

最后,我们需要编写一个函数来发送汇总好的团队周报。我们将使用Python的email库来实现邮件的发送。

python 复制代码
from email import EmailMessage

def send_email(summary):
    # 填写你的阿里企业邮箱SMTP配置信息
    sender = 'your_email@example.com'
    receiver = 'leader_email@example.com'
    subject = '团队工作周报'
    message = EmailMessage()
    message.set_content(summary)
    message['From'] = sender
    message['To'] = receiver
    message['Subject'] = subject

    # 这里需要使用你的邮箱SMTP服务器发送邮件
    # 请替换以下信息为你的SMTP服务器设置
    server = 'smtp.example.com'
    port = 465
    username = sender
    password = 'your_email_password'
    message.send(server, port, username, password)

步骤五:整合与测试

现在我们已经有了所有必要的函数,我们需要将它们整合到一个主函数中,并进行测试。

python 复制代码
def main():
    reports = read_weekly_reports(weekly_reports_dir)
    summary = summarize_reports(reports)
    send_email(summary)

if __name__ == "__main__":
    main()

在运行脚本之前,请确保你已经替换了所有的占位符,如邮箱地址、SMTP服务器设置等,为实际的配置信息。运行脚本后,检查是否有任何错误,并确保邮件已成功发送。

实际运行效果

可以看到,实际运行的效果还是非常不错的,相比多智能体来说可控的多了。

结论

多智能体比较适合有创造性的,比较复杂的,流程不单一的场景,可以给智能体一定的"自由发挥"的空间,而对于场景单一,流程相对固定的场景,只要提示词写的足够好,LangChain就可以满足需求了。

相关推荐
卷心菜小温10 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
爱喝白开水a13 小时前
关于大模型在企业生产环境中的独立部署问题
人工智能·深度学习·llm·大语言模型·ai大模型·计算机技术·本地部署大模型
Langchain14 小时前
不可错过!CMU最新《生成式人工智能大模型》课程:从文本、图像到多模态大模型
人工智能·自然语言处理·langchain·大模型·llm·大语言模型·多模态大模型
龙的爹233314 小时前
论文翻译 | Generated Knowledge Prompting for Commonsense Reasoning
人工智能·gpt·机器学习·语言模型·自然语言处理·nlp·prompt
龙的爹233315 小时前
论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust
人工智能·gpt·语言模型·自然语言处理·nlp·prompt
幽影相随15 小时前
构建llama.cpp并在linux上使用gpu
llm·llama.cpp
AAI机器之心16 小时前
LLM大模型:开源RAG框架汇总
人工智能·chatgpt·开源·大模型·llm·大语言模型·rag
网安-搬运工1 天前
RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略
人工智能·自然语言处理·大模型·llm·大语言模型·ai大模型·rag
大模型八哥1 天前
大模型扫盲系列——大模型实用技术介绍(上)
人工智能·程序人生·ai·大模型·llm·llama·ai大模型
我爱学Python!2 天前
基于 LangChain 的自动化测试用例的生成与执行
人工智能·自然语言处理·langchain·自动化·llm·测试用例·大语言模型