|
import os |
|
|
|
from langchain.schema import Document |
|
from langchain.embeddings.openai import OpenAIEmbeddings |
|
from langchain.chat_models import ChatOpenAI |
|
from langchain.prompts import PromptTemplate |
|
from langchain.chains import LLMChain |
|
from langchain.llms import Tongyi |
|
from langchain.chains.question_answering import load_qa_chain |
|
|
|
from langchain.vectorstores import Chroma |
|
import pandas as pd |
|
import json |
|
|
|
|
|
os.environ["DASHSCOPE_API_KEY"] = 'sk-38e455061c004036a70f661a768ba779' |
|
DASHSCOPE_API_KEY='sk-38e455061c004036a70f661a768ba779' |
|
|
|
os.environ["OPENAI_API_KEY"]='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' |
|
|
|
embeddings = OpenAIEmbeddings() |
|
vectorstore = Chroma(persist_directory="./chroma_db_modelY", embedding_function=embeddings) |
|
|
|
|
|
|
|
vectorstore.as_retriever(search_type="similarity_score_threshold",search_kwargs={'k': 3,'score_threshold': 0.1}) |
|
|
|
|
|
|
|
|
|
from langchain.llms import OpenAI |
|
from langchain.retrievers.self_query.base import SelfQueryRetriever |
|
from langchain.chains.query_constructor.base import AttributeInfo |
|
|
|
metadata_field_info = [ |
|
AttributeInfo( |
|
name="brand", |
|
description="汽车品牌", |
|
type="string", |
|
), |
|
AttributeInfo( |
|
name="model", |
|
description="车型", |
|
type="string", |
|
), |
|
AttributeInfo( |
|
name="name", |
|
description="具体车型名称", |
|
type="string", |
|
), |
|
AttributeInfo( |
|
name="year", |
|
description="上市年份", |
|
type="integer", |
|
), |
|
AttributeInfo( |
|
name="price", |
|
description="售价", |
|
type="string" |
|
) |
|
] |
|
document_content_description = "汽车车型的用户评价" |
|
llm = OpenAI(temperature=0) |
|
|
|
|
|
retriever = SelfQueryRetriever.from_llm( |
|
llm, vectorstore, document_content_description, metadata_field_info, verbose=True,enable_limit=True |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def retrieve_info(query): |
|
return retriever.get_relevant_documents(query=query) |
|
|
|
|
|
llm=ChatOpenAI(temperature=0, model='gpt-3.5-turbo-16k-0613') |
|
|
|
template = """ |
|
你是一名掌握了全部汽车用户真实使用评价内容的智能回复机器人。 |
|
我将发送给你一位客户关于汽车使用、购买建议、与其他品牌车型对比等方面的问题。 |
|
客户希望你在真实车主评价的基础上,归纳总结形成一句结论性的内容,发送给这位客户,并遵循以下所有规则。 |
|
1/ 在篇幅、语气、逻辑论证和其他细节方面,答复应与尽可能的给人专业的感觉,如实客观的表达问题的答案,不要增加你自己的幻觉。 |
|
2/ 如果在真实车主评价内容中没有这个问题的相关答案,请回答:“很抱歉,基于真实车主的口碑数据,我暂时不能给出您这个问题的答案。“ |
|
{message} |
|
以下是针对这个问题,真实车主评价内容: |
|
{best_practice} |
|
请为这个客户返回最符合问题的最佳回复内容: |
|
|
|
所有回复均为中文 |
|
""" |
|
prompt=PromptTemplate( |
|
input_variables=["message","best_practice"], |
|
template=template |
|
) |
|
|
|
chain=LLMChain(llm=llm,prompt=prompt) |
|
|
|
def generate_response(message): |
|
best_practice = retrieve_info(message) |
|
print('message:',message) |
|
print('向量召回内容Len:',len(best_practice)) |
|
print('向量召回内容:',best_practice) |
|
print('') |
|
print('') |
|
print('') |
|
print('') |
|
print('') |
|
print('') |
|
print('') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
response = chain.run(message=message,best_practice=best_practice) |
|
return response |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message='特斯拉ModelY和宝马x3对比下性价比如何?' |
|
print(generate_response(message)) |
|
|