创建微信机器人和女朋友聊天

by Rob Ellis

由Rob Ellis

创建聊天机器人 (Creating a Chat Bot)

Human interaction has always fascinated me: social awkwardness, communication style, how knowledge is transferred, how relationships are built around trust, story telling and knowledge exchange.

人与人之间的互动总是让我着迷:社交尴尬,沟通方式,知识如何转移,如何围绕信任建立关系,讲故事和知识交流。

What if a machine invoked an emotional response?

如果机器引起了情感React怎么办?

首先是背景故事 (First the back story)

I want to write about a project I have been working on, and how it has engulfed the last few years of my life, but ultimately, this post is about creating a real chat bot.

我想写一个我一直在从事的项目,以及它如何吞噬我生命中的最后几年,但是最终,这篇文章是关于创建一个真正的聊天机器人的。

Work to date has been an extension of the work done in NLP (natural language process), currently a collection of tools now forming the foundation of Node/Natural.

迄今为止的工作是对NLP(自然语言处理)工作的扩展,目前是构成Node / Natural基础的一系列工具。

My initial goal was to build a IBM Watson type clone; something that could parse input in some form and sort out candidates from a data source. Initially I looked at DBPedia and YAGO.

我的最初目标是构建IBM Watson类型的克隆。 可以解析某种形式的输入并从数据源中筛选出候选对象的东西。 最初,我研究了DBPedia和YAGO 。

I realized quickly that creating a Watson was only a secondary goal. I wanted to create something that seemed much more real - a system one could interact with, on a much more human level. Technically speaking, something that was Turing complete.

我很快意识到创建Watson只是次要目标。 我想创建一个看起来更加真实的东西-一个可以在更人的层面上与之交互的系统。 从技术上讲,这是图灵完成的 。

In 2013 I did some research in language and how communication is affected by Big Five Personality Traits. For example people who are tired, or introverted tend to give shorter answers when conversing. I spent a fair amount of time thinking about how this would play into a Chat Bot.

2013年,我对语言进行了一些研究,并研究了交际能力如何影响五个人格特质 。 例如,疲倦或内向的人在交谈时往往给出较短的答案。 我花了很多时间思考如何将其用作聊天机器人。

I also created a project that would create a full back story for a virtual persona including;

我还创建了一个项目,该项目将为虚拟角色创建完整故事,包括;

  • day-to-day activities日常活动
  • schools attended参加学校
  • friends朋友们
  • holidays假期
  • places where they worked, lived, and have traveled.他们工作,生活和旅行的地方。

The above is ideal information for generating fake accounts on social media, but it misses the human aspect — demeanour, tone, personality in writing. It drove me to think what makes two people different, what motivates us within a conversation, and how can this be programmed into a Chat Bot.

以上是在社交媒体上生成假账户的理想信息,但它忽略了人的方面-举止,语气,写作个性。 这让我开始思考是什么使两个人与众不同,是什么促使我们进行对话,以及如何将其编程为聊天机器人。

最新的技术水平在哪里? (Where is the state of the art?)

There are many types of Chat Bots, all with varying levels of complexity and strategies for tricking a human that they are not speaking to a computer.

聊天机器人的类型很多,它们的复杂性和策略各不相同,它们可以欺骗人们没有与计算机说话的人。

ELIZA being the first and most well known created in 1966, would play the part of a doctor and continue to push back the conversation to the user by asking how previous responses would make one feel by trying to dig deeper to the root of the problem. It was clever and also simple.

ELIZA是1966年创建的第一个也是最著名的,它将扮演医生的角色,并通过询问以前的回答如何试图深入探究问题的根源会给人留下怎样的感觉,继续将对话推向用户。 它既聪明又简单。

CleverBot was brought online in 1997. It was designed to reply with input from some point from the past. Today, there are several million replies across many topics and domains. The input is sometimes on topic and relevant, and other times wildly way off topic. This approach is much like search results and without knowing the reason for asking the question in the first place, is it hard to provide accurate results.

CleverBot于1997年投入使用。它的设计目的是用过去的观点来回应。 如今,在许多主题和领域中有数百万个答复。 有时输入的内容与主题相关,而有时则与主题相距甚远。 这种方法很像搜索结果,并且首先不知道提出问题的原因,因此很难提供准确的结果。

