# migrations

dir: embeddings_queue
filename: 00001-embeddings.sqlite.sql
hash: d3755dfd232be8e8301f4d7fcfb3a486
sql:
CREATE TABLE embeddings_queue (
    seq_id INTEGER PRIMARY KEY,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    operation INTEGER NOT NULL,
    topic TEXT NOT NULL,
    id TEXT NOT NULL,
    vector BLOB,
    encoding TEXT,
    metadata TEXT
);


dir: sysdb
filename: 00001-collections.sqlite.sql
hash: 38352d725ad1c16074fac420b22b4633
sql:
CREATE TABLE collections (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    topic TEXT NOT NULL,
    UNIQUE (name)
);

CREATE TABLE collection_metadata (
    collection_id TEXT REFERENCES collections(id) ON DELETE CASCADE,
    key TEXT NOT NULL,
    str_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (collection_id, key)
);


dir: sysdb
filename: 00002-segments.sqlite.sql
hash: 2913cb6a503055a95f625448037e8912
sql:
CREATE TABLE segments (
    id TEXT PRIMARY KEY,
    type TEXT NOT NULL,
    scope TEXT NOT NULL,
    topic TEXT,
    collection TEXT REFERENCES collection(id)
);

CREATE TABLE segment_metadata (
    segment_id TEXT  REFERENCES segments(id) ON DELETE CASCADE,
    key TEXT NOT NULL,
    str_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (segment_id, key)
);


dir: sysdb
filename: 00004-tenants-databases.sqlite.sql
hash: 048867ce8fcdefe4023c7110e4433591
sql:
CREATE TABLE IF NOT EXISTS tenants (
    id TEXT PRIMARY KEY,
    UNIQUE (id)
);

CREATE TABLE IF NOT EXISTS databases (
    id TEXT PRIMARY KEY, -- unique globally
    name TEXT NOT NULL, -- unique per tenant
    tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    UNIQUE (tenant_id, name) -- Ensure that a tenant has only one database with a given name
);

CREATE TABLE IF NOT EXISTS collections_tmp (
    id TEXT PRIMARY KEY, -- unique globally
    name TEXT NOT NULL, -- unique per database
    topic TEXT NOT NULL,
    dimension INTEGER,
    database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
    UNIQUE (name, database_id)
);

-- Create default tenant and database
INSERT OR REPLACE INTO tenants (id) VALUES ('default_tenant'); -- The default tenant id is 'default_tenant' others are UUIDs
INSERT OR REPLACE INTO databases (id, name, tenant_id) VALUES ('00000000-0000-0000-0000-000000000000', 'default_database', 'default_tenant');

INSERT OR REPLACE INTO collections_tmp (id, name, topic, dimension, database_id)
    SELECT id, name, topic, dimension, '00000000-0000-0000-0000-000000000000' FROM collections;
DROP TABLE collections;
ALTER TABLE collections_tmp RENAME TO collections;


dir: sysdb
filename: 00005-remove-topic.sqlite.sql
hash: b1367c826b8fba5f96f27befdc1d42d2
sql:
-- Remove the topic column from the Collections and Segments tables

ALTER TABLE collections DROP COLUMN topic;
ALTER TABLE segments DROP COLUMN topic;


dir: sysdb
filename: 00006-collection-segment-metadata.sqlite.sql
hash: 4eea7468935bf25d4604a0fed2366116
sql:
-- SQLite does not support adding check with alter table, as a result, adding a check
-- involve creating a new table and copying the data over. It is over kill with adding
-- a boolean type column. The application write to the table needs to ensure the data
-- integrity.
ALTER TABLE collection_metadata ADD COLUMN bool_value INTEGER;
ALTER TABLE segment_metadata ADD COLUMN bool_value INTEGER;


dir: sysdb
filename: 00007-collection-config.sqlite.sql
hash: 1c7e63bba346a42a18b6ab7f1c989bed
sql:
-- Stores collection configuration dictionaries.
ALTER TABLE collections ADD COLUMN config_json_str TEXT;


dir: sysdb
filename: 00008-maintenance-log.sqlite.sql
hash: 0a0e7e93111a01789addf64961c6127c
sql:
-- Records when database maintenance operations are performed.
-- At time of creation, this table is only used to record vacuum operations.
CREATE TABLE maintenance_log (
  id INT PRIMARY KEY,
  timestamp INT NOT NULL,
  operation TEXT NOT NULL
);


dir: sysdb
filename: 00009-segment-collection-not-null.sqlite.sql
hash: 054355aef9e63702bf54ea29e61563f1
sql:
-- This makes segments.collection non-nullable.
CREATE TABLE segments_temp (
    id TEXT PRIMARY KEY,
    type TEXT NOT NULL,
    scope TEXT NOT NULL,
    collection TEXT REFERENCES collection(id) NOT NULL
);

INSERT INTO segments_temp SELECT * FROM segments;
DROP TABLE segments;
ALTER TABLE segments_temp RENAME TO segments;


dir: metadb
filename: 00001-embedding-metadata.sqlite.sql
hash: 2b4cf52c4bb2676e21d6860a4409f856
sql:
CREATE TABLE embeddings (
    id INTEGER PRIMARY KEY,
    segment_id TEXT NOT NULL,
    embedding_id TEXT NOT NULL,
    seq_id BLOB NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE (segment_id, embedding_id)
);

CREATE TABLE embedding_metadata (
    id INTEGER REFERENCES embeddings(id),
    key TEXT NOT NULL,
    string_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (id, key)
);

CREATE TABLE max_seq_id (
    segment_id TEXT PRIMARY KEY,
    seq_id BLOB NOT NULL
);

CREATE VIRTUAL TABLE embedding_fulltext USING fts5(id, string_value);


dir: metadb
filename: 00002-embedding-metadata.sqlite.sql
hash: 12a570f7121b3a8ce750a2a7c36da20f
sql:
-- SQLite does not support adding check with alter table, as a result, adding a check
-- involve creating a new table and copying the data over. It is over kill with adding
-- a boolean type column. The application write to the table needs to ensure the data
-- integrity.
ALTER TABLE embedding_metadata ADD COLUMN bool_value INTEGER


dir: metadb
filename: 00003-full-text-tokenize.sqlite.sql
hash: f97ad6334aeaa8f419f01110b648b97a
sql:
CREATE VIRTUAL TABLE embedding_fulltext_search USING fts5(string_value, tokenize='trigram');
INSERT INTO embedding_fulltext_search (rowid, string_value) SELECT rowid, string_value FROM embedding_metadata;
DROP TABLE embedding_fulltext;


