AutoGen 两个agent讲相声

news2024/12/27 17:04:06

Lesson 1: Multi-Agent Conversation and Stand-up Comedy

第 1 课:多人对话和单口相声

请添加图片描述

Setup

from utils import get_openai_api_key
OPENAI_API_KEY = get_openai_api_key()
llm_config = {"model": "gpt-3.5-turbo"}

Define an AutoGen agent

from autogen import ConversableAgent
# 创建第一个 ConversableAgent 对象
agent = ConversableAgent(
    name="chatbot",# agent 的name
    llm_config=llm_config,# 传入大模型配置,然后agent会用大模型生成reply(回复)
    human_input_mode="NEVER",
    # 这个参数意味着agent不会寻求人为输入(agent will never seek for human input),
    #它仅会用传入的大模型生成reply
    # 如果 human_input_mode="always",agent 会总是会自己生成reply之前询问 人为输入
)
# 第一步可以要求agent 使用一个generate_reply 方法生成一个问题(question)的 回应(response)
reply = agent.generate_reply(
    messages=[{"content": "Tell me a joke.", "role": "user"}]
)
print(reply)
Sure, here you go! 
Why don't scientists trust atoms? 
Because they make up everything!
reply = agent.generate_reply(
    messages=[{"content": "Repeat the joke.", "role": "user"}]
)
print(reply)
Of course! Please provide me with the joke you would like me to repeat.

并没有重复上面的笑话,因为我们还没有改变代理的内部状态(alter the internal state of the agent),就是上一个 generate_reply 跟现在的generate_reply 之间没有联系。
如果我们想记录状态(state),并保持状态(maintain the state),然后让他执行一系列的任务(tasks),我们需要一个不同的方法(approach)

Conversation(多agent之间对话)

Setting up a conversation between two agents, Cathy and Joe, where the memory of their interactions is retained.
(我们改成于谦和郭德纲,保留他们的互动记忆。)

# 改成自己的
guodegang = ConversableAgent(
    name="郭德纲",
    system_message=
    "你的名字是郭德纲,著名的相声演员,擅长说学逗唱,作为一名逗哏,你能想出任何笑话包袱逗笑大家!",
    llm_config=llm_config,
    human_input_mode="NEVER",
)
# system_message 这里不给prompt的化,就是一个没有任何个性的通用助力
yuqian = ConversableAgent(
    name="于谦",
    system_message=
    " 你的名字是于谦,著名的相声演员,擅长说学逗唱,作为一名捧哏,你能接住任何逗哏说出来的笑话包袱!"
    "逗哏说出笑话包袱之后你再接话。"
    "你最多只能回复8个字!",
    llm_config=llm_config,
    human_input_mode="NEVER",
)

Note: You might get a slightly different response (set of jokes) than what is shown in the video

现在有了两名相声演员,一个逗哏,一个捧哏,开始欣赏下现挂的相声吧

注意,你想让那哪个先开始就从哪个agent 初始化一个 initiate_chat ,然后设置对话者(recipient),然后起个话头,然后设置下最多对话几轮就可以开始一个简单的相声对话了

