Mẫu gợi ý Few-shot
Bao gồm các mẫu tương tác trong gợi ý giúp mô hình hiểu rõ ý đồ của người dùng và cung cấp câu trả lời tốt hơn hoặc thực hiện các nhiệm vụ. Few-shot prompt templates là việc sử dụng một tập hợp nhỏ ví dụ để hướng dẫn mô hình xử lý đầu vào mới. Các ví dụ này có thể được sử dụng để huấn luyện mô hình để nó có thể hiểu và trả lời các câu hỏi tương tự một cách tốt hơn.
Ví dụ:
Q: Batman là gì?
A: Batman là một nhân vật truyện tranh hư cấu.
Q: Torsalplexity là gì?
A: Không biết.
Q: Mô hình ngôn ngữ là gì?
A:
Hãy nói với mô hình rằng Q là câu hỏi và A là câu trả lời, và tương tác theo định dạng này.
Dưới đây là một giải thích về lớp công cụ được cung cấp bởi Lanchain để chèn một số ví dụ tương tác nhỏ trong gợi ý.
Sử dụng tập ví dụ
Tạo Tập Ví Dụ
Định nghĩa một mảng examples
bên dưới, chứa một tập hợp các ví dụ Q&A.
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
examples = [
{
"question": "Cuộc đời ai sống lâu hơn, Muhammad Ali hay Alan Turing?",
"answer":
"""
Chúng ta cần phải tiếp tục theo dõi câu hỏi: Có.
Theo dõi: Muhammad Ali qua đời ở tuổi bao nhiêu?
Câu trả lời trung gian: Muhammad Ali qua đời khi 74 tuổi.
Theo dõi: Alan Turing qua đời ở tuổi bao nhiêu?
Câu trả lời trung gian: Alan Turing qua đời khi 41 tuổi.
Vì vậy câu trả lời cuối cùng là: Muhammad Ali
"""
},
{
"question": "Người sáng lập craigslist sinh vào thời điểm nào?",
"answer":
"""
Chúng ta cần phải tiếp tục theo dõi câu hỏi: Có.
Theo dõi: Ai là người sáng lập craigslist?
Câu trả lời trung gian: craigslist được sáng lập bởi Craig Newmark.
Theo dõi: Craig Newmark sinh vào thời gian nào?
Câu trả lời trung gian: Craig Newmark sinh vào ngày 6 tháng 12 năm 1952.
Vì vậy câu trả lời cuối cùng là: Ngày 6 tháng 12 năm 1952
"""
},
{
"question": "Mẹ của bà ngoại của George Washington là ai?",
"answer":
"""
Chúng ta cần phải tiếp tục theo dõi câu hỏi: Có.
Theo dõi: Mẹ của George Washington là ai?
Câu trả lời trung gian: Mẹ của George Washington là Mary Ball Washington.
Theo dõi: Cha của Mary Ball Washington là ai?
Câu trả lời trung gian: Cha của Mary Ball Washington là Joseph Ball.
Vì vậy câu trả lời cuối cùng là: Joseph Ball
"""
},
{
"question": "Đạo diễn của 'Jaws' và 'Casino Royale' có đến từ cùng một quốc gia không?"
"answer":
"""
Chúng ta cần phải tiếp tục theo dõi câu hỏi: Có.
Theo dõi: Đạo diễn của 'Jaws' là ai?
Câu trả lời trung gian: Đạo diễn của 'Jaws' là Steven Spielberg.
Theo dõi: Steven Spielberg đến từ đâu?
Câu trả lời trung gian: Hoa Kỳ.
Theo dõi: Đạo diễn của 'Casino Royale' là ai?
Câu trả lời trung gian: Đạo diễn của 'Casino Royale' là Martin Campbell.
Theo dõi: Martin Campbell đến từ đâu?
Câu trả lời trung gian: New Zealand.
Vì vậy câu trả lời cuối cùng là: Không
"""
}
]
Tạo Một Định Dạng Cho Các Ví Dụ Nhỏ
Chỉ cần chèn các ví dụ vào mẫu gợi ý bằng cách sử dụng đối tượng PromptTemplate
.
example_prompt = PromptTemplate(input_variables=["question", "answer"], template="Câu hỏi: {question}\\n{answer}")
print(example_prompt.format(**examples[0]))
Kết quả:
Câu hỏi: Cuộc đời ai sống lâu hơn, Muhammad Ali hay Alan Turing?
Chúng ta cần phải tiếp tục theo dõi câu hỏi: Có.
Theo dõi: Muhammad Ali qua đời ở tuổi bao nhiêu?
Câu trả lời trung gian: Muhammad Ali qua đời khi 74 tuổi.
Theo dõi: Alan Turing qua đời ở tuổi bao nhiêu?
Câu trả lời trung gian: Alan Turing qua đời khi 41 tuổi.
Vì vậy câu trả lời cuối cùng là: Muhammad Ali
Cung cấp mẫu và định dạng cho FewShotPromptTemplate
Với đối tượng FewShotPromptTemplate
, bạn có thể chèn nhiều nội dung mẫu một cách đồng loạt.
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
suffix="Câu hỏi: {input}",
input_variables=["input"]
)
print(prompt.format(input="Ai là cha của George Washington?"))
Kết quả:
Câu hỏi: Ai có tuổi thọ lâu hơn, Muhammad Ali hay Alan Turing?
Chúng ta cần tiếp tục theo dõi câu hỏi này: Có.
Theo dõi: Muhammad Ali qua đời ở tuổi bao nhiêu?
Câu trả lời trung gian: Muhammad Ali qua đời ở tuổi 74.
Theo dõi: Alan Turing qua đời ở tuổi bao nhiêu?
Câu trả lời trung gian: Alan Turing qua đời ở tuổi 41.
Vậy câu trả lời cuối cùng là: Muhammad Ali
Câu hỏi: Người sáng lập craigslist sinh năm nào?
Chúng ta cần tiếp tục theo dõi câu hỏi này: Có.
Theo dõi: Ai là người sáng lập craigslist?
Câu trả lời trung gian: Craigslist được sáng lập bởi Craig Newmark.
Theo dõi: Craig Newmark sinh năm nào?
Câu trả lời trung gian: Craig Newmark sinh vào ngày 6 tháng 12 năm 1952.
Vậy câu trả lời cuối cùng là: Ngày 6 tháng 12 năm 1952
Câu hỏi: Ai là mẹ của ông ngoại của George Washington?
Chúng ta cần tiếp tục theo dõi câu hỏi này: Có.
Theo dõi: Ai là mẹ của George Washington?
Câu trả lời trung gian: Mẹ của George Washington là Mary Ball Washington.
Theo dõi: Ai là cha của Mary Ball Washington?
Câu trả lời trung gian: Cha của Mary Ball Washington là Joseph Ball.
Vậy câu trả lời cuối cùng là: Joseph Ball
Câu hỏi: Đạo diễn của "Jaws" và "Casino Royale" có đến từ cùng một quốc gia không?
Chúng ta cần tiếp tục theo dõi câu hỏi này: Có.
Theo dõi: Ai là đạo diễn của "Jaws"?
Câu trả lời trung gian: Đạo diễn của "Jaws" là Steven Spielberg.
Theo dõi: Steven Spielberg đến từ đâu?
Câu trả lời trung gian: Hoa Kỳ.
Theo dõi: Ai là đạo diễn của "Casino Royale"?
Câu trả lời trung gian: Đạo diễn của "Casino Royale" là Martin Campbell.
Theo dõi: Martin Campbell đến từ đâu?
Câu trả lời trung gian: New Zealand.
Vậy câu trả lời cuối cùng là: Không
Câu hỏi: Ai là cha của George Washington?
Sử dụng bộ chọn mẫu
Cung cấp các ví dụ cho ExampleSelector
Ở đây, chúng ta tái sử dụng tập ví dụ và mẫu câu từ phần trước. Tuy nhiên, thay vì cung cấp trực tiếp các ví dụ cho đối tượng FewShotPromptTemplate
và chèn tất cả các ví dụ vào mẫu câu, chúng ta sẽ cung cấp chúng cho đối tượng ExampleSelector
để chèn một phần các ví dụ.
Ở đây, chúng ta sẽ sử dụng lớp SemanticSimilarityExampleSelector
. Lớp này chọn một ví dụ mẫu nhỏ dựa trên sự tương đồng với đầu vào. Nó sử dụng một mô hình nhúng để tính toán độ tương đồng giữa đầu vào và các ví dụ mẫu nhỏ, sau đó sử dụng cơ sở dữ liệu vector để thực hiện tìm kiếm sự tương đồng và lấy ra các ví dụ tương tự với đầu vào.
- Lưu ý: Điều này liên quan đến tính toán vector và cơ sở dữ liệu vector, chủ yếu được sử dụng trong lĩnh vực trí tuệ nhân tạo để tìm kiếm sự tương đồng dữ liệu, chẳng hạn như truy vấn nội dung bài báo tương tự, hình ảnh tương tự, video, v.v. Chỉ cần hiểu một cách đơn giản ở đây cho tới bây giờ.
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=1
)
question = "Ai là cha của George Washington?"
selected_examples = example_selector.select_examples({"question": question})
print(f"Ví dụ tương tự nhất: {question}")
for example in selected_examples:
print("\\n")
for k, v in example.items():
print(f"{k}: {v}")
Ở đây, các ví dụ tương tự với câu hỏi được khớp, và kết quả trả về như sau:
Chạy Chroma trực tiếp sử dụng API local.
Sử dụng cơ sở dữ liệu trong DuckDB memory. Dữ liệu sẽ là tạm thời.
Ví dụ tương tự nhất: Ai là mẹ của ông ngoại của George Washington?
Câu hỏi: Ai là mẹ của George Washington?
Câu trả lời:
Chúng ta cần tiếp tục với câu hỏi này: Có.
Theo dõi: Ai là mẹ của George Washington?
Câu trả lời trung gian: Mẹ của George Washington là Mary Ball Washington.
Theo dõi: Ai là cha của Mary Ball Washington?
Câu trả lời trung gian: Cha của Mary Ball Washington là Joseph Ball.
Vậy câu trả lời cuối cùng là: Joseph Ball
Cung cấp bộ chọn ví dụ cho FewShotPromptTemplate
Cuối cùng, tạo một đối tượng FewShotPromptTemplate
. Dựa trên bộ chọn ví dụ từ ví dụ trước, chọn một ví dụ tương tự với câu hỏi.
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="Câu hỏi: {input}",
input_variables=["input"]
)
print(prompt.format(input="Ai là cha của George Washington?"))
Kết quả:
Câu hỏi: Ai là mẹ của ông nội của George Washington?
Chúng ta cần tiếp tục với câu hỏi này: Có.
Tiếp theo: Ai là mẹ của George Washington?
Câu trả lời trung gian: Mẹ của George Washington là Mary Ball Washington.
Tiếp theo: Ai là cha của Mary Ball Washington?
Câu trả lời trung gian: Cha của Mary Ball Washington là Joseph Ball.
Vậy câu trả lời cuối cùng là: Joseph Ball
Câu hỏi: Ai là cha của George Washington?