Eugene Goostman made the news a few months back as being ‘turing complete’ which created controversy. This bot employs several tricks such as pretending to be a 13-year-old boy who’s english is his second language.

尤金·古斯特曼(Eugene Goostman)几个月前就发布了这个消息, 称其 “图谋完成”,引起了争议。 该机器人采用了多种技巧,例如假装自己是13岁男孩,而英语是他的第二语言。

After reviewing the current landscape, it lead me to believe that fooling a human into thinking a bot is real was not because the bot was great, rather it employing silly tactics like deliberating using broken english, typos and deflection.

在回顾了当前的形势之后,我使我相信,欺骗人们以为机器人是真实的并不是因为该机器人很棒,而是它采用了愚蠢的策略,例如使用断断续续的英语,错别字和偏向来进行思考。

创建聊天机器人 (Creating a Chat Bot)

In 2014 I started to focus on the Loebner Prize, an annual competition in artificial intelligence that awards prizes to the chatterbot considered by the judges to be the most human-like.

2014年,我开始专注于勒布纳奖 ( Loebner Prize) ,这是一年一度的人工智能竞赛,向被评委认为是最人性化的聊天机器人颁发奖品。

I felt this contest was in the right vein and captured the spirit of the software I wanted to create. But unlike some past contestants, I didn’t want to fake it, the bot had to be real. No tricks.

我觉得这次比赛是正确的,并抓住了我想要创建的软件的精神。 但是与过去的参赛者不同,我不想伪造它,它必须是真实的。 没有技巧

To qualify for the Loebner Prize I need to easily pass the screener questions. Here they are for reference:

要获得Loebner奖,我需要轻松地通过筛选问题。 这里供参考:

My name is Bill. What is your name?How many letters are there in the name Bill?How many letters are there in my name?Which is larger, an apple or a watermelon?How much is 3 + 2?How much is three plus two?What is my name?If John is taller than Mary, who is the shorter?If it were 3:15 AM now, what time would it be in 60 minutes?My friend John likes to fish for trout. What does John like to fish for?What number comes after seventeen?What is the name of my friend who fishes for trout?What whould I use to put a nail into a wall?What is the 3rd letter in the alphabet?What time is it now?

Chat bots have to be great at answering questions, this is usually how they are challenged, and IBM’s Watson is probably the best question and answer system. However unlike Watson, we don’t need to be 100% accurate when it comes to answering questions. This is because our bot is an emotional, believable persona, not a cold, flawlessly accurate machine. We can significantly reduce the knowledge base that drives the bot, after all, nobody likes a no-it-all.

聊天机器人必须擅长回答问题,这通常是挑战者的方式,而IBM的Watson可能是最好的问答系统。 但是,与Watson不同,在回答问题时,我们不需要100%准确。 这是因为我们的机器人是一种情感,令人信服的角色,而不是一台冷酷无瑕的精确机器。 我们可以大大减少驱动该机器人的知识库,毕竟没有人喜欢这一切。

Our chat bot needed to have a sound dialogue system as well - something that handle canned responses when we are not able to reason a reply logically. The dialogue systems would also handle other functions such as topic resolution and information flow.

我们的聊天机器人还需要有一个完善的对话系统-当我们无法逻辑推理回复时,可以处理罐装回复。 对话系统还将处理其他功能,例如主题解析和信息流。

高层建筑 (High level Architecture)

When the system received input, it would try to make sense of it. If it could be reasoned with a reply would be generated, however if there was a scripted reply, I would also lean on that for the final output.

当系统收到输入时,它将尝试使其变得有意义。 如果可以推理出一个答复,那么将生成该答复,但是,如果有脚本答复,那么我也将依赖于最终输出。

I like to imagine the bot internalizes the input, allowing time to think about it, just like a human. It may have something clever to say, but chooses to bite its tongue, and take a scripted reply over a reasoned reply.

我喜欢想象机器人将输入内部化,从而有时间像人类一样思考它。 它可能说的很聪明,但是选择咬住它的舌头,然后根据合理的答复接受脚本答复。

For a completely natural chat bot the goal is to reduce the amount of scripted dialog to just a few hundred entries. This puts significant more responsibility in the reason system. Let’s break these components down a little more.

对于一个完全自然的聊天机器人,目标是将脚本化对话框的数量减少到几百个。 这在原因系统中增加了更多的责任。 让我们进一步分解这些组件。

输入分辨率 (Input Resolution)