dir: metadb
filename: 00004-metadata-indices.sqlite.sql
hash: fb36603a45ee2cd0254cef3ef86585e8
sql:
CREATE INDEX IF NOT EXISTS embedding_metadata_int_value ON embedding_metadata (key, int_value) WHERE int_value IS NOT NULL;
CREATE INDEX IF NOT EXISTS embedding_metadata_float_value ON embedding_metadata (key, float_value) WHERE float_value IS NOT NULL;
CREATE INDEX IF NOT EXISTS embedding_metadata_string_value ON embedding_metadata (key, string_value) WHERE string_value IS NOT NULL;


# embeddings_queue

created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 0970a9ff-f296-433d-94fb-62493dd5459c
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u9ec3\u6021\u5609\n\nYI-JIA,\n\nHUANG\n\n\n\n\n\n h1119jia@gmail.com\n\n \n\n0981172109\n\n\u7d93\u6b77\n\n\n\n\u8cc7\u6599\u79d1\u5b78\u5bb6 \u2013 \u5b89\u7881\u8cc7\u8a0a\u80a1\u4efd\u6709\u9650\u516c\u53f8 (2024/03 \u2013 \u81f3\u4eca)\n\n   \u3010WebShell \u6aa2\u6e2c\u6a21\u578b\u3011\n\n\u5167\u5bb9\uff1a\u5206\u6790 PHP \u7a0b\u5f0f\u7279\u5fb5\uff0c\u63d0\u53d6 16 \u9805\u4eba\u5de5\u7279\u5fb5\uff0c\u4e26\u7d50\u5408 Word2Vec Embedding\uff0c\u4f7f\u7528 Random Forest \u8a13\u7df4\u6a21\u578b\u3002\n\n\u6210\u679c\uff1a\u6e1b\u5c11 96% \u4eba\u5de5\u6aa2\u6e2c\u5de5\u4f5c\u91cf\uff0c\u63d0\u5347\u60e1\u610f\u7a0b\u5f0f\u8b58\u5225\u6548\u7387\u3002\n\n   \u3010\u66b4\u529b\u7834\u89e3\u884c\u70ba\u6aa2\u6e2c\u3011\n\n\u5f9e\u9632\u706b\u7246\u65e5\u8a8c\u63d0\u53d6 IP \u884c\u70ba\u7279\u5fb5\uff0c\u7d50\u5408 K-means \u548c\u7d71\u8a08\u5206\u6790\u5efa\u7acb\u7570\u5e38\u5075\u6e2c\u6a21\u578b\u3002\n\n\u6210\u679c\uff1a\u81ea\u52d5\u8b58\u5225\u7570\u5e38\u9023\u7dda\uff0c\u63d0\u5347\u5075\u6e2c\u6548\u7387\u3002\n\n\u7814\u7a76\u52a9\u7406 \u2013 \u4e2d\u592e\u7814\u7a76\u9662\u7d71\u8a08\u79d1\u5b78\u7814\u7a76\u6240 (2023/08 \u2013 2024/03)\n\n   \u3010\u7cd6\u5c3f\u75c5\u98a8\u96aa\u9810\u6e2c\u6a21\u578b\u3011\n\n\u6574\u5408\u57fa\u56e0\u3001\u5f71\u50cf\u548c\u554f\u5377\u6578\u64da\uff0c\u7d50\u5408 XGBoost \u548c DenseNet121 \u958b\u767c\u591a\u6a21\u614b\u9810\u6e2c\u6a21\u578b\n\n\u6210\u679c\uff1a\u9810\u6e2c\u6e96\u78ba\u5ea6\u9ad8\u4e14\u958b\u767c\u98a8\u96aa\u8a55\u4f30\u7db2\u7ad9\uff0c\u7814\u7a76\u767c\u8868\u65bc\u300aNature Communications\u300b\uff0c\u7372 2024 \u672a\u4f86\u79d1\u6280\u734e\u3002\n\n\u5b78\u6b77"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 434e9873-aab8-48cf-9c1d-eb6a1f44236e
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u6210\u679c\uff1a\u9810\u6e2c\u6e96\u78ba\u5ea6\u9ad8\u4e14\u958b\u767c\u98a8\u96aa\u8a55\u4f30\u7db2\u7ad9\uff0c\u7814\u7a76\u767c\u8868\u65bc\u300aNature Communications\u300b\uff0c\u7372 2024 \u672a\u4f86\u79d1\u6280\u734e\u3002\n\n\u5b78\u6b77\n\n2021/09 - 2023/06 \u570b\u7acb\u967d\u660e\u4ea4\u901a\u5927\u5b78 \u2013 \u516c\u5171\u885b\u751f\u7814\u7a76\u6240 (\u751f\u7269\u7d71\u8a08\u8207\u8cc7\u6599\u79d1\u5b78\u7d44)\n\nGPA: 4.21/4.3 \n\n\u78a9\u58eb\u8ad6\u6587\u767c\u8868\u65bcNature Communications \n\n\u5c08\u9577\u9818\u57df\uff1a\u6a5f\u5668\u5b78\u7fd2\u53ca\u6df1\u5ea6\u5b78\u7fd2\u61c9\u7528\u3001\u91ab\u7642\u6578\u64da\u5206\u6790\n\n2017/09 - 2021/06 \u8f14\u4ec1\u5927\u5b78-\u7d71\u8a08\u8cc7\u8a0a\u5b78\u7cfb\n\nGPA: 3.89 / 4\u3001\u7562\u696d\u6210\u7e3e\u6392\u540d\u7b2c\u4e00\n\n\u5c08\u6848\u7d93\u9a57\uff1a\u79d1\u6280\u90e8\u5927\u5c08\u5b78\u751f\u7814\u7a76\u8a08\u756b\u3001\u5927\u6578\u64da\u8de8\u9818\u57df\u5fae\u5b78\u5206\u5b78\u7a0b-\u62db\u751f\u843d\u9ede\u5206\u6790\u7cfb\u7d71\n\n\u6280\u80fd\u53ca\u8b49\u7167\n\n\u6280\u8853\u5c08\u9577\n\n\u7a0b\u5f0f\u8a9e\u8a00\uff1aPython, R, SQL\n\n\u751f\u6210\u5f0f AI\uff1aLLM API, RAG, Function Calling\n\n\u8cc7\u6599\u5206\u6790\u8207\u8996\u89ba\u5316\uff1apandas, plotnine\n\n\u722c\u87f2\uff1aBeautifulSoup, Selenium\n\n\u6a5f\u5668\u5b78\u7fd2 / \u6df1\u5ea6\u5b78\u7fd2\uff1ascikit-learn, PyTorch, Word2Vec, Embedding"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 5a7b7e19-2fb3-42b9-924d-2a66a2957454
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u722c\u87f2\uff1aBeautifulSoup, Selenium\n\n\u6a5f\u5668\u5b78\u7fd2 / \u6df1\u5ea6\u5b78\u7fd2\uff1ascikit-learn, PyTorch, Word2Vec, Embedding\n\n\u7db2\u9801\u958b\u767c\u53ca\u8cc7\u6599\u5eab\uff1aHTML, CSS, JavaScript, PHP, MySQL\n\n\u7248\u672c\u63a7\u5236\u5de5\u5177\uff1aGit\n\n\n\n\u8b49\u7167\n\n2019/08 \u82f1\u8a9e - \u591a\u76ca\u6e2c\u9a57(TOEIC): \u5206\u6578 845\n\n2019/10 TQC+-\u5c08\u696d\u8a2d\u8a08\u4eba\u624d\u8a8d\u8b49\u7a0b\u5f0f\u8a9e\u8a00 Python3\n\n2020/11 \u7d93\u6fdf\u90e8\u7522\u696d\u4eba\u624d\u80fd\u529b\u9451\u5b9a(iPAS) - IPAS\u5de8\u91cf\u8cc7\u6599\u5206\u6790\u5e2b(\u521d\u7d1a)\n\n2020/12 TQC+-\u5c08\u696d\u8a2d\u8a08\u4eba\u624d\u8a8d\u8b49 - \u7db2\u9801\u8cc7\u6599\u64f7\u53d6\u8207\u5206\u6790 Python 3\n\n\n\n\n\u81ea\u50b3\n\n\u3010\u6280\u8853\u5c08\u9577\u8207\u61c9\u7528\u7d93\u9a57\u3011\n\n\u6211\u5177\u5099\u7d71\u8a08\u8207\u8cc7\u8a0a\u6280\u8853\u7684\u7d2e\u5be6\u57fa\u790e\uff0c\u64c5\u9577 Python\u3001R\uff0c\u4e26\u719f\u6089\u6a5f\u5668\u5b78\u7fd2\u3001\u6df1\u5ea6\u5b78\u7fd2\u53ca\u7570\u5e38\u5075\u6e2c\u7b49\u6280\u8853\u3002\u6211\u559c\u6b61\u900f\u904e\u6578\u64da\u5206\u6790\u89e3\u6c7a\u5be6\u969b\u554f\u984c\uff0c\u4e26\u71b1\u8877\u65bc\u5b78\u7fd2\u65b0\u6280\u8853\uff0c\u4e26\u5c07\u5176\u5be6\u969b\u61c9\u7528\u3002\n\n\u5b78\u8853\u8207\u7814\u7a76\u7d93\u6b77\n\n\u5927\u5b78\u671f\u9593\uff0c\u6211\u53c3\u8207\u79d1\u6280\u90e8\u5927\u5c08\u751f\u7814\u7a76\u8a08\u756b\uff0c\u4f7f\u7528 R \u9032\u884c\u6a21\u64ec\u5206\u6790\uff0c\u4e26\u900f\u904e R Shiny \u958b\u767c\u4e92\u52d5\u5f0f\u8cc7\u6599\u8996\u89ba\u5316\u7db2\u9801\u3002"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: b35b6f0e-e40c-4a1b-9544-ca97515bd457
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u5b78\u8853\u8207\u7814\u7a76\u7d93\u6b77\n\n\u5927\u5b78\u671f\u9593\uff0c\u6211\u53c3\u8207\u79d1\u6280\u90e8\u5927\u5c08\u751f\u7814\u7a76\u8a08\u756b\uff0c\u4f7f\u7528 R \u9032\u884c\u6a21\u64ec\u5206\u6790\uff0c\u4e26\u900f\u904e R Shiny \u958b\u767c\u4e92\u52d5\u5f0f\u8cc7\u6599\u8996\u89ba\u5316\u7db2\u9801\u3002\n\n\u5728\u7814\u7a76\u6240\u53ca\u64d4\u4efb\u7814\u7a76\u52a9\u7406\u6642\uff0c\u6211\u5c07\u7d71\u8a08\u8207\u6a5f\u5668\u5b78\u7fd2\u6280\u8853\u61c9\u7528\u65bc\u91ab\u5b78\u8cc7\u6599\u5206\u6790\uff0c\u900f\u904e XGBoost \u8a13\u7df4\u7cd6\u5c3f\u75c5\u98a8\u96aa\u9810\u6e2c\u6a21\u578b\uff0c\u4e26\u958b\u767c\u9810\u6e2c\u7cfb\u7d71\uff0c\u6700\u7d42\u7814\u7a76\u6210\u679c\u767c\u8868\u65bc Nature Communications\uff0c\u4e26\u69ae\u7372 2024 \u672a\u4f86\u79d1\u6280\u734e\u3002\n\n\u8cc7\u5b89\u9818\u57df\u7684\u5be6\u52d9\u61c9\u7528\n\u5728\u8cc7\u5b89\u7522\u696d\u64d4\u4efb\u8cc7\u6599\u79d1\u5b78\u5bb6\u671f\u9593\uff0c\u6211\u4e3b\u8981\u8ca0\u8cac\u5169\u9805\u61c9\u7528\uff0c\u5305\u62ec\uff1a\n\n\tWebShell \u6aa2\u6e2c\u6a21\u578b\uff1a\u6df1\u5165\u5206\u6790 PHP \u7a0b\u5f0f\u7279\u5fb5\uff0c\u4e26\u900f\u904e Random Forest \u6f14\u7b97\u6cd5\u5927\u5e45\u63d0\u5347\u6aa2\u6e2c\u6548\u7387\uff0c\u6e1b\u5c11 96% \u4eba\u5de5\u6aa2\u6e2c\u5de5\u4f5c\u91cf\u3002\n\n\t\u7570\u5e38\u884c\u70ba\u5075\u6e2c\uff1a\u904b\u7528\u9632\u706b\u7246\u65e5\u8a8c\u5206\u6790\uff0c\u63d0\u53d6 IP \u884c\u70ba\u7279\u5fb5\uff0c\u7d50\u5408 K-means \u5206\u7fa4\u8207\u7d71\u8a08\u65b9\u6cd5\uff0c\u81ea\u52d5\u5316\u8b58\u5225\u6f5b\u5728\u5a01\u8105\u3002\n\n\u6301\u7e8c\u5b78\u7fd2\u8207\u6280\u8853\u5275\u65b0\n\u96a8\u8457\u5927\u578b\u8a9e\u8a00\u6a21\u578b\u7684\u5feb\u901f\u767c\u5c55\uff0c\u6211\u4e3b\u52d5\u5b78\u7fd2 LLM API \u4e32\u63a5\u3001RAG\u3001Function Calling\uff0c\u4e26\u958b\u767c\u4e86\u4e00\u500b LLM \u52a9\u7406\uff0c\u900f\u904e Function Calling \u63d0\u4f9b\u5169\u5927\u529f\u80fd\uff1a\n\nRAG \u6aa2\u7d22\u5c65\u6b77\uff1a\u5e6b\u52a9\u62db\u8058\u6a5f\u69cb\u9ad8\u6548\u89e3\u6790\u5c65\u6b77\u5167\u5bb9"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: de2292d3-7108-4414-b87c-006c58f4a779
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "RAG \u6aa2\u7d22\u5c65\u6b77\uff1a\u5e6b\u52a9\u62db\u8058\u6a5f\u69cb\u9ad8\u6548\u89e3\u6790\u5c65\u6b77\u5167\u5bb9\n\n\u8077\u7f3a\u722c\u53d6\u8207\u5339\u914d\uff1a\u8b93\u6c42\u8077\u8005\u5feb\u901f\u627e\u5230\u9069\u5408\u7684\u5de5\u4f5c\n\n\u9019\u9805\u958b\u767c\u4e0d\u50c5\u52a0\u6df1\u4e86\u6211\u5c0d LLM \u6280\u8853\u7684\u7406\u89e3\uff0c\u4e5f\u63d0\u5347\u4e86\u6211\u7684\u5be6\u4f5c\u80fd\u529b\u3002\n\n\n\n\n\n\n\n\n\n\u81ea\u50b3\n\n\u3010\u5718\u968a\u5408\u4f5c\u8207\u8edf\u5be6\u529b\u3011\n\n\u5728\u5927\u6578\u64da\u8de8\u9818\u57df\u5fae\u5b78\u7a0b\u7684\u5c08\u6848\u4e2d\uff0c\u6211\u64d4\u4efb\u7d44\u9577\uff0c\u8ca0\u8cac\u8207\u6307\u5c0e\u8001\u5e2b\u6e9d\u901a\u9700\u6c42\uff0c\u4e26\u5354\u8abf\u7d44\u54e1\u5206\u5de5\uff0c\u6700\u7d42\u6210\u529f\u958b\u767c\u4e26\u4e0a\u7dda\u62db\u751f\u843d\u9ede\u5206\u6790\u7cfb\u7d71\u3002\u9019\u6bb5\u7d93\u9a57\u4e0d\u50c5\u9a57\u8b49\u4e86\u6211\u5011\u7684\u6280\u8853\u80fd\u529b\uff0c\u4e5f\u63d0\u5347\u4e86\u6211\u7684\u5718\u968a\u5408\u4f5c\u8207\u6e9d\u901a\u5354\u8abf\u7684\u80fd\u529b\u3002\n\n\u5728\u5de5\u4f5c\u8207\u5b78\u7fd2\u904e\u7a0b\u4e2d\uff0c\u6211\u6a02\u65bc\u5354\u52a9\u5718\u968a\u89e3\u6c7a\u6280\u8853\u554f\u984c\uff0c\u4e5f\u64c5\u9577\u5229\u7528\u7db2\u8def\u8cc7\u6e90\u9032\u884c\u81ea\u5b78\uff0c\u8b93\u81ea\u5df1\u80fd\u5920\u5feb\u901f\u9069\u61c9\u65b0\u6280\u8853\u4e26\u61c9\u7528\u65bc\u5be6\u969b\u5c08\u6848\u3002\n\n\n\n\n\n\u3010\u8077\u6daf\u671f\u8a31\u3011\n\n\u6211\u71b1\u8877\u65bc\u8cc7\u6599\u79d1\u5b78\u6280\u8853\uff0c\u671f\u671b\u80fd\u5c07\u6a5f\u5668\u5b78\u7fd2\u3001\u6df1\u5ea6\u5b78\u7fd2\u8207 LLM \u6280\u8853\u61c9\u7528\u65bc\u5404\u9818\u57df\uff0c\u89e3\u6c7a\u771f\u5be6\u4e16\u754c\u7684\u554f\u984c\u3002\u6211\u671f\u5f85\u52a0\u5165\u4e00\u500b\u80fd\u5920\u4e0d\u65b7\u5b78\u7fd2\u8207\u6210\u9577\u7684\u74b0\u5883\uff0c\u8207\u5718\u968a\u5171\u540c\u958b\u767c\u6709\u50f9\u503c\u7684\u61c9\u7528\u3002\n\n\u76f8\u4fe1\u6211\u7684\u5be6\u6230\u7d93\u9a57\u548c\u5b78\u7fd2\u71b1\u60c5\uff0c\u80fd\u70ba\u5718\u968a\u5e36\u4f86\u5be6\u8cea\u8ca2\u737b\u3002\u611f\u8b1d\u60a8\u64a5\u5197\u95b1\u8b80\u6211\u7684\u81ea\u50b3\uff0c\u671f\u5f85\u6709\u6a5f\u6703\u8207\u8cb4\u516c\u53f8\u5408\u4f5c\uff01\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u4f5c\u54c1\u96c6\uff0d\u5927\u578b\u8a9e\u8a00\u6a21\u578b\u61c9\u7528\n\n\u4f7f\u7528\u6280\u8853\uff1aLLM API \u4e32\u63a5\u3001Function Calling\u3001RAG\u3001\u722c\u87f2"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 9f8b30e0-937d-4247-a04a-657fcf7de9b4
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u4f5c\u54c1\u96c6\uff0d\u5927\u578b\u8a9e\u8a00\u6a21\u578b\u61c9\u7528\n\n\u4f7f\u7528\u6280\u8853\uff1aLLM API \u4e32\u63a5\u3001Function Calling\u3001RAG\u3001\u722c\u87f2\n\n\u529f\u80fd1. RAG \u6aa2\u7d22\u5c65\u6b77\uff1a\u5feb\u901f\u89e3\u6790\u5c65\u6b77\u5167\u5bb9\uff0c\u63d0\u53d6\u95dc\u9375\u8cc7\u8a0a\uff0c\u63d0\u5347\u62db\u8058\u6548\u7387\n\n\n\n\u529f\u80fd2. \u8077\u7f3a\u722c\u53d6\u8207\u7d71\u6574\uff1a\u81ea\u52d5\u722c\u53d6\u6700\u65b0\u8077\u7f3a\uff0c\u6574\u7406\u8cc7\u8a0a\uff0c\u8b93\u6c42\u8077\u8005\u4e00\u76ee\u4e86\u7136\n\n\n\n\uff0a\u6210\u679c\u5df2\u90e8\u7f72\u81f3Hugging face\uff1a\n\nhttps://huggingface.co/spaces/yjhuang/LLM_Assistant\n\n\u4f5c\u54c1\u96c6\uff0dR Shiny Dashboard & Python\u722c\u87f2 \n\nR Shiny Dashboard\uff1aPM2.5\u8cc7\u6599\u8996\u89ba\u5316 \n\n(\u5927\u5b78\u5c08\u984c\u6210\u679c\uff0c\u8ca0\u8cacPM2.5\u8996\u89ba\u5316\u9810\u6e2c\u53ca\u5448\u73fe)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPython \u722c\u87f2\uff1a\u64f7\u53d6 PTT \u7576\u65e5\u767c\u5e03\u7684\u6587\u7ae0\u8cc7\u8a0a\uff0c\u7d50\u679c\u5132\u5b58\u65bc MySQL \u8cc7\u6599\u5eab\u4e26\u50b3\u9001\u901a\u77e5\u81f3LINE\n\n\n\n\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u4f5c\u54c1\u96c6\uff0d\u7cfb\u7d71\u958b\u767c\n\n\n\n\u4f7f\u7528\u8005\u8f38\u5165\u5e74\u7d00\u3001\u6027\u5225\u3001\u5bb6\u65cf\u53f2\u3001\u57fa\u56e0\u3001\u91ab\u5b78\u5f71\u50cf\u8a0a\u606f\u7b49\u500b\u4eba\u8cc7\u8a0a\u3002\u57fa\u56e0\u53ca\u91ab\u5b78\u5f71\u50cf\u53ef\u4ee5\u4e0a\u50b3\u6a94\u6848\u6216\u8f38\u5165\u503c (\u6a94\u6848\u6709\u63d0\u4f9b\u53ef\u57f7\u884c\u7684\u7bc4\u4f8b)"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 8e2388e5-7d39-4fbf-9b98-4011d7698a67
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u4f5c\u54c1\u96c6\uff0d\u7cfb\u7d71\u958b\u767c\n\n\n\n\u4f7f\u7528\u8005\u8f38\u5165\u5e74\u7d00\u3001\u6027\u5225\u3001\u5bb6\u65cf\u53f2\u3001\u57fa\u56e0\u3001\u91ab\u5b78\u5f71\u50cf\u8a0a\u606f\u7b49\u500b\u4eba\u8cc7\u8a0a\u3002\u57fa\u56e0\u53ca\u91ab\u5b78\u5f71\u50cf\u53ef\u4ee5\u4e0a\u50b3\u6a94\u6848\u6216\u8f38\u5165\u503c (\u6a94\u6848\u6709\u63d0\u4f9b\u53ef\u57f7\u884c\u7684\u7bc4\u4f8b)\n\n\u63d0\u4f9b\u7cd6\u5c3f\u75c5\u98a8\u96aa\u4f30\u8a08\u7d50\u679c\uff0c\u80cc\u5f8c\u904b\u7b97\uff1a\n\n\u91ab\u5b78\u5f71\u50cf\u8a0a\u606f\u5229\u7528Python XGBoost\u6a21\u578b\u8a08\u7b97\u98a8\u96aa\u5206\u6578(Multi-image risk score; MRS)\n\n\u57fa\u56e0\u8a0a\u606f\u5229\u7528PLINK\u8a08\u7b97\u591a\u57fa\u56e0\u98a8\u96aa\u5206\u6578(Polygenic risk score; PRS)\n\n-> \u5c07\u8b8a\u9805\u5957\u5165\u6a21\u578b\uff0c\u5448\u73fe\u9810\u6e2c\u7d50\u679c (\u8996\u89ba\u5316\u7d50\u679c\u7531 R GGplot\u7e6a\u88fd)\n\n\u4f7f\u7528\u8005\u8f38\u5165\u5e74\u7d00\u3001\u6027\u5225\u3001\u5bb6\u65cf\u53f2\u3001\u57fa\u56e0\u3001\u91ab\u5b78\u5f71\u50cf\u8a0a\u606f\u7b49\u500b\u4eba\u8cc7\u8a0a\u3002\u57fa\u56e0\u53ca\u91ab\u5b78\u5f71\u50cf\u53ef\u4ee5\u4e0a\u50b3\u6a94\u6848\u6216\u8f38\u5165\u503c (\u6a94\u6848\u6709\u63d0\u4f9b\u53ef\u57f7\u884c\u7684\u7bc4\u4f8b)\n\n\u63d0\u4f9b\u7cd6\u5c3f\u75c5\u98a8\u96aa\u4f30\u8a08\u7d50\u679c\uff0c\u80cc\u5f8c\u904b\u7b97\uff1a\n\n\u91ab\u5b78\u5f71\u50cf\u8a0a\u606f\u5229\u7528Python XGBoost\u6a21\u578b\u8a08\u7b97\u98a8\u96aa\u5206\u6578(Multi-image risk score; MRS)\n\n\u57fa\u56e0\u8a0a\u606f\u5229\u7528PLINK\u8a08\u7b97\u591a\u57fa\u56e0\u98a8\u96aa\u5206\u6578(Polygenic risk score; PRS)"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 6e0c7884-90d7-4a41-9679-921908a52d62
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u57fa\u56e0\u8a0a\u606f\u5229\u7528PLINK\u8a08\u7b97\u591a\u57fa\u56e0\u98a8\u96aa\u5206\u6578(Polygenic risk score; PRS)\n\n-> \u5c07\u8b8a\u9805\u5957\u5165\u6a21\u578b\uff0c\u5448\u73fe\u9810\u6e2c\u7d50\u679c (\u8996\u89ba\u5316\u7d50\u679c\u7531 R GGplot\u7e6a\u88fd)\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u98a8\u96aa\u4f30\u8a08\u7db2\u9801(\u7368\u7acb\u5b8c\u6210)\uff1a\u5c07\u6a21\u578b\u90e8\u7f72\u6210\u53ef\u900f\u904e\u7db2\u9801\u64cd\u4f5c\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u8f14\u4ec1\u5927\u5b78\u62db\u751f\u843d\u9ede\u5206\u6790\u7cfb\u7d71 (\u5718\u968a\u5408\u4f5c\u5b8c\u6210) \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(\u958b\u767c\u5be6\u969b\u4e0a\u7dda\u7684\u8f14\u5927\u7bc9\u5922\u8cc7\u8a0a\u7db21.0\uff0c\n\n\u76ee\u524d\u7248\u672c\u70ba\u7531\u5b78\u5f1f\u59b9\u66f4\u65b0\u7684\u7248\u672c)\n\n\n\n\n\n\n\u78a9\u58eb\u8ad6\u6587\u6458\u8981\n\n\u984c\u76ee\uff1a\u6574\u5408\u4eba\u5de5\u667a\u6167\u8207\u4eba\u9ad4\u751f\u7269\u8cc7\u6599\u5eab\u4ee5\u63a8\u9032\u7cbe\u6e96\u5065\u5eb7\u2013\u4ee5\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u70ba\u4f8b"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 496c7c0f-7446-483e-8b48-e2f4cc3c2467
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u8fd1\u5e74\u4f86\uff0c\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u7684\u76db\u884c\u7387\u9010\u5e74\u6500\u5347\uff0c\u5df2\u6210\u70ba\u5168\u7403\u91cd\u8981\u7684\u516c\u5171\u5065\u5eb7\u8b70\u984c\uff0c\u5982\u80fd\u65e9\u671f\u9810\u9632\uff0c\u6709\u52a9\u589e\u9032\u570b\u4eba\u5065\u5eb7\u798f\u7949\uff0c\u964d\u4f4e\u570b\u5bb6\u5065\u4fdd\u8ca0\u64d4\u3002\u672c\u7814\u7a76\u65e8\u5728\u5229\u7528\u57fa\u56e0\u907a\u50b3\u3001\u91ab\u5b78\u5f71\u50cf\u7b49\u500b\u4eba\u8cc7\u8a0a\uff0c\u900f\u904e\u4eba\u5de5\u667a\u6167\u65b9\u6cd5\u5efa\u7acb\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u7684\u9810\u6e2c\u6a21\u578b\uff0c\u9032\u800c\u5c0b\u627e\u9ad8\u98a8\u96aa\u4eba\u7fa4\u3002\u672c\u7814\u7a76\u5206\u6790\u81fa\u7063\u4eba\u9ad4\u751f\u7269\u8cc7\u6599\u5eab\u8cc7\u6599\u4e2d68,769\u500b\u53c3\u8207\u8005\u7684\u8cc7\u6599\uff0c\u5efa\u7acb\u591a\u57fa\u56e0\u98a8\u96aa\u5206\u6578(Polygenic risk score; PRS) \u8207\u591a\u985e\u578b\u5f71\u50cf\u98a8\u96aa\u5206\u6578(Multi-image risk score; MRS)\uff0c\u4e26\u7d50\u5408\u4eba\u53e3\u8b8a\u9805\u8207\u74b0\u5883\u66b4\u9732\u7b49\u56e0\u5b50\uff0c\u4ee5AUC (Area under the receiver operating curve) \u505a\u70ba\u6a21\u578b\u512a\u52a3\u7684\u8a55\u4f30\u6a19\u6e96\uff0c\u5229\u7528\u6a5f\u5668\u5b78\u7fd2\u65b9\u6cd5\u6975\u9650\u68af\u5ea6\u63d0\u5347(eXtreme Gradient Boosting;  XGBoost) \u5efa\u7acb\u9810\u6e2c\u6a21\u578b\uff0c\u9032\u884c\u75be\u75c5\u98a8\u96aa\u8a55\u4f30\u3002\u7d50\u679c\u986f\u793a\uff0c\u50c5\u4f7f\u7528\u57fa\u56e0\u8cc7\u8a0a\u5c0d\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u9810\u6e2c\u6548\u679c\u6709\u9650(AUC = 0.73)\uff0c\u91ab\u5b78\u5f71\u50cf\u8cc7\u8a0a\u53ef\u63d0\u4f9b\u66f4\u597d\u7684\u98a8\u96aa\u8a55\u4f30\u80fd\u529b(AUC = 0.89)\uff0c\u6574\u5408\u57fa\u56e0\u3001\u91ab\u5b78\u5f71\u50cf\u53ca\u4eba\u53e3\u5b78\u8b8a\u9805\u7684\u6a21\u578b\u8868\u73fe\u6700\u4f73(AUC ="}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: 3243774f-1f05-4ff8-9dd6-a1d0c7deb95c
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "= 0.73)\uff0c\u91ab\u5b78\u5f71\u50cf\u8cc7\u8a0a\u53ef\u63d0\u4f9b\u66f4\u597d\u7684\u98a8\u96aa\u8a55\u4f30\u80fd\u529b(AUC = 0.89)\uff0c\u6574\u5408\u57fa\u56e0\u3001\u91ab\u5b78\u5f71\u50cf\u53ca\u4eba\u53e3\u5b78\u8b8a\u9805\u7684\u6a21\u578b\u8868\u73fe\u6700\u4f73(AUC = 0.94)\u3002\u6211\u5011\u900f\u904ePRS\u8207MRS\u627e\u5230\u7f79\u75c5\u9ad8\u98a8\u96aa\u4eba\u7fa4\uff0c\u4e26\u5efa\u7acb\u4e86\u7db2\u9801\u63d0\u4f9b\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u7f79\u75c5\u98a8\u96aa\u500b\u4eba\u5316\u8a55\u4f30\u3002\u7e3d\u7d50\uff0c\u9019\u662f\u7b2c\u4e00\u500b\u6574\u5408\u5168\u57fa\u56e0\u9ad4\u548c\u591a\u91ab\u5b78\u5f71\u50cf\u8cc7\u8a0a\u4f86\u8a55\u4f30\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u98a8\u96aa\u7684\u7814\u7a76\u3002\u50c5\u5229\u7528\u57fa\u56e0\u8cc7\u6599\u9032\u884c\u9810\u6e2c\uff0c\u672c\u7814\u7a76\u7684AUC\u6bd4\u904e\u53bb\u5176\u4ed6\u7814\u7a76\u8868\u73fe\u90fd\u597d\uff0c\u4e14\u6574\u5408\u57fa\u56e0\u548c\u91ab\u5b78\u5f71\u50cf\u7684\u9810\u6e2c\u8868\u73fe\u66f4\u662f\u5927\u5e45\u63d0\u5347\u3002\u5229\u7528\u4eba\u5de5\u667a\u6167\u65b9\u6cd5\u5206\u6790\u4eba\u9ad4\u751f\u7269\u8cc7\u6599\u5eab\u7684\u57fa\u56e0\u3001\u91ab\u5b78\u5f71\u50cf\u3001\u4eba\u53e3\u8b8a\u9805\u7b49\u5927\u6578\u64da\uff0c\u6709\u52a9\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u7684\u65e9\u671f\u5075\u6e2c\u8207\u98a8\u96aa\u8a55\u4f30\uff0c\u5f80\u7cbe\u6e96\u5065\u5eb7\u8207\u9810\u9632\u9081\u9032\u3002"}


