Kỹ thuật prompt

Từ Cơ Bản đến Nâng Cao về Kỹ Thuật Cung Cấp Dẫn Dắt với Langchain trong Python

mm
Thêm Unite.AI vào các nguồn ưu tiên của bạn trên Google

Một khía cạnh quan trọng của Mô hình Ngôn ngữ Lớn (LLM) là số lượng tham số mà các mô hình này sử dụng để học. Số tham số càng nhiều, mô hình càng hiểu được mối quan hệ giữa các từ và cụm từ. Điều này có nghĩa là các mô hình có tỷ tỷ tham số có khả năng tạo ra nhiều định dạng văn bản sáng tạo và trả lời các câu hỏi mở và khó một cách thông tin.

LLM như ChatGPT, sử dụng mô hình Transformer, có khả năng hiểu và tạo ra ngôn ngữ của con người, khiến chúng hữu ích cho các ứng dụng yêu cầu hiểu ngôn ngữ tự nhiên. Tuy nhiên, chúng cũng có những hạn chế, bao gồm kiến thức lỗi thời, không thể tương tác với các hệ thống bên ngoài, thiếu hiểu biết về ngữ cảnh và đôi khi tạo ra các phản hồi nghe có vẻ hợp lý nhưng không chính xác hoặc vô nghĩa.

Để giải quyết những hạn chế này, cần tích hợp LLM với các nguồn dữ liệu và khả năng bên ngoài, điều này có thể phức tạp và đòi hỏi kỹ năng mã hóa và xử lý dữ liệu rộng lớn. Điều này, cùng với thách thức của việc hiểu các khái niệm AI và thuật toán phức tạp, góp phần vào việc học tập liên quan đến việc phát triển các ứng dụng sử dụng LLM.

Tuy nhiên, việc tích hợp LLM với các công cụ khác để tạo ra các ứng dụng được hỗ trợ bởi LLM có thể định hình lại phong cảnh kỹ thuật số của chúng ta. Tiềm năng của các ứng dụng như vậy là rất lớn, bao gồm cải thiện hiệu quả và năng suất, đơn giản hóa các nhiệm vụ, nâng cao việc ra quyết định và cung cấp trải nghiệm được cá nhân hóa.

Trong bài viết này, chúng tôi sẽ đi sâu vào các vấn đề này, khám phá các kỹ thuật nâng cao về kỹ thuật cung cấp dẫn dắt với Langchain, cung cấp giải thích rõ ràng, ví dụ thực tế và hướng dẫn từng bước về cách thực hiện chúng.

Langchain, một thư viện hiện đại, mang lại sự tiện lợi và linh hoạt cho việc thiết kế, thực hiện và tinh chỉnh các dẫn dắt. Khi chúng ta khám phá các nguyên tắc và thực hành của kỹ thuật cung cấp dẫn dắt, bạn sẽ học cách sử dụng các tính năng mạnh mẽ của Langchain để tận dụng sức mạnh của các mô hình AI tạo sinh như GPT-4.

Hiểu về Dẫn Dắt

Trước khi đi vào các kỹ thuật của kỹ thuật cung cấp dẫn dắt, điều quan trọng là phải hiểu khái niệm về dẫn dắt và tầm quan trọng của chúng.

Một ‘dẫn dắt‘ là một chuỗi các token được sử dụng làm đầu vào cho một mô hình ngôn ngữ, chỉ đạo nó tạo ra một loại phản hồi cụ thể. Dẫn dắt đóng vai trò quan trọng trong việc điều khiển hành vi của mô hình. Chúng có thể ảnh hưởng đến chất lượng của văn bản được tạo ra và khi được thiết kế đúng, có thể giúp mô hình cung cấp kết quả sâu sắc, chính xác và cụ thể.