When you communicate with the bot, whether it is part of an app, game dialogue engine, or just through the command line, sentences are parsed. Each one is chunked and broken into separate message objects for the bot to interpret. Initially sentences parts are broken into separate message objects.

当您与机器人通信时,无论它是应用程序,游戏对话引擎的一部分,还是仅通过命令行,都将解析句子。 每一个都被分块并分解为单独的消息对象,以便机器人进行解释。 最初,句子部分被分解为单独的消息对象。

The chat bot’s replies back what is buffered and streamed in one reply. I also pass the reply into the same system that generates a message object and save that data to memory for later use.

聊天机器人的答复在一个答复中返回缓冲和流式传输的内容。 我还将答复传递到生成消息对象的系统中,并将该数据保存到内存中以备后用。

讯息对象 (Message Object)

This is where all the input is cleaned, normalized, parsed and analyzed. The system keeps several representations of the input for various sub-systems.

在这里,所有输入都将被清理,标准化,解析和分析。 系统保留各种子系统输入的几种表示形式。

>> My name is Bill.
I burst the punctuation, and it becomes...raw: "My name is Bill ."
Then break it down into individual words...words: ['My' 'name' 'is' 'Bill']
Then tag each word with a Parts of Speech tagger.taggedWords:   [    ['My','PRP$'], // Personal pronoun    ['name','NN'], // Noun    ['is','VBZ'],  // Verb present    ['Bill','NNP]  // Proper noun  ]I actually pull out the individual parts and keep them separate as well.nouns: ['name','bill']verbs: ['be']pronouns: ['my']adjectives: []adverbs: []
I also extract named entities, dates and numbers.names: ['Bill']date: nullnumbers: []
I check to see if it is a question, and what type.isQuestion: false
And the message sentiment, is it positive, negative or neutral?sentiment: 0 // neutral

The message object dissects the input and parses it a variety of ways, this is aided by other libraries such as pos.js, Normalizer, and Qtypes.

消息对象剖析输入并以多种方式对其进行解析,这在其他库(例如pos.js,Normalizer和Qtypes)的帮助下得以实现。

归一化 (Normalizer)

When input is received from the user it needs to be cleaned and pre-processed, and run though a library called normalizer . This library will convert British and Canadian spelled words to US English also expand abbreviations and contractions, and fix over 4000 mis-spelled words.

当从用户那里收到输入时,需要对其进行清理和预处理,然后通过一个名为normalizer的库运行。 该库将把英国和加拿大的拼写单词转换为美国英语,还扩大了缩写和缩略语,并修复了4000多个拼写错误的单词。

For example we expand abbreviations:

例如,我们扩展缩写:

Nov 1st I weighed 90 kgs. total November 1st I weighed 90 kilograms total

We expand contractions:

我们扩大收缩:

I’ll listen to y’allI will listen to you all

We convert 1700 Canadian / British words to US words:

我们将1700个加拿大/英国单词转换为美国单词:

armour axe coloured goldarmor ax colored gold

We can fix up to 4000 common mis-spelled words:

我们最多可以修复4000个拼写错误的单词:

are we sceduled thrsday for teh restrauntare we scheduled Thursday for the restaurant

It is at this stage extra spacing and numbers are edited and presented in input and a other bursting related artifacts.

在此阶段,将编辑额外的间距和数字,并将其显示在输入和其他与突发相关的工件中。

Once the input is cleaned it is then passed onto another library to gain more insight into the question type.

清除输入后,将其传递到另一个库,以更深入地了解问题类型。

Q类型 (QTypes)

After the input is normalized, we check to see if it contains a question. This has been pulled out into its own library called qtypes. The library was inspired by work done from one team at the TREC QA Conference. There are over 40 sub-classifications of how the question should be answered. Here is the full list for reference.

输入标准化后,我们检查是否包含问题。 这已被拉入其自己的名为qtypes的库中。 该图书馆的灵感来自TREC QA会议上一个团队的工作。 有关应如何回答问题有40多个子类别。 这是完整列表供参考。

While qType tells us what kind of reply the user expects, qSubType well tell us what the question format is, this is one of: CH, WH, YN and TG:

虽然qType告诉我们用户期望什么样的答复,但qSubType很好地告诉我们问题的格式是什么,这是以下一种:CH,WH,YN和TG:

  • CH: Choice or Alternate Question. The question is asking you to pick between two or more things. For example: Is the water hot or cold?

    CH:选择或替代问题。 问题是要您在两个或多个选项之间进行选择。 例如:水是热的还是冷的

  • WH: Question are the most common, they come in the form of who, what, where, when or why.

    WH:问题是最常见的,以什么在哪里何时为什么的形式出现

  • YN: Yes/No Question are fairly self explanation. For example: Do you have a pencil?YN:是/否问题完全是自我解释。 例如:您有铅笔吗?
  • TG: Tag Question are not really questions, but are ways of asking questions to keep the conversation open. They are statements that usually end in a pronoun, and add a positive or negative ending, for example: It’s beautiful, isn’t it? or Sally went to the store, didn’t she?TG:标记问题并不是真正的问题,而是提出问题以保持对话开放的方法。 它们是通常以代词结尾的语句,并添加正或负的结尾,例如:很漂亮,不是吗? 还是萨莉去商店了,不是吗?

Let’s look at another message object with a question.

让我们看看另一个带有问题的消息对象。

>> What time did the train leave London?
isQuestion: trueqtype: 'NUM:date'qSubType: 'WH'

推理系统 (Reasoning System)

信息检索和历史查找。 (Information Retrieval and History Lookup.)

Once we have a message object, we try to reason about a reply starting first with questions. It is run though all 40 question types and tries to answer the question.

一旦有了一个消息对象,我们就尝试从一个问题开始首先对一个答复进行推理。 它通过所有40种问题类型运行,并尝试回答该问题。

Given:

鉴于:

>> My name is Bill, what is my name?

The qType is “HUM:ind” meaning Human Individual and the qSubType is “WH”.

qType为“ HUM:ind”,表示人类个体,qSubType为“ WH”。

However in each example it is not known if the answer is in the current message object, or if it is something from the past. If there is no name present in the existing object, we are able to walk though the last 20 messages from the users history and find a likely candidate. This approach is used for all 40 question types.

但是,在每个示例中,都不知道答案是否在当前消息对象中,或者答案是否来自过去。 如果现有对象中没有名称,我们可以浏览用户历史记录中的最后20条消息,并找到可能的候选对象。 此方法适用于所有40个问题类型。

基于逻辑的推理 (Logic based reasoning)

Some of the sample questions provided by previous Loebner contest lean on logic and expression based reasoning. Our chat bot should be able to handle these without much of a fuss.

以前的Loebner竞赛提供的一些示例问题都基于逻辑和基于表达的推理。 我们的聊天机器人应该能够轻松处理这些问题。

The Message Object is able to automatically parse numeric expressions or half expressions, for example.

例如,消息对象能够自动解析数字表达式或半表达式。

>> What is 5 + 10? — Full expression.<< I think it is 15.>> Plus 15 more? — Half expression.<< It is now 30.

I always cache the previous answer if it was an expression.

如果它是一个表达式,我总是缓存上一个答案。

The chat bot can also handle roman numeral, binary and hex decimal conversions, and pattern recognition for both linear and arithmetic or geometric sequences.

聊天机器人还可以处理罗马数字,二进制和十六进制十进制转换,以及线性,算术或几何序列的模式识别。

We are also able to compare simple and complex expressions:

我们还可以比较简单和复杂的表达式:

>> Which is larger, an apple or a watermelon?&gt;> John is older than Mary, and Mary is older than Sarah. Which of them is the youngest?

These types of questions need to know about real world items and objects, and opposite and inverse terms, which brings us to the next section…

这些类型的问题需要了解有关现实世界中的项目和对象以及相反和相反的术语,这使我们进入下一部分……

常识知识 (Common Sense Knowledge)

I have toyed with many databases of facts and still struggle with finding the right balance. Do we want to run this software on a phone offline or plug into Googles Freebase API? Should we use a Graph Database or a more traditional RDBMS?

我玩弄了许多事实数据库,但仍在努力寻找正确的平衡。 我们要在手机上离线运行此软件还是要插入Google Freebase API? 我们应该使用图形数据库还是更传统的RDBMS?

As of right now, this chat bot uses a modified version of ConceptNet4 DB and supports over 610,000 facts and roughly 168MB. This allows us to easily resolve facts like:

截至目前,该聊天机器人使用了ConceptNet4 DB的修改版,并支持超过610,000个事实和大约168MB。 这使我们可以轻松解决以下事实:

>> What color is the red sea?<< It is blue.

Along with ConceptNet, we also use scripted facts tuples that are layered in to add more depth to specific domains, this data is called upon when we need to see if two words are opposite as in “ x is older then y, who is the youngest”.

与ConceptNet一起,我们还使用了分层的脚本事实元组,以增加对特定域的深度,当我们需要查看两个单词是否相反时(例如,“ x年龄大于y,年龄最小”),将调用此数据。 ”。

自然学习 (Natural Learning)

The chat bot will learn the same way people learn- by forming trust bonds. When presented with a question to which it does not know the answer, it will ask someone it trusts to find truth similar to a child asking a parent. This conversation is usually saved and thrown back into the conversation loop with other trusted users.

聊天机器人将通过建立信任关系来学习人们学习的方法。 当遇到一个不知道答案的问题时,它将问一个信任的人找到与孩子问父母类似的真相。 通常会保存此对话,然后将其与其他受信任的用户放回对话循环。

自动对帐 (Auto Reconciliation)

When the chat bot is asked about something tangible, it may know something about it, and it may not. However rather then starting from knowledge scratch it will try to make sense of the item and see if it needs it. Given:

当聊天机器人被问到有形的东西时,它可能知道一些东西,而可能不是。 但是,与其从知识的起点开始,不如从头开始,它将尝试使项目有意义,并查看是否需要它。 鉴于:

>> Do you have a bike?

The chat bot will check its memory for any reference to bike, and if it does not have one, then it will ask itself if it should acquire one before answering. Should the bot acquire a bike it might also come up with a back story, or what motivated the decision.

聊天机器人会检查其内存中是否有任何关于自行车的参考,如果没有参考,它会问自己是否应该在回答之前获取参考。 如果机器人购买了一辆自行车,它可能还会提出一个背景故事,或者是促使人们做出决定的原因。

<< I do have a bike, I use it to get to work.

关系管理 (Relationship Management)

Ideally, I would like to get to a point where the relationship with the user matures over time. For example:

理想情况下,我希望与用户的关系随着时间的推移逐渐成熟。 例如:

>> What are you up to tonight?<< Why do you want to know?

Some time passes…

一段时间过去了...

>> What are you up to tonight?<< I have dinner plans with my parents.

This would be implemented like a weighted reply with a relationship score or some metric that defines the current state the user / bot share.

这将像具有关系得分或某种定义用户/机器人共享的当前状态的度量的加权回复那样实现。

脚本引擎 (Scripting Engine)

The scripting engine handles all dialogue that is not reasoned, otherwise known as canned responses. If input is seen to look like x, reply with y. This engine also handles changing topics, other communication flow, and knowledge exchange.

脚本引擎处理所有没有理由的对话,也称为罐装响应。 如果输入看起来像x,请回答y。 该引擎还处理不断变化的主题,其他交流流程和知识交流。

At its core, the dialogue engine is responsible for defining the topics the bot is allowed to talk about, and keep conversation guided somewhat within certain domains. While the reasoning system can handle most types of questions, the dialogue engine will manage general statements.

对话引擎的核心是负责定义允许机器人谈论的主题,并使对话在某些领域内保持一定的指导性。 虽然推理系统可以处理大多数类型的问题,但对话引擎将管理常规语句。

When conversation hits a lull, the chat bot will be able to detect it and re-engage. Knowing when someone is choosing not to answering a question, or taking an exceptionally long time to answer it is a challenge all on its own.

当对话停顿时,聊天机器人将能够检测到它并重新参与。 知道何时某人选择不回答问题,或者花费非常长的时间回答这个问题本身就是一个挑战。

The dialogue engine is a mashup between some existing open source libraries, primary RiveScript and ChatScript. The goal here is to be able to create expressive triggers — phrases that match input, and deliver a meaningful reply.

对话引擎是一些现有开源库(主要的RiveScript和ChatScript)之间的混搭。 这里的目标是能够创建富有表现力的触发器-匹配输入的短语,并提供有意义的答复。

For example

例如

+ i like you- aww, I like you as well.

This will only match those three words in that order. “i like you”. To be more expressive you could add some optional words.

这只会按该顺序匹配这三个词。 “我喜欢你”。 为了更具表现力,您可以添加一些可选单词。

+ i (like|love) you- I think the world of you too.

We can also take the word they choose and pass it back to the user.

我们还可以接受他们选择的单词,并将其传递回用户。

+ i (like|love) you- I <cap> you too!

Now we reply with the same word they choose. We call it captured input and we can expand this furture by using WordNet synonyms.

现在,我们用他们选择的相同单词来回答。 我们将其称为捕获的输入,并且可以使用WordNet同义词来扩展此功能。

i ~like youI <cap> you too.

WordNet resolves ~like to (cotton|prefer|care for|love|please). By using this syntax you can build up more complex expressions and reduce the overall amount of scripting required to effectively communicate your message.

WordNet可以解决〜喜欢(棉花|更喜欢|喜欢|喜欢)。 通过使用此语法,您可以构建更复杂的表达式并减少有效传达消息所需的脚本总量。

If you’re interested in other types of supported Syntax here is a link.

如果您对其他类型的受支持语法感兴趣,请单击此处的链接。

外挂程式 (Plugins)

This chat bot is not single purpose. It can be customized for different scenarios, and with the help of plugins you can have direct access to the message object and the user object. Here is an example of that:

这个聊天机器人不是单一目的。 可以针对不同的情况对其进行自定义,并且借助插件,您可以直接访问消息对象和用户对象。 这是一个例子:

+ i ~like you+ ^doILikeUser(<cap>)

We have a plugin called “doILikeUser” in our plugin folder.

我们的插件文件夹中有一个名为“ doILikeUser”的插件。

exports.doILikeUser = function(cap, cb) {  var reply = (this.UserObj.name !== "bill") ?     "Well I don't" + cap + "you!" : "Yes I" + cap + "you too!";  cb(null, reply);}

In this fun example, we reply with “Yes I love you too!” only if the user’s name is Bill. Otherwise the reply is “Well I don’t love you!”

在这个有趣的示例中,我们回答“是的,我也爱你!” 仅当用户名是Bill时。 否则,答复是“我不爱你!”

This is really the tip of what can be done with Plugins.

这确实是使用插件可以完成的技巧。

结论 (Conclusion)

Interacting with software at a human level is becoming more mainstream from services like Google Now, Siri, to digital switch boards and non-player characters in video games. Soon people will not be able to tell the difference between human and machine.

从Google Now,Siri等服务到数字配电盘和视频游戏中的非玩家角色,与人进行软件交互变得越来越主流。 很快人们将无法分辨人机之间的区别。

勒布纳奖呢? (What about the Loebner Prize?)

Unfortunately, I missed the cut off for 2014 as I needed to write a self-contained windows client to submit for judging. This was not going to happen given time constraints, and the current state of the scripting engine. Instead, the world gets this lovely post.

不幸的是,由于我需要编写一个独立的Windows客户端来提交评审,所以我错过了2014年的截止日期。 考虑到时间限制以及脚本引擎的当前状态,这种情况不会发生。 相反,世界得到了这个可爱的职位。

I have started open sourcing some project parts and will continue to open up more over the next few months. Please feel free to leave feedback on here, Twitter, HN.

我已经开始开源一些项目部分,并将在接下来的几个月中继续开放更多内容。 请随时在此处留下反馈, Twitter , HN 。

与上述项目的快速链接。 (Quick Links to projects mentioned above.)

  • Normalizer on Github

    Github上的规范化器

  • QTypes on Github

    Github上的QType

  • ConceptNet Interface on Github

    Github上的ConceptNet接口

翻译自: https://www.freecodecamp.org/news/creating-a-chat-bot-42861e6a2acd/

创建微信机器人和女朋友聊天

创建微信机器人和女朋友聊天_创建聊天机器人相关推荐

  1. plsql创建表提示标识符过长_创建安全多签名钱包及高级设置

    在 Mist创建多签名钱包 Mist以太坊钱包有个选项是可以用多签名钱包使钱包里的余额更安全.用多签名钱包的好处是它需要多个账号共同批准才能够从余额中提取大额资金.创建多签名钱包之前,需要创建多个账号 ...

  2. 海王必备,我用python写了一个微信机器人和她聊天之后把我拉黑了

    前言 事情是这样的,最近认识的一位小姐姐有每天早晨看天气预报的习惯.在我看来,很多人起床第一件事情就是看微信消息,既然这样,我就勉为其难每天早晨给小姐姐发送一则天气预报吧. 开始几天,我是使用很原始的 ...

  3. 小姐姐知道我用微信机器人和她聊天之后,把我拉黑了

    前言 事情是这样的,最近认识的一位小姐姐有每天早晨看天气预报的习惯.在我看来,很多人起床第一件事情就是看微信消息,既然这样,我就勉为其难每天早晨给小姐姐发送一则天气预报吧. 开始几天,我是使用很原始的 ...

  4. MySQL创建数据库得语句是什么_创建数据库的语句是什么

    创建数据库的语句是:[CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] [[DEFAULT] COLLATE ];]. 本文操作环境 ...

  5. mysql创建储存过程 输入学生名子_创建一个存储过程,给定某学生学号,要求查询出该学生的姓名,所选课程名和成绩.(SQL SERVER)...

    展开全部 /*创建存储过程*/ CREATE PROCEDURE proc_select--建立存储过程 @Sno char(10) output,--输入输出参数636f70793231313335 ...

  6. ui vue 创建项目教程 并关闭语法_创建vue项目流程

    创建vue项目流程 1.使用构建工具vue-cli创建项目脚手架 vue-cli是一个官方发布vue.js项目脚手架,使用vue-cli可以快速创建vue项目. (1)安装 确认已安装了node.js ...

  7. 小伙用Python编写QQ机器人和女朋友聊了一下午都没被发现?

    1 技术选型 1.1 QQBot 百度了解到的第一个是QQBot,是一个用 python 实现的.基于腾讯 SmartQQ 协议的简单 QQ 机器人,可运行在 Linux 和 Windows 平台下, ...

  8. python创建学生类和教师类_创建StudentServices类

    跟着王进老师学开发Python系列课程: 课程从0开始,讲到人工智能:按阶段授课,从基础到跑路: 适合无基础的小白,也适合定制,需要哪个模块学哪个模块: 包含Python语法,Django,爬虫,My ...

  9. 威漫哨兵机器人_同为漫威机器人,哨兵机器人和奥创之间谁更厉害?答案显然是他!...

    欢迎来到百家号:小黄在家乡卖菜,今天为大家介绍同为漫威机器人,哨兵机器人和奥创之间谁更厉害?答案显然是他! 在漫威宇宙里,不仅有着数不胜数的超级英雄,还有着与之对立的反派角色.通常来说,为了衬托出正面 ...