created_at: 2025-02-23 15:06:41
topic: persistent://default/default/8891bb21-eb7a-41a7-9a8e-92afd500e072
id: fe27db68-d65e-4cb9-a961-bda0795774c7
encoding: FLOAT32
metadata:
{"source": "./CV.docx", "chroma:document": "\u95dc\u9375\u8a5e\uff1a\u7b2c\u4e8c\u578b\u7cd6\u5c3f\u75c5\u3001\u55ae\u4e00\u6838\u82f7\u9178\u591a\u578b\u6027\u3001\u91ab\u5b78\u5f71\u50cf\u3001\u591a\u57fa\u56e0\u98a8\u96aa\u5206\u6578\u3001\u591a\u985e\u578b\u5f71\u50cf\u98a8\u96aa\u5206\u6578\u3001\u6975\u9650\u68af\u5ea6\u63d0\u5347"}


# collections

id: 8891bb21-eb7a-41a7-9a8e-92afd500e072
name: langchain
database_id: 00000000-0000-0000-0000-000000000000
config_json_str:
{"hnsw_configuration": {"space": "l2", "ef_construction": 100, "ef_search": 100, "num_threads": 8, "M": 16, "resize_factor": 1.2, "batch_size": 100, "sync_threshold": 1000, "_type": "HNSWConfigurationInternal"}, "_type": "CollectionConfigurationInternal"}