Kỹ thuật cung cấp dẫn dắt là nghệ thuật và khoa học của việc thiết kế dẫn dắt hiệu quả. Mục tiêu là thu được đầu ra mong muốn từ một mô hình ngôn ngữ. Bằng cách chọn và cấu trúc dẫn dắt cẩn thận, một người có thể hướng mô hình đến việc tạo ra phản hồi chính xác và liên quan hơn. Trong thực tế, điều này liên quan đến việc tinh chỉnh các cụm từ đầu vào để phù hợp với các thiên vị đào tạo và cấu trúc của mô hình.

Sự tinh vi của kỹ thuật cung cấp dẫn dắt dao động từ các kỹ thuật đơn giản, chẳng hạn như cung cấp cho mô hình các từ khóa liên quan, đến các phương pháp nâng cao hơn liên quan đến việc thiết kế dẫn dắt phức tạp, cấu trúc sử dụng các cơ chế nội bộ của mô hình để tạo ra lợi thế.

Langchain: Công Cụ Dẫn Dắt Phát Triển Nhanh Nhất

LangChain, được ra mắt vào tháng 10 năm 2022 bởi Harrison Chase, đã trở thành một trong những khung mở rộng được đánh giá cao nhất trên GitHub vào năm 2023. Nó cung cấp một giao diện được tiêu chuẩn hóa và đơn giản hóa để tích hợp các Mô hình Ngôn ngữ Lớn (LLM) vào các ứng dụng. Nó cũng cung cấp một giao diện phong phú cho kỹ thuật cung cấp dẫn dắt, cho phép các nhà phát triển thử nghiệm với các chiến lược khác nhau và đánh giá kết quả của chúng. Bằng cách sử dụng Langchain, bạn có thể thực hiện các nhiệm vụ kỹ thuật cung cấp dẫn dắt một cách hiệu quả và trực quan hơn.

LangFlow hoạt động như một giao diện người dùng để sắp xếp các thành phần LangChain thành một sơ đồ dòng chảy có thể thực thi, cho phép nhanh chóng tạo mẫu và thử nghiệm.

LangChain lấp đầy một khoảng trống quan trọng trong việc phát triển AI cho đại chúng. Nó cho phép một loạt các ứng dụng NLP như trợ lý ảo, tạo nội dung, hệ thống trả lời câu hỏi và nhiều hơn nữa, để giải quyết một loạt các vấn đề thực tế.

Thay vì là một mô hình hoặc nhà cung cấp độc lập, LangChain đơn giản hóa việc tương tác với các mô hình đa dạng, mở rộng khả năng của các ứng dụng LLM vượt ra ngoài giới hạn của một cuộc gọi API đơn giản.

Cấu Trúc của LangChain

 

Các thành phần chính của LangChain bao gồm Model I/O, Dẫn Dắt Mẫu, Bộ Nhớ, Đại Diện và Chuỗi.

Model I/O

LangChain tạo điều kiện cho một kết nối liền mạch với các mô hình ngôn ngữ khác nhau bằng cách bao bọc chúng với một giao diện được tiêu chuẩn hóa gọi là Model I/O. Điều này cho phép chuyển đổi mô hình một cách dễ dàng để tối ưu hóa hoặc cải thiện hiệu suất. LangChain hỗ trợ nhiều nhà cung cấp mô hình ngôn ngữ, bao gồm OpenAI, HuggingFace, Azure, Fireworks và nhiều hơn nữa.

Dẫn Dắt Mẫu

Những mẫu này được sử dụng để quản lý và tối ưu hóa các tương tác với LLM bằng cách cung cấp các hướng dẫn hoặc ví dụ cụ thể. Việc tối ưu hóa dẫn dắt cải thiện hiệu suất của mô hình, và sự linh hoạt của chúng đóng góp đáng kể vào quá trình đầu vào.

Một ví dụ đơn giản về dẫn dắt mẫu:


<p>from langchain.prompts import PromptTemplate
prompt = PromptTemplate(input_variables=["subject"],
template="Những tiến bộ gần đây trong lĩnh vực {subject} là gì?")
print(prompt.format(subject="Xử lý Ngôn ngữ Tự nhiên"))</p>

