LangChain là gì?
LangChain là một framework linh hoạt được phát triển bằng Python và JavaScript, dành riêng cho việc xây dựng và tương tác với các ứng dụng sử dụng mô hình ngôn ngữ lớn (LLMs). Framework này giúp lập trình viên giải quyết nhiều thách thức khi làm việc với LLMs, đồng thời cung cấp các công cụ dễ sử dụng để phát triển ứng dụng hiệu quả hơn. Hướng dẫn cài đặt LangChain có thể tìm thấy tại đây.
Các thành phần cơ bản của LangChain
Model I/O
LangChain cung cấp một giao diện linh hoạt để bạn có thể dễ dàng kết nối và sử dụng nhiều loại mô hình LLM khác nhau, bao gồm cả OpenAI và Hugging Face. Ví dụ, bạn có thể dễ dàng sử dụng mô hình OpenAI bằng cách cung cấp API key:
python
from langchain_openai import ChatOpenAI
from langchain_openai import OpenAI
llm = OpenAI(openai_api_key="...")
chat_model = ChatOpenAI()
Ngoài ra, bạn cũng có thể tương tác trực tiếp với các mô hình chạy trên máy local thông qua Ollama - một dự án mã nguồn mở hỗ trợ người dùng tương tác với LLMs mà không cần kết nối internet:
python
from langchain_community.llms import Ollama
from langchain_community.chat_models import ChatOllama
llm = Ollama(model="llama2")
chat_model = ChatOllama()
Với các đối tượng llm
và chat_model
, bạn đã sẵn sàng để bắt đầu tương tác với mô hình LLMs.
Prompts
LangChain cung cấp các mẫu prompt giúp bạn dễ dàng cấu trúc đầu vào cho LLMs theo cách hiệu quả. Bạn có thể tạo ra các prompt động với các tham số tùy biến phù hợp với nhu cầu sử dụng:
python
prompt = PromptTemplate(
template="Tell me a joke in {language}", input_variables=["language"]
)
print(prompt.format(language="spanish"))
Output Parsers
Khi kết quả đầu ra của mô hình là văn bản, có thể bạn muốn chuyển đổi nó sang định dạng khác như JSON hay CSV. LangChain cung cấp các output parsers để hỗ trợ bạn thực hiện điều này:
python
template = "Generate a list of 5 {text}.
{format_instructions}"
chat_prompt = ChatPromptTemplate.from_template(template)
chat_prompt = chat_prompt.partial(format_instructions=output_parser.get_format_instructions())
chain = chat_prompt | chat_model | output_parser
chain.invoke({"text": "colors"})
Retrieval: Tăng cường khả năng truy xuất
Mô hình ngôn ngữ thường bị giới hạn trong tập dữ liệu đã sử dụng để huấn luyện. Để giải quyết vấn đề này, LangChain giới thiệu mô hình RAG (Retrieval Augmented Generation), cho phép bạn tăng cường mô hình với dữ liệu từ bên ngoài.
Document Loaders
LangChain hỗ trợ bạn tải tài liệu từ nhiều nguồn khác nhau như Github hay S3:
python
from langchain_community.document_loaders import TextLoader
loader = TextLoader("./main.rb")
documents = loader.load()
Text Splitting
Sau khi tải tài liệu, bạn có thể chia chúng thành các phần nhỏ hơn để xử lý tốt hơn:
python
from langchain.text_splitter import Language
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.RUBY, chunk_size=2000, chunk_overlap=200
)
documents = splitter.split_documents(raw_documents)
Text Embedding Models
Dữ liệu sau khi chia nhỏ sẽ được chuyển đổi sang vector space để sử dụng lại sau này:
python
from langchain_community.embeddings import OllamaEmbeddings
embeddings_model = OllamaEmbeddings()
embeddings = embeddings_model.embed_documents(documents)
Vector Stores
Dữ liệu dưới dạng vector có thể được lưu trữ hiệu quả, LangChain cung cấp module để thực hiện việc này:
python
from langchain_community.vectorstores import Chroma
db = Chroma.from_documents(documents, OllamaEmbeddings())
Retrievers
Bạn có thể truy xuất dữ liệu từ vector store thông qua retrievers:
python
from langchain.chains import RetrievalQA
from langchain.llms import Ollama
retriever = db.as_retriever(search_kwargs={"k": 1})
llm = Ollama(model="codellama:7b")
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
qa.invoke("What's inside this document?")["result"]
Agents: Tùy chỉnh yêu cầu và phản hồi
LangChain cung cấp các Agents giúp bạn tái tạo nhiều bước xử lý cho yêu cầu của người dùng. Mỗi agent là một tập hợp các công cụ (tools) có thể được sử dụng để thực hiện các nhiệm vụ khác nhau.
Built-In Tools và Custom Tools
LangChain chứa nhiều built-in tools sẵn có, và cũng cho phép bạn tạo custom tools dễ dàng:
python
from langchain.tools import tool
@tool
def search(query: str) -> str:
return "LangChain"
@tool
def multiply(a: int, b: int) -> int:
return a * b
Sử dụng Agents
Bạn có thể khởi tạo agents từ các tools và áp dụng chúng vào các yêu cầu khác nhau:
python
from langchain.agents import initialize_agent, AgentType
from langchain.llms import Ollama
tools = [search, multiply]
agent = initialize_agent(
tools,
Ollama(),
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
Kết luận
LangChain là một framework vô cùng mạnh mẽ, dễ dàng giúp bạn tương tác cũng như khai thác sức mạnh của mô hình ngôn ngữ lớn (LLMs). Qua bài viết này, bạn đã có cái nhìn tổng quan về LangChain. Trong các bài viết tiếp theo, chúng ta sẽ cùng nhau khám phá sâu hơn, sử dụng LangChain để giải quyết các bài toán cụ thể, hứa hẹn mang đến những điều thú vị.
Xem blog của chúng tôi tại đây.
source: viblo