# embedding_metadata

key: chroma:document
string_value:
黃怡嘉

YI-JIA,

HUANG





 h1119jia@gmail.com

 

0981172109

經歷



資料科學家 – 安碁資訊股份有限公司 (2024/03 – 至今)

   【WebShell 檢測模型】

內容：分析 PHP 程式特徵，提取 16 項人工特徵，並結合 Word2Vec Embedding，使用 Random Forest 訓練模型。

成果：減少 96% 人工檢測工作量，提升惡意程式識別效率。

   【暴力破解行為檢測】

從防火牆日誌提取 IP 行為特徵，結合 K-means 和統計分析建立異常偵測模型。

成果：自動識別異常連線，提升偵測效率。

研究助理 – 中央研究院統計科學研究所 (2023/08 – 2024/03)

   【糖尿病風險預測模型】

整合基因、影像和問卷數據，結合 XGBoost 和 DenseNet121 開發多模態預測模型

成果：預測準確度高且開發風險評估網站，研究發表於《Nature Communications》，獲 2024 未來科技獎。

學歷


key: chroma:document
string_value:
成果：預測準確度高且開發風險評估網站，研究發表於《Nature Communications》，獲 2024 未來科技獎。

學歷

2021/09 - 2023/06 國立陽明交通大學 – 公共衛生研究所 (生物統計與資料科學組)