Khi chúng ta tiến bộ trong sự phức tạp, chúng ta gặp phải các mẫu tinh vi hơn trong LangChain, chẳng hạn như mẫu Reason và Act (ReAct). ReAct là một mẫu quan trọng cho việc thực hiện hành động, nơi đại diện gán một nhiệm vụ cho một công cụ phù hợp, tùy chỉnh đầu vào cho nó và phân tích đầu ra để hoàn thành nhiệm vụ. Ví dụ Python dưới đây minh họa một mẫu ReAct. Nó thể hiện cách một dẫn dắt được cấu trúc trong LangChain, sử dụng một loạt các suy nghĩ và hành động để suy luận qua một vấn đề và tạo ra một câu trả lời cuối cùng:

PREFIX = """Answer the following question using the given tools:"""
FORMAT_INSTRUCTIONS = """Follow this format:
Question: {input_question}
Thought: your initial thought on the question
Action: your chosen action from [{tool_names}]
Action Input: your input for the action
Observation: the action's outcome"""
SUFFIX = """Start!
Question: {input}
Thought:{agent_scratchpad}"""

Bộ Nhớ

Bộ nhớ là một khái niệm quan trọng trong LangChain, cho phép LLM và công cụ giữ lại thông tin theo thời gian. Hành vi có trạng thái này cải thiện hiệu suất của các ứng dụng LangChain bằng cách lưu trữ các phản hồi trước đó, tương tác của người dùng, trạng thái của môi trường và mục tiêu của đại diện. Các chiến lược Bộ Nhớ như ConversationBufferMemory và ConversationBufferWindowMemory giúp theo dõi toàn bộ hoặc phần gần đây của một cuộc trò chuyện. Đối với một cách tiếp cận tinh vi hơn, chiến lược ConversationKGMemory cho phép mã hóa cuộc trò chuyện thành một đồ thị tri thức có thể được đưa trở lại vào dẫn dắt hoặc sử dụng để dự đoán phản hồi mà không cần gọi LLM.

Đại Diện

Một đại diện tương tác với thế giới bằng cách thực hiện các hành động và nhiệm vụ. Trong LangChain, các đại diện kết hợp công cụ và chuỗi cho việc thực hiện nhiệm vụ. Nó có thể thiết lập một kết nối với thế giới bên ngoài để thu thập thông tin nhằm tăng cường kiến thức của LLM, do đó vượt qua các hạn chế vốn có của chúng. Chúng có thể quyết định chuyển các tính toán đến một máy tính hoặc trình thông dịch Python tùy thuộc vào tình huống.

Các đại diện được trang bị các thành phần con:

  • Công Cụ: Đây là các thành phần chức năng.
  • Tập Công Cụ: Bộ sưu tập các công cụ.
  • Trình Thực Thi Đại Diện: Đây là cơ chế thực thi cho phép chọn giữa các công cụ.

Các đại diện trong LangChain cũng tuân theo mẫu ReAct Zero-shot, nơi quyết định dựa chỉ trên mô tả của công cụ. Cơ chế này có thể được mở rộng với bộ nhớ để tính đến toàn bộ lịch sử cuộc trò chuyện. Với ReAct, thay vì yêu cầu LLM tự động hoàn thành văn bản, bạn có thể yêu cầu nó phản hồi trong một vòng lặp suy nghĩ/hành động/ quan sát.

Chuỗi

Chuỗi, như tên gọi, là các chuỗi các hoạt động cho phép thư viện LangChain xử lý đầu vào và đầu ra của mô hình ngôn ngữ một cách liền mạch. Những thành phần cơ bản này của LangChain được tạo thành từ các liên kết, có thể là các chuỗi khác hoặc các nguyên thủy như dẫn dắt, mô hình ngôn ngữ hoặc tiện ích.

Hãy tưởng tượng một chuỗi như một băng chuyền trong một nhà máy. Mỗi bước trên băng chuyền này đại diện cho một hoạt động nhất định, có thể là gọi một mô hình ngôn ngữ, áp dụng một hàm Python vào văn bản hoặc thậm chí là yêu cầu mô hình theo một cách cụ thể.

