问答机器人prompt

def build_prompt(prompt_template, **kwargs):

'''将 Prompt 模板赋值'''

prompt = prompt_template

for k, v in kwargs.items():

if isinstance(v, str):

val = v

elif isinstance(v, list) and all(isinstance(elem, str) for elem in v):

val = '\n'.join(v)

else:

val = str(v)

prompt = prompt.replace(f"{k.upper()} ", val)

return prompt

prompt_template = """

你是一个问答机器人。

你的任务是根据下述给定的已知信息回答用户问题。

确保你的回复完全依据下述已知信息。不要编造答案。

如果下述已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。

已知信息:
INFO

用户问:
QUERY

请用中文回答用户问题。

"""

import chromadb

from chromadb.config import Settings

class MyVectorDBConnector:

def init (self, collection_name, embedding_fn):

chroma_client = chromadb.Client(Settings(allow_reset=True))

复制代码
    # 为了演示,实际不需要每次 reset()
    chroma_client.reset()

    # 创建一个 collection
    self.collection = chroma_client.get_or_create_collection(name=collection_name)
    self.embedding_fn = embedding_fn

def add_documents(self, documents):
    '''向 collection 中添加文档与向量'''
    self.collection.add(
        embeddings=self.embedding_fn(documents),  # 每个文档的向量
        documents=documents,  # 文档的原文
        ids=[f"id{i}" for i in range(len(documents))]  # 每个文档的 id
    )

def search(self, query, top_n):
    '''检索向量数据库'''
    results = self.collection.query(
        query_embeddings=self.embedding_fn([query]),
        n_results=top_n
    )
    return results

class RAG_Bot:

def init (self, vector_db, llm_api, n_results=2):

self.vector_db = vector_db

self.llm_api = llm_api

self.n_results = n_results

复制代码
def chat(self, user_query):
    # 1. 检索
    search_results = self.vector_db.search(user_query, self.n_results)

    # 2. 构建 Prompt
    prompt = build_prompt(
        prompt_template, info=search_results['documents'][0], query=user_query)

    # 3. 调用 LLM
    response = self.llm_api(prompt)
    return response

创建一个RAG机器人

bot = RAG_Bot(

vector_db,

llm_api=get_completion

)

user_query = "llama 2有对话版吗?"

response = bot.chat(user_query)

print(response)

相关推荐
m0_738120725 分钟前
网络安全编程——Python编写Python编写基于UDP的主机发现工具(完结:解码ICMP头)
python·网络协议·安全·web安全·udp
知白守黑V10 分钟前
从源码看 Flocks:一个 AI 原生 SecOps 平台应该长什么样
python·web安全·安全威胁分析·数据安全·安全运营·ai安全·flocks
m0_7164300712 分钟前
如何在MongoDB中监控集群中的僵尸连接_释放长时间不活跃的游标资源
jvm·数据库·python
m0_7164300712 分钟前
HTML函数开发最低配置是多少_HTML函数入门硬件门槛【指南】
jvm·数据库·python
deepdata_cn15 分钟前
提示工程(Prompt Engineering)
人工智能·prompt
才兄说21 分钟前
机器人二次开发机器狗巡检?低电量自动返充
人工智能·机器人
zzwq.21 分钟前
时间序列处理:日期解析与重采样
python·数据分析
njsgcs29 分钟前
固定几轮调用工具后,让ai根据执行内容自己改进prompt实现进化
人工智能·prompt
Wyz2012102431 分钟前
SQL中如何处理GROUP BY的不可排序问题_ORDERBY与聚合
jvm·数据库·python
Java面试题总结33 分钟前
Python 入门(四)- Openpyxl 操作 Excel 教程
开发语言·python·excel