GPA: 4.21/4.3 

碩士論文發表於Nature Communications 

專長領域：機器學習及深度學習應用、醫療數據分析

2017/09 - 2021/06 輔仁大學-統計資訊學系

GPA: 3.89 / 4、畢業成績排名第一

專案經驗：科技部大專學生研究計畫、大數據跨領域微學分學程-招生落點分析系統

技能及證照

技術專長

程式語言：Python, R, SQL

生成式 AI：LLM API, RAG, Function Calling

資料分析與視覺化：pandas, plotnine

爬蟲：BeautifulSoup, Selenium

機器學習 / 深度學習：scikit-learn, PyTorch, Word2Vec, Embedding


key: chroma:document
string_value:
爬蟲：BeautifulSoup, Selenium

機器學習 / 深度學習：scikit-learn, PyTorch, Word2Vec, Embedding

網頁開發及資料庫：HTML, CSS, JavaScript, PHP, MySQL

版本控制工具：Git



證照

2019/08 英語 - 多益測驗(TOEIC): 分數 845

2019/10 TQC+-專業設計人才認證程式語言 Python3

2020/11 經濟部產業人才能力鑑定(iPAS) - IPAS巨量資料分析師(初級)

2020/12 TQC+-專業設計人才認證 - 網頁資料擷取與分析 Python 3