LangChain phân loại chuỗi của nó thành ba loại: Chuỗi Tiện ích, Chuỗi Chung và Chuỗi Kết Hợp Tài Liệu. Chúng ta sẽ đi sâu vào Chuỗi Tiện ích và Chuỗi Chung cho cuộc thảo luận của mình.

  • Chuỗi Tiện ích được thiết kế đặc biệt để trích xuất các câu trả lời chính xác từ mô hình ngôn ngữ cho các nhiệm vụ được xác định rõ ràng. Ví dụ, hãy xem xét LLMMathChain. Chuỗi tiện ích này cho phép mô hình ngôn ngữ thực hiện các tính toán toán học. Nó chấp nhận một câu hỏi bằng ngôn ngữ tự nhiên và mô hình ngôn ngữ tạo ra một đoạn mã Python, sau đó được thực thi để tạo ra câu trả lời.
  • Chuỗi Chung, mặt khác, đóng vai trò là các khối xây dựng cho các chuỗi khác nhưng không thể được sử dụng độc lập. Những chuỗi này, như LLMChain, là nền tảng và thường được kết hợp với các chuỗi khác để thực hiện các nhiệm vụ phức tạp. Ví dụ, LLMChain thường được sử dụng để truy vấn một đối tượng mô hình ngôn ngữ bằng cách định dạng đầu vào dựa trên một mẫu dẫn dắt được cung cấp và sau đó truyền nó đến mô hình ngôn ngữ.

Triển Khai Bước-by-Bước về Kỹ Thuật Cung Cấp Dẫn Dắt với Langchain

Chúng tôi sẽ hướng dẫn bạn qua quá trình triển khai kỹ thuật cung cấp dẫn dắt bằng cách sử dụng Langchain. Trước khi tiếp tục, hãy đảm bảo rằng bạn đã cài đặt các phần mềm và gói cần thiết.

Bạn có thể tận dụng các công cụ phổ biến như Docker, Conda, Pip và Poetry để thiết lập LangChain. Các tệp cài đặt liên quan cho từng phương pháp này có thể được tìm thấy trong kho lưu trữ LangChain tại https://github.com/benman1/generative_ai_with_langchain. Điều này bao gồm một Dockerfile cho Docker, một requirements.txt cho Pip, một pyproject.toml cho Poetry và một tệp langchain_ai.yml cho Conda.

Trong bài viết của chúng tôi, chúng tôi sẽ sử dụng Pip, trình quản lý gói tiêu chuẩn cho Python, để cài đặt và quản lý các thư viện của bên thứ ba. Nếu nó không được bao gồm trong phân phối Python của bạn, bạn có thể cài đặt Pip bằng cách làm theo hướng dẫn tại https://pip.pypa.io/.

Để cài đặt một thư viện bằng Pip, sử dụng lệnh pip install library_name.

Tuy nhiên, Pip không quản lý môi trường một cách tự nhiên. Để xử lý các môi trường khác nhau, chúng tôi sử dụng công cụ virtualenv.

Trong phần tiếp theo, chúng tôi sẽ thảo luận về tích hợp mô hình.

Bước 1: Thiết Lập Langchain

Trước tiên, bạn cần cài đặt gói Langchain. Chúng tôi đang sử dụng Hệ Điều Hành Windows. Chạy lệnh sau trong terminal của bạn để cài đặt nó:


pip install langchain

Bước 2: Nhập Langchain và Các Mô-đun Cần Thiết

Tiếp theo, nhập Langchain cùng với các mô-đun cần thiết khác. Tại đây, chúng tôi cũng nhập thư viện transformers, được sử dụng rộng rãi trong các nhiệm vụ NLP.


<p>import langchain
from transformers import AutoModelWithLMHead, AutoTokenizer

Bước 3: Tải Mô Hình Đã Được Huấn Luyện

Open AI

