mirror of
https://github.com/vxcontrol/langchaingo.git
synced 2026-07-20 06:04:42 -04:00
601dc553d5
* docs: fix outdated API references and examples across documentation Update documentation to reflect current API patterns and fix outdated code examples: - Update Error struct definition with Provider and Details fields in architecture docs - Fix code examples to use CallOptions (WithTemperature, WithMaxTokens) instead of constructor options - Update chain execution pattern from chain.Run() to chains.Run() - Add context parameter to memory interface methods - Update Vertex AI examples to use new googleai/vertex package structure - Change from vertexai.New() to vertex.New() with updated option names - Fix import paths for Google AI and Vertex AI integration - Update minimum Go version requirement from 1.21 to 1.23 These changes ensure documentation examples work with the current codebase and provide accurate guidance for developers. * docs: expand integration documentation and fix remaining API references - Add comprehensive examples to chat and embeddings integration pages - Fix missing context imports in LLM provider configuration - Update Vertex AI examples to use correct vertex.New() syntax - Fix broken link in CloudSQL vectorstore README - Transform placeholder pages into useful developer resources * docs: fix relative link in embeddings integrations page
Cloud SQL for PostgreSQL for LangChain Go
The Cloud SQL for PostgreSQL for LangChain package provides a first class experience for connecting to Cloud SQL instances from the LangChain ecosystem while providing the following benefits:
- Simplified & Secure Connections: easily and securely create shared connection pools to connect to Google Cloud databases utilizing IAM for authorization and database authentication without needing to manage SSL certificates, configure firewall rules, or enable authorized networks.
- Improved performance & Simplified management: use a single-table schema can lead to faster query execution, especially for large collections.
- Improved metadata handling: store metadata in columns instead of JSON, resulting in significant performance improvements.
- Clear separation: clearly separate table and extension creation, allowing for distinct permissions and streamlined workflows.
Quick Start
In order to use this package, you first need to go through the following steps:
- Select or create a Cloud Platform project.
- Enable billing for your project.
- Enable the Cloud SQL API.
- Authentication with CloudSDK.
Supported Go Versions
Go version >= go 1.22.0
Engine Creation
The CloudSQLEngine configures a connection pool to your CloudSQL database.
package main
import (
"context"
"fmt"
"github.com/tmc/langchaingo/internal/cloudsqlutil"
)
func NewCloudSQLEngine(ctx context.Context) (*cloudsqlutil.PostgresEngine, error) {
// Call NewPostgresEngine to initialize the database connection
pgEngine, err := cloudsqlutil.NewPostgresEngine(ctx,
cloudsqlutil.WithUser("my-user"),
cloudsqlutil.WithPassword("my-password"),
cloudsqlutil.WithDatabase("my-database"),
cloudsqlutil.WithCloudSQLInstance("my-project-id", "region", "my-instance"),
)
if err != nil {
return nil, fmt.Errorf("Error creating PostgresEngine: %s", err)
}
return pgEngine, nil
}
func main() {
ctx := context.Background()
cloudSQLEngine, err := NewCloudSQLEngine(ctx)
if err != nil {
return nil, err
}
}
See the full Vector Store example and tutorial.
Engine Creation WithPool
Create a CloudSQLEngine with the WithPool method to connect to an instance of CloudSQL Omni or to customize your connection pool.
package main
import (
"context"
"fmt"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/tmc/langchaingo/internal/cloudsqlutil"
)
func NewCloudSQLWithPoolEngine(ctx context.Context) (*cloudsqlutil.PostgresEngine, error) {
myPool, err := pgxpool.New(ctx, os.Getenv("DATABASE_URL"))
if err != nil {
return err
}
// Call NewPostgresEngine to initialize the database connection
pgEngineWithPool, err := cloudsqlutil.NewPostgresEngine(ctx, cloudsqlutil.WithPool(myPool))
if err != nil {
return nil, fmt.Errorf("Error creating PostgresEngine with pool: %s", err)
}
return pgEngineWithPool, nil
}
func main() {
ctx := context.Background()
cloudSQLEngine, err := NewCloudSQLWithPoolEngine(ctx)
if err != nil {
return nil, err
}
}
Vector Store Usage
Use a vector store to store embedded data and perform vector search.
package main
import (
"context"
"fmt"
"github.com/tmc/langchaingo/embeddings"
"github.com/tmc/langchaingo/internal/cloudsqlutil"
"github.com/tmc/langchaingo/llms/googleai/vertex"
"github.com/tmc/langchaingo/vectorstores/cloudsql"
)
func main() {
ctx := context.Background()
cloudSQLEngine, err := NewCloudSQLEngine(ctx)
if err != nil {
return nil, err
}
// Initialize table for the Vectorstore to use. You only need to do this the first time you use this table.
vectorstoreTableoptions, err := &cloudsqlutil.VectorstoreTableOptions{
TableName: "table",
VectorSize: 768,
}
if err != nil {
log.Fatal(err)
}
err = pgEngine.InitVectorstoreTable(ctx, *vectorstoreTableoptions,
[]alloydbutil.Column{
alloydbutil.Column{
Name: "area",
DataType: "int",
Nullable: false,
},
alloydbutil.Column{
Name: "population",
DataType: "int",
Nullable: false,
},
},
)
if err != nil {
log.Fatal(err)
}
// Initialize VertexAI LLM
llm, err := vertex.New(ctx, googleai.WithCloudProject(projectID), googleai.WithCloudLocation(cloudLocation), googleai.WithDefaultModel("text-embedding-005"))
if err != nil {
log.Fatal(err)
}
myEmbedder, err := embeddings.NewEmbedder(llm)
if err != nil {
log.Fatal(err)
}
vectorStore := cloudsql.NewVectorStore(cloudSQLEngine, myEmbedder, "my-table", cloudsql.WithMetadataColumns([]string{"area", "population"}))
}