自傳

【技術專長與應用經驗】

我具備統計與資訊技術的紮實基礎，擅長 Python、R，並熟悉機器學習、深度學習及異常偵測等技術。我喜歡透過數據分析解決實際問題，並熱衷於學習新技術，並將其實際應用。

學術與研究經歷

大學期間，我參與科技部大專生研究計畫，使用 R 進行模擬分析，並透過 R Shiny 開發互動式資料視覺化網頁。


key: chroma:document
string_value:
學術與研究經歷

大學期間，我參與科技部大專生研究計畫，使用 R 進行模擬分析，並透過 R Shiny 開發互動式資料視覺化網頁。

在研究所及擔任研究助理時，我將統計與機器學習技術應用於醫學資料分析，透過 XGBoost 訓練糖尿病風險預測模型，並開發預測系統，最終研究成果發表於 Nature Communications，並榮獲 2024 未來科技獎。

資安領域的實務應用
在資安產業擔任資料科學家期間，我主要負責兩項應用，包括：

	WebShell 檢測模型：深入分析 PHP 程式特徵，並透過 Random Forest 演算法大幅提升檢測效率，減少 96% 人工檢測工作量。

	異常行為偵測：運用防火牆日誌分析，提取 IP 行為特徵，結合 K-means 分群與統計方法，自動化識別潛在威脅。