OpenAI cung cấp các mô hình có thể được tích hợp một cách tiện lợi với thư viện LangChain hoặc thư viện khách hàng Python của OpenAI. Đặc biệt, OpenAI cung cấp một lớp Nhúng cho các mô hình nhúng văn bản. Hai mô hình LLM chính là GPT-3.5 và GPT-4, khác nhau chủ yếu về độ dài token. Giá cho từng mô hình có thể được tìm thấy trên trang web của OpenAI. Mặc dù có các mô hình tinh vi hơn như GPT-4-32K có khả năng chấp nhận token cao hơn, nhưng khả năng truy cập của chúng thông qua API không phải lúc nào cũng được đảm bảo.

Để truy cập những mô hình này, bạn cần có khóa API của OpenAI. Điều này có thể được thực hiện bằng cách tạo một tài khoản trên nền tảng của OpenAI, thiết lập thông tin thanh toán và tạo một khóa bí mật mới.


<p>import os
os.environ["OPENAI_API_KEY"] = 'your-openai-token'</p>

Sau khi tạo khóa thành công, bạn có thể đặt nó làm biến môi trường (OPENAI_API_KEY) hoặc truyền nó như một tham số trong quá trình khởi tạo lớp cho các cuộc gọi OpenAI.

Xét một kịch bản LangChain để minh họa sự tương tác với các mô hình OpenAI:

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
# LLM lấy một dẫn dắt làm đầu vào và tạo ra một phản hồi hoàn chỉnh
prompt = "ai là tổng thống của Hoa Kỳ?"
completion = llm(prompt)

<p>Tổng thống hiện tại của Hoa Kỳ là Joe Biden.</p>

Trong ví dụ này, một đại diện được khởi tạo để thực hiện các tính toán. Đại diện này lấy một đầu vào, một nhiệm vụ cộng đơn giản, xử lý nó bằng mô hình OpenAI được cung cấp và trả về kết quả.

Hugging

Hugging Face là một thư viện Transformers Python MIỄN PHÍ tương thích với PyTorch, TensorFlow và JAX, và bao gồm các triển khai của các mô hình như BERT, T5, v.v.

Hugging Face cũng cung cấp Hugging Face Hub, một nền tảng để lưu trữ các kho mã, mô hình học máy, tập dữ liệu và ứng dụng web.

Để sử dụng Hugging Face làm nhà cung cấp cho các mô hình của bạn, bạn sẽ cần một tài khoản và khóa API, có thể được lấy từ trang web của họ. Khóa có thể được làm sẵn trong môi trường của bạn dưới dạng HUGGINGFACEHUB_API_TOKEN.

Xét đoạn mã Python sau sử dụng một mô hình mã nguồn mở được phát triển bởi Google (GOOGL ), mô hình Flan-T5-XXL:

from langchain.llms import HuggingFaceHub

<p>llm = HuggingFaceHub(model_kwargs={"temperature": 0.5, "max_length": 64}, repo_id="google/flan-t5-xxl")
prompt = "Tokyo nằm ở quốc gia nào?"
completion = llm(prompt)
print(completion)</p>

Kịch bản này lấy một câu hỏi làm đầu vào và trả về một câu trả lời, thể hiện khả năng kiến thức và dự đoán của mô hình.

Bước 4: Kỹ Thuật Cung Cấp Dẫn Dắt Cơ Bản

Để bắt đầu, chúng ta sẽ tạo một dẫn dắt đơn giản và xem mô hình phản hồi như thế nào.

prompt = 'Dịch văn bản tiếng Anh sau sang tiếng Pháp: "{0}"'
input_text = 'Xin chào, bạn thế nào?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')

<p>generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

Trong đoạn mã trên, chúng ta cung cấp một dẫn dắt để dịch văn bản tiếng Anh sang tiếng Pháp. Mô hình ngôn ngữ sau đó cố gắng dịch văn bản đã cho dựa trên dẫn dắt.

Bước 5: Kỹ Thuật Cung Cấp Dẫn Dắt Nâng Cao

