diff --git a/src/langchain_lab/core/conference.py b/src/langchain_lab/core/conference.py index 8a2f646..0a81ac4 100644 --- a/src/langchain_lab/core/conference.py +++ b/src/langchain_lab/core/conference.py @@ -194,7 +194,7 @@ def graph_node_agent(state: AgentState, agent: RunnableSequence, name: str): if isinstance(result, FunctionMessage): pass else: - result = HumanMessage(**result.dict(exclude={"type", "name"}), name=name) + result = HumanMessage(**result.dict(exclude={"type", "name"})) return { "messages": [result], "sender": name diff --git a/src/langchain_lab/langgraph/network_operations_analysis_assistant/network_operations_analysis_assistant.py b/src/langchain_lab/langgraph/network_operations_analysis_assistant/network_operations_analysis_assistant.py index fa74d1e..20ef15c 100644 --- a/src/langchain_lab/langgraph/network_operations_analysis_assistant/network_operations_analysis_assistant.py +++ b/src/langchain_lab/langgraph/network_operations_analysis_assistant/network_operations_analysis_assistant.py @@ -166,7 +166,7 @@ def load_data_tool(): try: import pandas as pd - data = pd.read_excel("./wireless_network_statistics_data.xlsx") + data = pd.read_excel("./data.xlsx") result = data.to_markdown() except BaseException as e: return f"Failed to execute. Error: {repr(e)}" @@ -178,7 +178,7 @@ def data_analysis_tool(): """This tool enhances analysis by providing detailed statistics and visualizations.""" try: data_response = [] - df = pd.read_excel("./wireless_network_statistics_data.xlsx") + df = pd.read_excel("./data.xlsx") # 描述性统计 analysis_result = df.describe() diff --git a/tests/langchain_lab/langgraph/marketing_analysis_assistant/marketing_analysis_assistant_gpt-3.5-turbo.md b/tests/langchain_lab/langgraph/marketing_analysis_assistant/marketing_analysis_assistant_gpt-3.5-turbo.md index e69de29..4e484a9 100644 --- a/tests/langchain_lab/langgraph/marketing_analysis_assistant/marketing_analysis_assistant_gpt-3.5-turbo.md +++ b/tests/langchain_lab/langgraph/marketing_analysis_assistant/marketing_analysis_assistant_gpt-3.5-turbo.md @@ -0,0 +1,91 @@ +## 销售助理 + +原始数据: + +| | Year | Product_A | Product_B | Product_C | +|---:|-------:|------------:|------------:|------------:| +| 0 | 2019 | 1091 | 540 | 802 | +| 1 | 2020 | 979 | 527 | 782 | +| 2 | 2021 | 970 | 521 | 816 | +| 3 | 2022 | 1070 | 559 | 752 | +| 4 | 2023 | 1059 | 533 | 730 | + +## 销售经理 + +描述性统计: + +| | Year | Product_A | Product_B | Product_C | +|:------|-----------:|------------:|------------:|------------:| +| count | 5 | 5 | 5 | 5 | +| mean | 2021 | 1033.8 | 536 | 776.4 | +| std | 1.58114 | 55.4319 | 14.6629 | 35.3667 | +| min | 2019 | 970 | 521 | 730 | +| 25% | 2020 | 979 | 527 | 752 | +| 50% | 2021 | 1059 | 533 | 782 | +| 75% | 2022 | 1070 | 540 | 802 | +| max | 2023 | 1091 | 559 | 816 | + +相关性矩阵: + +| | Year | Product_A | Product_B | Product_C | +|:----------|-----------:|------------:|------------:|------------:| +| Year | 1 | 0.0770147 | 0.194099 | -0.777903 | +| Product_A | 0.0770147 | 1 | 0.749269 | -0.43633 | +| Product_B | 0.194099 | 0.749269 | 1 | -0.464733 | +| Product_C | -0.777903 | -0.43633 | -0.464733 | 1 | + +## 销售助理 + +根据分析结果,我们得出以下结论: + +1. 商品A在过去5年的平均销量为1033.8,标准差为55.43,销量最低为970,最高为1091。 +2. 商品B在过去5年的平均销量为536,标准差为14.66,销量最低为521,最高为559。 +3. 商品C在过去5年的平均销量为776.4,标准差为35.37,销量最低为730,最高为816。 +4. 商品A和商品B之间的相关性较高,相关系数为0.749。 +5. 商品A和商品C之间的相关性较低,呈负相关,相关系数为-0.436。 +6. 商品B和商品C之间的相关性较低,呈负相关,相关系数为-0.465。 + +销售经理可以根据以上数据和相关性分析结果制定本期的销售战略,例如重点推广商品A和B,因为它们之间有较高的相关性,可以一起进行促销活动;同时也可以考虑针对商品C的特定市场定位策略,以提高销量。 + +接下来我们可以与销售经理进一步讨论这些见解,并制定具体的销售策略。您需要我将这些见解转达给销售经理吗? + +## 销售经理 + +是的,我可以将这些见解转达给销售经理。接下来我将与销售经理进行交流。请等待片刻。 +销售经理,根据过去5年商品A、B、C的销售数据分析结果,我们得出以下结论和建议: + +1. 商品A在过去5年的平均销量为1033.8,标准差为55.43,销量最低为970,最高为1091。 +2. 商品B在过去5年的平均销量为536,标准差为14.66,销量最低为521,最高为559。 +3. 商品C在过去5年的平均销量为776.4,标准差为35.37,销量最低为730,最高为816。 +4. 商品A和商品B之间的相关性较高,相关系数为0.749。 +5. 商品A和商品C之间的相关性较低,呈负相关,相关系数为-0.436。 +6. 商品B和商品C之间的相关性较低,呈负相关,相关系数为-0.465。 + +基于以上分析,我们建议重点推广商品A和B,因为它们之间有较高的相关性,可以一起进行促销活动。同时,针对商品C可以制定特定市场定位策略,以提高销量。 + +您认为这些见解对本期的销售策略制定有帮助吗?您有任何想法或建议要补充吗? + +## 销售助理 + +销售经理可能会对这些见解感兴趣,并认为它们对于本期的销售策略制定是有帮助的。销售经理可能会考虑进一步细化促销活动的策略,比如针对商品A和B的套餐优惠、联合促销等措施,以最大程度地发挥它们之间的相关性优势。同时,销售经理可能会思考如何改进商品C的市场定位,以吸引更多客户并提高销量。 + +销售经理可能还会考虑与市场营销团队合作,根据数据分析结果制定具体的推广计划,包括广告宣传、促销活动、产品定价等方面的策略。综合考虑市场需求、竞争情况和公司资源,销售经理可以制定全面的销售策略,以实现本期的销售目标。 + +销售经理可能会感谢销售助理提供的数据分析和见解,这将有助于指导销售团队在接下来的工作中取得更好的业绩。销售助理可以与销售经理一起制定具体的销售计划,并确保团队的执行落实。如果销售经理有任何想法或建议补充,销售助理可以随时与销售经理保持沟通,并及时调整销售策略以应对市场变化。 + +## 销售经理 + +销售经理可能会对销售助理提供的分析结果和建议感兴趣,并愿意与销售助理共同制定本期的销售战略。销售助理可以继续与销售经理交流,进一步细化促销活动策略,探讨针对商品A和B的套餐优惠、联合促销等措施,以最大程度发挥它们之间的相关性优势。 + +同时,销售助理可以与销售经理讨论如何改进商品C的市场定位,以吸引更多客户并提高销量。销售团队可以与市场营销团队合作,制定具体的推广计划,包括广告宣传、促销活动、产品定价等方面的策略,以实现本期的销售目标。 + +销售助理和销售经理之间的合作和沟通将是关键,确保销售策略的有效执行和业绩的提升。销售助理可以随时与销售经理保持沟通,及时调整销售策略以适应市场变化,共同努力实现销售目标。如果销售经理有任何想法或建议补充,销售助理可以倾听并共同探讨如何优化销售策略。祝您们顺利制定并执行本期的销售计划! + +## 销售助理 + +销售助理和销售经理之间的合作和沟通将是关键,确保销售策略的有效执行和业绩的提升。销售助理可以随时与销售经理保持沟通,及时调整销售策略以适应市场变化,共同努力实现销售目标。祝您们顺利制定并执行本期的销售计划!如果您需要进一步的帮助或有其他问题,请随时告诉我。 + +## 销售经理 + +感谢您的合作和支持!如果有任何进一步的需要,我会随时为您提供帮助。祝您工作顺利,销售目标达成! + diff --git a/tests/langchain_lab/langgraph/marketing_analysis_assistant/test_marketing_analysis_assistant.py b/tests/langchain_lab/langgraph/marketing_analysis_assistant/test_marketing_analysis_assistant.py index 02c8026..336956c 100644 --- a/tests/langchain_lab/langgraph/marketing_analysis_assistant/test_marketing_analysis_assistant.py +++ b/tests/langchain_lab/langgraph/marketing_analysis_assistant/test_marketing_analysis_assistant.py @@ -50,30 +50,28 @@ def data_analysis_tool(): class TestConference(TestCase): def test_conference(self): - conference = Conference(llm=llm) + conference = Conference(llm=llm, python_repl=True, lang="zh") conference.add_tool(load_sales_data_tool, data_analysis_tool) - conference.add_agent(agent_id="Sales_Staff", - agent_name="Sales_Staff", - system_message="负责客户服务和产品、服务提案。回答客户问题,推荐适当的产品、服务,并记录商谈数据、销售预定数据到系统中。", - next_agent_name="Sales_Manager", + conference.add_agent(agent_name="销售助理", + system_message="你是销售助理,负责客户服务和产品、服务提案。回答客户问题,推荐适当的产品、服务,并记录商谈数据、销售预定数据到系统中。", + next_agent_name="销售经理", entry_point=True) - conference.add_agent(agent_id="Sales_Manager", - agent_name="Sales_Manager", - system_message="负责团队管理和指导。设定销售目标,制定销售策略,监控绩效,并向团队成员提供反馈。", - next_agent_name="Sales_Staff") + conference.add_agent(agent_name="销售经理", + system_message="你是销售经理,负责团队管理和指导。设定销售目标,制定销售策略,监控绩效,并向团队成员提供反馈。", + next_agent_name="销售助理") conference.build_graph() conversation = conference.invoke(humanMessage=HumanMessage( - content="利用事先准备好的agent和tool进行会话。" + content="利用事先准备好的 agent 和 tool 进行会话。" "会话的主题是'调查我们公司商品A、B、C过去5年的数据,并制定本期的销售战略。" - "会话由sales_staff开始。" + "会话由销售助理开始。" "数据分析工具必须使用'./sales_data.csv'文件,并已表格形式输出数据。" "数据分析工具将从'./sales_data.csv'文件中读取数据,进行基本统计和相关关系分析。" "数据分析工具将输出文本形式的分析结果,并提供基于分析结果的见解。" - "接下来,将数据分析工具给出的分析结果和见解传达给sales_staff。" - "然后,sales_staff和sales_manager根据数据分析工具提供的分析结果和见解进行交流,并共同制定本期的销售策略。" - "sales_staff和sales_manager的会话总次数最多为20次。" - "最后,sales_manager在总结所有对话后,列出重要的要点并结束。" - )) + "接下来,将数据分析工具给出的分析结果和见解传达给销售助理。" + "然后,销售助理和销售经理根据数据分析工具提供的分析结果和见解进行交流,并共同制定本期的销售策略。" + "销售助理和销售经理的会话总次数最多为20次。" + "最后,销售经理在总结所有对话后,列出重要的要点并结束。" + ), recursion_limit=20) with open(f"marketing_analysis_assistant_{llm.model_name}.md", "w") as file: for message in conversation: diff --git a/tests/langchain_lab/langgraph/network_operations_analysis_assistant/__init__.py b/tests/langchain_lab/langgraph/network_operations_analysis_assistant/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/langchain_lab/langgraph/network_operations_analysis_assistant/test_network_operations_analysis_assistant.py b/tests/langchain_lab/langgraph/network_operations_analysis_assistant/test_network_operations_analysis_assistant.py deleted file mode 100644 index 744cd3d..0000000 --- a/tests/langchain_lab/langgraph/network_operations_analysis_assistant/test_network_operations_analysis_assistant.py +++ /dev/null @@ -1,53 +0,0 @@ -import os -import unittest -from unittest import TestCase - -import pandas as pd -from dotenv import load_dotenv -from langchain_core.messages import HumanMessage -from langchain_openai import ChatOpenAI - -from langchain_lab.core.conference import Conference - -load_dotenv("../../../../.env") -llm = ChatOpenAI(model_name=os.environ["MODEL_NAME"], - openai_api_base=os.environ["OPENAI_API_BASE"], - openai_api_key=os.environ["OPENAI_API_KEY"], - temperature=0.7, - request_timeout=600, streaming=True) - - -class TestConference(TestCase): - - def test_conference_without_tool(self): - conference = Conference(llm=llm, lang="zh") - conference.add_agent(agent_name="数据分析专家", - system_message="数据分析专家,负责分析和解读数据,提供对数据的深入见解和洞察。", - next_agent_name="网络优化工程师", - entry_point=True) - conference.add_agent(agent_name="网络优化工程师", - system_message="你是网络优化工程师,负责网络性能和资源管理,监控网络性能指标。", - next_agent_name="网络运营经理") - conference.add_agent(agent_name="网络运营经理", - system_message="你是网络运营经理,负责整体网络运营策略的制定和执行,关注全国各省网络质量情况。", - next_agent_name="网络优化工程师") - conference.build_graph() - - data_markdown = pd.read_excel("./wireless_network_statistics_data.xlsx").to_markdown() - - conversation = conference.invoke(humanMessage=HumanMessage( - content="请根据数据报告进行分析,结合其他人员的建议进行补充,如果你是网络运营经理还需要最后对指标异常的省份进行单独评价" - f"##数据报告: \n\n{data_markdown}\n\n" - ), recursion_limit=10) - - with open(f"network_operations_analysis_assistant.py_{llm.model_name}.md", "w") as file: - for message in conversation: - if message.content: - print(f"## {message.role}\n\n") - print(f"{message.content.strip()}\n\n") - file.write(f"## {message.role}\n\n") - file.write(f"{message.content.strip()}\n\n") - - -if __name__ == "__main__": - unittest.main()