持續學習與技術創新
隨著大型語言模型的快速發展，我主動學習 LLM API 串接、RAG、Function Calling，並開發了一個 LLM 助理，透過 Function Calling 提供兩大功能：

RAG 檢索履歷：幫助招聘機構高效解析履歷內容


key: chroma:document
string_value:
RAG 檢索履歷：幫助招聘機構高效解析履歷內容

職缺爬取與匹配：讓求職者快速找到適合的工作

這項開發不僅加深了我對 LLM 技術的理解，也提升了我的實作能力。









自傳

【團隊合作與軟實力】

在大數據跨領域微學程的專案中，我擔任組長，負責與指導老師溝通需求，並協調組員分工，最終成功開發並上線招生落點分析系統。這段經驗不僅驗證了我們的技術能力，也提升了我的團隊合作與溝通協調的能力。

在工作與學習過程中，我樂於協助團隊解決技術問題，也擅長利用網路資源進行自學，讓自己能夠快速適應新技術並應用於實際專案。





【職涯期許】

我熱衷於資料科學技術，期望能將機器學習、深度學習與 LLM 技術應用於各領域，解決真實世界的問題。我期待加入一個能夠不斷學習與成長的環境，與團隊共同開發有價值的應用。

相信我的實戰經驗和學習熱情，能為團隊帶來實質貢獻。感謝您撥冗閱讀我的自傳，期待有機會與貴公司合作！



