Mặc dù cách tiếp cận trên hoạt động tốt, nó không tận dụng được đầy đủ sức mạnh của kỹ thuật cung cấp dẫn dắt. Hãy cải tiến nó bằng cách giới thiệu một số cấu trúc dẫn dắt phức tạp hơn.

prompt = 'Với tư cách là một người dịch tiếng Pháp rất giỏi, dịch văn bản tiếng Anh sau sang tiếng Pháp: "{0}"'
input_text = 'Xin chào, bạn thế nào?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')

<p>generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

Trong đoạn mã này, chúng ta sửa đổi dẫn dắt để gợi ý rằng việc dịch đang được thực hiện bởi một ‘người dịch tiếng Pháp rất giỏi’. Sự thay đổi trong dẫn dắt có thể dẫn đến các bản dịch được cải thiện, vì mô hình hiện giả định một nhân vật của một chuyên gia.

Xây Dựng Hệ Thống Hỏi Đáp Văn Học Học Thuật với Langchain

Chúng tôi sẽ xây dựng một Hệ Thống Hỏi Đáp Văn Học Học Thuật bằng cách sử dụng LangChain có thể trả lời các câu hỏi về các bài báo học thuật được xuất bản gần đây.

Trước hết, để thiết lập môi trường của chúng tôi, chúng tôi cài đặt các phụ thuộc cần thiết.

pip install langchain arxiv openai transformers faiss-cpu

Sau khi cài đặt, chúng tôi tạo một cuốn sổ tay Python mới và nhập các thư viện cần thiết:

from langchain.llms import OpenAI
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.docstore.document import Document
import arxiv

Cốt lõi của Hệ Thống Hỏi Đáp của chúng tôi là khả năng thu thập các bài báo học thuật liên quan đến một lĩnh vực nhất định, ở đây chúng tôi xem xét Xử lý Ngôn ngữ Tự nhiên (NLP), sử dụng cơ sở dữ liệu học thuật arXiv. Để thực hiện việc này, chúng tôi định nghĩa một hàm get_arxiv_data(max_results=10). Hàm này thu thập tóm tắt của các bài báo NLP gần đây từ arXiv và bao gồm chúng vào các đối tượng Tài liệu LangChain, sử dụng tóm tắt làm nội dung và ID mục nhập duy nhất làm nguồn.

Chúng tôi sẽ sử dụng API arXiv để thu thập các bài báo gần đây liên quan đến NLP:


<p>def get_arxiv_data(max_results=10):
search = arxiv.Search(
query="NLP",
max_results=max_results,
sort_by=arxiv.SortCriterion.SubmittedDate,
)</p>

documents = []

<p>for result in search.results():
documents.append(Document(
page_content=result.summary,
metadata={"source": result.entry_id},
))</p>

return documents

Hàm này thu thập tóm tắt của các bài báo NLP gần đây từ arXiv và chuyển chúng thành các đối tượng Tài liệu LangChain. Chúng tôi đang sử dụng tóm tắt của bài báo và ID mục nhập duy nhất (URL đến bài báo) làm nội dung và nguồn tương ứng.

def print_answer(question):
print(
chain(
{
"input_documents": sources,
"question": question,
},
return_only_outputs=True,
)["output_text"]
)

Hãy định nghĩa corpus và thiết lập LangChain của chúng tôi:

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(temperature=0))

Với Hệ Thống Hỏi Đáp Học Thuật của chúng tôi đã sẵn sàng, chúng tôi có thể thử nghiệm nó bằng cách hỏi một câu hỏi:

print_answer("Những tiến bộ gần đây trong NLP là gì?")

Đầu ra sẽ là câu trả lời cho câu hỏi của bạn, trích dẫn các nguồn từ đó thông tin được trích xuất. Ví dụ:


<p>Những tiến bộ gần đây trong NLP bao gồm mô hình Retriever-augmented instruction-following và một khuôn khổ tính toán mới để giải quyết các vấn đề dòng chảy điện tối ưu (ACOPF) sử dụng đơn vị xử lý đồ họa (GPU).
NGUỒN: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

