我正在使用HTML、CSS和JavaScript创建一个网站,我需要一个由AI驱动的聊天机器人。我已经有了包含聊天机器人逻辑(AI、NLTK)的Python文件。现在,在Python文件中,我有一个名为“response()”的函数,它接受用户消息作为参数,并在运行NLP逻辑后返回处理后的响应。我想做的是,当用户发送消息时,
-
JavaScript会将该消息存储在一个变量中(假设为user-response),并应将该变量作为参数发送到Python文件的“response()”函数:response(user-response)
-
Python文件应使用response(user-response)函数,并将处理后的输出发送回JavaScript文件
我该如何实现这一点?
这是Python的逻辑
def response(user_response): #This argument has to be passed from JavaScript robo_response = '' sent_tokens.append(user_response) TfIdVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english') tfidf = TfIdVec.fit_transform(sent_tokens) vals = cosine_similarity(tfidf[-1], tfidf) idx = vals.argsort()[0][-2] flat = vals.flatten() flat.sort() req_tfidf = flat[-2] GREETING_INPUTS = ("hello", "hi", "greetings", "sup", "what's up", "hey") GREETING_RESPONSES = ["hi", "hey", "*nods*", "hi there", "hello", "I'm glad you're talking to me"] for word in user_response.split(): if (word.lower() in GREETING_INPUTS): return random.choice(GREETING_RESPONSES) if(req_tfidf == 0): robo_response = [ "Sorry, I have not been trained to answer that yet!", "Sorry, I cannot answer to that! ] return random.choice(robo_response); robo_response = robo_response+sent_tokens[idx] return robo_response;response("") #This response has to be sent back to JavaScript
这是JavaScript代码
function returnsUserMessage(){ var userResponse = document.getElementById('input-chat').value; console.log(userResponse); return userResponse;}
回答:
我将为你提供几个步骤,但正如评论中@Pointy所说,“如何做到这一切是一个非常大的话题,单单一个Stack Overflow问题无法涵盖”,所以请将这视为一个路线图。
附注:我假设你不希望在前端执行AI逻辑,因为这对客户端来说负担太重。
1- 使用Python创建一个后端服务器(或REST API)。
2- 将你的AI逻辑注入到HTTP请求(GET/POST)中。
后端是一个很大的话题,但我在这里提供一个小例子:
from flask import Flask, json, requestdef response(user_response): ...api = Flask(__name__)@api.route('/response', methods=['POST'])def post_response(): user_response = json.loads(request.json)["user_response"] return json.dumps({response: response(user_response)})if __name__ == '__main__': api.run()
3- 从前端,将用户输入发送到后端(使用你在步骤2中创建的HTTP请求),然后将响应写回。
示例:
<button onclick="returnsUserMessage()">发送</button><script>async function returnsUserMessage() { var user_input = document.getElementById("input-chat").value; var bot_reponse = await fetch('localhost/response', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({user_response: user_input}) }); // 然后你需要在你的元素中展示机器人的响应}</script>