作品集－大型語言模型應用

使用技術：LLM API 串接、Function Calling、RAG、爬蟲


key: chroma:document
string_value:
作品集－大型語言模型應用

使用技術：LLM API 串接、Function Calling、RAG、爬蟲

功能1. RAG 檢索履歷：快速解析履歷內容，提取關鍵資訊，提升招聘效率



功能2. 職缺爬取與統整：自動爬取最新職缺，整理資訊，讓求職者一目了然



＊成果已部署至Hugging face：

https://huggingface.co/spaces/yjhuang/LLM_Assistant

作品集－R Shiny Dashboard & Python爬蟲 

R Shiny Dashboard：PM2.5資料視覺化 

(大學專題成果，負責PM2.5視覺化預測及呈現)



















Python 爬蟲：擷取 PTT 當日發布的文章資訊，結果儲存於 MySQL 資料庫並傳送通知至LINE



		
















作品集－系統開發



使用者輸入年紀、性別、家族史、基因、醫學影像訊息等個人資訊。基因及醫學影像可以上傳檔案或輸入值 (檔案有提供可執行的範例)


key: chroma:document
string_value:
作品集－系統開發



使用者輸入年紀、性別、家族史、基因、醫學影像訊息等個人資訊。基因及醫學影像可以上傳檔案或輸入值 (檔案有提供可執行的範例)

提供糖尿病風險估計結果，背後運算：

醫學影像訊息利用Python XGBoost模型計算風險分數(Multi-image risk score; MRS)

基因訊息利用PLINK計算多基因風險分數(Polygenic risk score; PRS)

-> 將變項套入模型，呈現預測結果 (視覺化結果由 R GGplot繪製)

使用者輸入年紀、性別、家族史、基因、醫學影像訊息等個人資訊。基因及醫學影像可以上傳檔案或輸入值 (檔案有提供可執行的範例)

提供糖尿病風險估計結果，背後運算：

醫學影像訊息利用Python XGBoost模型計算風險分數(Multi-image risk score; MRS)

基因訊息利用PLINK計算多基因風險分數(Polygenic risk score; PRS)


key: chroma:document
string_value:
基因訊息利用PLINK計算多基因風險分數(Polygenic risk score; PRS)

-> 將變項套入模型，呈現預測結果 (視覺化結果由 R GGplot繪製)第二型糖尿病風險估計網頁(獨立完成)：將模型部署成可透過網頁操作





























輔仁大學招生落點分析系統 (團隊合作完成) 



















(開發實際上線的輔大築夢資訊網1.0，

目前版本為由學弟妹更新的版本)






碩士論文摘要

題目：整合人工智慧與人體生物資料庫以推進精準健康–以第二型糖尿病為例


key: chroma:document
string_value:
近年來，第二型糖尿病的盛行率逐年攀升，已成為全球重要的公共健康議題，如能早期預防，有助增進國人健康福祉，降低國家健保負擔。本研究旨在利用基因遺傳、醫學影像等個人資訊，透過人工智慧方法建立第二型糖尿病的預測模型，進而尋找高風險人群。本研究分析臺灣人體生物資料庫資料中68,769個參與者的資料，建立多基因風險分數(Polygenic risk score; PRS) 與多類型影像風險分數(Multi-image risk score; MRS)，並結合人口變項與環境暴露等因子，以AUC (Area under the receiver operating curve) 做為模型優劣的評估標準，利用機器學習方法極限梯度提升(eXtreme Gradient Boosting;  XGBoost) 建立預測模型，進行疾病風險評估。結果顯示，僅使用基因資訊對第二型糖尿病預測效果有限(AUC = 0.73)，醫學影像資訊可提供更好的風險評估能力(AUC = 0.89)，整合基因、醫學影像及人口學變項的模型表現最佳(AUC =


key: chroma:document
string_value:
= 0.73)，醫學影像資訊可提供更好的風險評估能力(AUC = 0.89)，整合基因、醫學影像及人口學變項的模型表現最佳(AUC = 0.94)。我們透過PRS與MRS找到罹病高風險人群，並建立了網頁提供第二型糖尿病罹病風險個人化評估。總結，這是第一個整合全基因體和多醫學影像資訊來評估第二型糖尿病風險的研究。僅利用基因資料進行預測，本研究的AUC比過去其他研究表現都好，且整合基因和醫學影像的預測表現更是大幅提升。利用人工智慧方法分析人體生物資料庫的基因、醫學影像、人口變項等大數據，有助第二型糖尿病的早期偵測與風險評估，往精準健康與預防邁進。