Bạn có thể dễ dàng chuyển đổi giữa các mô hình hoặc thay đổi hệ thống theo nhu cầu. Ví dụ, ở đây chúng tôi đang chuyển sang GPT-4, điều này kết thúc bằng việc cung cấp một phản hồi chi tiết và tốt hơn.

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(model_name="gpt-4", temperature=0))

<p>Những tiến bộ gần đây trong Xử lý Ngôn ngữ Tự nhiên (NLP) bao gồm sự phát triển của các mô hình Retriever-augmented instruction-following cho các nhiệm vụ tìm kiếm thông tin như trả lời câu hỏi (QA). Những mô hình này có thể được điều chỉnh cho các lĩnh vực và nhiệm vụ khác nhau mà không cần tinh chỉnh thêm. Tuy nhiên, chúng thường gặp khó khăn trong việc gắn bó với kiến thức được cung cấp và có thể tạo ra các phản hồi nghe có vẻ hợp lý nhưng không chính xác hoặc vô nghĩa. Một tiến bộ khác là việc giới thiệu một khuôn khổ tính toán để giải quyết các vấn đề dòng chảy điện tối ưu (ACOPF) sử dụng đơn vị xử lý đồ họa (GPU). Cách tiếp cận này sử dụng một trừu tượng dữ liệu đơn lệnh, nhiều dữ liệu (SIMD) của các chương trình không tuyến tính (NLP) và áp dụng một phương pháp điểm nội bộ (IPM) với chiến lược thư giãn bất đẳng thức. Chiến lược này cho phép phân tích ma trận KKT mà không cần phân tích số, điều đã từng cản trở việc song song hóa thuật toán IPM.
NGUỒN: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

Một token trong GPT-4 có thể ngắn như một ký tự hoặc dài như một từ. Ví dụ, GPT-4-32K có thể xử lý lên đến 32.000 token trong một lần chạy, trong khi GPT-4-8K và GPT-3.5-turbo hỗ trợ 8.000 và 4.000 token tương ứng. Tuy nhiên, điều quan trọng cần lưu ý là mỗi lần tương tác với những mô hình này đều đi kèm với một chi phí trực tiếp tỷ lệ với số lượng token được xử lý, cho dù đó là đầu vào hay đầu ra.

Trong bối cảnh Hệ Thống Hỏi Đáp của chúng tôi, nếu một phần văn học học thuật vượt quá giới hạn token tối đa, hệ thống sẽ không thể xử lý nó toàn bộ, do đó ảnh hưởng đến chất lượng và tính đầy đủ của phản hồi. Để giải quyết vấn đề này, văn bản có thể được chia thành các phần nhỏ hơn tuân thủ giới hạn token.

FAISS (Tìm kiếm Tương tự của Facebook) (META ) giúp tìm kiếm nhanh chóng các mảnh văn bản liên quan nhất đến câu hỏi của người dùng. Nó tạo ra một biểu diễn vector cho mỗi mảnh văn bản và sử dụng các vector này để xác định và thu hồi các mảnh tương tự nhất với biểu diễn vector của câu hỏi cho trước.

Điều quan trọng cần nhớ là ngay cả với việc sử dụng các công cụ như FAISS, sự cần thiết phải chia văn bản thành các mảnh nhỏ hơn do giới hạn token có thể đôi khi dẫn đến mất ngữ cảnh, ảnh hưởng đến chất lượng của câu trả lời. Do đó, việc quản lý và tối ưu hóa việc sử dụng token là rất quan trọng khi làm việc với những mô hình ngôn ngữ lớn này.

pip install faiss-cpu langchain CharacterTextSplitter