最新文章

  1. python编程入门经典实例-终于明了python入门经典实例
  2. docker -v 文件夹下没有数据_详细!快速入门指南!Docker
  3. 学python就业到底如何_学习python后,就业如何?
  4. 《程序员自我修养》阅读笔记-可执行文件装载与进程
  5. 计算机技术及应用攻略,组策略应用全攻略
  6. 计算机中1024换算单位,数据换算(计算机中数据的单位换算)
  7. [渝粤教育] 西南科技大学 教育心理学 在线考试复习资料
  8. SiteSucker Mac版(整站下载工具)中文版
  9. 在线制作生成装逼工具微信小程序源码
  10. 标准柯西分布_对柯西分布性质的进一步讨论
  11. 画廊效果的ViewPager实现(附带无限自动轮播)
  12. zend guard loader php ts,安装Zend Guard Loader说明
  13. 商务网站建设与维护【11】
  14. 威廉•欧奈尔选股七法
  15. 海康摄像机sdk踩坑记述
  16. 输入一行英文句子,统计其中的单词个数。例如,输入”How are you.”,则输出3。
  17. mysql polygon 类型_MySQL数据类型 - 空间数据类型 (4)
  18. FLAG_DISMISS_KEYGUARD FLAG_SHOW_WHEN_LOCKED
  19. 阿里最强 Python 自动化工具开源了!
  20. HyperLedger Cello学习笔记

热门文章

  1. 大学计算机应用技术基础vb考试,计算机vb考试试题精选
  2. 安装CUDA失败的情况nsight visual studio edition失败
  3. 当我们老了,又会怎样
  4. 使用cmd命令关机或重启电脑
  5. Outlook-VBA-02-对收件箱进行遍历
  6. 第2章 GIS空间分析的基本理论
  7. VTP协议与配置(小实验详细步骤、思路)
  8. 卷积和拉普拉斯变换的关系-卷积定理
  9. MFC显示进度条时间
  10. 电子招投标给企业带来的实用价值