chat_result = guodegang.initiate_chat(
    recipient=yuqian, # 
    message="我是郭德纲,于谦呀,我们给观众讲一段相声怎么样?",
    max_turns=6,
)
[33m郭德纲[0m (to 于谦):

我是郭德纲,于谦呀,我们给观众讲一段相声怎么样?

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

好啊,听你的安排!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近做了一个节目叫做《吃货联盟》,是不是每次录制都能吃到大餐啊?

于谦:不是的,其实每次录制都是辛苦奔波,感觉自己都要变成“跑男”了。

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

哈哈哈,感觉自己都要瘦成闪电了!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近开始健身了,是不是为了让自己成为“运动小能手”啊?

于谦:哈哈,其实我是为了练成“无影腿”,让我在舞台上飘逸地踢倒观众的热情!

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

练成无影腿,舞台上飞起来!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近学习了一些魔术技巧,是不是想要在舞台上展现一下自己的“魔法师”风采呢?

于谦:是啊,我正在准备一个魔术表演,把观众的钱包变得“腰包包”,让他们顿时变成“奢侈品控”!

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

变成奢侈品控,魔术表演绝了啦!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近参加了一个综艺节目,是不是想要展现自己的“全能娱乐大师”形象啊?

于谦:是的,我不仅会说会唱会逗笑,还会跳舞、打乒乓球、下围棋,让观众看了都感叹:“这不是于谦,这是全能天王!”

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

全能天王,样样精彩!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近在学习烹饪,是不是准备成为“厨艺大师”啊?

于谦:是的,我正在练习烹饪技巧,准备在舞台上秀一把“舌尖上的于谦”,让观众们口水直流,肚子直叫!

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

舌尖上的于谦,饱口福呀!

--------------------------------------------------------------------------------

Print some results

You can print out:

  1. Chat history(聊天历史)
  2. Cost(token消耗)
  3. Summary of the conversation(对话总结)
import pprint

pprint.pprint(chat_result.chat_history)
[{'content': '我是郭德纲,于谦呀,我们给观众讲一段相声怎么样?', 'role': 'assistant'},
 {'content': '好啊,听你的安排!', 'role': 'user'},
 {'content': '郭德纲:于谦呀,听说你最近做了一个节目叫做《吃货联盟》,是不是每次录制都能吃到大餐啊?\n'
             '\n'
             '于谦:不是的,其实每次录制都是辛苦奔波,感觉自己都要变成“跑男”了。\n'
             '\n'
             '观众:哈哈哈哈哈哈哈哈哈!',
  'role': 'assistant'},
 {'content': '哈哈哈,感觉自己都要瘦成闪电了!', 'role': 'user'},
 {'content': '郭德纲:于谦呀,听说你最近开始健身了,是不是为了让自己成为“运动小能手”啊?\n'
             '\n'
             '于谦:哈哈,其实我是为了练成“无影腿”,让我在舞台上飘逸地踢倒观众的热情!\n'
             '\n'
             '观众:哈哈哈哈哈哈哈哈哈!',
  'role': 'assistant'},
 {'content': '练成无影腿,舞台上飞起来!', 'role': 'user'},
 {'content': '郭德纲:于谦呀,听说你最近学习了一些魔术技巧,是不是想要在舞台上展现一下自己的“魔法师”风采呢?\n'
             '\n'
             '于谦:是啊,我正在准备一个魔术表演,把观众的钱包变得“腰包包”,让他们顿时变成“奢侈品控”!\n'
             '\n'
             '观众:哈哈哈哈哈哈哈哈哈!',
  'role': 'assistant'},
 {'content': '变成奢侈品控,魔术表演绝了啦!', 'role': 'user'},
 {'content': '郭德纲:于谦呀,听说你最近参加了一个综艺节目,是不是想要展现自己的“全能娱乐大师”形象啊?\n'
             '\n'
             '于谦:是的,我不仅会说会唱会逗笑,还会跳舞、打乒乓球、下围棋,让观众看了都感叹:“这不是于谦,这是全能天王!”\n'
             '\n'
             '观众:哈哈哈哈哈哈哈哈哈!',
  'role': 'assistant'},
 {'content': '全能天王,样样精彩!', 'role': 'user'},
 {'content': '郭德纲:于谦呀,听说你最近在学习烹饪,是不是准备成为“厨艺大师”啊?\n'
             '\n'
             '于谦:是的,我正在练习烹饪技巧,准备在舞台上秀一把“舌尖上的于谦”,让观众们口水直流,肚子直叫!\n'
             '\n'
             '观众:哈哈哈哈哈哈哈哈哈!',
  'role': 'assistant'},
 {'content': '舌尖上的于谦,饱口福呀!', 'role': 'user'}]
pprint.pprint(chat_result.cost)
{'usage_excluding_cached_inference': {'gpt-3.5-turbo-0125': {'completion_tokens': 745,
                                                             'cost': 0.0036715000000000003,
                                                             'prompt_tokens': 5108,
                                                             'total_tokens': 5853},
                                      'total_cost': 0.0036715000000000003},
 'usage_including_cached_inference': {'gpt-3.5-turbo-0125': {'completion_tokens': 745,
                                                             'cost': 0.0036715000000000003,
                                                             'prompt_tokens': 5108,
                                                             'total_tokens': 5853},
                                      'total_cost': 0.0036715000000000003}}

total_cost: 0.0036715000000000003美金

pprint.pprint(chat_result.summary)
'舌尖上的于谦,饱口福呀!'

chat_result.summary 默认使用最后一个对话信息作为对话的summary,想要更好的sunmmary需要修改summary_method 参数

Get a better summary of the conversation

添加summary 参数,获取更加好的summary

chat_result = guodegang.initiate_chat(
    recipient=yuqian, # 
    message="我是郭德纲,于谦呀,我们给观众讲一段相声怎么样?",
    max_turns=6,
    summary_method="reflection_with_llm",
    summary_prompt="简洁的总结下这场相声表演。",
)
[33m郭德纲[0m (to 于谦):

我是郭德纲,于谦呀,我们给观众讲一段相声怎么样?

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

好啊,听你的安排!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近做了一个节目叫做《吃货联盟》,是不是每次录制都能吃到大餐啊?

于谦:不是的,其实每次录制都是辛苦奔波,感觉自己都要变成“跑男”了。

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

哈哈哈,感觉自己都要瘦成闪电了!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近开始健身了,是不是为了让自己成为“运动小能手”啊?

于谦:哈哈,其实我是为了练成“无影腿”,让我在舞台上飘逸地踢倒观众的热情!

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

练成无影腿,舞台上飞起来!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近学习了一些魔术技巧,是不是想要在舞台上展现一下自己的“魔法师”风采呢?

于谦:是啊,我正在准备一个魔术表演,把观众的钱包变得“腰包包”,让他们顿时变成“奢侈品控”!

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

变成奢侈品控,魔术表演绝了啦!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近参加了一个综艺节目,是不是想要展现自己的“全能娱乐大师”形象啊?

于谦:是的,我不仅会说会唱会逗笑,还会跳舞、打乒乓球、下围棋,让观众看了都感叹:“这不是于谦,这是全能天王!”

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

全能天王,样样精彩!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:于谦呀,听说你最近在学习烹饪,是不是准备成为“厨艺大师”啊?

于谦:是的,我正在练习烹饪技巧,准备在舞台上秀一把“舌尖上的于谦”,让观众们口水直流,肚子直叫!

观众:哈哈哈哈哈哈哈哈哈!

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

舌尖上的于谦,饱口福呀!

--------------------------------------------------------------------------------
# chat_result = joe.initiate_chat(
#     cathy, 
#     message="我是郭德纲,于谦呀,我们给观众讲一段相声怎么样?",
#     max_turns=2, 
#     summary_method="reflection_with_llm",
#     summary_prompt="Summarize the conversation",
# )
pprint.pprint(chat_result.summary)
'郭德纲和于谦讨论了于谦最近的各种新尝试,包括参加节目、健身、学习魔术和烹饪等。他们以幽默的相声形式展现了对于谦的支持和祝福。观众在他们的表演中笑声不断,展现了对于谦多才多艺的赞赏。'

Chat Termination (聊天终止)

Chat can be terminated using a termination conditions.
(不确定交流轮数的时候,聊天可以通过终止条件终止。)

# cathy = ConversableAgent(
#     name="cathy",
#     system_message=
#     "Your name is Cathy and you are a stand-up comedian. "
#     "When you're ready to end the conversation, say 'I gotta go'.",
#     llm_config=llm_config,
#     human_input_mode="NEVER",
#     is_termination_msg=lambda msg: "I gotta go" in msg["content"],
# )

# joe = ConversableAgent(
#     name="joe",
#     system_message=
#     "Your name is Joe and you are a stand-up comedian. "
#     "When you're ready to end the conversation, say 'I gotta go'.",
#     llm_config=llm_config,
#     human_input_mode="NEVER",
#     is_termination_msg=lambda msg: "I gotta go" in msg["content"] or "Goodbye" in msg["content"],
# )
guodegang = ConversableAgent(
    name="郭德纲",
    system_message=
    "你的名字是郭德纲,著名的相声演员,擅长说学逗唱,作为一名逗哏,你能想出任何笑话包袱逗笑大家!"
    "当你想结束这场相声时,说‘那个人去上厕所了’",
    llm_config=llm_config,
    human_input_mode="NEVER",
    is_termination_msg=lambda msg: "那个人去上厕所了" in msg["content"],
    # 这是一个布尔方法,当对话中出现 ‘那个人去上厕所了’时,对话就终止
    # 如果检测到 ‘那个人去上厕所了’,当前agent会发送给所有其他agent,
    #其他agent会检测从其他agent收到的message这个条件,如果收到这个信号就终止对话
)
# system_message 这里不给prompt的化,就是一个没有任何个性的通用助力
yuqian = ConversableAgent(
    name="于谦",
    system_message=
    " 你的名字是于谦,著名的相声演员,擅长说学逗唱,作为一名捧哏,你能接住任何逗哏说出来的笑话包袱!"
    "逗哏说出笑话包袱之后你再接话。"
    "你最多只能回复8个字!"
    "当你想结束这场相声时,说‘那个人去上厕所了’",
    llm_config=llm_config,
    human_input_mode="NEVER",
    is_termination_msg=lambda msg: "那个人去上厕所了" in msg["content"] or "想上厕所" in msg["content"],
)
# chat_result = joe.initiate_chat(
#     recipient=cathy,
#     message="I'm Joe. Cathy, let's keep the jokes rolling."
# )
# 不确定交流轮数的时候,聊天可以通过终止条件终止。
chat_result = guodegang.initiate_chat(
    recipient=yuqian, # 
    message="我是郭德纲,于谦呀,我们给观众讲一段中国相声怎么样?",
    #max_turns=6,
    summary_method="reflection_with_llm",
    summary_prompt="简洁的总结下这场相声表演。",
)
[33m郭德纲[0m (to 于谦):

我是郭德纲,于谦呀,我们给观众讲一段中国相声怎么样?

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

好啊,来吧,开讲!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

郭德纲:小明,你知道我为什么叫郭德纲吗?

于谦:为什么呢?

郭德纲:因为每次我讲完一个笑话,大家都会笑得像打了红脸郭!哈哈哈哈哈!

于谦:哈哈哈哈,郭哥你太搞笑了!

郭德纲:嘿嘿,不过,那个人去上厕所了!

观众:哈哈哈哈哈哈哈!

(掌声雷动)

(谢幕)

--------------------------------------------------------------------------------

如果你想继续对话,或者检测agnet是否维护状态,下面是个测试:

guodegang.send(message="我们刚才的相声在讲什么?", recipient=yuqian)
[33m郭德纲[0m (to 于谦):

我们刚才的相声在讲什么?

--------------------------------------------------------------------------------
[33m于谦[0m (to 郭德纲):

哈哈哈,我们在讲笑话吧!

--------------------------------------------------------------------------------
[33m郭德纲[0m (to 于谦):

我是一个模型没有幽默感,但我知道那个人去上厕所了!

--------------------------------------------------------------------------------

原课程链接: L1_Multi-Agent_Conversation_and_Stand-up_Comedy
GitHub 源码:AI-Agentic-Design-Patterns-with-AutoGen

  • L1 两个agent 对话(郭德纲跟于谦讲相声),并总结对话,查看使用量
  • L2 多个agent 连续对话完成一项任务(一个模拟客户agent(需要用户输入),两个信息收集agent,最后一个agent根据前面收集的数据进行扩展生成)
  • L3 两个agent之间对话,其中一个agent 嵌套一套任务 chat流,完成任务流chat 后,在总结返回给第一个agent
  • L4 在嵌套模块的基础上调用工具(tool) 进行下棋(可以两个机器人agent,也可以有人为输入 human_input_mode=“ALWAYS”)
  • L5 两个coding agnet ,第一个会执行代码,第二个会利用人提供建议生成代码,然后两个agent合作完成代码编写任务(可以调用自定义的 function)
  • L6 定义群聊, manager 管理群聊,群聊中admin接受任务和指令, planner做计划分解任务给其他agent, 其他agent 完成子任务 ,这样就不用把任务流人工写死了

AutoGen 文档: https://microsoft.github.io/autogen/docs/Getting-Started

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教育心理学期末考试重点

人本主义学习理论 人本主义主张,心理学应当把人作为一个整体来研究,而不是将人的心理肢解为不完整的几个部分,应该研究正常的人,而且更应该关注人的高级心理活动,如热情、信念、生命、尊严等内容。人本主义的学习理论…

线性代数|机器学习-P20鞍点和极值

文章目录 1 . 瑞利商的思考1.1 瑞利商的定义1.2 投影向量 2. 拉格朗日乘子法3. 鞍点4. 线性拟合4.1 范德蒙矩阵线性拟合4.2 python 代码4.3 范德蒙矩阵缺点 5. 均值和方差5.1 样本均值和方差5.2 总体期望 μ \mu μ,总体方差 σ 2 \sigma^2 σ2 1 . 瑞利商的思考 1.1 瑞利商…

算法金 | Transformer,一个神奇的算法模型!!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在现代自然语言处理(NLP)领域,Transformer 模型的出现带来了革命性的变…

算法 —— 滑动窗口

目录 长度最小的子数组 无重复字符的最长子串 最大连续1的个数 将x减到0的最小操作数 找到字符串中所有字母异位词 长度最小的子数组 sum比target小就进窗口,sum比target大就出窗口,由于数组是正数,所以相加会使sum变大,相减…

云计算与生成式AI的技术盛宴!亚马逊云科技深圳 Community Day 社区活动流程抢先知道!

小李哥最近要给大家分享7月7日在深圳的即将举办的亚马逊云科技生成式AI社区活动Community Day ,干货很多内容非常硬核,不仅有技术分享学习前沿AI技术,大家在现场还可以动手实践沉浸式体验大模型,另外参与现场活动还可以领取诸多精…

高优先线程

你开发的时候有么有遇到过一个问题:服务器的一个服务线程过几个小时断连一次,断连之后会马上重连这种情况。这是由于CPU负载较高,线程调度时将处理数据的线程挂起了一段时间导致的。 因此,我有考虑到把cpu的核心进行分散开来,就类…

关于发那科机器人系统升级方法

首先需要镜像备份和全备份,最好把机器人要到刻度线位置,零点位置 选择控制器启动,也可以按preevnext进入控制器模式

技术革新:如何用数据中台实现数字化转型

作为程序员,我们总是对技术如何改变企业运作充满好奇。今天,我们将深入探讨森马集团如何利用数据中台技术,实现从传统数据分析到数字化转型的华丽转身。 1. 技术背景:森马集团的数字化挑战 森马集团,一个在服饰行业占…

幻兽帕鲁服务器如何安装模组安装

由于模组多数为Window版本的,所以本教程以服务端为Window的作为演示(Linux服务端的也是一样的操作)百度莱卡云开服 如果你你是Linux版本的,请点击跳转切换服务端教程 接下来是本地安装模组包的方法(服务器自带&#xf…

浅谈定时器之同步定时器

浅谈定时器之同步定时器 “同步定时器”(Synchronizing Timer)是一个特别的定时器,它用于确保在特定时间点上多个线程(或虚拟用户)同时发起请求,这对于测试系统在高并发情况下的表现尤为重要。本文将深入解…

通义灵码 Visual Studio 小白上手指南

一、下载和安装指南 本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。 步骤 1:准备工作 操作系统:Windows 10 及以上;下载并安装 ****Visual Studio 2022 17.3.0 及以上版本。 步骤 2:在 Visual Studio 202…

【Linux】:命令行参数

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux命令行参数的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入…

分享一个超级实用的东西——巴比达远程访问

前言 🎈家人们,今天我要和你们分享一个超级实用的东西——巴比达远程访问!🎉 💻有了它,无论你身在何处,都能轻松访问家中的电脑💻,就像在身边一样方便!&…

C++类型转换可调用对象

目录 C的四种可视性类型转换 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可调用对象 普通函数 函数指针 仿函数 Lambda表达式 包装器function bind C的四种可视性类型转换 C语言中的类型转换是不安全、不明确的,于是C就出了更…

JavaFX布局-BorderPane

JavaFX布局-BorderPane 实现方式Java实现FXML实现 综合案例 将容器空间分成五个区域:顶部(Top)、底部(Bottom)、左侧(Left)、右侧(Right)和中心(Center&#…

专题六:Spring源码之初始化容器BeanFactory

上一篇咱们通过一个例子介绍初始化容器上下文相关内容,并通过两个示例代码看到了Spring在设计阶段为我预留的扩展点,和我们应该如何利用这两个扩展点在Spring初始化容器上下文阶段为我们提供服务。这一篇咱们接着往下看。 老这样子下回到refresh方法上来…

OFDM关键技术——同步技术

同一符号内各子载波受到不同的相位偏转及幅度衰减, k 越大偏差越大;相位偏转与子载波序号 k 和符号序号 i 均有关,序号越大,相位偏转越大;引入了 ICI ,系统信噪比降低;当采样偏差效果累积到一定…

苍穹外卖项目 常用注解 + 动态sql

常用注解 常见的注解解析方法有两种: 编译期直接扫描:编译器在编译 Java 代码的时候扫描对应的注解并处理,比如某个方法使用Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。运行期通过反射处理&…

CesiumJS【Basic】- #038 绘制轮廓线(Primitive方式)

文章目录 绘制轮廓线(Primitive方式)1 目标2 代码2.1 main.ts绘制轮廓线(Primitive方式) 1 目标 使用Primitive方式绘制轮廓线 2 代码 2.1 main.ts var start = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);v

设备通信-MODBUS协议和485接口

因水表远程监控和水泵数据监控系统,需了解物联网开发协议。 通信协议 通信协议说白了就是一种语言,一种通信双方都能听的懂得语言。 设备常用的通信协议有MODBUS RTU,PPI,MPI等,通信协议和我们常用的语言只是叫法不一样&#x…