Sau khi đảm bảo các thư viện trên đã được cài đặt, hãy chạy

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores.faiss import FAISS
from langchain.text_splitter import CharacterTextSplitter
documents = get_arxiv_data(max_results=10) # Chúng tôi có thể sử dụng nhiều dữ liệu hơn
document_chunks = []
splitter = CharacterTextSplitter(separator=" ", chunk_size=1024, chunk_overlap=0)
for document in documents:
for chunk in splitter.split_text(document.page_content):
document_chunks.append(Document(page_content=chunk, metadata=document.metadata))

<p>search_index = FAISS.from_documents(document_chunks, OpenAIEmbeddings())</p>

<p>chain = load_qa_with_sources_chain(OpenAI(temperature=0))</p>

<p>def print_answer(question):
print(
chain(
{
"input_documents": search_index.similarity_search(question, k=4),
"question": question,
},
return_only_outputs=True,
)["output_text"]
)

Với mã hoàn thành, chúng tôi hiện có một công cụ mạnh mẽ để truy vấn văn học học thuật mới nhất trong lĩnh vực NLP.

Những tiến bộ gần đây trong NLP bao gồm việc sử dụng mạng nơ-ron sâu (DNN) cho phân tích văn bản tự động và các nhiệm vụ NLP như kiểm tra chính tả, phát hiện ngôn ngữ, trích xuất thực thể, phát hiện tác giả, trả lời câu hỏi và các nhiệm vụ khác.
NGUỒN: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1

Kết Luận

Việc tích hợp Mô hình Ngôn ngữ Lớn (LLM) vào các ứng dụng đã tăng tốc độ áp dụng trong nhiều lĩnh vực, bao gồm dịch ngôn ngữ, phân tích cảm xúc, và thu hồi thông tin. Kỹ thuật cung cấp dẫn dắt là một công cụ mạnh mẽ trong việc tối đa hóa tiềm năng của những mô hình này, và Langchain đang dẫn đầu trong việc đơn giản hóa nhiệm vụ phức tạp này. Giao diện được tiêu chuẩn hóa, mẫu dẫn dắt linh hoạt, tích hợp mô hình mạnh mẽ và việc sử dụng các đại diện và chuỗi đảm bảo kết quả tối ưu cho hiệu suất của LLM.

Tuy nhiên, mặc dù có những tiến bộ này, có một số mẹo cần lưu ý. Khi sử dụng Langchain, điều quan trọng là phải hiểu rằng chất lượng của đầu ra phụ thuộc rất nhiều vào cách diễn đạt của dẫn dắt. Thử nghiệm với các phong cách và cấu trúc dẫn dắt khác nhau có thể dẫn đến kết quả được cải thiện. Ngoài ra, hãy nhớ rằng mặc dù Langchain hỗ trợ nhiều mô hình ngôn ngữ, mỗi mô hình có điểm mạnh và điểm yếu riêng. Việc chọn đúng mô hình cho nhiệm vụ cụ thể của bạn là rất quan trọng. Cuối cùng, hãy nhớ rằng việc sử dụng những mô hình này đi kèm với các cân nhắc về chi phí, vì việc xử lý token trực tiếp ảnh hưởng đến chi phí của các lần tương tác.

Như được chứng minh trong hướng dẫn từng bước, Langchain có thể cung cấp năng lượng cho các ứng dụng mạnh mẽ, chẳng hạn như Hệ Thống Hỏi Đáp Văn Học Học Thuật. Với một cộng đồng người dùng ngày càng tăng và sự nổi bật ngày càng tăng trong phong cảnh mã nguồn mở, Langchain hứa hẹn sẽ là một công cụ quan trọng trong việc khai thác toàn bộ tiềm năng của LLM như GPT-4.

Tôi đã dành 5 năm qua để đắm mình trong thế giới hấp dẫn của Máy học và Học sâu. Đam mê và chuyên môn của tôi đã dẫn tôi đến việc đóng góp vào hơn 50 dự án kỹ thuật phần mềm đa dạng, với sự tập trung đặc biệt vào AI/ML. Sự tò mò liên tục của tôi cũng đã thu hút tôi đến với Xử lý Ngôn ngữ Tự nhiên, một lĩnh vực tôi渴望 khám phá thêm.