一、多轮输出调用
通过while循环实现与大模型交互调用,同时也可以保存历史的聊天记录,总结后传入大模型,这样就可以实现对话的连贯性。
from openai import OpenAI
import os
os.environ['OPENAI_BASE_URL']=''
os.environ['OPENAI_API_KEY']=''
client = OpenAI()
messages=[]
while True:
content = input('User:')
messages.append({'role': 'user', 'content': content})
print(messages)
responses=client.chat.completions.create(
model='gpt-3.5-turbo',
messages=messages
)
asst_content=responses.choices[0].message.content
print('Assitant:',asst_content)
messages.append({'role':'assistant','content':asst_content})
print(messages)
# exit()
二、调用OpenAI的embeding模型
from openai import OpenAI
import os
os.environ['OPENAI_BASE_URL']=''
os.environ['OPENAI_API_KEY']=''
client = OpenAI()
responses=client.embeddings.create(
model="text-embedding-ada-002",
input=["感冒了吃什么药好得快?", "阿莫西林能治感冒吗?"],
encoding_format="float"
)
print(responses.data[0].embedding)
print(len(responses.data[0].embedding))
for item in responses.data:
content = item.embedding
print(len(content))
# [0.006358565, 0.016525812, 0.018991774, -0.022568064,..., -0.017765248]
三、召回相似文档
我们对文档向量化的主要目标是可以实现各种数学运算,比如计算相似度。RAG文档文档的基本原理也是通过召回相关的文档,然后回答用户的问题。
from openai import OpenAI
import numpy as np
import os
os.environ['OPENAI_BASE_URL']=''
os.environ['OPENAI_API_KEY']=''
client = OpenAI()
query = '感冒吃什么药效果好?可以吃阿莫西林吗?'
# 查询语句向量化
query_resp = client.embeddings.create(
model="text-embedding-ada-002",
input=query
)
query_vec = np.array(query_resp.data[0].embedding)
print(query_vec)
# 备选文本向量化
question_texts = [
'什么叫感冒? / 感冒是一种什么病?',
'感冒一般是由什么引起的?/ 什么会导致感冒?',
'感冒会有哪些症状?/ 感冒有哪些临床表现?',
'感冒吃什么药好得快?/ 感冒怎么治?',
'得了感冒去医院挂什么科室的号?',
'感冒要怎么预防?',
'感冒换着有什么禁忌?/ 感冒不能吃什么?',
'感冒要做哪些检查?',
'感冒能治好吗?/ 感冒治好的几率有多大?',
'感冒的并发症有哪些?',
'阿莫西林能治那些病?'
]
question_resp=client.embeddings.create(
model="text-embedding-ada-002",
input=question_texts
)
question_vecs = []
for item in question_resp.data:
question_vecs.append(np.array(item.embedding))
print(question_vecs)
# 计算欧式距离,距离越小,相似度越高
import numpy as np
l2_distances = np.linalg.norm(query_vec - question_vecs, axis=1)
closest_indices = np.argsort(l2_distances)[:3]
# print(closest_indices)
for idx in closest_indices:
print(question_texts[idx])