人工智能开发实战
知识模块
- L1. ChatGPT 应用
- L2. 提示词工程
- L3. 人工智能应用开发平台
目录
- 实战:多轮对话的聊天机器人
- 实战:智能问答系统
- 实战:人工智能服务平台
受众
- 测试开发工程师
- Python 开发工程师
实战:多轮对话的聊天机器人
需求:
- 编写代码进行多轮对话,设计一个聊天机器人,能够处理用户的连续问题并保持上下文。
- 使用循环接收用户输入,并根据上下文生成回复
- 再对话结束添加结束条件(如用户输入
退出
)
课堂练习:基本的 API 调用示例
from ollama import Client
client = Client(
host='https://ollama.ceshiren.com/',
auth=('ceshiren', 'hogwarts66')
)
def ask_question(prompt):
response = client.chat(
model="qwen2:7b",
messages=[{"role": "user", "content": prompt}],
)
return response.message.content
# 发送简单的问题
question = "法国的首都是哪里?"
print(f"问题: {question}")
answer = ask_question(question)
print(f"回答: {answer}")
# 发送不同的问题并观察大模型的回应
question2 = "《杀死一只知更鸟》的作者是谁?"
print(f"\n问题: {question2}")
answer2 = ask_question(question2)
print(f"回答: {answer2}")
# 继续进行提问
question3 = "讲个笑话吧。"
default_answer = ask_question(question3)
print(f"回答: {default_answer}")
实战思路
实战代码
conversation = [
{"role": "system", "content": "你是一个智能回答小助手"}
]
print("开始聊天吧,输入`exit`退出聊天")
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
conversation.append({"role": "user", "content": user_input})
response = client.chat(
model="qwen2:7b",
messages=conversation
)
bot_response = response.message.content
conversation.append({"role": "assistant", "content": bot_response})
print(f"小助手: {bot_response}")
实战:智能问答系统
需求:
- 使用 ChatGPT API 结合文档内容来回答用户的问题。
- 设计一个系统,将用户的问题与文档内容进行匹配,并生成相应的回答。
实现要求:
- 准备一个包含信息的文档。
- 编写一个 Python 脚本,加载文档并根据用户的问题生成回答。
- 使用 API 进行调用,并优化提取的回答。
实战思路
实战代码
document = """
[在这里插入长文档内容]
"""
print("根据文档内容提问吧(输入 'exit' 退出):")
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
messages = [
{"role": "system", "content": "你是一个智能问答小助手"},
{"role": "user", "content": f"Document: {document}"},
{"role": "user", "content": f"Question: {user_input}"}
]
response = client.chat(
model='qwen2:7b',
messages=messages,
)
answer = response.message.content
print(f"Answer: {answer}")
实战:人工智能服务平台
- 通过人工智能修改简历、模拟面试。
- 开发人工智能模拟面试平台。
实战思路
技术架构设计
技术选型
- 因为功能比较简单,所以技术架构可选择任意的前后端技术。
- 示例使用
Flask + Template + HTML/CSS
技术
前端界面实现
<!DOCTYPE html>
<head>
<title>霍格沃兹测试开发学社模拟面试系统</title>
<link rel="stylesheet" href="{{ url_for('static', filename='main.css') }}"/>
</head>
<body>
<img src="{{ 'https://ceshiren.com/uploads/default/original/1X/809c63f904a37bc0c6f029bbaf4903c27f03ea8a.png' }}"
class="icon"/>
<h3>霍格沃兹测试开发学社模拟面试系统</h3>
{% if result %}
<div class="result">{{ result }}</div>
{% endif %}
<form action="/" method="post">
<input type="text" name="msg" placeholder="请先说你好,打个招呼" required/>
<input type="submit" value="开始面试"/>
</form>
</body>
后端服务实现
通过变量message
记录和大模型的历史交互信息。
# 发送的历史消息
messages = []
从前端获取到用户的输入信息,并将从大模型获取到的响应展示到界面上。 - 如果是第一次,则使用预制的prompt。 - 不是第一次,则接受响应信息。
from ollama import Client
from flask import Flask, request, redirect, url_for, render_template
# 创建 flask 实例
app = Flask(__name__)
messages = []
# 创建 Ollama 实例
client = Client(
host='https://ollama.ceshiren.com/',
auth=('ceshiren', 'hogwarts66')
)
# 定义路由
@app.route("/", methods=("GET", "POST"))
def index():
if request.method == "POST":
# 获取前端的用户输入信息
user_msg = request.form["msg"]
# 定义要发送给 Ollama 接口的信息
if messages:
# 有上下文历史
messages.append({
'role': 'user',
# 把用户输入的信息直接发给 Ollama
'content': user_msg
})
else:
# 第一次初始化
messages.append({
'role': 'user',
# 把最初的提示词发送给 openai
'content': generate_prompt(user_msg)
})
# 打印创建好的信息
print(f"messages: {messages}")
# 调用 Ollama 自带的方法,向 Ollama 服务器发出请求,并获取响应
response = client.chat(
model='qwen2:7b',
messages=messages
)
# 从响应内容中提取 Ollama 回复的内容
answer = response.message.content
# 打印回复内容
print(f"answer: {answer}")
# 刷新首页,返回答案信息
# result 参数会拼接在 index 视图函数对应路由的后方
# http://xx/?result=xxx
return redirect(url_for("index", result=answer))
# 获取拼接在 url 中的 result 参数的值,如果没有携带 result,则 result 值为空
result = request.args.get("result")
print(f"result = {result}")
# 第一次进入首页,result 为空,输入框上方不显示内容
return render_template("index.html", result=result)
def generate_prompt(msg):
# 定义提示词
prompt_msg = f"""你是一名软件测试工程师,你了解软件测试的技术与经验,你需要面试应聘者。
我是应聘者,你会问我这个职位的面试问题。
我希望你只以面试官的身份回答,一次只问一个问题,问我问题并等待我的回答。
当我说结束面试的时候给出我的面试表现的评价和我的改进方向。
我的输入是 {msg}
"""
# 返回提示词
return prompt_msg
if __name__ == '__main__':
app.run(debug=True)
总结
- 掌握 Ollama API 的调用方式
- 了解一个人工智能平台的基本设计思路。
- 通过前后端开发的技术,实现一个基本的模拟面试平台。